详解DNS重绑定攻击
0x00 前言
DNS重绑定攻击的用法有很多种,这篇文章主要理解DNS重绑定攻击的原理,并介绍如何通过DNS重绑定来攻击内网设备。为了更好的理解DNS重绑定攻击,我们先从Web浏览器的同源策略开始介绍。
点击查看往期关于DNS文章:
0x01 Web浏览器同源策略(SOP)
同源策略(Same origin policy) 是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。
其实换句话来说就是在浏览器中,同一个域名下的网站只能调用本域名下的资源。就好比说现在有一个网址
http://www.psgq.com/index.html的页面,在同源策略的约束下可以调用http://www.psgq.com/index2.html的资源,但是不能调用http://www.psgq123.com/index.html的资源(<script>,<link>,<iframe>,<img>等标签的SRC属性除外)。同源策略最直接的表现就是能够区分出各个网站的cookie信息,使得我们能够有条不紊的访问各个网站而不会照成信息混乱。另外,如果我在浏览器同时访问新浪和搜狐两个网站并且这两个网站都在浏览器存储了用户名和密码,那么他们各自只能访问各自存储的用户信息,无法交叉访问,否则就会造成用户信息泄露。
试想这样一种情况:如果没有同源策略,A网站是一家银行,往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还 Cookie 可以共享,互联网就毫无安全可言了。
同源的定义:如果两个 URL 的 协议、域名、端口都相同的话,则这两个 URL 是同源。
举例来说, https://www.cnblogs.com/PsgQ/ 这个网址中, https 是协议, www.cnblogs.com是域名,端口是443(https协议默认端口可以省略,你也可以把他看成:https://www.cnblogs.com:443/PsgQ/)。任意两个网址,只要这三点全部相同,那么浏览器就认为它们是同源的,任意一个不相同都会被浏览器认为是跨域。
注:IE例外
IE浏览器对于同源策略有两个主要的例外:
- 授信范围(Trust Zones):两个相互之间高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制。
- 端口:IE浏览器没有将端口号加入到同源策略的组成部分之中,因此
http://example.com:81/index.html和http://example.com/index.html属于同源并且不受任何限制。
在浏览器中, <script> 、<img>、<iframe>、<link>等标签都可以跨域加载,而不受浏览器的同源策略的限制, 这些带src属性的标签每次加载的时候,实际上都是浏览器发起一次GET请求, 不同于普通请求(XMLHTTPRequest)的是,通过src属性加载的资源,浏览器限制了JavaScript的权限,使其不能读写src加载返回的内容
浏览器同源策略中,除了上述的几个标签可以跨域加载外,其他出现跨域请求时,请求会发到跨域的服务器,并且会服务器会返回数据,只不过浏览器"拒收"返回的数据。
0x02 什么是DNS重绑定攻击?
在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。(浏览器同源策略) 这就是DNS Rebinding攻击。
通过DNS重绑定攻击可以绕过同源策略,攻击内网的其他设备。
攻击条件:
1.攻击者可以控制恶意的DNS服务器,来回复域名查询,如 www.attacker.com
2.攻击者可以欺骗用户在浏览器加载 www.attacker.com。可以通过多种方式,从网络钓鱼到持久性XSS,或购买HTML横幅广告,来实现这一目标。
3.攻击者 控制 www.attacker.com 钓鱼网站的服务器。
下面是DNS重绑定攻击的原理图:

受害者打开钓鱼邮件的链接,他们的Web浏览器会发出DNS查询请求,查询www.attacker.com的IP地址,基本流程:浏览器缓存 -> 系统缓存 -> 路由器 缓存 -> ISP DNS解析器缓存 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器,具体解析过程可参考之前关于DNS的介绍文章。
攻击者控制的DNS服务器收到受害者的DNS请求时,会使用www.attacker.com的真实IP地址93.185.216.36进行响应。 它还将响应的TTL值设置为0秒,以便受害者的机器不会长时间缓存它。
受害者的浏览器向钓鱼网站服务器发出HTTP请求加载网页。
攻击者进行HTTP响应,并通过JS加载一些恶意代码,该页面反复向www.attacker.com 发出POST请求。(POST请求包含恶意代码)

