跳转至

DNS 重绑定 (DNS Rebinding)

DNS 重绑定将攻击者控制的机器名称的 IP 地址更改为目标应用程序的 IP 地址,从而绕过同源策略 (Same-Origin Policy),使得浏览器能够向目标应用程序发起任意请求并读取其响应。

摘要 (Summary)

工具 (Tools)

方法论 (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)发起请求,从而绕过同源策略限制。

示例:

  1. 注册一个域名。
  2. 设置 Singularity of Origin
  3. 根据您的需求编辑 autoattack HTML 页面
  4. 访问 http://rebinder.your.domain:8080/autoattack.html
  5. 等待攻击完成(可能需要几秒钟或几分钟)。

防护绕过 (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.

参考资料 (References)