基于HackerOne实战报告构建AI安全测试技能库:从模式蒸馏到自动化漏洞挖掘
1. 项目概述:从实战报告提炼的AI安全测试技能库
如果你是一名安全研究员、渗透测试工程师,或者正在参与合法的漏洞赏金计划,你肯定遇到过这样的困境:面对一个庞大的Web应用或API接口,常规的扫描器跑一遍后,除了几个低危的XSS或信息泄露,很难挖到那些真正有价值、能获得高额赏金的高危漏洞。手动测试又像大海捞针,经验不足时很容易错过关键的攻击面。最近,我在研究如何让AI辅助安全测试时,发现了一个非常有意思的项目:instavm/security-skills。这个项目没有复杂的代码,它的核心是一系列精心设计的“技能”(Skills),专门用来“教会”像Claude Code、Gemini CLI这类支持MCP(Model Context Protocol)或自定义技能的AI代理,如何像经验丰富的白帽子一样去发现真实的安全漏洞。
这个项目的独特之处在于,它的知识不是来自教科书或理论,而是直接源于对4000多份已公开且获得赏金的HackerOne漏洞报告的深度分析。想象一下,这相当于把全球顶尖白帽子在真实战场上成功攻破目标的战术、技巧和思维模式,提炼成了AI可以理解和执行的标准化操作流程。它不是简单地把几千份报告丢给AI去“阅读”,而是由安全专家将这些报告中的高价值模式、常见漏洞的触发条件、关键的请求/响应特征,以及绕过技巧,浓缩成了一个个可执行的“技能”提示。对于安全从业者来说,这就像一个随时在线的、精通多种漏洞挖掘流派的专家助手,能帮你从捕获的海量流量中,快速定位那些可能藏着“大鱼”的异常点。
2. 核心设计思路:从“数据投喂”到“模式蒸馏”
传统的让AI辅助安全测试的方法,要么是让AI去学习大量的安全知识文档,要么是直接将漏洞报告全文作为上下文输入。前者过于理论化,缺乏实战针对性;后者则面临上下文窗口有限、信息噪音过大的问题。instavm/security-skills项目采用了一种更聪明、更高效的思路:模式蒸馏与场景化引导。
2.1 为何选择“技能”而非“报告库”?
项目作者明确指出了核心设计哲学:与其将数千份漏洞报告直接塞给AI(这会导致上下文爆炸且重点模糊),不如由人类专家先进行深度分析和归纳。每一份成功的漏洞报告都是一个完整的攻击案例,其中包含了攻击路径、利用的请求参数、服务器的异常响应等关键信息。通过分析4000多个案例,可以提取出跨应用的、普适性的漏洞模式。
例如,对于IDOR(不安全的直接对象引用)漏洞,虽然每个案例中的对象ID(如user_id=12345)不同,但攻击模式是相似的:尝试遍历ID、尝试访问其他用户的资源、尝试修改请求中的ID参数等。项目中的mitm-find-idor技能,就是将这些共同模式提炼成了一系列具体的检查项和搜索模式,告诉AI:“当你分析流量时,应该重点查看哪些参数,尝试做哪些替换,并关注哪些响应特征。”
这种做法的优势非常明显:
- 降低AI认知负荷:AI无需理解每份报告的完整背景,只需执行清晰、具体的检查指令。
- 提升精准度:技能聚焦于高回报的漏洞类型,避免了AI在无关紧要的细节上浪费时间。
- 标准化输出:每个技能都结构化了输出格式,包括漏洞描述、发现位置、严重等级、复现步骤等,便于测试人员快速验证和报告撰写。
2.2 技能构成要素解析
每个技能文件(如SKILL.md)都是一个自包含的、指导AI行动的“剧本”。根据项目描述和常见实践,一个完整的技能通常包含以下核心部分:
- 漏洞模式描述:用简洁的语言定义该类型漏洞是什么,以及它在HTTP请求/响应中通常如何体现。
- 关键特征与正则模式:提供用于在流量日志(如mitmproxy捕获的数据)中进行模式匹配的grep命令或正则表达式。例如,寻找可能是用户ID的参数名(
/user_id|uid|id=/i),或寻找包含敏感信息的JSON响应键名(/ssn|credit_card|password/i)。 - 测试方法论:给出具体的、循序渐进的测试步骤。例如对于IDOR,可能会指导AI:“首先,列出所有包含数字ID的请求;其次,尝试将这些ID递增/递减;然后,尝试在另一个已认证会话的请求中替换该ID。”
- cURL示例:提供可以直接复制粘贴用于验证漏洞的cURL命令模板,这是将发现转化为可验证POC的关键。
- 严重性评估指南:告诉AI如何根据漏洞的影响范围(数据泄露、权限提升、资金损失等)来评估漏洞的严重等级(高危、中危、低危)。
- 误报排除建议:这是体现经验价值的部分。例如,提示AI:“如果修改ID后返回的是通用的‘404 Not Found’或‘403 Forbidden’,这可能只是正常的访问控制,而非IDOR。真正的IDOR通常会返回其他用户的数据,或成功执行了本不应允许的操作。”
注意:技能文件的质量直接决定了AI助手的能力上限。一个优秀的技能,是安全专家实战经验的结晶,它不仅仅是一个检查清单,更包含了对边界情况的判断和对攻击逻辑的深刻理解。
3. 技能库详解与实战应用场景
该项目提供了覆盖主流Web漏洞类型的十多个技能。了解每个技能的目标,能帮助我们在实战中更精准地调用AI助手。下面我将对其中的核心技能进行拆解,并说明它们各自的应用场景。
3.1 核心漏洞挖掘技能
| 技能名称 | 核心目标 | 典型应用场景与AI检查思路 |
|---|---|---|
mitm-find-idor | 发现不安全的直接对象引用。这是越权漏洞的经典形式。 | AI会扫描所有请求,寻找像user_id,account_id,order_id,file_id这类参数。它会尝试进行ID遍历(如12345 -> 12346)、横向替换(在A用户的请求中使用B用户的ID)、或测试是否缺少对ID所属对象的权限校验。重点观察响应内容是否包含了非当前用户的数据。 |
mitm-find-auth | 检测认证与授权缺陷。 | AI会检查:1. 是否存在无需认证即可访问的敏感端点;2. 认证令牌(JWT, Session Cookie)是否在HTTPS下传输、是否设置了安全标志(Secure, HttpOnly);3. 低权限用户是否能访问高权限API(垂直越权);4. 密码重置、邮箱修改等流程是否存在逻辑缺陷可被绕过。 |
mitm-find-ssrf | 挖掘服务器端请求伪造漏洞。 | AI会寻找所有接受URL或主机名作为参数的请求,例如url=,image=,proxy=,webhook=。它会尝试让服务器向内部网络(如127.0.0.1,169.254.169.254AWS元数据服务)或外部受控服务器发起请求,以探测内网服务和读取敏感数据。 |
mitm-find-sqli | 识别SQL注入模式。 | AI不仅会寻找经典的'或"引发的错误,还会检查请求中的数字型、时间盲注和布尔盲注的潜在点。它会分析参数值,尝试附加' OR '1'='1、' AND SLEEP(5)--等负载,并对比响应时间或内容的变化。 |
mitm-find-bizlogic | 发现业务逻辑漏洞。这类漏洞最难被自动化工具发现。 | AI需要理解业务流。例如,在支付流程中,检查是否可以通过修改金额参数(如amount=-0.01)实现零元购或获利;在优惠券系统中,检查是否可无限次使用单次券;在库存系统中,检查是否能在下单后、支付前超量锁定库存。这需要AI结合流量序列进行上下文分析。 |
3.2 信息泄露与配置审计技能
| 技能名称 | 核心目标 | 典型应用场景与AI检查思路 |
|---|---|---|
mitm-find-pii | 定位个人身份信息泄露。 | AI会扫描所有服务器响应(特别是JSON/XML格式),寻找如email,phone,address,id_card_number,real_name等字段。它也会检查错误信息中是否意外包含了用户数据,或检查文件下载接口是否未授权返回了含PII的文件。 |
mitm-find-secrets | 检测泄露的密钥与API令牌。 | AI使用一系列高精度正则表达式,匹配如AWS密钥对(AKIA[0-9A-Z]{16})、GitHub令牌(ghp_[a-zA-Z0-9]{36})、Slack令牌、数据库连接字符串等格式固定的秘密。这是“低垂的果实”,但往往能直接导致严重的安全事件。 |
mitm-find-insecure | 发现不安全的配置。 | AI会检查HTTP安全头是否缺失或配置不当,例如:Content-Security-Policy(CSP)是否缺失、X-Frame-Options是否未设置导致点击劫持、Strict-Transport-Security(HSTS)是否未启用。同时也会检查是否存在暴露的调试接口(如/debug,/phpinfo,/actuator)或使用过时/有漏洞的组件版本信息。 |
mitm-list-apis&mitm-subdomains | 资产发现与枚举。 | 这两个技能用于前期侦察。list-apis会从流量中提取所有唯一的API端点、方法和参数,帮助绘制应用接口地图。subdomains则分析流量中的主机名,可能发现开发、测试、管理后台等未在主域名宣传的子域,这些往往是安全薄弱点。 |
3.3 专项测试与报告生成
| 技能名称 | 核心目标 | 典型应用场景与AI检查思路 |
|---|---|---|
mitm-find-otp | 寻找OTP/双因素认证绕过漏洞。 | AI会分析短信/邮箱验证码、TOTP、或基于推送的2FA流程。检查点包括:验证码是否可暴力破解(长度、有效期、无锁定机制)、是否在响应中直接返回、是否可重放使用、是否可通过修改HTTP参数(如step=skip)或状态值直接跳过。 |
mitm-find-callback | 探测回调与Webhook安全问题。 | 在OAuth授权、支付通知等场景中,AI会检查回调URL参数是否可被篡改(导致授权码或令牌发送至攻击者服务器),以及Webhook端点是否缺少签名验证(导致伪造请求被接受)。 |
mitm-security-audit | 执行综合安全审计。 | 这是一个“组合技能”,通常会按顺序或并行调用上述多个核心技能,对目标进行一次全面的检查。它模拟了一个完整的手动测试流程,从信息收集到深度漏洞探测。 |
mitm-report | 生成结构化的安全报告。 | 在AI完成一系列检测后,此技能会指导它整理发现,按照漏洞类型、严重性、受影响端点、复现步骤、修复建议的格式,生成一份初步的安全报告草案,极大提升了渗透测试的报告撰写效率。 |
4. 环境搭建与实战操作全流程
理解了技能是什么之后,我们来看看如何将其部署到你的AI工作流中,并完成一次从流量捕获到漏洞分析的全过程。这里以结合mitmproxy和Claude Code(假设其支持MCP)为例,其他支持技能的AI代理操作逻辑类似。
4.1 技能安装与配置
项目推荐使用skills.sh这个工具进行一键安装,这确实是最方便的方法。
# 1. 安装技能管理工具(如果尚未安装) npm install -g @modelcontextprotocol/skills-cli # 2. 添加整个安全技能库 npx skills add instavm/security-skills执行上述命令后,技能库会被下载并安装到你的技能管理器中。如果你想先体验某个特定技能,也可以单独安装:
# 仅安装IDOR检测技能 npx skills add instavm/security-skills --skill mitm-find-idor对于像Gemini CLI这类将技能作为命令文件处理的代理,则需要手动将技能文件复制到特定目录:
# 创建命令目录 mkdir -p .gemini/commands # 遍历技能文件夹,将每个技能的SKILL.md复制为以技能名命名的.md文件 for d in skills/*/; do cp "$d/SKILL.md" ".gemini/commands/$(basename $d).md"; done这个操作的本质,是将每个结构化的技能提示,变成AI代理可以直接读取和执行的“命令文件”。
4.2 流量捕获:让mitmproxy成为你的数据源
安全测试的第一步是获取目标的流量数据。mitmproxy是一个强大的中间人代理工具,非常适合此任务。
# 启动mitmdump,捕获流量并保存到文件,同时输出详细日志 mitmdump -w traffic.mitm --set flow_detail=3 2>&1 | tee mitm.log &参数解析与实操要点:
-w traffic.mitm:将捕获的所有HTTP/HTTPS流量以mitmproxy原生格式保存到traffic.mitm文件。这种格式保留了完整的请求/响应二进制数据,便于后续精确分析。--set flow_detail=3:设置流量记录的详细程度为3(最高级别)。这确保了请求头、响应头、请求体、响应体都被完整记录。对于安全分析,尤其是检查响应中的敏感信息,这是必须的。2>&1 | tee mitm.log:将标准错误和标准输出都重定向,并通过tee命令同时显示在屏幕并保存到mitm.log文件。这个日志文件对于排查mitmproxy自身问题或查看解密HTTPS流量时的错误非常有用。&:让命令在后台运行,这样你就可以继续使用终端。
接下来,你需要配置你的浏览器或被测应用程序,使其代理流量通过mitmproxy。通常代理地址是http://localhost:8080。
重要提示:为了解密HTTPS流量,你必须在客户端(浏览器/系统)安装
mitmproxy的根证书。启动mitmproxy或mitmdump后,访问http://mitm.it,根据你的操作系统下载并安装证书。这是正常分析加密流量的前提,否则你只能看到一堆TLS握手记录。
4.3 模拟用户操作与流量收集
启动代理并配置好客户端后,就像正常用户一样去使用你的目标Web应用或APP。这个阶段的目标是尽可能覆盖多的功能点和用户角色(如果有多账号的话)。
操作建议:
- 完整走查核心业务流程:注册、登录、浏览商品、添加购物车、下单、支付(测试环境)、查看订单、修改个人信息、注销等。
- 切换用户视角:如果可能,使用两个不同的测试账号(如普通用户和管理员),分别进行操作。这能帮助AI更好地分析越权问题。
- 触发各种API调用:不要只停留在页面点击,多使用应用内的搜索、筛选、上传、提交等交互,这些都会产生API请求。
- 操作一段时间后,可以停止
mitmdump(使用fg命令调出后台任务,然后Ctrl+C),此时traffic.mitm文件就包含了你的所有操作流量。
4.4 启动AI代理并加载技能进行分析
现在,启动你的AI代理(这里以概念性命令为例,具体启动方式取决于你使用的AI代理工具),并让它加载我们捕获的流量文件进行分析。
# 假设你的AI代理命令是 `aisec` # 首先,让AI加载并解析捕获的流量文件 aisec load-traffic traffic.mitm # 然后,针对特定目标,调用安全技能进行分析 aisec execute-skill mitm-find-idor --target example.com aisec execute-skill mitm-find-auth --target example.com # 或者直接运行全面审计 aisec execute-skill mitm-security-audit --target example.com --output report.md在实际的AI代理中,交互可能更接近于自然语言。例如,在Claude Code的界面中,你可能会输入:
我已经通过mitmproxy捕获了目标网站 example.com 的流量,数据保存在 traffic.mitm 文件中。请你使用 security-skills 中的相关技能,帮我分析一下是否存在IDOR、越权以及敏感信息泄露等问题。一个集成了MCP技能的AI代理,在接收到这样的指令和文件后,就能够调用对应的mitm-find-idor等技能,自动执行我们前面提到的模式匹配、参数分析、逻辑推理等步骤,并将发现以结构化的形式呈现给你。
4.5 结果验证与报告整理
AI给出的结果是“可疑点”或“潜在漏洞”,而非最终结论。作为一名专业的安全测试人员,你必须对每一个发现进行手动验证。
- 复现漏洞:使用AI提供的cURL命令或类似工具,在浏览器外独立发起请求,确认漏洞是否真实存在,且稳定可复现。
- 评估影响:判断这个漏洞的实际危害。例如,一个IDOR是只能看到其他用户的昵称,还是能获取到手机号和邮箱?这决定了漏洞的严重等级。
- 排除误报:结合业务逻辑判断。例如,一个返回“403 Forbidden”的ID尝试,很可能只是正常的权限控制,而非漏洞。
- 整理报告:利用
mitm-report技能生成的草案,补充你的验证步骤、截图(如Burp Suite的请求响应)、影响评估和具体的修复建议,形成一份专业的漏洞报告。
5. 常见问题、排查技巧与实战心得
在实际集成和使用这类AI辅助安全技能的过程中,你可能会遇到一些典型问题。下面是我根据经验总结的排查思路和技巧。
5.1 技能执行效果不佳或无输出
可能原因及解决方案:
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| AI代理完全无法理解或执行技能命令。 | 1. AI代理不支持MCP或自定义技能模式。 2. 技能安装路径不正确,AI代理找不到技能文件。 3. 技能文件格式不符合该AI代理的要求。 | 1.确认代理支持性:查阅你使用的AI代理(如Claude Code, Gemini CLI)的官方文档,确认其是否支持以及如何加载外部技能或命令。 2.检查安装:运行 npx skills list查看已安装技能。确认instavm/security-skills在列表中。对于手动复制到.gemini/commands/的方式,检查文件是否成功复制且格式为.md。3.检查技能语法:不同的AI代理对技能提示词的格式要求可能不同。尝试打开一个技能的 .md文件,看其是否是纯自然语言指令,还是包含了特定模板标签。 |
| AI执行了技能,但输出“未发现任何问题”,而你手动检查却发现了漏洞。 | 1. 流量捕获不完整,关键请求(如AJAX、GraphQL)未被记录。 2. 技能中的正则模式或检查项与目标应用的技术栈不匹配。 3. AI的上下文理解有限,未能将流量与技能指令正确关联。 | 1.验证流量文件:使用mitmproxy自带的mitmdump -nr traffic.mitm -s script.py命令(需编写简单脚本)或直接使用mitmweb加载traffic.mitm文件,人工浏览确认关键操作(如支付、修改信息)的请求已被捕获。2.调整技能或手动引导:如果目标API使用GraphQL,技能中基于REST的参数名匹配可能失效。此时需要手动指导AI:“请重点分析所有发送到 /graphql端点的请求体,寻找可能包含用户ID的变量。”3.提供更精确的上下文:不要只说“分析流量”。可以更具体:“在 traffic.mitm文件中,请聚焦于域名api.example.com的所有请求,使用mitm-find-idor技能检查POST /v1/order和GET /v1/user/*这类端点。” |
5.2 流量捕获相关问题
HTTPS流量解密失败:这是最常见的问题。表现为traffic.mitm文件中大量请求的协议显示为TLS,无法看到具体的HTTP内容。
- 解决:确保已在客户端(浏览器/手机/模拟器)正确安装并信任了
mitmproxy的根证书。访问http://mitm.it下载证书,并按照指引完成安装(对于iOS/Android设备,可能需要手动在设置中信任证书)。同时,某些应用可能使用了证书绑定(SSL Pinning),需要额外的绕过手段,这超出了基础流量捕获的范围。
捕获的流量过多或过杂:如果测试的是大型应用,traffic.mitm文件可能包含大量静态资源(图片、CSS、JS)和第三方域名请求,干扰分析。
- 解决:使用
mitmdump的过滤选项。例如,mitmdump -w traffic.mitm --set flow_detail=3 -s filter_script.py,在filter_script.py中编写Python脚本,只拦截和保存你关心的目标域名请求。或者,在分析阶段让AI技能只针对特定域名(如--target example.com)进行分析。
5.3 提升AI辅助测试效率的心得
- “教”AI认识你的目标:在开始深度分析前,先让AI对目标有个整体了解。你可以先运行
mitm-list-apis和mitm-subdomains技能,生成一份API目录和子域名列表。基于这份列表,你再有针对性地指挥AI去测试可疑的端点。 - 分角色、分场景测试:不要混用流量。分别用“普通用户A”、“普通用户B”、“管理员C”的账号进行独立的操作和流量捕获,并保存为不同的文件(如
traffic_user_a.mitm,traffic_admin_c.mitm)。然后让AI对比分析这些文件,更容易发现越权问题。例如:“对比traffic_user_a.mitm和traffic_admin_c.mitm中访问/api/admin/users的请求和响应差异。” - 技能组合与迭代:AI的一次分析可能不全面。可以先运行
mitm-security-audit进行广谱扫描。然后针对它发现的“中危”或“需进一步调查”的点,再专门调用更精细的技能(如mitm-find-bizlogic)进行深度分析。 - 人工复核是关键:AI是强大的助手,但不是替代品。它擅长模式匹配和重复性劳动,但缺乏对复杂业务逻辑的深层理解和创造性思维。对于AI标记的“业务逻辑漏洞”,必须由测试人员结合对业务的理解进行最终判断。AI的结论永远是“线索”,而不是“定论”。
- 持续更新技能:漏洞利用技术在进化,新的攻击面也在不断出现。关注
instavm/security-skills项目的更新,及时获取新的技能。你也可以基于自己的测试经验,模仿现有技能的格式,为AI编写自定义技能,让它更贴合你常测的业务类型。
将instavm/security-skills这类项目集成到你的安全工作流中,本质上是在构建一个“经验外挂”。它不能替代你的专业知识和手动测试,但能极大提升你从海量数据中定位关键风险的效率,尤其适合在渗透测试的信息收集和初步漏洞筛查阶段使用。记住,最强大的工具始终是工具背后的人,你的判断力、创造力和对安全的执着,才是发现下一个关键漏洞的根本。
