资产收集是渗透测试的基本环节,subDomainsBrute工具通过DNS暴力枚举,可以帮助你快速地完成早期域名、IP收集。
项目地址: https://github.com/lijiejie/subDomainsBrute
在1.5版本的改进中,进一步增强了发现能力。如下图所示,测试使用一个字典尝试扫描qq.com,可以发现4668个域名。
很多时候,一个白帽子能发现别人发现不了的漏洞,很可能是因为他收集的资产更全。一个4000域名的白帽子,要比一个手上8000域名的白帽子,挖到漏洞的难度大很多。越偏的站点,其出现漏洞的可能性越高。
主要的改进
1.5版本新增了尝试获取https证书,并解析证书中的alt names。经过测试,可以额外发现30% ~ 100%的域名。其实际效果是超出预期的。
使用一个超小字典测试,结果如下:
不启用https证书发现,结果是94个域名
python subDomainsBrute.py -f next_sub.txt baidu.com --no-https
启用https证书发现,结果是165个域名
另外,在效率提升方面,添加了支持Proactor事件循环,在Windows下,也可以使用像-t 2000,启用超过250个线程的开关。当然,我并不建议这样做。越大的并发,意味着timeout越多,会出现一定数量的域名损失。目前默认是500每个进程。
同时,这个版本在python2.7 / 3.6 / 3.7 / 3.8 / 3.10都完成了相应的测试,解决了一些坑。
主要的坑是asyncio的不稳定,其接口在高低python中,是变动的。
也包括asyncio.wait_for,timeout没生效,观察到的现象就是hang up。因此python3会引入一个依赖async_timeout
同时,发现了不少像低版本中asyncio.wait_for协程内部的错误不向上抛出,不给父级函数捕获的问题。所以你会看到很奇怪的代码
`if sys.version_info.major == 3 and sys.version_info.minor == 6:` `# I'll do this first, mute stderr` `# Since python3.6 throws exception from inner function that can not be captured by except ...` `sys.stderr = open(os.devnull, 'w')`
以及像overwrite
asyncio.proactor_events._ProactorBasePipeTransport._call_connection_lost函数,都是类似的原因
如果需要禁用https证书查找,可使用开关 --no-https
这个版本已知待解决的问题,是多进程会重复扫描从证书中的域名,额外产生一些时间开销和浪费。这个问题会在下个版本中解决。
祝大家挖到更多高危漏洞。:)