一、什么是XSS攻击
1 E% S9 O5 h9 a( w( C3 R5 @4 U: e3 j: h' H
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。而本文主要讲的是利用XSS得到目标服务器的shell。技术虽然是老技术,但是其思路希望对大家有帮助。- ~" o0 ~& ^ e. h* n% Y6 u) D
" T4 z$ P# B/ r8 u
如何寻找XSS漏洞
& F8 E* z6 X2 a1 P% M; a$ w2 x
& W! z* a, y9 w, @ 就个人而言,我把XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。. |/ I: N; G4 u
' P/ Y+ \6 ~( |. Q+ a& `5 S 然后利用下面的技术得到一个shell.# p6 V& f) \, h+ O, f: T6 {* s
. S. O. k |* v5 @8 a# _3 h* X: B 如何利用
3 ^# |- ^0 M! g: z7 e' { k5 E' R4 v
传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。个人认为这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而本文提出的另一种思路,则从一定程度上解决上述的问题。对于个人而言,比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。下面我将详细的介绍这种技术。
; z6 m2 n4 n: L+ t) b- x C4 Q7 a2 M6 W* b. O' l2 \2 Y: V. z/ \
二、来自内部的跨站攻击% |2 a6 h' d/ m+ B. W8 g& A- F
! ^3 \; L3 z. N/ b4 v, Y 寻找跨站漏洞' n- n) _& e0 |7 }
. P3 O% V3 I& u- [ 如果有代码的话比较好办,我们主要看代码里对用户输入的地方和变量有没有做长度和对”<”,”>”,”;”,”’”等字符是否做过滤。还有要注意的是对于标签的闭合,像测试QQ群跨站漏洞的时候,你在标题处输入<script>alert(‘test’)</script>,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,如少了一个</script>,这个时候,你只要闭合一个</script>,代码就会执行,如:你在标题处输入</script><script>alert(‘test’)</script>,这样就可以弹出一个test的框。
% h% f8 L( C3 o* ~# C. f
% S/ x% c8 Z) {4 w5 \ 如何利用! }+ i3 b+ t4 R! j5 G
' O: U) s. n9 S+ G- Q
我先以BBSXP为例,过程已做成动画,详情可见光盘中的动画。我举BBSXP中其中两个比较好用的跨站漏洞点为例.
3 B! s4 H, q1 T
4 @( N1 U& d- [! }/ {: Y5 }* z: V" j, O( f$ n4 U% d
a.先注册一个普通用户,我这里注册的用户是linzi.然后我们在个人签名里写入:
: Q3 v1 _4 W; e" {" n
3 c# ]: u) F) r- ^http://127.0.0.1/bbsxp/admin_user.asp?menu=userok&username=linzi&membercode=5&userlife=1&posttopic=3&money=9&postrevert=0&savemoney=0&deltopic=1®time=2005-9-1+1%3A1%3A1&experience=9&country=%D6%D0%B9%FA&&Submit=+%B8%FC+%D0%C2+
$ b3 F Y, d# z. I* D7 \0 q
+ j3 z2 g/ J' Z7 W c.然后发个贴子,可以结合其它技术欺骗管理员浏览发的贴子。- `2 g. L! ^2 {3 H& }8 {
0 C2 ~0 P; `% p/ i
d.因为是测试,所以我们以管理员身份登陆,然后打开贴子,我们会发现,linzi已经变成了社区区长工,如图一所示; K3 n8 P: I! N$ k5 z6 U6 }/ E
1 b3 M% S: A) T% b% _ 除此之外我们只要在个人签名里输入5 c' D( ?- s/ y* x; W3 C5 |
G7 w$ ?$ `$ q9 v9 I& J) c
http://127.0.0.1/bbsxp/admin_setup.asp?menu=variableok&clubname=+&homename=+&homeurl=&floor=2&PostTime=3&Timeout=6&OnlineTime=12&Reg10=10&style=1&selectup=FSO&MaxFace=10240&MaxPhoto=30720&MaxFile=102400&UpFileGenre=gif|jpg|asp%20|rar \+ H0 R: g, n* V' z% e) k0 R
2 ~' x& h4 j9 O
同样发个贴子等,只要管理员打开了,就会加了一个扩展名为asp (有空格)的上传扩展,这个时候,你只要上传一个newmm.asp (有空格)就可以得到一个shell.
/ w9 g7 X* J D- ~0 B# Y8 H( m8 H* x5 q5 O% o9 j% Y+ w
' w+ H5 g% h& M- J2 J5 l
上面的攻击多多少少有点局限性,虽然可以得到shell,但是隐蔽性不太好,因为签名处受到了长度的限制,不能超过255个字符。我们可以结合flash跨站实现更为隐蔽的攻击,对于flash木马的制作,下面见哥们丰初的介绍。
! ]# t: L" f2 Y4 u# [
& M% S& [8 l9 A+ u3 h! H' ? 再利用如下:
3 g4 x. y7 h: _1 H' M
# ]: ~( L% v I4 Z: Q2 E9 ?" u 修改一下个人头像的url,输入代码如下: admin_setup.asp? 7 x; }/ g" B( r4 W* _) Q
+ W, H+ o* S1 \. [4 mmenu=variableok&clubname=+&homename=+&homeurl=&floor=2&PostTime=3&Timeout=6&OnlineTime=12&Reg10=10&style=1&selectup=FSO&MaxFace=10240&MaxPhoto=30720&MaxFile=102400&UpFileGenre=gif|jpg|php|rar
3 Q2 A5 ?2 E# N" F6 O7 @' h) R* ]' l3 }. D
再接着欺骗管理员打开你的资料或者浏览你的贴子,当管理员打开后,会在后台自动加个php扩展名的后辍,因为bbsxp在个人头像url里过滤了空格,%,所以我们只能加个不包括空格的其它扩展,当然你也可以加个shtml的扩展,有了它你就可以用来查看源代码,然后进一步攻击。
6 ~/ y \/ B, U. W8 |, C& y |