23 lines
2.1 KiB
Markdown
23 lines
2.1 KiB
Markdown
### DNS 重绑定漏洞原理
|
||
|
||
**1. 攻击原理:两次 DNS 解析的“重绑定”**
|
||
|
||
DNS 重绑定攻击的核心在于**“两次”**和**“重绑定”**这两个关键步骤
|
||
|
||
**第一步:第一次 DNS 解析(公网地址)**
|
||
|
||
1. **攻击者准备:** 攻击者控制一个恶意域名,例如 `rebind.attacker.com`,并在其 DNS 服务器上配置该域名
|
||
2. **用户访问:** 用户在浏览器中访问一个恶意网站,该网站包含一个加载 `rebind.attacker.com` 资源的脚本
|
||
3. **DNS 解析:** 浏览器向 DNS 服务器请求解析 `rebind.attacker.com`
|
||
4. **恶意响应:** 攻击者的 DNS 服务器返回一个正常的**公网 IP 地址**(例如 `1.1.1.1`)和一个非常短的 **TTL(Time-to-Live)**值,比如 10 秒
|
||
- **TTL** 是 DNS 记录的有效期,它告诉浏览器在 TTL 时间内可以缓存这个解析结果。很短的 TTL 值是攻击成功的关键
|
||
5. **建立信任:** 浏览器接收到公网 IP 后,与 `rebind.attacker.com `建立连接,加载恶意脚本。此时,浏览器认为该脚本是安全的,因为它来自一个公网域名
|
||
|
||
**第二步:第二次DNS解析(内网地址)**
|
||
|
||
1. **TTL 过期:** 恶意脚本被加载后,会等待一个比 TTL 值稍长的时间(例如 12 秒)
|
||
2. **发起请求:** 脚本向同一个域名 `rebind.attacker.com` 发起一个新的请求(例如,一个 AJAX 请求)
|
||
3. **重新解析:** 由于第一次的 DNS 记录已经过期(TTL 超时),浏览器会再次向 DNS 服务器请求解析`rebind.attacker.com`
|
||
4. **重绑定:** 这一次,攻击者的 DNS 服务器不再返回公网 IP,而是返回一个**内网 IP 地址**(例如 `192.168.1.1`)
|
||
5. **绕过策略:** 浏览器接收到这个内网 IP 后,由于它认为这个新的请求仍然来自“同源”的 `rebind.attacker.com`,而其解析结果却是内网 IP,浏览器会认为该请求是合法的,并将其发送到内网地址`192.168.1.1`
|
||
6. **攻击成功:** 此时,恶意脚本已经成功绕过同源策略,可以直接访问和控制内网中的设备,如路由器、摄像头或打印机 |