5.因为之前DNS ttl设置为0,缓存很快就失效,所以浏览器继续向恶意权威域名服务器发出查询。
6.此时,恶意DNS服务器收到查询后,回复一个内网设备的IP(也可以是一些物联网设备),如192.168.0.5。
7.因为满足同源策略,浏览器认为是安全的,于是向内网其他设备发送POST恶意请求。
为什么绕过了同源策略?
因为同源策略浏览器看的是协议,域名,端口,这些并没有变化,而背后的IP地址却已经变了,所以造成了跨域的请求。
TTL是什么?
TTL是英语Time-To-Live的简称,意思为一条域名解析记录在DNS服务器中的存留时间。当各地的DNS服务器接受到解析请求时,就会向域名指定的NS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向NS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
它表示DNS记录在DNS服务器上缓存的时间,数值越小,修改记录各地生效的时间越快。
0x03 总结
本篇文章详细介绍了Web浏览器的同源策略,以及DNS重绑定攻击内网设备的原理,后续会为大家继续介绍关于DNS重绑定攻击的其它用法。
有关DNS的详细介绍,可参考之前DNS专栏下的文章。
0x04 参考资料
详解DNS重绑定攻击的更多相关文章
- DNS重绑定DNS Rebinding攻击
DNS重绑定DNS Rebinding攻击 在网页浏览过程中,用户在地址栏中输入包含域名的网址.浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户.而对于域名所有 ...
- <转>详解DNS的常用记录(上):DNS系列之二
详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派 ...
- DNS重新绑定攻击
来自微信外挂的安全风险 DNS重新绑定攻击 DDNS 动态域名设置
- DNS篇(详解DNS)
*文章来源:https://blog.egsec.cn/archives/601 *本文将主要说明:本文主要叙述什么是DNS.域名的层级.DNS 解析过程.DNS的缓存时间.DNS 的记录类型.DNS ...
- Linux双网卡绑定bond详解--单网卡绑定多个IP
Linux双网卡绑定bond详解 1 什么是bond 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术.Kernels 2.4.12及 ...
- 阿里云域名注册详解与Github绑定
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 今教一篇如何注册域名,拥有自己的域名是不是很爽呢?答案是是的,那 ...
- <转>详解DNS的常用记录(下):DNS系列之三
在上篇博文中我们介绍了DNS服务器中几种不可或缺的记录,包括A记录,NS记录和SOA记录.本篇博文中我们将继续为大家介绍DNS的另外几种常用记录,希望能对大家了解DNS有所帮助. 四 MX记录 MX记 ...
- 【 D3.js 选择集与数据详解 — 3 】 绑定数据的顺序
data() 函数有两个参数,第一个是被绑定数据,第二个参数用于指定绑定的顺序.在数据需要更新的时候常常会用到. 默认的情况下,data()函数是按照索引号依次绑定数组各项的.第0个元素绑定数组的第0 ...
- 详解javascript事件绑定使用方法
由于html是从上至下加载的,通常我们如果在head部分引入javascript文件,那么我们都会在javascript的开头添加window.onload事件,防止在文档问加载完成时进行DOM操作所 ...
随机推荐
- 人物传记-BILL RAY:低谷时的信念,决定你能走多远
自2018年全球经济危机以来,以工作为重的成年人们一直备受打击.尤其是2020年,全球贸易争端使得经济下滑严重,很多公司倒闭破产,有些人甚至从富豪变成了负债者,走向了人生低谷.其实,每个人都会遇到人生 ...
- 处理ios键盘弹出按钮点击click失效
用ontouchstart绑定事件即可,然后用 document.activeElement.blur();让键盘收起 this.value = value.replace(/\s/g, " ...
- vue的el-select标签全选以及出现需要有禁用选项
首先说一下遇到这种问题的解决思路吧,很简单先去https://element.eleme.cn/#/zh-CN 这个官网上找到对应的需求,然后就是拼接数据的问题. 以下是全选的例子: <el-s ...
- Vim的基本命令
Vi vi的两种模式 ①commad命令模式:无法输入任何东西,需要按下i进入编辑模式 ②edit编辑模式:按下esc退出到命令模式,在命令模式下按下wq [文件名] 可以退出并且成功的保存 //一些 ...
- 如何使用 HttpReports 监控 .NET Core 应用程序
简介 HttpReports 基于.NET Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在中小项目中使用. github:https: ...
- solr 远程代码执行(CVE-2019-12409)
Apache Solr 远程代码执行漏洞(CVE-2019-12409) 简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.是apache的顶级开源项 ...
- [virtualenv][python] 环境管理——对 virtualenv 更轻便的封装
virtualenv_simple_wrapper 如有错误,欢迎指出 Char-z 项目地址 gitee: virtualenv_simple_wrapper 使用说明 下载文件 virtualen ...
- springboot整合持久层技术(mysql驱动问题)
java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more tha ...
- 【odoo14】第二章、管理odoo实例
本章主要介绍肖odoo实例添加用户自定义的模块.你可以从多个路径载入模块.但是建议你将自己的模块儿放在特定的目录当中,避免与odoo的核心模块混淆. 在这一章节,中我们主要涉及以下内容: 配置插件路径 ...
- 【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验
1.MyBatis-Plus入门开发及配置 1.1.MyBatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变, ...