官网:http://securitytech.cc/
我用这一份侦察清单找到了 100 个漏洞
这是我在每一个漏洞赏金项目中都会严格执行的逐步方法论
几个月前,我的 漏洞赏金(Bug Bounty) 经历就像是在 一百个草堆里找一根针。
我随意地跑工具,把大量时间浪费在毫无结果的目标上。由于我的 漏洞挖掘 没有任何结构,很多关键资产被直接错过。我看起来很忙,但效率极低。
后来,一切都改变了。
按回车或点击可查看大图
照片来源:Boitumelo,Unsplash
我强迫自己去构建 一份侦察清单(Recon Checklist) —— 一份单一、可重复、每次都严格遵循的文档。正是这个决定,彻底改变了我的结果。
这就是那份清单。 它是我找到 100 多个有效漏洞 背后的 逐步方法论。 它不是关于什么秘密工具,而是一套 将混乱转化为稳定产出的成熟工作流。
下面,让我们一步一步走一遍。
为什么清单胜过“即兴发挥”
想想飞机起飞前的飞行员。他们不会“差不多记得流程”,而是 严格对照清单。
安全测试 也是一样。
侦察清单 能降低认知负担,确保不会遗漏关键步骤,把原本零散、随意的过程,变成一个 可复用、可验证的工作流。
“目标不是某一天当个天才,而是每天都稳定地产出效果。”
正是从“灵感式猜测”到“系统化流程”的转变,让我的 漏洞赏金成果 实现了质的提升。
5 分钟的前期准备
在执行任何命令之前,我都会做一点准备工作,这能在后面节省大量时间。
第一步:收集 API Key
很多优秀的 自动化侦察工具 都依赖 API,这些是我常用的:
- Shodan:用于发现设备与历史数据
-
- VirusTotal:被动子域与 IP 信息
-
- GitHub Token:用于代码与接口爬取
-
- Wayback Machine:获取历史 URL
我会把它们放在一个简单的配置文件里:
# ~/.config/recon_keys.env
SHODAN_API_KEY="your_key_here"
GITHUB_TOKEN="your_token_here"
第二步:创建项目目录
良好的组织结构是高效侦察的一部分。
mkdir target.com && cd target.com
mkdir subs urls alive nuclei_results
现在,真正的工作可以开始了。
Phase 1:发现所有数字资产
这一阶段是 子域枚举(Subdomain Enumeration)。 目标很简单:找出目标名下的每一扇“数字大门”。
问题在于: 只依赖一个工具,意味着你会错过大多数资产。
清单的解决方案: 从多个不同来源收集数据,再统一整合。
Step A:被动信息收集
这些工具不会直接访问目标,而是向第三方服务查询已有数据。
subfinder -d target.com -silent -o subs/subfinder.txt
assetfinder --subs-only target.com > subs/assetfinder.txt
amass enum -passive -d target.com -o subs/amass_passive.txt
Step B:公共档案与历史记录
证书透明日志和历史快照中,往往藏着被遗忘的系统。
# 来自证书透明日志(CT Logs)
curl -s "https://crt.sh/?q=%25.target.com&output=json" | jq -r '.[].name_value' | sort -u > subs/crtsh.txt
# 来自 Wayback Machine
curl -s "http://web.archive.org/cdx/search/cdx?url=*.target.com/*&output=text&fl=original&collapse=urlkey" | sed 's_https\*://\_\_' | cut -d'/' -f1 | sort -u > subs/wayback.txt
Step C:整合所有结果
cat subs/*.txt | sort -u > all_subs.txt
结果: 你会得到一份比任何单一工具大 3–5 倍 的完整子域列表。
上个月在一个私有项目中,这个阶段发现了一个 dev-api.target.com 的子域,公开资料中完全没有记录,最终带来了 5 个严重漏洞。
Phase 2:绘制攻击面
子域只是名字,我们需要知道它们真正提供了什么功能。 这一步是 端点发现(Endpoint Discovery)。
Step A:存活主机探测
cat all_subs.txt | httpx -silent -ports 80,443,8080,8443 -o alive/alive_subs.txt
Step B:URL 收集(被动 + 主动)
被动方式:
cat alive_subs.txt | gau --subs --threads 50 | sort -u > urls/gau_urls.txt
主动爬取:
cat alive_subs.txt | katana -d 3 -silent -o urls/katana_urls.txt
Step C:提取参数(真正的“黄金”)
cat urls/*.txt | grep '=' | sort -u > urls/parameters.txt
此时,一个域名已经被转化成了一张完整的应用地图。
Phase 3:过滤噪音
URL 成千上万,不可能全部测试,这一阶段是 优先级筛选。
关键过滤规则包括:
- 技术类型:
.php、.asp更适合特定漏洞测试 -
- 功能关键词:
login、upload、api、admin
- 功能关键词:
-
- 文件类型:
.js、.json、.config、.bak
- 文件类型:
提取 JavaScript 文件:
cat urls/katana_urls.txt | grep '\.js' > urls/javascript_files.txt
规则很简单:精准的搜索,永远胜过无差别扫描。
Phase 4:漏洞狩猎
现在,真正的 漏洞挖掘流程 开始了。
自动化扫描(Nuclei)
cat alive/alive_subs.txt | nuclei -t ~/nuclei-templates/http/ -severity low,medium,high,critical -o nuclei_results/initial_scan.txt
cat urls/parameters.txt | nuclei -t ~/nuclei-templates/http/vulnerabilities/ -o nuclei_results/parameter_scan.txt
手动验证与思考
- JS 文件里是否藏有 API Key?
-
?next=是否存在开放重定向?
-
?user_id=是否可枚举?
自动化 + 人工判断,才是核心。
深入案例:信息泄露漏洞
完整流程:
- 目标:
urls/javascript_files.txt -
- 自动扫描:
cat urls/javascript_files.txt | nuclei -t ~/nuclei-templates/http/exposures/ -o nuclei_results/js_exposure.txt
- 手动关键词搜索:
cat urls/javascript_files.txt | httpx -silent | xargs -I % curl -s % | grep -i -E "api[_-]?key|secret|password|token|aws|auth"
- 分析影响与可利用性
上周我就在一个压缩后的 app.js 中发现了硬编码的 AWS Key,15 分钟内完成确认并提交。
自动化整个清单
#!/bin/bash
# recon_auto.sh
TARGET=$1
echo "[+] Starting recon on $TARGET"
mkdir $TARGET && cd $TARGET
echo "[+] Phase 1"
subfinder -d $TARGET -o subs.txt
amass enum -passive -d $TARGET -o amass.txt
cat \*.txt | sort -u > all_subs.txt
echo "[+] Phase 2"
cat all_subs.txt | httpx -silent -o live.txt
cat live.txt | gau --subs | sort -u > urls.txt
echo "[+] Phase 3/4"
cat live.txt | nuclei -severity medium,high,critical -o findings.txt
echo "[+] Recon complete"
漏洞报告阶段
一份合格报告必须包含:
- 清晰标题
-
- 可复现步骤
-
- 明确影响
-
- PoC
-
- 修复建议
工具栈
- 子域:subfinder / amass / assetfinder
-
- 存活检测:httpx
-
- 爬虫:katana / gau
-
- 扫描:nuclei
-
- 可视化:aquatone
常见误区
- 跳过被动侦察
-
- 未授权扫描
-
- 忽视漏洞影响
-
- 工具堆砌
结语
这份 Recon 清单 不是魔法。
它是一套 系统化方法论。 它用流程取代运气,用稳定性换取产出。
这就是我找到 100 个漏洞的原因。
你最离不开的侦察步骤是什么?欢迎分享你的工具或技巧。