改进subDomainburte,支持泛解析域名爆破

由 mayoterry 发布

subDomainburte介绍

subDomainburte是一款用于渗透测试中快速枚举子域名的工具。其使用高并发DNS暴力枚举,可以快速的从字典库中枚举能被DNS解析的域名。

背景

在最近一个自动化工具的开发中,我们需要使用到subDomainburte对子域名进行快速的爆破处理,在使用subDomainsBrute 1.2测试时发现,其并不支持对泛域名的爆破,处理结果是测试发现域名存在泛解析时直接退出脚本,具体代码如下:

1.png

wildcard_test()函数为subDomainsBrute 1.2对泛域名处理的主函数,可以看到其level参数默认为1,当一个存在泛解析的域名,如lijiejie-not-existed-test.domian.com被解析,该函数会直接执行exit(0)退出,整个脚本的执行也就结束了。

由于项目所需,我们又需要对于泛解析域名来进行爆破,为避免重复造轮子,我们可以根据subDomainsBrute 1.2来进行二次开发,达到我们预期的结果

改进subDomainsBrute

为了测试,我们找了一个使用泛解析的域名bilibili.co ,我们使用默认版本的subDomainsBrute进行爆破测试,如下所述,在遇到泛解析域名,脚本直接会退出:
python subDomainsBrute.py bilibili.co

2.png

ping测试如下:

3.png

可见,默认域名*.bilibili.co都会被DNS解析到139.196.14.154这个IP上

思路

泛解析一直都是域名爆破中的大问题,我们目前的解决思路是根据一个不存在的子域名的解析IP,来记录获取黑名单 IP,在爆破字典时,如果解析的IP在这个黑名单中,则默认跳过,如果不存在,我们则入库处理。
但是这种粗暴的过滤方式会有误报的可能,例如泛解析记录为1.1.1.1 , 如果某个子域名的解析ip刚好为1.1.1.1 ,则会直接被黑名单过滤掉。
还有一种泛解析的爆破处理方式是根据TTL来做判断,我们可以将 TTL 也作为黑名单规则的一部分,评判的依据是:在权威 DNS 中,泛解析记录的 TTL 肯定是相同的,如果子域名记录相同,但 TTL 不同,那这条记录可以说肯定不是泛解析记录。

综合考虑,本次改动只使用一个不存在子域名的黑ip来进行过滤筛选。

开始改动代码

首先是对默认wildcard_test()函数进行改动,改动代码如下:

4.png

此函数大致思路是获取一个不存在子域名的解析IP ,如果域名lijiejie-not-existed-test.domian.com被解析,我们则直接return ips 返回该域名被解析的ip,如果域名lijiejie-not-existed-test.domian.com没被解析,则进入except流程,函数会返回一个0.0.0.0的黑名单ip。

入库逻辑处理:

5.png

这里的大致思路是对字典库中子域名解析的ip和黑名单ip做对比,如果相等,则直接pass ,如果不等,我们则入库处理。

处理效果

我们使用改进好的subDomainburte进行测试:
python subDomainsBrute.py --full bilibili.co

6.png

发现在我们预先准备的子域名字典库里爆破出了57个有效的子域名

查看结果:(部分)

7.png

ok ,此时看起来达到了我们想到的效果

参考:
[1] https://github.com/lijiejie/subDomainsBrute
[2] http://sh3ll.me/archives/201704041222.txt


5 条评论

  1. lnk23y · 2020-04-02 12:01

    你好老铁,按着你上面的代码改,发现工具找不到域名了,有没源码我参考下

    1. admin · 2020-04-04 22:45 作者

      参考链接:https://github.com/mayoterry/subDomainsBrute-customization

  2. dsds · 2020-04-02 18:11

    能不能贴一个修改之后的链接

    1. admin · 2020-04-04 22:45 作者

      同楼上链接

  3. nobody · 2020-04-05 10:33

    好赞的思路,学习到了,谢谢分享

发表评论