漏洞赏金自动化实战:从资产发现到逻辑验证的三层漏斗策略
1. 项目概述从“人肉扫描”到“自动化狩猎”的思维跃迁如果你还在手动刷新漏洞赏金平台一个个域名地敲命令、看响应幻想着靠运气撞上一个高危漏洞那我得说你的效率可能还停留在石器时代。漏洞赏金Bug Bounty早已不是单兵作战的蛮荒时代它已经演变成一场信息、工具和自动化脚本的军备竞赛。这个项目要聊的就是如何在这场竞赛中构建一套属于自己的、高效的“自动化狩猎”系统。核心很简单将重复、繁琐、低价值的信息收集和初步探测工作全部交给脚本和工具链把你的时间和精力解放出来聚焦在真正的漏洞逻辑分析和深度利用上。这不仅仅是写几个Python脚本那么简单它涉及到一个完整的策略闭环从目标范围划定、资产发现、漏洞模式识别到自动化验证与报告生成。我们追求的不是“全自动挖洞”那既不现实也不安全而是“高效辅助决策”。通过合理的自动化流程你能在单位时间内扫描更多的资产、发现更多的潜在攻击面从而大幅提升发现有效漏洞的概率。无论是想赚点外快的安全研究员还是希望提升团队渗透测试效率的工程师这套思路都能让你从“埋头苦干”转向“抬头看路”。2. 核心策略设计构建分层递进的自动化工作流盲目地运行一堆扫描器除了制造海量误报和噪音对你和目标的系统都是一种伤害。高效策略的核心在于“精准”与“递进”。我的策略可以概括为一个三层金字塔模型广撒网、精筛选、深验证。2.1 第一层资产发现与枚举广撒网这一层的目标是尽可能全面地绘制出目标的攻击面。我们不过多关注漏洞只关心“目标有哪些东西”。子域名枚举是起点。单纯依赖一个工具如subfinder是远远不够的。我的组合拳通常是被动收集使用subfinder、assetfinder、amass等工具从证书透明度日志、搜索引擎、DNS数据集等公开源获取子域。这里的关键是配置足够多的数据源API如SecurityTrails, Censys, Shodan的API虽然有些需要付费但投资回报率很高。字典爆破使用gobuster、ffuf配合一个精心维护的字典。这个字典不能只用网上通用的必须融合目标行业术语、产品名、甚至从已发现的子域中提取的单词使用altdns这样的工具生成排列组合。递归搜索对发现的新子域再次进行NS、MX记录查询有时能发现更深层的内部域名。注意此阶段会产生大量数据。务必使用httpx或httprobe快速探测存活并过滤掉CDN、WAF保护的IP聚焦于可能由目标自己管理的资产。一个技巧是将结果按HTTP状态码、标题关键字、技术栈通过wappalyzer或webanalyze快速分类。2.2 第二层漏洞模式扫描与敏感信息泄露精筛选在拥有存活资产列表后进入模式匹配阶段。这里要避免重型漏洞扫描器的狂轰滥炸。目录与路径探测使用ffuf进行快速、可定制的目录/文件爆破。重点不是用大字典而是针对不同技术栈使用小而精的字典如针对Spring Boot的/actuator针对AWS的s3桶名探测。参数分析与模糊测试使用arjun、x8等工具自动发现隐藏的GET/POST参数。对于发现的参数用ffuf或自定义脚本进行基于字典的模糊测试寻找常见的漏洞模式如SQLi、XSS、SSRF、命令注入的初步Payload。敏感信息泄露监控这是自动化脚本的黄金地带。GitHub/GitLab监控使用truffleHog、gitrob或gitleaks扫描目标相关的代码仓库寻找硬编码的API密钥、密码、令牌。JS文件分析用subjs、waybackurls等提取所有JavaScript文件然后用LinkFinder、SecretFinder等工具从JS中寻找API端点、子域和硬编码密钥。云存储桶检查写个简单脚本批量检查s3.amazonaws.com、storage.googleapis.com等常见云存储的桶名是否存在并可列表或读取。2.3 第三层定制化漏洞探测与逻辑验证深验证这是最体现个人技术的一层自动化脚本扮演“验证助手”的角色。SSRF与内部服务探测编写脚本自动将发现的每个可能触发外部请求的参数如URL、图片地址替换为一个你控制的、带唯一标识的Burp Collaborator地址或Interactsh地址然后批量重放请求监控是否有回调。批量测试IDOR对于发现的有序ID如/api/user/123编写脚本自动遍历一个ID范围如100-200并对比不同权限用户通过切换Cookie/Token的响应差异快速定位越权访问漏洞。自动化报告初筛写一个脚本将第二层工具如nuclei的输出进行解析自动去除那些明显是误报的条目例如针对某个特定CMS的漏洞但目标根本不使用该CMS并按风险等级和资产重要性进行初步排序生成一个待人工复核的清单。这个三层策略的核心思想是漏斗模型每一层都过滤掉大量无关信息将最可疑、最值得人工投入的“精华”递交给下一层或你自己。自动化负责扩大基数、发现模式而你负责最终的逻辑判断和漏洞利用。3. 工具链选型与协同打造你的“瑞士军刀箱”工欲善其事必先利其器。但工具贵在精而不在多关键在于如何让它们像齿轮一样咬合运转。以下是我实战中打磨出的一套工具链组合与协同方案。3.1 信息收集与资产测绘套件Subfinder/Assetfinder/Amass这三者我通常会一起使用用一个小脚本并行执行然后对结果去重。Amass的主动爆破引擎很强但速度慢适合在深夜或对高价值目标进行深度枚举时使用。Httpx资产存活性探测的绝对主力。它支持多种协议HTTP/HTTPS能提取标题、状态码、技术指纹速度极快。我常用命令是cat subdomains.txt | httpx -title -tech-detect -status-code -o alive.txt一站式完成基础分类。Naabu当域名解析出大量IP时用Naabu进行快速端口扫描比nmap全端口扫描快很多可以快速定位开放了非常见端口如8443, 8081的服务。Waybackurls/Gau从 Wayback Machine 和其他档案中获取目标的历史URL经常能发现一些已被删除但后端逻辑仍在的“幽灵”端点是漏洞的富矿。这些工具的协同通常通过一个简单的Bash或Python脚本串联形成工作流域名输入 - 子域枚举 - 存活探测 - 端口扫描 - 结果聚合。3.2 漏洞扫描与模糊测试引擎Nuclei社区驱动的漏洞模板引擎是我的核心扫描器。它的强大在于社区模板更新极快覆盖从低危信息泄露到高危RCE的各类漏洞。关键技巧不要盲目运行所有模板。根据httpx识别的技术栈如-tech-detect只运行针对该技术的模板。例如识别到Jenkins就只运行nuclei -t /nuclei-templates/technologies/jenkins-*.yaml。这能减少99%的无效流量和误报。Ffuf万能的Web模糊测试工具。目录爆破、参数爆破、子域名爆破、内容发现无所不能。它的过滤器和匹配器功能强大可以精准识别差异响应。我常用它来批量测试参数例如ffuf -w params.txt:PARAM -w payloads.txt:PAYLOAD -u ‘https://target.com/api?PARAMPAYLOAD’ -fr ‘error’过滤掉包含“error”的响应。KiteRunner用于快速、批量地检测SSRF、XXE、SQLi等需要外部交互或时间延迟判断的漏洞。它内置了DNS/HTTP/SMB等多种带外OOB检测服务器可以无缝集成到自动化流程中。3.3 定制化脚本开发粘合剂与放大器现成工具是基础但真正的高效来自于根据目标特点编写的定制脚本。资产监控与差异比对脚本定期如每天对目标资产进行快照子域、开放端口、HTTP标题并与前一天的数据进行比对。用diff或编写Python脚本比较任何新增的资产新子域、新服务、新标题都可能是测试人员忽略的“新攻击面”需要优先检查。这招对于范围是*.company.com的赏金项目尤其有效。API端点自动爬取与测试脚本对于现代SPA单页应用或纯API服务传统爬虫如katana可能失效。可以编写使用Playwright或Selenium的脚本模拟用户操作抓取网络请求自动提取出所有的API端点/graphql,/api/v1/*和对应的参数结构。然后将这些端点喂给ffuf或自定义的测试逻辑。凭证填充与撞库检测脚本在获得目标员工可能使用的邮箱列表从Hunter.io或LinkedIn爬取后可以编写一个谨慎的脚本在目标的登录页面、密码重置页面测试一批常用或泄露的密码注意法律和规则必须在规则明确允许的范围内进行。很多漏洞赏金项目允许对认证系统进行有限的测试这常能发现账户枚举或弱密码问题。工具链的协同最终通过一个主控脚本比如一个Python脚本来调度。这个主控脚本读取配置文件目标列表、API密钥按顺序调用各个工具处理中间文件并最终生成一份结构化的报告HTML或Markdown格式标注出需要人工复核的高风险点。4. 实战流程拆解以一个虚构目标为例让我们以一个虚构的赏金目标*.example-app.com为例走一遍完整的自动化实战流程。假设规则允许对*.example-app.com进行测试且不包括拒绝服务攻击。4.1 第一阶段自动化资产侦察与测绘首先创建一个项目目录并初始化一个简单的脚本recon.sh。#!/bin/bash TARGETexample-app.com OUTPUT_DIR./scan_results mkdir -p $OUTPUT_DIR echo [*] 开始子域名枚举... subfinder -d $TARGET -silent | tee $OUTPUT_DIR/subfinder.txt assetfinder --subs-only $TARGET | tee -a $OUTPUT_DIR/assetfinder.txt amass enum -passive -d $TARGET -o $OUTPUT_DIR/amass_passive.txt # 合并去重 cat $OUTPUT_DIR/subfinder.txt $OUTPUT_DIR/assetfinder.txt $OUTPUT_DIR/amass_passive.txt | sort -u $OUTPUT_DIR/all_subs.txt echo [] 发现子域名数量: $(wc -l $OUTPUT_DIR/all_subs.txt) echo [*] 进行存活性探测与HTTP信息收集... cat $OUTPUT_DIR/all_subs.txt | httpx -title -tech-detect -status-code -content-length -follow-redirects -o $OUTPUT_DIR/alive_urls.txt -json -silent | tee $OUTPUT_DIR/httpx.json # 从httpx输出中提取纯URL列表供后续工具使用 jq -r .url $OUTPUT_DIR/httpx.json $OUTPUT_DIR/alive_urls_clean.txt echo [*] 从Wayback Machine等获取历史URL... cat $OUTPUT_DIR/all_subs.txt | waybackurls | sort -u $OUTPUT_DIR/wayback_urls.txt cat $OUTPUT_DIR/all_subs.txt | gau --subs | sort -u $OUTPUT_DIR/wayback_urls.txt echo [*] 对存活IP进行快速端口扫描... # 从存活URL中提取域名解析为IP cat $OUTPUT_DIR/alive_urls_clean.txt | sed s|https\?://|| | cut -d/ -f1 | sort -u $OUTPUT_DIR/alive_domains.txt cat $OUTPUT_DIR/alive_domains.txt | dnsx -a -resp-only -silent | sort -u $OUTPUT_DIR/ips.txt naabu -list $OUTPUT_DIR/ips.txt -top-ports 100 -o $OUTPUT_DIR/naabu_ports.txt echo [!] 第一阶段侦察完成。这个脚本运行后你会得到存活的URL列表带技术栈信息、历史URL列表、以及开放端口列表。实操心得第一次运行后将all_subs.txt保存下来。后续定期运行时可以与旧列表做diff快速发现新增资产这往往是漏洞高发区。4.2 第二阶段针对性漏洞扫描与敏感信息挖掘接下来基于第一阶段的成果进行深度扫描。创建scan.sh。#!/bin/bash OUTPUT_DIR./scan_results ALIVE_URLS$OUTPUT_DIR/alive_urls_clean.txt HISTORY_URLS$OUTPUT_DIR/wayback_urls.txt echo [*] 使用Nuclei进行针对性漏洞扫描... # 先进行全技术栈的快速扫描抓取低垂果实 nuclei -l $ALIVE_URLS -severity low,medium,high,critical -etags dos -o $OUTPUT_DIR/nuclei_quick.txt -silent # 根据技术栈进行精准扫描示例如果发现Jenkins if grep -qi “jenkins” $OUTPUT_DIR/httpx.json; then echo “[] 检测到Jenkins进行针对性扫描...” nuclei -l $ALIVE_URLS -t /nuclei-templates/technologies/jenkins-*.yaml -o $OUTPUT_DIR/nuclei_jenkins.txt -silent fi echo “[*] 进行目录与文件爆破针对高价值目标…” # 选取状态码为200的根域名进行深度目录扫描 cat $OUTPUT_DIR/httpx.json | jq ‘select(.status_code 200) | .url’ | sed ‘s|/$||’ | head -20 $OUTPUT_DIR/priority_targets.txt while read url; do domain$(echo $url | sed ‘s|https\?://||’ | cut -d’/’ -f1) ffuf -w /path/to/wordlists/common.txt -u $url/FUZZ -fc 403,404 -o $OUTPUT_DIR/ffuf_$domain.json -of json -silent done $OUTPUT_DIR/priority_targets.txt echo “[*] 从JS文件中寻找敏感信息…” # 1. 收集JS文件链接 cat $HISTORY_URLS $ALIVE_URLS | grep -E “\.js($|\?)” | sort -u $OUTPUT_DIR/js_files.txt # 2. 下载并分析使用LinkFinder mkdir -p $OUTPUT_DIR/jsanalysis while read js; do filename$(echo $js | sha256sum | cut -d’ ‘ -f1) curl -s $js | tee $OUTPUT_DIR/jsanalysis/$filename.js | python3 /path/to/LinkFinder/linkfinder.py -i - -o cli | tee -a $OUTPUT_DIR/js_endpoints.txt done $OUTPUT_DIR/js_files.txt echo “[!] 第二阶段扫描完成。重点查看 nuclei_*.txt 和 js_endpoints.txt。”注意事项nuclei扫描非常高效但务必注意速率限制不要对目标造成压力。可以使用-rate-limit参数。ffuf爆破时-fc过滤状态码和-fs过滤返回大小是减少噪音的关键需要根据目标的实际情况调整。4.3 第三阶段定制化验证与逻辑漏洞探测这一阶段需要更多手动交互和定制脚本。例如发现一个用户查询APIGET /api/v1/user?idid。编写IDOR测试脚本(test_idor.py)import requests import sys def test_idor(base_url, start_id, end_id, auth_cookie): headers {‘Cookie’: auth_cookie} vulnerable_ids [] for user_id in range(start_id, end_id 1): url f”{base_url}?id{user_id}” try: resp requests.get(url, headersheaders, timeout10) if resp.status_code 200: # 这里可以加入更复杂的逻辑比如对比响应内容是否包含敏感信息 print(f”[] ID {user_id} 可访问: {len(resp.text)} 字节”) vulnerable_ids.append(user_id) elif resp.status_code ! 403 and resp.status_code ! 404: print(f”[?] ID {user_id} 返回非常见状态码: {resp.status_code}”) except Exception as e: print(f”[-] 测试ID {user_id} 时出错: {e}”) return vulnerable_ids if __name__ “__main__”: if len(sys.argv) ! 5: print(“用法: python test_idor.py base_url start_id end_id cookie”) sys.exit(1) base_url sys.argv[1] start_id int(sys.argv[2]) end_id int(sys.argv[3]) cookie sys.argv[4] results test_idor(base_url, start_id, end_id, cookie) print(f”\n[!] 测试完成。可能易受攻击的ID: {results}”)SSRF自动化探测利用Interactsh客户端批量替换请求中的URL参数。可以结合ffuf和qsf等工具将目标请求中的参数值替换为你的Interactsh域名然后重放请求并监控Interactsh控制台是否有回调。这个阶段的自动化更多是“半自动”。脚本帮你完成重复的请求和初步判断但最终的漏洞确认、影响评估和利用链构造必须由你人工完成。5. 效率提升心法与避坑指南掌握了流程和工具最后分享一些决定你能否真正“高效刷洞”的心法和必须避开的坑。5.1 心法思维比工具更重要理解业务逻辑花时间使用目标应用。注册账号走一遍核心流程下单、支付、上传、分享。自动化脚本发现的异常参数或端点只有放在业务逻辑里才能判断其真正危害。一个修改商品价格的参数比一个无关紧要的配置参数价值高得多。关注“新”与“旧”“新”指新增的资产、功能、API“旧”指被遗忘的旧子系统、归档页面、历史端点。这两处都是安全防护的薄弱点。你的资产监控diff脚本和Waybackurls就是为了捕捉它们。漏洞链思维单个低危漏洞可能不值钱但如果你能发现一个信息泄露低危导致获取用户列表中危再结合一个密码重置逻辑缺陷高危就能实现账户接管严重。自动化报告要能帮你关联这些点。阅读优秀的漏洞报告在HackerOne、Bugcrowd的公开报告中学习别人的思路。看他们如何从一个小发现如一个JS文件一步步深入最终挖到严重漏洞。这能训练你的“漏洞嗅觉”。5.2 避坑指南那些我踩过的雷速率限制与封禁这是新手最容易犯的错。无节制的疯狂扫描会迅速触发目标的WAF或速率限制导致你的IP被拉黑。始终在脚本中加入随机延迟time.sleep(random.uniform(1, 3))并控制并发线程数。对于重要目标考虑使用住宅代理池在规则允许的前提下但成本较高。误报的海洋nuclei和ffuf会产生大量误报。不要直接提交扫描器结果。必须人工验证。验证步骤包括确认漏洞是否存在、是否可稳定复现、评估实际影响是仅影响自身还是其他用户、编写清晰的复现步骤PoC。一个经过验证的中危漏洞比十个未验证的高危误报更有价值。违反项目规则每个赏金平台和每个具体项目都有严格的规则Scope。绝对不要测试范围外的资产如*.example-app.com通常不包括api.example-app.com如果未明确列出。不要进行拒绝服务DoS测试、社工攻击、物理安全测试等违规操作。轻则报告被拒重则被平台封号。工具依赖与更新工具链需要维护。定期更新nuclei-templates、wordlists和工具本身。一个过时的漏洞模板可能完全无效。建议将你的工具环境容器化如使用Docker便于复现和更新。忽略低危/信息泄露漏洞虽然奖金少但它们是绝佳的“支点”。泄露的API密钥、内部域名、员工邮箱、源码片段常常能为后续的高危漏洞挖掘打开突破口。建立一个笔记系统将这些信息碎片收集起来并尝试拼凑。5.3 可持续的自动化将流程产品化当你积累了一套成熟的脚本后可以考虑将其“产品化”配置化管理将所有目标、API密钥、自定义字典路径写入一个YAML或JSON配置文件主脚本读取配置运行。任务调度使用cronLinux或Task SchedulerWindows定时运行资产监控脚本发现变化后自动发送通知如Telegram Bot。报告生成编写一个报告生成脚本将各个工具的输出nuclei结果、ffuf发现的敏感目录、自定义脚本的发现汇总到一个格式美观的HTML或Markdown报告中并自动按风险等级排序。结果去重与关联对于多次扫描的结果使用脚本进行去重并将同一资产的不同发现关联在一起形成完整的资产漏洞视图。真正的“高效”不是追求完全无人干预而是通过自动化把你从重复劳动中解放出来让你能更专注于需要人类智慧和创造力的部分——漏洞的逻辑分析与利用。这套策略和实战经验是我从无数个夜晚的测试和提交中总结出来的它不能保证你一夜暴富但能系统性地提升你发现漏洞的效率和概率。剩下的就需要你的耐心、坚持和不断学习的好奇心了。