{/* 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

INFO

以下是 Hermes 在触发此 skill 时加载的完整 skill 定义。这是 skill 激活时 agent 所看到的指令内容。

Web 应用渗透测试

一套分阶段的 Web 应用渗透测试工作流。改编自 Shannon 的流水线(Keygraph,AGPL——仅借鉴概念,未借用代码)。围绕三条规则构建:

  1. 无利用、不报告——每个发现都要有可复现证据。
  2. 范围受限——每个主动请求都打在操作者预先声明的目标上。拒绝范围外主机。
  3. 在误报排除之前先穷尽绕过——在你试完绕过集合之前,一个“被拦截”的 payload 不等于清白。

⚠️ 硬性护栏——每次开工前必读

违反其中任何一条都会使本次委托作废,且可能违法。

  1. 授权关卡。 在一个会话的第一次主动扫描之前,你必须以书面形式向用户确认:他们拥有该目标,或已获得测试该目标的书面授权。把确认记录到 engagement/authorization.md(见模板)。无确认 → 不主动扫描。用 curl 读公开页面可以;发送 payload 不行。

  2. 范围白名单。 维护 engagement/scope.txt——每行一个主机名或 CIDR。每个 nmap、curl、whatweb、浏览器导航或带 payload 的请求都必须打在 scope 内的条目上。如果目标把你重定向到范围外(3xx 到另一主机、HTML 里的链接),停下并向用户确认后再跟随。

  3. 无书面授权不碰生产系统。 如果用户没说“是的,生产在范围内,我有书面签字”,就默认不在。默认目标是 staging、本地 docker、专用测试实例。

  4. 云元数据默认关闭。 不要探测 169.254.169.254、metadata.google.internal、100.100.100.200、[fd00:ec2::254] 或等效地址,除非委托明确把“SSRF 到元数据”列为目标且目标是你自己控制的。agent 的浏览器工具能从你自己的基础设施内部访问这些——不要这么做。

  5. 破坏性 payload 需批准。 DROP/DELETE 的 SQLi payload、写文件的 SSTI、带 rm/shutdown/mkfs 的命令注入、任何会改动超过一行测试数据的操作 → 先问。approval.py 系统能拦住一部分;别只靠它。

  6. 辅助客户端泄漏风险(Hermes 特有)。 此 skill 会产生满是 SQLi/XSS/RCE payload、截获凭据、JWT 令牌的会话。Hermes 的压缩和标题生成路径会通过辅助客户端(通常是主模型)重放历史。你写入对话的任何敏感内容都可能在下一次压缩时离开本机。缓解措施:

    • 截获的令牌/凭据在写入任何消息前,脱敏为最后 6 个字符。完整值放 engagement/evidence/ 文件,绝不进聊天历史。
    • 如果委托敏感,在会话期间把 ~/.hermes/config.yaml 里的 auxiliary.title_generation.enabled 设为 false。
  7. 自我限速。 对任一单主机的主动请求默认间隔 200ms。recon-scan.sh 脚本强制执行这一点。未经操作者批准不要绕过。

  8. 报告的权威性。 此 skill 产出的是安全评估,而不是“通过”。即使干净跑完,也是“在时间 T 内、用方法 Y、在范围 X 内未发现可利用问题”——而不是“该应用是安全的”。报告中沿用这种措辞。


阶段 0:委托准备

在任何扫描之前,创建委托目录和授权确认。

ENGAGEMENT=engagement-$(date +%Y%m%d-%H%M%S)
mkdir -p "$ENGAGEMENT"/{evidence,findings,reports}
cd "$ENGAGEMENT"
  1. 逐字询问用户:

    “确认:(a) 目标 URL 为 [X],(b) 你拥有此应用或已获得测试它的书面授权,(c) 本次委托可从现在起运行至多 [N] 小时。回复 'authorized' 以继续。”

  2. 等待明确的 authorized 回复。 任何其他回答都意味着停下。

  3. 把授权记录到 engagement/authorization.md,使用 templates/authorization.md 中的模板。包括:

    • 目标 URL 与 IP
    • 授权依据(所有权 / 来自 $name 的书面授权)
    • 委托时间窗
    • 范围外事项(生产、第三方服务等)
    • 操作者姓名(驱动本会话的用户)
  4. 编写 scope.txt:

    localhost
    127.0.0.1
    staging.example.com
    192.168.1.0/24    # 仅限内部实验室,需操作者同意
    
  5. 在发出第一个主动请求前阅读 references/scope-enforcement.md——该文档有你在每条命令/URL 发出前应用的主机提取规则。


阶段 1:预侦察(代码分析,可选)

无源码访问时跳过(黑盒委托)。

若你对应用源码有读权限:

  1. 画架构图 — 框架、路由、中间件栈
  2. 盘点 sink — 每个 execute(、os.system(、eval(、模板渲染、文件读写、重定向目标
  3. 梳理认证 — 会话 cookie vs JWT、OAuth 流程、密码重置、特权端点
  4. 识别信任边界 — 哪些已认证、哪些没有、哪些来自 request.*
  5. 从每个 sink 反向污点追踪到请求源。发现得当的净化(参数化查询、白名单、shlex.quote、知名转义器)时提前终止。

输出:evidence/pre-recon.md——架构图、sink 清单、疑似脆弱代码路径。

这是离线工作。不对目标发流量。


阶段 2:侦察(在线、只读)

绘制攻击面。所有请求都是对公开页面的 GET,暂无 payload。仍受范围约束。

  1. 验证范围。 把每个目标主机名解析为 IP。确认 IP 在范围内(避免“DNS 指到了意外地方”的坑)。

  2. 网络面(仅当 scope 允许端口扫描):

    nmap -sT -T3 --top-ports 100 -oN evidence/nmap.txt $TARGET
    

    用 -T3(默认),不要用 -T4/-T5。更隐蔽,避免在共享环境触发 IDS/IPS。

  3. 技术指纹:

    whatweb -v $TARGET_URL > evidence/whatweb.txt
    curl -sIk $TARGET_URL > evidence/headers.txt
    
  4. 端点发现:

    • 用浏览器工具爬应用(browser_navigate、browser_get_images、跟随链接)。
    • 检查 robots.txt、sitemap.xml、.well-known/*。
    • 通过浏览器工具的开发者工具网络面板捕获 XHR/fetch 调用。
  5. 认证面: 识别登录、注册、密码重置、会话 cookie 名、令牌格式。暂不发送凭据——只观察。

  6. 与预侦察关联(若有源码)。对 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(尽可能并行):

类别目标参考
injectionSQLi、命令、路径穿越、SSTI、LFI/RFI、反序列化references/vuln-taxonomy.md(slot 类型)
xss反射型、存储型、DOM 型references/vuln-taxonomy.md(渲染上下文)
auth登录绕过、JWT 混淆、会话固定、OAuth 缺陷references/exploitation-techniques.md
authzIDOR、纵向/横向提权、业务逻辑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。

对每个候选:

  1. 发送前检查 — 主机在范围内?认证关卡满足?破坏性 payload 是否已批准?
  2. 发送见证 payload — 最小证据。SQLi:' AND 1=1-- 然后 ' AND 1=2--。XSS:一个无害标记如 <svg/onload=console.log("HERMES-PENTEST-XSS")>。存储型 XSS 绝不用 alert(1)——在共享环境里它会为其他用户触发。
  3. 验证见证触发 — 对盲注,用 sleep 探测(SLEEP(5))并计时响应。对 SSRF,用你自己控制的回调主机(敏感委托不要用 webhook.site 这类公共服务——那是外带路径)。
  4. 提升级别:
    • L1 Identified — 模式匹配,无行为变化
    • L2 Partial — 到达 sink,但防护在位
    • L3 Confirmed — payload 以可观察方式改变了应用行为
    • L4 Critical — 数据被取出、代码被执行、权限被提升
  5. 在判为 FP 之前先穷尽绕过。 对每个被拦的候选:至少试 references/bypass-techniques.md 中该类的绕过集合。只有穷尽集合后才能写 verdict: false_positive。
  6. 为每个 L3/L4 记录证据:
    • 完整请求(方法、URL、头、体)
    • 响应(状态、头、相关响应体片段)
    • 复现命令(curl 单行)
    • 影响陈述

输出:findings/exploitation-evidence.md

证据文件中脱敏:

  • 任何截获的凭据/令牌 → 聊天里只留最后 6 字符;完整值放 findings/secrets-vault.md(gitignore)。
  • 其他用户的 PII → 脱敏。
  • 你自己的测试凭据 → 可保留。

阶段 5:报告

用 templates/pentest-report.md 生成最终报告。章节:

  1. 执行摘要
  2. 委托范围(来自 engagement/scope.txt)
  3. 授权(来自 engagement/authorization.md)
  4. 发现(仅 L3/L4——需证据)。每个发现:
    • 标题、严重度(CVSS 3.1)、CWE
    • 受影响端点
    • 证据(请求 + 响应片段)
    • 复现步骤
    • 影响
    • 修复建议
  5. 未利用候选(L1/L2,附是什么拦住了它们的说明)
  6. 范围外观察
  7. 使用的方法论 / 工具
  8. 限制与未测试项

严重度政策: 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 — 各类发现队列 schema
  • scripts/recon-scan.sh — 限速的 nmap+whatweb+headers 封装