目前开源的子域名扫描工具主要有OneForAll这类,优点是结果数量足够多,但噪音数据太多,所以需要取个均衡。
首先是子域如何提取,分几个部分:
Fofa API:https://fofa.info/api
Hunter API:https://hunter.qianxin.com/home/helpCenter?r=5-1-2
主要依赖DNS Server
高质量的字典如何提取?
目前很多子域名字典都是10年前的东西,前缀里包含的脏数据太多(例如博彩,色情网站前缀)
子域名扫描模块不应该设计的太臃肿,最明显的影响就是在这一阶段扫描时间过长,会影响下一步端口扫描的效率~
这三个部分拼接起来则是如下流程
- 用户输入参数(目标主域名或者域名list,批量),DNS枚举设置为可选开关(bool)和指定DNS Server,用户可配置fofa api以及hunter api的api key等信息,以及字典的存放位置
- 拿到目标后直接进行API收集,如果API收集的结果数量小于某个阈值,才调用字典+DNS枚举进行爆破
- 收集到的子域结果进行去重以及测活(测试状态码是否为200或者302之类),测活时需要合理设置超时时间,不然也会影响整体扫描效率,同时还需获取子域名的解析IP,如a.example.com > 10.10.10.1
- 在yakit界面使用table组件或者命令行中展示json格式的子域扫描结果