{/* This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. */}
Web Pentest
授权 Web 渗透测试:侦察、基于证据的利用、报告。
Skill 元数据
| 来源 | 可选 — 通过 hermes skills install official/security/web-pentest 安装 |
| 路径 | optional-skills/security/web-pentest |
| 版本 | 1.0.0 |
| 作者 | Teknium (teknium1), Hermes Agent |
| 许可证 | MIT |
| 平台 | linux, macos |
| 标签 | Security, Pentest, Web, Recon |
参考:完整 SKILL.md
以下是 Hermes 在触发此 skill 时加载的完整 skill 定义。这是 skill 激活时 agent 所看到的指令内容。
Web 应用渗透测试
一套分阶段的 Web 应用渗透测试工作流。改编自 Shannon 的流水线(Keygraph,AGPL——仅借鉴概念,未借用代码)。围绕三条规则构建:
- 无利用、不报告——每个发现都要有可复现证据。
- 范围受限——每个主动请求都打在操作者预先声明的目标上。拒绝范围外主机。
- 在误报排除之前先穷尽绕过——在你试完绕过集合之前,一个“被拦截”的 payload 不等于清白。
⚠️ 硬性护栏——每次开工前必读
违反其中任何一条都会使本次委托作废,且可能违法。
-
授权关卡。 在一个会话的第一次主动扫描之前,你必须以书面形式向用户确认:他们拥有该目标,或已获得测试该目标的书面授权。把确认记录到
engagement/authorization.md(见模板)。无确认 → 不主动扫描。用curl读公开页面可以;发送 payload 不行。 -
范围白名单。 维护
engagement/scope.txt——每行一个主机名或 CIDR。每个nmap、curl、whatweb、浏览器导航或带 payload 的请求都必须打在 scope 内的条目上。如果目标把你重定向到范围外(3xx 到另一主机、HTML 里的链接),停下并向用户确认后再跟随。 -
无书面授权不碰生产系统。 如果用户没说“是的,生产在范围内,我有书面签字”,就默认不在。默认目标是 staging、本地 docker、专用测试实例。
-
云元数据默认关闭。 不要探测
169.254.169.254、metadata.google.internal、100.100.100.200、[fd00:ec2::254]或等效地址,除非委托明确把“SSRF 到元数据”列为目标且目标是你自己控制的。agent 的浏览器工具能从你自己的基础设施内部访问这些——不要这么做。 -
破坏性 payload 需批准。 DROP/DELETE 的 SQLi payload、写文件的 SSTI、带
rm/shutdown/mkfs的命令注入、任何会改动超过一行测试数据的操作 → 先问。approval.py系统能拦住一部分;别只靠它。 -
辅助客户端泄漏风险(Hermes 特有)。 此 skill 会产生满是 SQLi/XSS/RCE payload、截获凭据、JWT 令牌的会话。Hermes 的压缩和标题生成路径会通过辅助客户端(通常是主模型)重放历史。你写入对话的任何敏感内容都可能在下一次压缩时离开本机。缓解措施:
- 截获的令牌/凭据在写入任何消息前,脱敏为最后 6 个字符。完整值放
engagement/evidence/文件,绝不进聊天历史。 - 如果委托敏感,在会话期间把
~/.hermes/config.yaml里的auxiliary.title_generation.enabled设为false。
- 截获的令牌/凭据在写入任何消息前,脱敏为最后 6 个字符。完整值放
-
自我限速。 对任一单主机的主动请求默认间隔 200ms。
recon-scan.sh脚本强制执行这一点。未经操作者批准不要绕过。 -
报告的权威性。 此 skill 产出的是安全评估,而不是“通过”。即使干净跑完,也是“在时间 T 内、用方法 Y、在范围 X 内未发现可利用问题”——而不是“该应用是安全的”。报告中沿用这种措辞。
阶段 0:委托准备
在任何扫描之前,创建委托目录和授权确认。
ENGAGEMENT=engagement-$(date +%Y%m%d-%H%M%S)
mkdir -p "$ENGAGEMENT"/{evidence,findings,reports}
cd "$ENGAGEMENT"
-
逐字询问用户:
“确认:(a) 目标 URL 为 [X],(b) 你拥有此应用或已获得测试它的书面授权,(c) 本次委托可从现在起运行至多 [N] 小时。回复 'authorized' 以继续。”
-
等待明确的
authorized回复。 任何其他回答都意味着停下。 -
把授权记录到
engagement/authorization.md,使用templates/authorization.md中的模板。包括:- 目标 URL 与 IP
- 授权依据(所有权 / 来自 $name 的书面授权)
- 委托时间窗
- 范围外事项(生产、第三方服务等)
- 操作者姓名(驱动本会话的用户)
-
编写 scope.txt:
localhost 127.0.0.1 staging.example.com 192.168.1.0/24 # 仅限内部实验室,需操作者同意 -
在发出第一个主动请求前阅读
references/scope-enforcement.md——该文档有你在每条命令/URL 发出前应用的主机提取规则。
阶段 1:预侦察(代码分析,可选)
无源码访问时跳过(黑盒委托)。
若你对应用源码有读权限:
- 画架构图 — 框架、路由、中间件栈
- 盘点 sink — 每个
execute(、os.system(、eval(、模板渲染、文件读写、重定向目标 - 梳理认证 — 会话 cookie vs JWT、OAuth 流程、密码重置、特权端点
- 识别信任边界 — 哪些已认证、哪些没有、哪些来自
request.* - 从每个 sink 反向污点追踪到请求源。发现得当的净化(参数化查询、白名单、
shlex.quote、知名转义器)时提前终止。
输出:evidence/pre-recon.md——架构图、sink 清单、疑似脆弱代码路径。
这是离线工作。不对目标发流量。
阶段 2:侦察(在线、只读)
绘制攻击面。所有请求都是对公开页面的 GET,暂无 payload。仍受范围约束。
-
验证范围。 把每个目标主机名解析为 IP。确认 IP 在范围内(避免“DNS 指到了意外地方”的坑)。
-
网络面(仅当 scope 允许端口扫描):
nmap -sT -T3 --top-ports 100 -oN evidence/nmap.txt $TARGET用
-T3(默认),不要用-T4/-T5。更隐蔽,避免在共享环境触发 IDS/IPS。 -
技术指纹:
whatweb -v $TARGET_URL > evidence/whatweb.txt curl -sIk $TARGET_URL > evidence/headers.txt -
端点发现:
- 用浏览器工具爬应用(
browser_navigate、browser_get_images、跟随链接)。 - 检查
robots.txt、sitemap.xml、.well-known/*。 - 通过浏览器工具的开发者工具网络面板捕获 XHR/fetch 调用。
- 用浏览器工具爬应用(
-
认证面: 识别登录、注册、密码重置、会话 cookie 名、令牌格式。暂不发送凭据——只观察。
-
与预侦察关联(若有源码)。对
evidence/pre-recon.md中每个发现,标注在线面是否确认它可达。
输出:evidence/recon.md——端点、技术、认证模型、输入向量。
阶段 3:漏洞分析
每个漏洞类一个 delegate_task。每个 agent 读 evidence/recon.md(如有 evidence/pre-recon.md 也读),用 templates/exploitation-queue.json 产出 findings/<class>-queue.json。
用 delegate_task 派这些聚焦子 agent(尽可能并行):
| 类别 | 目标 | 参考 |
|---|---|---|
injection | SQLi、命令、路径穿越、SSTI、LFI/RFI、反序列化 | references/vuln-taxonomy.md(slot 类型) |
xss | 反射型、存储型、DOM 型 | references/vuln-taxonomy.md(渲染上下文) |
auth | 登录绕过、JWT 混淆、会话固定、OAuth 缺陷 | references/exploitation-techniques.md |
authz | IDOR、纵向/横向提权、业务逻辑 | references/exploitation-techniques.md |
ssrf | 内部可达性、元数据、协议走私 | 除非明确授权否则跳过元数据 |
infra | 错误配置、信息泄露、默认凭据、暴露的管理后台 | references/exploitation-techniques.md |
每个队列条目含:id、漏洞类、来源(文件:行号,若已知)、端点、参数、slot 类型、疑似防护、结论(identified / partial / confirmed / critical)、见证 payload、置信度(0-1)、备注。
分析阶段还不发送恶意 payload——只是 staging。利用阶段才真正发射。
阶段 4:利用(基于证据、有条件)
仅当分析队列有可执行条目(identified 或 partial)时,才为该类别跑子 agent。
对每个候选:
- 发送前检查 — 主机在范围内?认证关卡满足?破坏性 payload 是否已批准?
- 发送见证 payload — 最小证据。SQLi:
' AND 1=1--然后' AND 1=2--。XSS:一个无害标记如<svg/onload=console.log("HERMES-PENTEST-XSS")>。存储型 XSS 绝不用alert(1)——在共享环境里它会为其他用户触发。 - 验证见证触发 — 对盲注,用 sleep 探测(
SLEEP(5))并计时响应。对 SSRF,用你自己控制的回调主机(敏感委托不要用 webhook.site 这类公共服务——那是外带路径)。 - 提升级别:
- L1 Identified — 模式匹配,无行为变化
- L2 Partial — 到达 sink,但防护在位
- L3 Confirmed — payload 以可观察方式改变了应用行为
- L4 Critical — 数据被取出、代码被执行、权限被提升
- 在判为 FP 之前先穷尽绕过。 对每个被拦的候选:至少试
references/bypass-techniques.md中该类的绕过集合。只有穷尽集合后才能写verdict: false_positive。 - 为每个 L3/L4 记录证据:
- 完整请求(方法、URL、头、体)
- 响应(状态、头、相关响应体片段)
- 复现命令(curl 单行)
- 影响陈述
输出:findings/exploitation-evidence.md
证据文件中脱敏:
- 任何截获的凭据/令牌 → 聊天里只留最后 6 字符;完整值放
findings/secrets-vault.md(gitignore)。 - 其他用户的 PII → 脱敏。
- 你自己的测试凭据 → 可保留。
阶段 5:报告
用 templates/pentest-report.md 生成最终报告。章节:
- 执行摘要
- 委托范围(来自
engagement/scope.txt) - 授权(来自
engagement/authorization.md) - 发现(仅 L3/L4——需证据)。每个发现:
- 标题、严重度(CVSS 3.1)、CWE
- 受影响端点
- 证据(请求 + 响应片段)
- 复现步骤
- 影响
- 修复建议
- 未利用候选(L1/L2,附是什么拦住了它们的说明)
- 范围外观察
- 使用的方法论 / 工具
- 限制与未测试项
严重度政策: CVSS 仅用于 L3/L4。L1/L2 是“待验证候选”——不要给未验证发现分配 CVSS。
何时停止
- 用户撤销授权。
- 某候选发现明显影响生产数据,而你没有破坏性测试批准——停下并询问。
- 目标开始返回 503/429 风暴——退避,与操作者重新协商。
- 你发现了合同范围之外的东西(如测试无关端点时暴露的客户数据库)。停下、记录、报告给操作者。未经明确批准不要 pivot——正是这种 pivot 让渗透测试变成非法。
此 skill 不覆盖的内容
- 端口扫描之外的网络层渗透(不做 Metasploit、Cobalt Strike、AD 攻击、网络协议 fuzzing)。
- 逆向工程 / 二进制分析(见 issue #383)。
- 纯源码静态分析(见 issue #382)。
- 主动社工 / 钓鱼。
- 针对操作者未预先授权的系统的任何操作。
如果委托需要以上任何一项,升级给专业渗透测试人员。此 skill 是专业渗透的补充,不能替代。
延伸阅读
references/scope-enforcement.md— 如何给每个主动请求划界references/vuln-taxonomy.md— slot 类型、渲染上下文、OWASP 映射references/exploitation-techniques.md— 各类 payload 模式references/bypass-techniques.md— 常见 WAF/过滤器绕过templates/authorization.md— 委托授权模板templates/pentest-report.md— 最终报告模板templates/exploitation-queue.json— 各类发现队列 schemascripts/recon-scan.sh— 限速的 nmap+whatweb+headers 封装