当前位置:安全客 >> 知识详情

小松鼠的黑魔法-XSS 利用

2014-12-22 16:57:36 阅读:0次 收藏 来源: 0x_Jin @ APTSEC Team

目前XSS漏洞普遍存在,但是所玩出的花样招式并不多。希望这这个议题能够起到抛砖引玉的作用吸引更多的人分享有意思的玩法。
    议题介绍一些XSS的基本应用以及进阶玩法,比如XSS探测环境,钓鱼,攻击内网这些非常有趣的玩法。让大家不再仅仅局限于拿个Cookie进后台。因为一旦Cookie存在HttpOnly属性或者后台做了访问控制等,就没的玩了 此议题希望能改变目前的这种状态。
    议题前半部分更多是介绍玩法以及玩法的原理,后半部分便是结合实际的例子来给大家演示下这些玩法到底是如何去玩的有多么的有意思。

1.Xss的多种利用方式

t01f72d1199826f3c31.jpg

1.1 XSS获取触发页面以及Cookie等敏感信息

如果Cookie的关键字段没有使用HttpOnly , 后台访问限制等防护手段。

那么攻击者便可以利用Cookie进入到网站后台,进一步在后台发现SQL注入文件上传等漏洞 拿下WebShell。

什么是关键字段?PHP的SESSION等用于验证身份的Cookie字段。

t01ecdcbc7046d1a716.jpg

1.2 利用JavaScript协议来做些有意思的事情

t017032f34057ef7a08.png

为什么第一个iframe元素里会输出XSS ? 而第二个iframe元素则不会?

t01ae1c624d21dd91a4.jpg

第一个iframe里能显示h1标签因为有返回值且不为undefined
问:那我们可以利用这个做些什么?

t01fc34417ce8c3aa4b.jpg

利用可信任域的XSS来进行钓鱼攻击

t0121af802cd9556035.jpg

1.3 XSS蠕虫

大概流程图

通过各种方式让更多的人触发到你的XSS,然后使受害者成为攻击者如何去实现?

t01e492f7804ae23f36.jpg

如果你用有一枚XSS后,这些将不再是你蠕虫的障碍。

如何去实现?

t01fcc4653b57d035ba.jpg

这样的蠕虫跟CSRF有什么区别?

t017b06e19789376fa1.jpg

如果你遇到一个点无需Token等验证信息即可发表动态的话那么便可以使用CSRF来蠕虫


案例:时光网前端礼包大放送 XSS+CSRF 各种刷转发 回复 加关注

该如何去蠕虫?

t0125290f84df2cada5.jpg

1.4 劫持表单

1.它适用于哪些环境?

可被植入XSS代码的页面存在表单

拥有网站的控制权限却解不开用户密码

2.该如何去劫持表单?

目前在长短短的xss库中已拥有这个功能。

使用方法:xss.xform(表单对象,接受地址)

3.表单劫持的原理:

t01431e70913bca9376.jpg

1.先获得要劫持表单的action,target(为了不影响功能)

2.将当前表单的提交地址替换为我们的地址

3.当表单提交时先提交给我们,然后才提交给原本的地址

好处:在劫持到数据的同时,又不影响功能,可以正常登陆

Sogili XSS库:http://pujun.li/xss.js


1.5 探测目标环境

有时候为了不盲目攻击一个目标我们需要去获得更多信息。比如:Flash版本 Java版本 操作系统 浏览器等等信息

1.为什么要这样去做?

t01308ff1a3b7f67d60.jpg

我们该如何去探测到目标的环境?

t01f4a8319892ee071f.jpg

虽然Navigator对象任何浏览器都支持,犹豫不是标准所以有的浏览器可能获取不到某些信息

获得flash版本  :http://jsbin.com/rukirayuca

获得java版本   :http://jsbin.com/cabirudale

获得插件列表  :http://jsbin.com/vejujatuxa

获得插件列表2:http://jsbin.com/pebirixedo

t013b549c41c3bf29d9.jpg

从UserAgent中又可以看出操作系统以及浏览器版本

1.6 XSS的内网应用

1.获得内网IP:

获得IP, 猜测下内网的范围,为以后扫描内网的其他机器做准备。

t01db2a7c7aa7d80347.jpg

如何做到浏览器获得内网IP的?

Javascript : window.webkitRTCPeerConnection

t01d338b71f43a0fb7c.jpg

WebRTC在firefox上已有在线聊天的例子,虽然他最初不是为方便xss而生的可是他的一些API可以方便我们用XSS去做更多的事情。比如获得内网IP。

WEBRTC主页:http://www.webrtc.org/

2.扫描内网机器的开放端口之Web端口:

利用javascript的onload特性来做即可。

t01e450cfe0a6be3bdf.jpg

2.扫描内网机器的开放端口之服务端口:

利用其他服务的协议以及私有协议来探测,比如FTP协议。

t01ac2d5ee37b4eb63a.jpg

当我们要探测21端口是否开放时便可以使用ftp协议,几乎所有浏览器都支持它。

3.扫描内网机器的Web容器:

利用img的onload,这儿可以发散性思考一下 还有什么可以这样做?

t012d6ab9ca8ecb27b3.jpg

4.攻击内网中的其他机器

前提:足够多的路径与POC

这样我们便可以用利用一些cms的漏洞来攻击内网机器,比如wordpress安装后默认路径是/wordpress

那么便可以用之前扫描得到的ip以及开放的端口配合上路径去发动一些攻击。

不是所有的漏洞都可以,得是一些可被利用的漏洞才行。比如命令执行,可以执行个反弹shell的命令。

比如getshell getshell后用js去请求验证一下便可以知道成功否。

引用黑哥PPT中利用st2反弹shell的图片:

t014ea008f45db7211e.jpg

