渗透特别是刷 SRC 的时候,收集目标相关的域名其实可以说是最重要的了—— 整理好一堆域名往扫描器里一丢,就可以睡个觉等着明天提交啦。据我所知有不少人是拿 WVS 刷洞的,连 WVS 的批量扫描工具 也有了,简直轻松愉快。

传统的一些找域名的方法可以看看这篇文章:子域名搜集思路与技巧梳理,里面比较有意思的是用 SSL 证书来找相关的域名。

有个没提到的方法是通过域名注册邮箱反查,BroDomain 这个工具就是用的这种方法。

后来在微博上看到有人提到了 Passive DNS,想到很久之前注册的 PassiveTotal 好像有这个功能,就去找了下 API:

api.png
result.png

写了个脚本用来提取子域名:

import json
import sys
import requests

requests.packages.urllib3.disable_warnings()

domain = sys.argv[1]

url = 'https://api.passivetotal.org/v2/dns/search/keyword'
auth = ("your_email", "your_api_key")
params = {'query': domain}
response = requests.get(url, auth=auth, params=params, verify=False)
loaded_content = json.loads(response.content)

for x in loaded_content['results']:
    y = x['focusPoint']
    if y.endswith(domain):
        print y

效果不错,可以得到一些三级甚至四级域名,缺点是部分域名 DNS 解析已经失效了,可能用于监控新出现的子域名会比较好。
至于 Passive DNS 系统的原理,大约就是从真实的网络中采集 DNS 流量(一般用流量镜像),经过解析、去重后存进数据库用于分析,具体的可以搜搜 PassiveDNS 系统的实现与应用研究 这篇论文。360 有个类似的系统,不过需要申请才能用。