跳到主要内容

Web Pentest

授权 Web 渗透测试:信息收集、基于证据的漏洞利用、报告。

技能元数据​

SourceOptional — 使用 hermes skills install official/security/web-pentest 安装
Pathoptional-skills/security\web-pentest
Version1.0.0
AuthorTeknium (teknium1), Hermes Agent
LicenseMIT
Platformslinux, macos
TagsSecurity, Pentest, Web, Recon

参考:完整的 SKILL.md​

信息

以下是 Hermes 在触发本技能时加载的完整技能定义。这就是技能激活时智能体所看到的指令。

Web 应用程序渗透测试

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

  1. 无利用,无报告 —— 每项发现都需要可复现的证据。
  2. 范围受限 —— 每个主动请求都必须针对操作者预先声明的目标。 范围外的主机会被拒绝。
  3. 在判定误报之前穷尽绕过手段 —— 一个“被拦截”的载荷, 在你尝试过整套绕过手段之前,不能算作清白健康。

⚠️ 硬性护栏 —— 每次交战前必读​

违反以下任何一条都将使交战无效,并可能违法。

  1. 授权关卡。 在一次会话中进行首次主动扫描之前,你必须 以书面形式与用户确认,他们拥有该目标的所有权或持有对其进行 测试的书面授权。将确认记录写入 engagement/authorization.md(参见模板)。没有确认 → 没有 主动扫描。使用 curl 读取公开页面是可以的;发送载荷则不行。

  2. 范围允许列表。 维护 engagement/scope.txt —— 每行一个主机名或 CIDR。每个 nmap、curl、whatweb、浏览器导航或携带有载荷的 请求,都必须针对范围中的某个条目。如果目标将你重定向到范围外 (3xx 到不同主机、HTML 中的链接),在跟随之前必须停止并与用户确认。

  3. 未经书面许可不得触碰生产系统。 如果用户没有告诉你 “是的,生产环境在范围内,并且我有书面签字确认”,就假设并非如此。 默认目标为预发布环境、本地 Docker、专用测试实例。

  4. 云元数据默认关闭。 除非交战明确将 SSRF 到元数据 作为目标,且目标是你的控制范围内的目标,否则不要探测 169.254.169.254、metadata.google.internal、100.100.100.200、 [fd00:ec2::254] 或等效地址。智能体的浏览器工具可以在你自己的 基础设施内部访问到这些地址 —— 不要这样做。

  5. 破坏性载荷需要批准。 会执行 DROP/DELETE 的 SQLi 载荷、 文件系统写入型 SSTI、带有 rm/shutdown/mkfs 的命令注入, 任何超出一行测试数据变动的操作 → 先询问。 approval.py 系统能捕获一部分;不要仅依赖它。

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

    • 在任何消息中记录捕获的令牌/凭据之前,将其脱敏至仅保留最后 6 个字符。 完整值写入 engagement/evidence/ 文件,绝不写入聊天历史。
    • 如果交战敏感,请在 ~/.hermes/config.yaml 中为本次会话设置 auxiliary.title_generation.enabled: false。
  7. 自我限速。 针对任一主机,主动请求之间默认间隔 200ms。 recon-scan.sh 脚本会强制执行此限制。未经操作者批准不得绕过。

  8. 报告的权威性。 本技能产出的是安全评估,而非“通过”。 即使是一轮干净的结果,也是“在范围 X 内、时间 T 内、 使用方法 Y,未发现可利用问题”—— 而非“该应用程序是安全的”。 报告中的措辞应与之一致。


