DNS 重绑定 (DNS Rebinding)
DNS 重绑定将攻击者控制的机器名称的 IP 地址更改为目标应用程序的 IP 地址,从而绕过同源策略 (Same-Origin Policy),使得浏览器能够向目标应用程序发起任意请求并读取其响应。
摘要 (Summary)
工具 (Tools)
- nccgroup/singularity - 一个 DNS 重绑定攻击框架。
- rebind.it - Singularity of Origin Web 客户端。
- taviso/rbndr - 简单的 DNS 重绑定服务。
- taviso/rebinder - rbndr 工具助手。
方法论 (Methodology)
设置阶段:
- 注册一个恶意域名(例如
malicious.com)。 - 配置一个能够将
malicious.com解析为不同 IP 地址的自定义 DNS 服务器。
初始受害者交互:
- 在
malicious.com上创建一个包含恶意 JavaScript 或其他利用机制的网页。 - 诱使受害者访问该恶意网页(例如通过钓鱼、社会工程学或广告)。
初始 DNS 解析:
- 当受害者的浏览器访问
malicious.com时,它会向攻击者的 DNS 服务器查询 IP 地址。 - DNS 服务器将
malicious.com解析为一个初始的、看起来合法的 IP 地址(例如 203.0.113.1)。
重绑定到内部 IP:
- 在浏览器的初始请求之后,攻击者的 DNS 服务器将
malicious.com的解析更新为一个私有或内部 IP 地址(例如 192.168.1.1,对应受害者的路由器或其他内部设备)。 - 这通常通过为初始 DNS 响应设置非常短的 TTL(存活时间)来实现,从而强制浏览器重新解析域名。
同源利用:
- 浏览器将后续响应视为来自同一源 (
malicious.com)。 - 在受害者浏览器中运行的恶意 JavaScript 现在可以向内部 IP 地址或本地服务(例如 192.168.1.1 或 127.0.0.1)发起请求,从而绕过同源策略限制。
示例:
- 注册一个域名。
- 设置 Singularity of Origin。
- 根据您的需求编辑 autoattack HTML 页面。
- 访问
http://rebinder.your.domain:8080/autoattack.html。 - 等待攻击完成(可能需要几秒钟或几分钟)。
防护绕过 (Protection Bypasses)
大多数 DNS 防护措施是在外围实现的,即当 DNS 响应进入内部网络时,拦截包含非预期 IP 地址的响应。最常见的防护形式是拦截 RFC 1918 定义的私有 IP 地址(即 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)。一些工具还允许额外拦截 localhost (127.0.0.0/8)、本地(内部)网络或 0.0.0.0/0 网络范围。
在启用了 DNS 防护(通常默认禁用)的情况下,NCC Group 记录了多种可以使用的 DNS 防护绕过方法。
0.0.0.0
我们可以使用 IP 地址 0.0.0.0 来访问 localhost (127.0.0.1),以绕过过滤包含 127.0.0.1 或 127.0.0.0/8 的 DNS 响应。
CNAME
我们可以使用 DNS CNAME 记录来绕过拦截所有内部 IP 地址的 DNS 防护方案。 由于我们的响应仅返回一个内部服务器的 CNAME, 过滤内部 IP 地址的规则将不会被触发。 然后,本地内部 DNS 服务器将解析该 CNAME。
$ dig cname.example.com +noall +answer
; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> example.com +noall +answer
;; global options: +cmd
cname.example.com. 381 IN CNAME target.local.
localhost
我们可以将 "localhost" 作为 DNS CNAME 记录,以绕过过滤包含 127.0.0.1 的 DNS 响应。
$ dig www.example.com +noall +answer
; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> example.com +noall +answer
;; global options: +cmd
localhost.example.com. 381 IN CNAME localhost.