DNS rebinging攻击方式

DNS rebinging攻击方式

一、什么是DNS rebinding?

在dns协议中,请求和响应完成一台机器对一个域名的查询,响应信息包含请求域名站点对应的IP地址。假设你向DNS服务器A请求域名youself.domain.com,第一次得到的回复是 IP地址1 ,第二次得到的回复是 IP地址2 ,此时我们说DNS进行了重绑定,也就是DNS rebinding。当然,你可以把A站点的解析地址从IP1替换成IP2,也可以把A站点的解析IP1绑定到B站点上去。总之DNS重绑定改变了DNS域名与IP的绑定情况。

二、DNS重绑定攻击

利用DNS重绑定完成一系列的攻击,尤其是绕过一些跨域防护机制。

1、攻击方式一,绕过SSRF限制:

例如很多SSRF检查的代码逻辑如下-->

(1)对请求进行DNS解析获得目标IP;

(2)检查目标IP进行检查,是否在白名单中;

(3)如果(2)没有问题,利用curl等工具发起访问;

那么通过DNS重绑定就可以绕过这一检查。绕过原理:

第一次请求的响应报文中返回符合白名单的IP地址;但是TTL很短,可以为1甚至0;

第二次请求的响应报文中返回恶意IP地址,从而绕过SSRF检查;

2、攻击方式二,绕过php的ssrf检查:

这里要涉及到php的一个函数问题-->

1 //关于函数gethostname和dns_get_record
2 /*
3 1、如果站点绑定多个IP,那么gethostname则会随机返回一个;
4 2、dns_get_record函数返回一个array;
5 */

绕过原理:

所以如果有使用第一个函数,或者第二个函数但是只取了array的第一个,那么久存在问题,dns绑定多个ip也可以绕过,因为curl时候是会多个ip都访问的。(正常ip关闭服务,恶意ip开启即可)

3、攻击方式三:

攻击原理-->

(1)假设用户一般正常访问A,那么你也注册一个A,上面搞点水坑啥的,不管了,反正有攻击性的东西,切记记住账户密码,搞定cookie信息。

(2)你注册B,且B的DNS的TTL很短(例如1s),访问B的人会执行B上的js脚本(你写的),保存cookie信息,就是(1)中你记录下的cookie信息。

(3)B上还需要脚本,控制超出B的TTL后重定向到B,此时B的DNS解析换成A的。那么实际上就等于带着A的cookie的访问了A,也就被你挂的马感染了。

4、当然,也可以做一些有趣的事情,例如有大神用它来盗取WiFi密码,也是挺好玩的:

传送门:http://bobao.360.cn/learning/detail/358.html