阶段 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. 清点接收点——每个 execute(、os.system(、eval(、模板渲染、文件读/写、重定向目标
  3. 映射认证——会话 cookie vs JWT、OAuth 流程、密码重置、特权端点
  4. 识别信任边界——哪些已认证、哪些未认证、哪些来自 request.*
  5. 从每个接收点向后污点分析到请求源。在发现适当净化时提前终止(参数化查询、允许列表、shlex.quote、已知转义器)。

输出:evidence/pre-recon.md——架构图、接收点清单、疑似易受攻击的代码路径。

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


阶段 2: 侦察(实时,只读)​

映射攻击面。所有请求均为公开页面的 GET 请求,暂无有效载荷。仍然受范围限制。

  1. 验证范围。 将每个目标主机名解析为 IP。确认 IP 在范围内(避免"DNS 指向意外位置"的陷阱)。

  2. 网络表面(仅在范围允许端口扫描时):

    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。每个智能体读取 evidence/recon.md(如果存在,还包括 evidence/pre-recon.md),使用 templates/exploitation-queue.json 生成 findings/<class>-queue.json。

使用 delegate_task 及以下专注的子智能体(尽可能并行):

类别目标参考
injectionSQLi、命令、路径遍历、SSTI、LFI/RFI、反序列化references/vuln-taxonomy.md(槽位类型)
xss反射型、存储型、基于 DOMreferences/vuln-taxonomy.md(渲染上下文)
auth登录绕过、JWT 混淆、会话固定、OAuth 缺陷references/exploitation-techniques.md
authzIDOR、垂直/水平升级、业务逻辑references/exploitation-techniques.md
ssrf内部可达性、元数据、协议走私除非明确授权,否则跳过元数据
infra错误配置、信息泄露、默认凭据、暴露的管理接口references/exploitation-techniques.md

每个队列条目包含:id、漏洞类别、来源(file:line 如果已知)、端点、参数、槽位类型、疑似防御、判定(identified / partial / confirmed / critical)、见证有效载荷、置信度(0-1)、备注。

分析阶段暂不发送恶意有效载荷——它将其暂存。利用阶段才实际触发它们。


阶段 4:利用(基于证明,有条件执行)​

仅对分析队列中存在可操作条目(identified 或 partial)的类别,按类别运行一个子智能体。

对每个候选项:

  1. 发送前检查 — 主机在范围内?认证门槛已满足?如果是破坏性载荷,是否已获批?
  2. 发送见证载荷 — 最小证明。SQLi:' AND 1=1-- 然后 ' AND 1=2--。XSS:使用良性标记,例如 <svg/onload=console.log("HERMES-PENTEST-XSS")>。存储型 XSS 中绝不使用 alert(1) — 它在共享环境中会为其他用户触发。
  3. 验证见证载荷生效 — 对于盲注,使用睡眠探测(SLEEP(5))并对响应计时。对于 SSRF,使用你控制的测试方回调主机(对于敏感项目,不要使用 webhook.site 等公共服务 — 存在外泄路径)。
  4. 提升等级:
    • L1 已识别 — 模式匹配,但行为未改变
    • L2 部分成立 — 到达了危险点(sink),但存在防御
    • L3 已确认 — 载荷以可观察的方式改变了应用行为
    • L4 严重 — 数据被提取、代码被执行、权限被提升
  5. 在归类为误报前穷尽绕过手段。 对每个被拦截的候选项:至少尝试 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 风暴 — 退后,与运营者重新商议。
  • 你发现了合同范围之外的东西(例如在测试无关端点时发现暴露的客户数据库)。停止、记录、向运营者报告。未经明确批准不得横向转移 — 那种横向转移正是使渗透测试违法的行为。

本技能不涵盖的内容​

  • 端口扫描之外的网络层渗透测试(不涉及 Metasploit、Cobalt Strike、AD 攻击、网络协议模糊测试)。
  • 逆向工程 / 二进制分析(参见 issue #383)。
  • 仅源码的静态分析(参见 issue #382)。
  • 主动社会工程 / 钓鱼。
  • 针对运营者未预先授权的系统的任何操作。

如果项目需要以上任何内容,请升级给专业渗透测试人员。本技能是对专业渗透测试的补充,而非替代。


延伸阅读​

  • references/scope-enforcement.md — 如何约束每个主动请求
  • references/vuln-taxonomy.md — 槽位类型、渲染上下文、OWASP 映射
  • references/exploitation-techniques.md — 各类别的载荷模式
  • references/bypass-techniques.md — 常见 WAF/过滤器绕过
  • templates/authorization.md — 项目授权模板
  • templates/pentest-report.md — 最终报告模板
  • templates/exploitation-queue.json — 各类别发现队列模式
  • scripts/recon-scan.sh — 限速的 nmap+whatweb+headers 封装