| name | asset-discovery |
| description | 用于授权范围内的资产发现、DNS 验证、端口发现、HTTP 存活探测和基础指纹识别。适合用户提供域名、IP、CIDR、主机列表或已有扫描结果时使用。会指导智能体组合 subfinder、amass、dnsx、naabu、nmap、masscan、httpx、whatweb、wafw00f。 |
资产发现
这份技能提供资产发现中的判断方法和可复用命令。下面的路径适合常见场景,但可根据已有结果、目标规模和授权边界跳过、重排或替换。
目标
把用户给出的授权范围整理成后续测试可直接使用的资产清单:
- 根域名和子域名。
- 可解析主机。
- IP 与主机名对应关系。
- 开放端口。
- HTTP/HTTPS 服务。
- Web 标题、状态码、技术栈、WAF 线索。
- 值得后续深入测试的目标。
适用输入
可以从以下任一输入开始:
- 根域名,例如
example.com。
- 多个域名列表。
- IP 或 CIDR。
- 主机名列表。
- 已有的 Nmap、httpx、资产表或扫描结果。
- 用户给出的“只测这些目标”的明确范围。
开始前先判断
执行前先确认:
- 目标是否在授权范围内。
- 是否允许主动扫描。
- 是否有速率限制。
- 是否需要排除 CDN、第三方 SaaS、云厂商共享资产。
- 当前容器是否支持 raw socket;这会影响
masscan 和部分 nmap 模式。
如果授权范围不清楚,先只做整理和低影响查询,不做大规模端口扫描。
数据更新建议
下载量判断
资产发现阶段一般不值得临时拉取大型数据集。
subfinder 和 amass 的效果更多取决于 provider 配置,而不是单次任务里的临时更新。
默认策略:
- 不临时更新
seclists、wordlists 或大型资产数据集。
- 不临时拉取未知来源的子域名字典。
- 如果只是缺少 API key,继续执行,并在限制里说明覆盖面可能较低。
- 只有用户明确提供小型字典或小型目标补充文件时,才纳入本次流程。
资产发现工具的结果质量更多取决于数据源和 API key,而不是临时更新工具本身。
普通任务通常无需在执行过程中更新工具或大字典。
如果 subfinder 或 amass 缺少 provider 配置,可以继续运行,但要在结果限制里说明“未配置 API key,覆盖面可能较低”。
不要临时拉取大型字典或未知来源的资产数据集。普通任务中使用镜像内置字典和工具即可。
一种常见工作路径
这条路径体现“被动线索 → 解析确认 → 端口与服务确认 → Web 分流”的证据递进关系,不代表所有目标都要完整执行。
准备可复用的工作区
mkdir -p recon/{input,raw,clean,final,notes}
如果输入是根域名:
cat > recon/input/domains.txt <<'EOF'
example.com
EOF
如果输入是主机或 IP:
cat > recon/input/hosts.txt <<'EOF'
host-or-ip
EOF
收集子域名线索
适合域名目标。先用 subfinder 快速拿结果,再用 amass 补充。
subfinder -dL recon/input/domains.txt \
-silent -all \
-o recon/raw/subfinder.txt
amass enum -passive \
-df recon/input/domains.txt \
-o recon/raw/amass_passive.txt
合并并清理:
cat recon/raw/subfinder.txt recon/raw/amass_passive.txt 2>/dev/null \
| sed 's/\.$//' \
| tr '[:upper:]' '[:lower:]' \
| sort -u > recon/clean/subdomains.txt
如果用户明确允许主动枚举,可以再考虑主动模式:
amass enum -active \
-df recon/input/domains.txt \
-o recon/raw/amass_active.txt
验证 DNS 和资产归属
确认哪些子域名真的可解析。
dnsx -l recon/clean/subdomains.txt \
-silent -a -resp \
-o recon/raw/dnsx_a.txt
dnsx -l recon/clean/subdomains.txt \
-silent -aaaa -resp \
-o recon/raw/dnsx_aaaa.txt
dnsx -l recon/clean/subdomains.txt \
-silent -cname -resp \
-o recon/raw/dnsx_cname.txt
提取可解析主机:
cat recon/raw/dnsx_a.txt recon/raw/dnsx_aaaa.txt 2>/dev/null \
| awk '{print $1}' \
| sort -u > recon/clean/resolved_hosts.txt
提取 IP 线索:
cat recon/raw/dnsx_a.txt recon/raw/dnsx_aaaa.txt 2>/dev/null \
| grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-fA-F:]{2,})' \
| sort -u > recon/clean/resolved_ips.txt
注意:解析到云厂商、CDN、第三方 SaaS 时,只能作为线索,不能自动视为可主动测试资产。
发现端口并确认服务
对主机名列表做常规端口发现:
naabu -list recon/clean/resolved_hosts.txt \
-top-ports 1000 \
-silent \
-json \
-o recon/raw/naabu_top1000.jsonl
如果用户给的是 IP/CIDR,也可以把 IP 放进 recon/input/ips.txt 后执行:
naabu -list recon/input/ips.txt \
-top-ports 1000 \
-silent \
-json \
-o recon/raw/naabu_ips_top1000.jsonl
先按主机聚合 Naabu 发现的端口:
cat recon/raw/naabu_top1000.jsonl recon/raw/naabu_ips_top1000.jsonl 2>/dev/null \
| jq -s -r 'group_by(.host // .ip)[] |
[(.[0].host // .[0].ip), (map(.port|tostring)|unique|join(","))] | @tsv' \
> recon/clean/nmap_targets.tsv
对每个主机只识别 Naabu 已发现的端口:
while IFS=$'\t' read -r host ports; do
safe_name="$(echo "$host" | sed 's#[/:]#_#g')"
nmap -sV -sC -Pn -p "$ports" "$host" -oA "recon/raw/nmap_services_${safe_name}"
done < recon/clean/nmap_targets.tsv
如果没有 raw socket 权限,降级为 TCP connect scan:
while IFS=$'\t' read -r host ports; do
safe_name="$(echo "$host" | sed 's#[/:]#_#g')"
nmap -sT -sV -Pn -p "$ports" "$host" -oA "recon/raw/nmap_tcp_connect_${safe_name}"
done < recon/clean/nmap_targets.tsv
只有在用户明确授权大范围高速扫描时,才用 masscan:
masscan -iL recon/input/ips.txt \
--top-ports 100 \
--rate 1000 \
-oL recon/raw/masscan.lst
识别 HTTP/HTTPS 服务
对解析成功的主机做 HTTP 探测:
httpx -l recon/clean/resolved_hosts.txt \
-silent \
-status-code \
-title \
-tech-detect \
-follow-redirects \
-json \
-o recon/raw/httpx.jsonl
提取存活 URL:
jq -r '.url' recon/raw/httpx.jsonl \
| sort -u > recon/clean/http_urls.txt
提取标题和技术栈摘要:
jq -r '[.url, (.status_code|tostring), (.title // ""), ((.tech // [])|join(","))] | @tsv' \
recon/raw/httpx.jsonl > recon/final/http_services.tsv
补充 Web 指纹
whatweb --log-json=recon/raw/whatweb.json \
--input-file recon/clean/http_urls.txt
while read -r url; do
wafw00f "$url" || true
done < recon/clean/http_urls.txt | tee recon/raw/wafw00f.txt
整理可供后续复用的资产
生成几个后续技能常用的输入文件:
cp recon/clean/http_urls.txt recon/final/web_targets.txt
cp recon/clean/resolved_hosts.txt recon/final/hosts.txt
cat recon/raw/naabu_top1000.jsonl recon/raw/naabu_ips_top1000.jsonl 2>/dev/null \
| jq -r '"\(.host // .ip):\(.port)"' \
| sort -u > recon/final/host_ports.txt
工具使用要点
subfinder
适合快速发现子域名。
subfinder -d example.com -silent -all -o subdomains.txt
subfinder -dL domains.txt -silent -all -o subdomains.txt
要点:
-silent 方便后续管道处理。
-all 会使用更多来源。
- 没有 API key 也能跑,但结果会少。
amass
适合补充子域名线索。
amass enum -passive -d example.com -o amass.txt
要点:
- 默认用
-passive。
-active 只有在授权允许主动枚举时再用。
- 运行时间可能明显长于
subfinder。
dnsx
适合验证解析结果。
dnsx -l subdomains.txt -silent -a -resp -o dnsx_a.txt
要点:
- 不要把未解析的子域名当成活跃资产。
- CNAME 指向第三方服务时要单独标注。
naabu
适合快速端口发现。
naabu -list hosts.txt -top-ports 1000 -silent -json -o ports.jsonl
要点:
- 大范围扫描要设置速率。
- JSONL 结果应先按主机聚合端口,再交给
nmap -p 做服务确认。
nmap
适合服务识别和脚本探测。
nmap -sV -sC -Pn -p 80,443 target.example -oA nmap_services
降级:
nmap -sT -sV -Pn -p 80,443 target.example -oA nmap_tcp_connect
要点:
-sC 会跑默认脚本,不要在敏感环境随意放大。
- 不要默认启用暴力破解、DoS 或高风险 NSE 脚本。
masscan
适合明确授权的大范围高速端口发现。
masscan -iL ips.txt --top-ports 100 --rate 1000 -oL masscan.lst
要点:
- 更适合明确授权的大范围高速发现,不适合替代普通目标的精确服务确认。
- 使用前确认授权、速率、网络边界和目标系统承载能力。
- 可能需要额外容器权限。
httpx
适合 HTTP 存活、标题、状态码和技术栈探测。
httpx -l hosts.txt -silent -status-code -title -tech-detect -json -o httpx.jsonl
whatweb / wafw00f
适合补充技术栈和防护信息。
whatweb https://example.com
wafw00f https://example.com
值得保留的证据
- 用户给出的原始范围,以及主动排除的第三方或归属不明资产。
- 子域、解析记录、IP 和主机名之间的对应关系。
- 已确认开放的端口、服务和可达 Web URL。
- 技术栈、WAF、CDN 和共享基础设施线索。
- 原始扫描结果、清洗后的后续输入,以及扫描受限的原因。
保留哪些内容取决于当前任务;重点是让后续判断能区分被动线索、解析成功、服务可达和归属已确认这几个不同层次。
判断与复核要点
- 所有扫描结果要能追溯到原始文件。
- 对第三方归属资产要标注“不确定”或“需确认”。
- 不要把发现到的所有东西都列为漏洞。
- 如果扫描受限,要写清楚限制原因。