实验环境
我使用的是 Ubuntu 24.04.4,基本环境配置见ARP攻击原理学习
核心工具:Docker / Docker-Compose、Firefox浏览器、nano / vim
| 节点类型 | IP 地址 | 域名 | 作用说明 |
|---|---|---|---|
| 靶机(IoT 恒温器) | 192.168.60.80 | 无 | 位于内网,被路由器防火墙保护的目标设备 |
| 本地 DNS 缓存服务器 | 10.9.0.53 | 无 | 模拟受害者网络中的 DNS 解析与缓存 |
| 攻击者 Web 服务器 | 10.9.0.180 | www.attacker32.com | 提供恶意网页或脚本 |
| 攻击者 DNS 服务器 | 10.9.0.153 | attacker32.com | 控制域名解析,实现 DNS 重绑定 |
实验原理
IoT 设备部署在内网,外部无法直接访问,同时浏览器同源策略限制跨域请求。
DNS 重绑定的核心在于: 浏览器只校验“域名是否一致”,而不关心该域名解析到的 IP 是否发生变化。
攻击流程本质是:
- 初始解析:域名 → 攻击者服务器
- 触发脚本执行(同源)
- 缓存过期后重新解析:域名 → 内网设备
- 浏览器继续信任该域名,从而向内网发起请求
最终实现通过浏览器“跳板”访问内网设备。
修改Firefox浏览器的DNS缓存时间
Firefox 浏览器默认会缓存 DNS 查询结果 60 秒。为了提高实验效率,让 DNS 重绑定攻击能快速生效,需人为缩短该缓存时间
在 Firefox 浏览器地址栏输入 about:config并回车,接受风险提示,然后在搜索栏输入network.dnsCacheExpiration
双击出现的两个结果network.dnsCacheExpiration和network.dnsCacheExpirationGracePeriod,将值更改为10秒,关闭浏览器使配置生效
这样可以更快触发二次解析
配置本地DNS服务器
将系统 DNS 指向实验环境中的 DNS 服务器
|
|
遇到问题:提示此文件不存在
![]()
查看resolvconf文件夹,发现连这个文件夹都不存在,判断是ubuntu版本不同导致文件目录不同
查看/etc/resolv.conf发现虽然文件存在但不可以编辑
可以看到这一行This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved>
说明当前 DNS 由 systemd-resolved 管理
解决方法为修改 systemd-resolved 配置:
|
|
添加这一行
|
|
然后重启服务:
|
|
使用 resolvectl status 查看,发现 DNS 并未生效:
|
|
那就是网卡在控制 DNS
这是因为 systemd-resolved 的优先级机制中,网卡 DNS 高于 resolved.conf 配置,因此需要手动指定网卡 DNS:
|
|
这个命令是临时的,重启就没了,好处是适合实验不影响环境
修改本地Host文件
将 IoT 域名映射到真实内网地址: 编辑 hosts 文件
|
|
在文件末尾添加以下映射,保存并退出:
|
|
启动 Docker 容器
先在虚拟机里下载实验文件,如果没有 wget,也可以用浏览器下载再拖进去
|
|
下载完在当前目录解压
|
|
这里一定要在 Linux 里解压,是因为 Windows 解压会把换行符从 LF 变成 CRLF,容器里的脚本在执行时就可能报 exec format error
解压后进入目录
|
|
启动实验环境
|
|
在浏览器中分别访问
确认页面是否可以正常打开
出现问题:访问
www.attacker32.com显示 GoDaddy 停放页![]()
通过命令验证:
|
|
返回:
|
|
同时验证攻击机服务:
|
|
可以正常访问,说明 Web 服务运行正常
验证同源策略
依次访问并点击修改按钮:
- www.seedIoT32.com
- www.seedIoT32.com/change
- www.attacker32.com/changehttp://10.9.0.180
前两个可以成功修改温度,
第三个失败
原因在于浏览器同源策略阻止了跨域请求,可以在控制台看到 CORS 报错。
修改攻击脚本
进入攻击者容器:
|
|
编辑 JS:
|
|
修改为:
|
|
重启容器:
|
|
此时浏览器不再报同源错误,但请求仍然发往攻击者服务器,因此温度不会改变。
DNS 重绑定攻击
进入攻击者 DNS 容器:
|
|
修改配置:
|
|
调整:
- 将 TTL 设为较小值(0 或 10)
- 修改 A 记录:
|
|
刷新 DNS:
|
|
攻击效果
等待 DNS 缓存过期后重新请求:
浏览器再次解析 www.attacker32.com,此时得到的是内网 IP。
由于域名未变,同源策略不会拦截,请求直接发送到内网 IoT 设备。
可以观察到温度被成功修改。
结论
DNS 重绑定利用了浏览器同源策略仅基于域名进行判断的特性,通过动态修改解析结果,使浏览器在不知情的情况下访问内网资源。
在本实验中,攻击者借助低 TTL 和 DNS 重新解析,将浏览器从访问外网服务器引导至内网设备,实现了对 IoT 设备的越权操作。
本质上,浏览器被利用为攻击者的代理,从而绕过了网络边界防护。