brannondorsey/dns-rebind-toolkit
GitHub: brannondorsey/dns-rebind-toolkit
一个前端JavaScript框架,用于发起DNS重绑定攻击,绕过同源策略和防火墙直接与内网设备通信。
Stars: 500 | Forks: 84
# DNS 重绑定工具包
[演示](http://rebind.network) |
[安全建议](https://medium.com/@brannondorsey/attacking-private-networks-from-the-internet-with-dns-rebinding-ea7098a2d325) |
[内置 Payload](payloads/README.md) |
[常见问题](FAQ.md)
**免责声明:本软件仅供教育目的使用。本软件不应用于任何非法活动。作者对其使用方式不承担任何责任。请勿作恶。**
DNS 重绑定工具包是一个前端 JavaScript 框架,用于开发针对局域网 (LAN) 中脆弱主机和服务的 [DNS 重绑定](https://en.wikipedia.org/wiki/DNS_rebinding) 攻击。它可用于攻击 Google Home、Roku、Sonos WiFi 音箱、WiFi 路由器、“智能”恒温器以及其他 IoT 设备。借助此工具包,远程攻击者可以绕过路由器的防火墙,直接与受害者家庭网络中的设备进行交互,从而窃取隐私信息,在某些情况下甚至可以直接控制这些存在漏洞的设备。
该攻击只需要目标网络中的受害者点击一个链接,或者在网页中展示包含恶意 iframe 的 HTML 广告。随后,受害者的 Web 浏览器将被用作代理,直接访问与其连接到家庭网络的其他主机。这些目标机器和服务在互联网上原本对攻击者是封闭的。远程攻击者可能不知道这些服务是什么,也不知道它们在受害者网络中的 IP 地址,但 DNS 重绑定工具包通过暴力破解数百个可能的 IP 地址来解决这一问题。
在底层,此工具利用了一个运行在 rebind.network:53 上的公共 [whonow DNS server](https://github.com/brannondorsey/whonow) 来执行 DNS 重绑定攻击,欺骗受害者的 Web 浏览器违反[同源策略](https://en.wikipedia.org/wiki/Same-origin_policy)。在此基础上,它使用 [WebRTC](https://en.wikipedia.org/wiki/WebRTC) 泄露受害者的私有 IP 地址,例如 192.168.1.36。它使用该本地 IP 地址的前三个八位字节来猜测网络的子网,然后注入 256 个 iframe(从 192.168.1.0 到 255),向子网中可能存在的每一台主机交付 payload。
此工具包可用于开发和部署你自己的 DNS 重绑定攻击。本工具包在 [`payloads/`](payloads) 目录中包含了一些针对真实环境的攻击 payload。这些 payload 包括针对几款流行 IoT 设备的信息窃取(以及 Rickroll 恶搞)攻击,其中包括 Google Home 和 Roku 产品。
## 快速开始
```
# 克隆 repo
git clone https://github.com/brannondorsey/dns-rebind-toolkit.git
cd dns-rebind-toolkit
# 安装依赖
npm install
# 使用 root 运行 server 以提供对特权端口 80 的访问权限
# 此脚本从 www/, /examples, /share 和 /payloads 目录提供文件
sudo node server
```
默认情况下,`server.js` 交付针对 Google Home、Roku、Sonos 音箱、Philips Hue 灯泡和 Radio Thermostat 设备的 payload,其服务分别运行在端口 8008、8060、1400、80 和 80 上。如果你的家庭网络中有其中一款设备,请导航至 http://rebind.network 获取一个惊喜 ;)。打开开发者控制台,看着这些服务被无害地利用,数据被窃取并传输到 `server.js`。
## API 与用法
此工具包提供了两个 JavaScript 对象,可结合使用以发起 DNS 重绑定攻击:
- [`DNSRebindAttack`](share/js/DNSRebindAttack.js):该对象用于针对在已知端口上运行的脆弱服务发起攻击。它会为你选择作为目标的每个 IP 地址生成一个 payload。`DNSRebindAttack` 对象用于创建、管理和与多个 `DNSRebindNode` 对象进行通信。`DNSRebindAttack` 发起的每个 payload 必须包含一个 `DNSRebindNode` 对象。
- [`DNSRebindNode`](share/js/DNSRebindNode.js):该静态类对象应包含在每个 HTML payload 文件中。它用于攻击运行在一台主机上的单个服务。它可以与生成它的 `DNSRebindAttack` 对象进行通信,并具有执行 DNS 重绑定攻击(使用 `DNSRebindNode.rebind(...)`)以及将在攻击期间发现的数据外泄到 `server.js`(使用 `DNSRebindNode.exfiltrate(...)`)的辅助函数。
这两个脚本结合使用,可以对受防火墙保护的 LAN 上的未知主机执行攻击。一次基本攻击的流程如下:
1. 攻击者向受害者发送一个指向恶意 HTML 页面的链接以发起攻击:例如 `http://example.com/launcher.html`。`launcher.html` 包含一个 `DNSRebindAttack` 实例。
2. 受害者点击攻击者的链接,或访问嵌入了 `http://example.com/launcher.html` 作为 iframe 的页面。这会导致 `launcher.html` 上的 `DNSRebindAttack` 开始发起攻击。
3. `DNSRebindAttack` 使用 [WebRTC 泄漏](https://github.com/diafygi/webrtc-ips) 来发现受害者机器的本地 IP 地址(例如 `192.168.10.84`)。攻击者利用此信息选择要在受害者 LAN 上进行攻击的 IP 地址范围(例如 `192.168.10.0-255`)。
4. `launcher.html` 针对受害者子网上的 IP 地址范围发起 DNS 重绑定攻击(使用 `DNSRebindAttack.attack(...)`),目标是单一服务(例如在端口 `8008` 上提供的[未公开的 Google Home REST API](https://rithvikvibhu.github.io/GHLocalApi/))。
5. 按照用户定义的时间间隔(默认为 200 毫秒),`DNSRebindAttack` 将包含 `payload.html` 的一个 iframe 嵌入到 `launcher.html` 页面中。每个 iframe 包含一个 `DNSRebindNode` 对象,对正在被攻击的 IP 地址范围内的单个主机的 8008 端口执行攻击。此注入过程将持续进行,直到攻击所针对的每个 IP 地址都已被注入 iframe。
6. 每个注入的 `payload.html` 文件都使用 `DNSRebindNode` 尝试通过与 [whonow DNS server](https://github.com/brannondorsey/whonow) 通信来进行重绑定攻击。如果成功,就会违反同源策略,`payload.html` 即可直接与 Google Home 设备进行通信。通常,`payload.html` 的编写方式是:在完成攻击并自我销毁之前,对目标设备进行几次 API 调用,并将结果外泄到运行在 `example.com` 上的 `server.js`。
请注意,如果用户的网络中有一台 IP 地址未知的 Google Home 设备,并且针对整个 `192.168.1.0/24` 子网发起了攻击,那么只有一个 `DNSRebindNode` 的重绑定攻击会成功,而其他 254 个将会失败。
## 示例
一次攻击由三个协同工作的脚本和文件组成:
- 包含 `DNSRebindAttack` 实例的 HTML 文件(例如 `launcher.html`)
- 包含攻击 payload 的 HTML 文件(例如 `payload.html`)。此文件由 `DNSRebindAttack` 为每个被作为目标的 IP 地址嵌入到 `launcher.html` 中。
- 一个 DNS 重绑定工具包服务器 (`server.js`),用于交付上述文件并在需要时外泄数据。
### `launcher.html`
以下是一个 HTML 启动器文件的示例。你可以在 [`examples/launcher.html`](examples/launcher.html) 中找到完整的文档。
```
Example launcher