
DNS重绑定攻击原理图解whonow如何利用DNS响应绕过浏览器同源策略【免费下载链接】whonowA malicious DNS server for executing DNS Rebinding attacks on the fly (public instance running on rebind.network:53)项目地址: https://gitcode.com/gh_mirrors/wh/whonowDNS重绑定攻击DNS Rebinding是一种让攻击者绕过浏览器同源策略Same-origin policy、悄无声息访问内网服务的经典Web攻击手法。而whonow正是一款专为此设计的开源DNS重绑定攻击工具它是一台恶意DNS服务器能按需为同一个域名返回不同的IP地址让浏览器误以为始终访问的是同一个网站。更妙的是whonow 把重绑定规则直接编码进域名本身你甚至无需自建服务器直接用公共实例rebind.network:53就能发起测试。本文将以图解方式一步步拆解DNS重绑定攻击原理以及 whonow 如何用一行域名实现整场攻击。什么是DNS重绑定攻击3分钟看懂攻击原理DNS重绑定攻击原理并不复杂核心就一句话同一个域名第一次解析返回攻击者服务器的IP第二次解析却返回内网IP如 127.0.0.1 或 192.168.1.1。攻击流程大致如下攻击者注册一个域名并将其NS记录指向自己控制的DNS服务器受害者浏览器访问该域名DNS第一次解析返回攻击者服务器IP页面正常加载页面中的恶意JavaScript开始运行向同一个域名发起新的请求比如读取内网路由器管理页面此时浏览器再次查询DNS攻击者的DNS服务器返回内网IP浏览器以为域名没变依然按同一来源Origin放行请求——于是内网数据被恶意脚本读取并外传。整个过程的关键在于浏览器判定来源只看域名不看IP而攻击者恰恰在IP上做了手脚。为什么同源策略会被DNS重绑定绕过浏览器的同源策略规定只有当两个页面的协议 域名 端口完全一致时才允许互相访问资源。注意这里并不包含IP地址。这给DNS重绑定留下了可乘之机域名是文字标识它背后的IP是可以随时变化的浏览器每次访问会重新解析DNS尤其是TTL很短时只要域名不变浏览器就认为来源没变无论这个域名此刻指向的是公网服务器还是 127.0.0.1。于是攻击者利用DNS响应在合法公网IP与内网IP之间来回切换同源策略这道防火墙就被巧妙绕过了。whonow核心语法如何把重绑定规则写进域名whonow 最天才的设计是让子域名本身就充当重绑定规则。你不需要写任何配置文件只靠一条DNS查询就能定义第几次返回什么IP。一个典型的 whonow 域名长这样A.IP地址.规则[.IP地址.规则...].UUID.rebind.network其中规则只有三个关键词非常好记规则含义ntimes返回前面那个IP地址 n 次forever永远返回前面那个IP地址repeat从第一条规则重新开始循环例如这条域名表示第一次返回 34.192.228.43之后永远返回 192.168.1.1A.34.192.228.43.1time.192.168.1.1.forever.rebind.network而这一条则会在两个IP之间无限交替A.127.0.0.1.1time.10.0.0.1.1time.repeat.rebind.network是不是很像一段微型DNS小程序whonow 把攻击参数全部压缩进了域名复用性极强。规则的具体解析逻辑可以在 src/DomainRebind.js 中查看。图解一次完整的DNS重绑定攻击流程下面用一张流程图来还原 whonow 参与的完整攻击链条诱导访问受害者浏览器打开攻击者域名如evil.rebind.network首次解析whonow 按规则第一次返回攻击者服务器IP如34.192.228.43页面正常加载恶意脚本触发请求脚本向同一域名发起内网资源请求二次解析whonow 按规则第二次返回内网IP如127.0.0.1同源放行浏览器认为域名未变同源策略不拦截内网服务被访问数据外传脚本将窃取的内网数据发送到攻击者服务器。上图就是 whonow 服务器运行时的实时日志每一行都记录了一次DNS查询的来源IP、查询类型A记录以及返回的IP地址可以看到同一个域名在不同时刻被解析到了不同的地址——这正是重绑定攻击的数据来源。最快上手方法直接用公共DNS重绑定服务器whonow 的作者在rebind.network:53上部署了一个公共实例无需安装任何东西直接用dig就能体验dig rebind.network A.127.0.0.1.1time.10.0.0.1.1time.repeat.8f058b82-4c39-4dfe-91f7-9b07bcd7fbd4.rebind.network⚠️ 注意建议在规则后追加一个UUID 子域名如示例中的8f058b82-...。因为 whonow 会为每个唯一的域名在内存中保存独立的程序状态UUID 可以避免你的规则与其他使用者互相干扰确保状态计数不被意外改写。执行两次上面的查询你会发现第一次返回127.0.0.1第二次返回10.0.0.1第三次又回到127.0.0.1——重绑定效果一目了然。自建whonow服务器安装与最快配置方法虽然公共实例足够体验但想要完整掌控日志和规则自建一台更稳妥。whonow 基于 Node.js安装非常简单git clone https://gitcode.com/gh_mirrors/wh/whonow cd whonow npm install也可以直接全局安装npm install -g whonowlatest然后在服务器上启动默认DNS端口53需要 root 权限sudo whonow --port 53 --verbose常用参数还包括--default-answer无规则匹配时返回的默认IP默认127.0.0.1--logfile将DNS查询记录保存为CSV日志--max-ram-domains内存中最多保存的域名状态数量默认 1000 万超出后按先进先出清理。完整的参数说明可以查看 index.js 中的参数定义。源码解读whonow如何记住第几次响应whonow 的实现核心是一个轻量的状态机。在 src/DomainRebind.js 中parseProgram()负责把域名解析成一条条指令如times、forever、repeat组成一个指令数组next()每次被调用时根据programCounter程序计数器执行当前指令并决定返回哪个IP、是否递增计数器遇到repeat指令时计数器清零并重新开始实现无限循环。而在 index.js 中服务器为每个首次出现的域名在内存里创建独立的DomainRebind实例用对象保存状态。值得注意的一点是返回的DNS记录ttl被设置为1 秒见 index.js——超短TTL让浏览器很快重新发起DNS查询这正是重绑定攻击能够快速切换IP的技术保障。普通用户如何防御DNS重绑定攻击了解了攻击原理防御思路也就清晰了保持浏览器最新现代浏览器对DNS重绑定的防护越来越完善内网服务加强认证不要信任只有内网才能访问路由器、摄像头等设备务必修改默认密码谨慎浏览陌生网站尤其是涉及输入内网地址的页面使用带DNS重绑定防护的路由器/防火墙部分企业级设备已内置相关检测规则。总结DNS重绑定攻击利用浏览器看域名、不看IP的特性绕过同源策略而 whonow 用子域名即规则的设计把这种攻击的发起成本降到了极致——一行域名就是一次攻击。无论是学习Web安全原理还是进行渗透测试演练whonow 都是一份值得深入研究的开源教材。最后提醒一句请仅将本文内容用于合法的安全研究与授权测试切勿用于攻击他人系统。【免费下载链接】whonowA malicious DNS server for executing DNS Rebinding attacks on the fly (public instance running on rebind.network:53)项目地址: https://gitcode.com/gh_mirrors/wh/whonow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考