说实话,我对 Nmap 的感情一点不比你少。它扫端口的岁数,可能比我们里很多人的年纪都大,至今依旧是扫描界的扛把子。

但如果你的整个信息收集流程就是:nmap -A -T4 target.com 一敲,扫完随便点两下,就结束战斗……
那你真的亏大了。
(亏钱、亏洞、亏机会,全看你做的是啥。)
现代安全测试早就不是“单点工具狂按”这么简单了,而是——
把工具变成流程,把流程变成体系,让侦察像自来水一样自动流出来。
今天不教你玩 Nmap 的奇怪参数。
今天聊的是一个真正有用、能救命、能提升你效率的:Recon Pipeline(信息收集流水线)。
工具很强,但你用的方式很弱
安全工具没有坏工具,只有不配合使用的工具。
-
Nmap 扫端口
-
Amass 找子域名
-
Nuclei 探洞
-
FFuF 爆目录
工具都很好,但很多人的使用方式是这样的:
-
Amass 跑完 → 导出
-
丢到 httpx → 再导出
-
活跃的子域 → 再丢到各种扫描器
-
扫着扫着忘了哪些看过、哪些扫过
-
六小时后
你盯着五个输出文件疯狂 grep,只为了搞清楚某个 admin 面板到底扫过没有
看起来是不是很熟悉?
(别装,你肯定经历过。)
问题不是你不用心,问题是:
人脑不适合做重复、机械的整合工作。
流水线才适合。
一个好的 Recon Pipeline,应该长这样:
1. 模块化
今天你用 Subfinder,明天你想换成新出的更快的工具?
没问题,一换就完事,不会炸掉整个流程。
2. 有状态管理
它知道什么扫过、什么没扫、什么变了、什么新增。
避免重复工作,更不会漏掉关键变化。
3. 数据格式统一
不同工具的输出像不同方言:JSON、CSV、纯文本……
流水线的任务就是全部翻译成你能读、能处理的一种语言。
4. 抗崩溃能力
网络抽风、API 限流、工具崩溃都应该被“优雅处理”,
而不是:
“啊不行了全得重来”。
5. 输出可行动
不是给你一堆数据,而是告诉你:
哪里最值得你马上去看。
先从基础开始:子域名收集(Target Enumeration)
基础不性感,但非常关键。
不要只“找到子域名”,要找到 + 验证 + 分类 + 作为下游输入。
一个简单的基础流程👇
阶段 1:被动枚举
subfinder -d target.com -all -o passive.txt amass enum -passive -d target.com -o amass_passive.txt
阶段 2:主动爆破
puredns bruteforce wordlist.txt target.com -r resolvers.txt -o active.txt
阶段 3:合并 + 去重
cat passive.txt amass_passive.txt active.txt | sort -u > all_subs.txt
阶段 4:验证线上存活
httpx -l all_subs.txt -o live_hosts.txt -title -status-code -tech-detect
这一步做完,很多人就拍屁股走人了。
但真正的流水线思维是:
live_hosts.txt 不是终点,它是下一个流程的起点。
端口扫描:别再无脑全扫了
全量 Nmap -p- 扫几百个子域?
又慢、又吵、又浪费时间。
流水线会根据现有信息“智能决策”:
先抽取 HTTP/HTTPS 响应的主机
cat live_hosts.txt | grep "200\|301\|302\|403" | cut -d' ' -f1 > http_hosts.txt
再做针对性扫描
nmap -iL http_hosts.txt -p 80,443,8080,8443 -sV -oA web_services
其他端口再分批扫描。
然后——
根据扫描结果自动触发后续动作!
例如解析 Nmap 结果:
python parse_nmap.py -i web_services.xml | while read host port; do
case $port in
443)
echo "$host" >> ssl_targets.txt ;; # SSL 分析
8080|8000|8888)
echo "$host:$port" >> api_candidates.txt ;; # API 入口点
esac
done
这才叫智能侦察,而不是用 Nmap 在吼。
目录爆破:不是每个站都一样
大部分人这样做:
所有站点 → 同一个大字典 → FFuF 打一遍
这样效率低得可怜。
更聪明的方式是:
根据站点类型,使用不同字典。
例如:
cat live_hosts.txt | grep -i "wordpress" > wordpress_sites.txt
然后:
ffuf -w wp_wordlist.txt -u https://FUZZ.site.com
对于 API 站点:
ffuf -w api_endpoints.txt -u https://api.site.com/FUZZ
甚至你可以根据找到的路径自动生成“猜测路径”:
发现 /api/v1/users → 试试:
-
/api/v2/users
-
/api/v1/admin
-
/api/internal/users
-
…
真正的渗透,不是蛮力,是聪明。
真正强的:持续侦察(Continuous Recon)
做漏洞赏金、做攻防演练、做资产监控的都懂:
一次性扫描 ≠ 安全。
持续变化才是威胁的来源。
一个简单的每日任务:
# 每日侦察脚本
DATE=$(date +%Y%m%d)
PREVIOUS=$(ls -t scans/ | head -n 1)
subfinder -d target.com -all -o scans/${DATE}_subs.txt
comm -13 <(sort scans/${PREVIOUS}) <(sort scans/${DATE}_subs.txt) > new_subs.txt
if [ -s new_subs.txt ]; then
httpx -l new_subs.txt -o scans/${DATE}_new_live.txt
notify_telegram "发现 $(wc -l < new_subs.txt) 个新增子域"
fi
你睡觉的时候,工具在帮你找机会。
你醒来时,手机提醒你:“喂,有新资产上线。”
数据管理才是最终 BOSS
工具跑多了,你会被淹没在:
-
子域文件
-
Nmap XML
-
扫描截图
-
漏洞报告
-
临时 notes
所以一定要做数据结构化存储。
例如用 SQLite:
CREATE TABLE subdomains ( domain TEXT, discovered_date TEXT, status_code INT, title TEXT, tech_stack TEXT );
然后你可以:
-
查找所有带 admin 标题的站
-
查找过去 7 天新增资产
-
查找所有 Jenkins、Grafana、SonarQube 实例
不再 grep 到怀疑人生。
最终你会得到一个真正的“流水线”:
-
子域发现
-
存活验证
-
技术栈识别
-
服务分类扫描
-
目录/接口爆破
-
持续监控
-
数据统一管理
-
自动提醒与输出报告
每一步都自动、可控、可靠、可扩展。
“这些自动化是不是有点麻烦?”
你可能会问。
其实真正麻烦的是——
你不用自动化,还坚持手工做所有事。
现代安全测试不缺工具,缺的是:
一个属于你自己的方法论体系。
流水线不是让你偷懒,而是让你更强。
当你要“重扫全场”,别人还在整理笔记,你只需要一句话:
./run_recon.sh
从小处开始,然后不断扩展
别想着一次性打造“完美的流水线”。
第一步只需要自动化你最烦的那一块。
然后你会越滚越大,越做越顺。
最终,它会成为你的私人侦察工厂。