XSS Proxy

1.攻击者直接访问后台时:

t018264e5b90c4b724b.jpg

2.攻击者用XSS Proxy访问后台时:

t01b7adac4f3a239e47.jpg

5.XSS Proxy的原理

注:JS是客户端脚本,能触发你XSS的人,肯定是有权限访问后台的人。

t013dfaf7c8b9ab217a.jpg

2.那些实际案例中的XSS

2.1 案例1:图虫网存储型XSS + CSRF + Phishing 即使有httponly 照样玩的飞起

t019ccfee3235134247.jpg

2.2 案例2:前程无忧(51job.com) 两枚存储型XSS + 蠕虫 (html标签外20字符加载js)

围脖没人转发,露脸率不够高?蠕虫来帮你。

蠕动时:

t01f39999daeef086e7.png

如何去蠕虫?先模拟正常操作走一遍,同时抓包。

转发微博时抓包:

t01eeda8232eca6b75f.png

分析参数值:

Type 4 :代表转发微博

Noticeid Replyid 代表微博ID

Content 代表转发的内容

分析完后,便可以把我们要蠕

动的微博ID替换到Noticeid Replyid

然后用js来编写ajax的代码,使其蠕动

代码该如何编写?

t019d9ca4259c8b3da9.png

Address为接受请求的地址。

Shuju 为修改后的POST数据包

然后定义一个函数,函数中创建了AJAX对象,并设置好了Content-Type

调用函数传入地址以及数据包即可POST成功。

达到转发微博的效果,转发后别人点开微博,又会中招,传递给其他人

2.3 案例3:我是如何通过一个 XSS 探测搜狐内网扫描内网并且蠕动到前台的!(附带各种 POC)

Cookie获取不全(因为有httpOnly) 后台放在内网,这样的XSS点你还会继续下去么?

反正试试又不会怀孕,干嘛不试呢?

Sohu出了自媒体系统,于是我便去测了下XSS,然后得到了以下信息。

t019050dc2460d09a38.png

从上图中,我们得到了什么?

url,Ping这个Url发现显示未知主机,然后便意识到肯定是一台内网主机。

UserAgent,从UserAgent中看出了是WIN7+Chrome30(如果是存在漏洞的浏览器可以直接先弄员工机)

得知到这些信息后对我们有什么用处?起码我们知道他们的员工是使用的现代浏览器了,而不是老掉牙的IE6,现在便可以来大干一场了。

1.获得内网IP:

t017917aba2f588ee37.png

最后得到员工内网IP段:10.7.8.1 – 10.7.8.255

可以干什么?

员工段应该是办公网段可以尝试一些硬件设备的漏洞,比如TP-link的csrf 修改DNS。等等之类的,发挥自己的想象….

内网XSS中,那些经常方便我们的”通病”:

t011a5ca385ff11e567.png

在内网中有人通过域名访问,有人通过内网IP访问。
   

从上边的图中可以看出当有人通过内网IP访问时,暴露了内网IP以及端口号,收集着为下一步扫描端口做准备。
   

像sohu这种大公司内网肯定划分的比较严格的,服务器肯都放在一个网段中,所以只需要对 10.10.125.195网段扫描下常开的端口,80 8080 以及暴露的8087。
     

为什么不多扫描点端口呢?因为扫描太多端口,会导致网页比较卡 甚至网页崩溃

扫描内网服务器网段所开放的WEB端口:

t01af5de8bc83b3f02c.jpg

可以看到上边的图中每个ip都探测了3个端口,onload事件中的端口,也对应了需要探测端口。 

运行后的结果:

t01e4137b7267ffbbc4.png

整理去重后的结果:

t01f5576d6a309f2421.png

得到了内网Web服务器所开放的端口后,我们该干嘛?

收集一些CMS,框架的默认路径,以及POC,下一步可以尝试利用POC去反弹shell或Getshell。

比如:命令执行漏洞,例子有:struts2 Thinkphp Elasticsearch CVE-2014-3393 Cisco ASA Software远程认证绕过漏洞……

引用黑哥PPT中的图片

把收集到的ip,端口以及路径集合在一块去尝试利用下POC,如下图:

t01fee834cad92dcfb7.jpg

t014e2e40fc01f6b9bf.png

如果上一步无法进行,那么便可以先试试找到个sql注入,文件上传漏洞。

如何去做?可以先通过ajax的方式把后台的一些网页给爬下来,然后本地渲染找下漏洞可能存在点。

t01fe262906e6c02ffb.png

t011326585a0c566c12.png

发送了了一个文章URL的ID参数带单引号和不带单引号两个请求。

第二个请求加了个单引号报错了,当时我以为有注入,高兴坏了 后来发现根本就不是注入点。

现在陷入了困境,后台不存在漏洞,又没有足够的路径以及POC,该怎么办?


操起老行当,钓鱼:

在爬网站后台的时候特地去爬了下登陆界面,为钓鱼做准备。

t01e4ef09ebf508ec88.png

由于不细致也可能是自己太贪心想多钓到点账号,没有设置只出现一次,导致后来被发现。

t01e50f0d4502ceee33.png

   PPT中的那些例子
获得flash版本     http://jsbin.com/rukirayuca
获得java版本      http://jsbin.com/cabirudale
获得插件列表     http://jsbin.com/vejujatuxa
获得内网IP          http://jsbin.com/riyisavura
扫描内网端口     http://jsbin.com/ziwununivo
扫描WEB容器   http://jsbin.com/piwemaquwa
扫描FTP端口      http://jsbin.com/kulahicide


本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/159.html

参与讨论,请先 | 注册 | 匿名评论
发布
用户评论
0xJin-Sanpang 2014-12-22 21:52:36
回复 |  点赞

请接受我的膝盖

查看更多