DNS Rebinding
in 各种姿势 with 0 comment

DNS Rebinding

in 各种姿势 with 0 comment

这是最近学习的一个操作,CUIT校赛的时候遇到了ssrf的题目,有对输入的域名进行解析,然后对内网地址进行过滤,一般的绕过方式如下:

这些都是从正则层面进行的绕过,而DNS Rebinding则是在逻辑层面进行绕过的

下面是绕过原理和绕过需要的环境搭建方法

绕过原理

一般的过滤IP地址的绕过逻辑是这样的

dns1

这种设计本来是没有问题的,但是注意这个地方:

dns2

请求的时候又用DNS服务器对url进行了一次解析,那么就可以这么操作一下,输入一个自己的域名,用自己的DNS服务器进行解析,在第一次解析的时候返回正常的IP,在第二次解析的时候返回目标IP,这样就可以实现绕过了。

绕过实现

首先你需要一个自己的域名,还有一台服务器,然后这台服务器需要绑定一个域名。

然后在服务器上部署一个脚本,我用的是FakeDNS,在GitHub上能找到。这个脚本有很多功能,花式改解析,使用方法也很简单。

git clone https://github.com/Crypt0s/FakeDns

/etc/FakeDns/有个dns.conf.example,里面是
设置的示例,比如我要t-t.win第一次解析的时候解析为公网IP,第二次解析的时候解析为127.0.0.1 就这么设置:

A t-t.win 120.25.80.195,127.0.0.1

将以上语句放倒/etc/FakeDns/的dns.conf中(需要自己创建)

开启脚本:

python fakedns.py -c /etc/FakeDns/dns.conf

然后DNS服务器端就配置好了,现在就需要使域名指定这个DNS服务器来解析

比如我的服务器是阿里云的,绑定了farron.win。t-t.win是要用来DNS Rebinding的,那就在t-t.win的域名控制台这么设置:

这里服务器要写两个,第二个随便写就行了。

再添加A标签

A标签的记录值写成自己配好的DNS服务器的IP地址。

这里有点坑,修改A标签会有一段时间的缓存时间,这时候自己测试是不成功的,请多等待一段时间。

然后就可以请求了,完成效果如下:

可以看到第一次解析成了120.24.98.110,第二次就变成了127.0.0.1,这样就可以绕过过滤了。

Responses