被动收集打底,主动枚举扩容,再用DNS验证去重,形成闭环。下面这套流程基于Kali工具链,按实战场景拆解,你可以直接复制命令去跑。
为什么你的子域名收集总是漏?
很多人在Kali里随手敲一条dnsenum或dnsrecon就以为完事了,结果资产清单里全是老掉牙的A记录,行业共识认为,单一工具只能覆盖互联网公开数据的一小部分,而真正的二级域名往往藏在证书透明日志、历史DNS记录和子域名字典的碰撞里。
另一个痛点是泛解析干扰,有些目标把.example.com解析到统一IP,导致爆破结果全是假阳性,如果不先识别泛解析模式,后面所有验证步骤都会被带偏。
被动收集:先让互联网替你“扫”一遍
被动查询不直接触碰目标服务器,安全性更高,收益也最稳定,Kali下我一般按三件套执行。
用Subfinder做基础层收集
Subfinder是ProjectDiscovery出品的子域名收集工具,优点是API集成多,速度极快,在Kali里装好之后,直接跑:
subfinder -d example.com -all -silent -o subfinder.txt
-all参数启用所有数据源,-silent只输出域名,方便后续管道处理,如果你手里有Hunter、Fofa、Censys的密钥,可以写进~/.config/subfinder/provider-config.yaml,覆盖率会明显提升。
用crt.sh证书透明日志补充
证书透明日志是绕过WAF和CDN的利器,很多隐藏子域名只出现在SSL证书里,搜索引擎根本收录不到,Kali终端用curl拉取JSON,再用jq提取域名:
curl -s "https://crt.sh/?q=%25.example.com&output=json" | jq -r '.[] | .name_value' | sort -u > crt.txt
这里%25是通配符的URL编码,可以匹配所有二级子域名的证书,你会发现有些老域名已经不再解析,但它们关联的IP段仍然有价值,值得放进资产表。
Amass被动模式兜底
Amass的被动枚举能力依旧可靠,毕竟它的数据源集成了VirusTotal、RiskIQ等商业情报平台,在Kali中执行:
amass enum -passive -d example.com -o amass.txt
Amass跑得慢,但它的结果里经常出现Subfinder和crt.sh都找不到的边角料,建议把它放在后台,等到其他步骤做完再来看输出。
主动枚举:对未知子域名做地毯式搜索
被动数据只能拿到“已知的未知”,真正的高价值子域名还得靠字典爆破,这一步直接决定你的收集数量上限。
用ffuf跑字典
ffuf是一款模糊测试工具,但它的DNS枚举模式同样好用,Kali自带字典/usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt,先用小字典快速落地:
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://example.com -H "Host: FUZZ.example.com" -fc 200 -mc all -fs 0
解释一下:-H指定Host头,让目标服务器根据Host字段做虚拟主机匹配;-fc 200过滤掉HTTP 200响应,因为泛解析通常会返回200;-mc all输出全部状态码,再配合-fs 0排除响应体长度为0的无效请求。
用gobuster做DNS模式
如果你更喜欢传统DNS解析式爆破,gobuster更直观,它不发送HTTP请求,而是直接发起DNS查询,误报率更低:
gobuster dns -d example.com -w /usr/share/wordlists/dirb/common.txt -q
注意这里的字典粒度,dirb的common字典偏向路径,不适合DNS爆破,建议换用seclists里的deepmagic.com-prefixes-top500.txt,对三字符和四字符的短域名命中率较高。
泛解析处理技巧
泛解析会让每个爆破词都返回一个IP,看起来全是“有效记录”,解决办法是先手工试两个随机字符串:
dig randomstring123.example.com +short
如果返回IP,说明目标配置了记录,后续爆破结果里,凡是解析到这个IP的域名一律剔除,更稳健的做法是用massdns结合过滤脚本,但中小规模目标用上面的ffuf命令已经够用。
去重与验证:别把垃圾当宝藏
收集到几百条子域名后,不能直接交差,你需要筛选出真正能访问的存活资产。
先用sort去重合并
所有工具产出的结果先合并到一个文件:
cat subfinder.txt crt.txt amass.txt | sort -u | uniq > all_subs.txt
如果某个域名在三个工具里反复出现,它的真实性基本可以确认。
再用httpx探测存活子域
ProjectDiscovery的httpx是Kali生态里最顺手的存活探测工具:
httpx -l all_subs.txt -sc -title -cl -o live_subs.txt
它会输出HTTP状态码、页面标题、响应头里的Content-Length,遇到302跳转的域名不要急着删掉,它可能跳转到了SSO登录页或管理后台。
验证IP归属
对存活列表提取解析IP,剔除指向CDN或云厂商的地址,如果目标有内网IP段(比如10.x、172.16.x、192.168.x),优先标记,这类资产通常是人迹罕至的后端接口。
for sub in $(cat live_subs.txt); do dig +short $sub; done | grep -E '^(10.|172.(1[6-9]|2[0-9]|3[0-1]).|192.168.)' | sort -u
自动化:把以上步骤串成一条命令
手动一条条敲命令,在目标范围小的时候尚可接受,一旦资产规模上百,就该上脚本了,在Kali里写到/usr/local/bin/subminer.sh:
#!/bin/bash TARGET=$1 subfinder -d $TARGET -silent > /tmp/sub1.txt curl -s "https://crt.sh/?q=%25.$TARGET&output=json" | jq -r '.[] | .name_value' | sort -u >> /tmp/sub1.txt amass enum -passive -d $TARGET -o /tmp/sub2.txt cat /tmp/sub1.txt /tmp/sub2.txt | sed 's/.//g' | sort -u > /tmp/merged.txt httpx -l /tmp/merged.txt -silent -sc -o /tmp/live.txt wc -l /tmp/live.txt
运行:
chmod +x /usr/local/bin/subminer.sh subminer.sh example.com
脚本里顺手把前缀清掉,避免证书通配符污染结果,这个流程覆盖了被动、主动、存活探测三件事,跑一个域名大约需要5到10分钟。
常见误区与规避办法
不少人在Kali里把子域名收集当“跑分竞速”,实际上忽略了几个老坑。
只跑一个工具就下结论
单一工具的数据源再丰富,也会有盲区,理想组合至少是“一个被动枚举工具+一个证书日志查询+一个字典爆破工具”,先把被动结果存好,再用主动工具去补漏,两者缺一不可。
不看子域名之间的IP关联
有时候你收集到admin.example.com和test.example.com,看似是两个子域名,解析后却是同一个IP,这种情况下,应该进一步做端口扫描和目录爆破,而不是把域名数量当成最终成果,业内专家指出,大量实际突破路径来自子域名解析到同一台服务器上的非标端口。
忽略历史DNS记录
SecurityTrails和Dnsdumpster这类服务能查到目标曾用过的解析记录,被动收集阶段用浏览器打开https://securitytrails.com/domain/example.com/history,手动把有价值的旧子域名摘下来,虽然不在Kali命令行里,但效率极高。
kali二级域名收集常见问题
问:kali下二级域名枚举工具哪个好用?
没有绝对最好,但按效率排序,首推Subfinder+ffuf组合,Subfinder负责在被动数据源里捞名字,ffuf负责在字典里撞新子域,两者叠加可以覆盖绝大多数常规目标,如果追求更深的自动化,Amass的intel模块也能做组织关联,不过学习成本偏高,Kali自带工具里,dnsenum适合应急简单跑一下,别指望它出奇效。
问:子域名收集时遇到泛解析怎么办?
先手工验证泛解析IP,之后在爆破工具里加过滤规则,ffuf的-fw参数可以过滤返回字数为固定值的结果,但更推荐在爆破完成后再用脚本统一剔除泛解析IP,还有一种老办法:把字典里所有词先解析一轮,凡是返回相同IP的记录全部标为疑似泛解析,人工复核后删除。
问:Kali里子域名收集结果如何转化为攻击面?
把存活子域名列表丢给httpx得到状态码和标题,再交给nuclei跑漏洞模板,也可以用cat live_subs.txt | awk -F/ '{print $3}' | sort -u提取根域名对应的IP,接着用masscan扫常用端口,本质上,二级域名收集只是侦察的起点,后续关联到Web应用测试或API接口发现,才算完成闭环。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/762535.html





