Web Pentest
授权 Web 渗透测试:信息收集、基于证据的漏洞利用、报告。
技能元数据
| Source | Optional — 使用 hermes skills install official/security/web-pentest 安装 |
| Path | optional-skills/security\web-pentest |
| Version | 1.0.0 |
| Author | Teknium (teknium1), Hermes Agent |
| License | MIT |
| Platforms | linux, macos |
| Tags | Security, Pentest, Web, Recon |
参考:完整的 SKILL.md
以下是 Hermes 在触发本技能时加载的完整技能定义。这就是技能激活时智能体所看到的指令。
Web 应用程序渗透测试
一套针对运行中 Web 应用程序的分阶段渗透测试工作流。改编自 Shannon 的流水线(Keygraph,AGPL —— 仅借鉴概念,未借用代码)。 围绕三条规则构建:
- 无利用,无报告 —— 每项发现都需要可复现的证据。
- 范围受限 —— 每个主动请求都必须针对操作者预先声明的目标。 范围外的主机会被拒绝。
- 在判定误报之前穷尽绕过手段 —— 一个“被拦截”的载荷, 在你尝试过整套绕过手段之前,不能算作清白健康。
⚠️ 硬性护栏 —— 每次交战前必读
违反以下任何一条都将使交战无效,并可能违法。
-
授权关卡。 在一次会话中进行首次主动扫描之前,你必须 以书面形式与用户确认,他们拥有该目标的所有权或持有对其进行 测试的书面授权。将确认记录写入
engagement/authorization.md(参见模板)。没有确认 → 没有 主动扫描。使用curl读取公开页面是可以的;发送载荷则不行。 -
范围允许列表。 维护
engagement/scope.txt—— 每行一个主机名或 CIDR。每个nmap、curl、whatweb、浏览器导航或携带有载荷的 请求,都必须针对范围中的某个条目。如果目标将你重定向到范围外 (3xx 到不同主机、HTML 中的链接),在跟随之前必须停止并与用户确认。 -
未经书面许可不得触碰生产系统。 如果用户没有告诉你 “是的,生产环境在范围内,并且我有书面签字确认”,就假设并非如此。 默认目标为预发布环境、本地 Docker、专用测试实例。
-
云元数据默认关闭。 除非交战明确将 SSRF 到元数据 作为目标,且目标是你的控制范围内的目标,否则不要探测
169.254.169.254、metadata.google.internal、100.100.100.200、[fd00:ec2::254]或等效地址。智能体的浏览器工具可以在你自己的 基础设施内部访问到这些地址 —— 不要这样做。 -
破坏性载荷需要批准。 会执行 DROP/DELETE 的 SQLi 载荷、 文件系统写入型 SSTI、带有
rm/shutdown/mkfs的命令注入, 任何超出一行测试数据变动的操作 → 先询问。approval.py系统能捕获一部分;不要仅依赖它。 -
辅助客户端泄露风险(Hermes 特有)。 本技能会在会话中产生 充满 SQLi/XSS/RCE 载荷、捕获的凭据、JWT 令牌的内容。Hermes 的 压缩和标题生成路径会通过辅助客户端(通常是主模型)重放历史记录。 你在对话中写入的任何敏感内容,都可能在下次压缩时离开这台机器。 缓解措施:
- 在任何消息中记录捕获的令牌/凭据之前,将其脱敏至仅保留最后 6 个字符。
完整值写入
engagement/evidence/文件,绝不写入聊天历史。 - 如果交战敏感,请在
~/.hermes/config.yaml中为本次会话设置auxiliary.title_generation.enabled: false。
- 在任何消息中记录捕获的令牌/凭据之前,将其脱敏至仅保留最后 6 个字符。
完整值写入
-
自我限速。 针对任一主机,主动请求之间默认间隔 200ms。 recon-scan.sh 脚本会强制执行此限制。未经操作者批准不得绕过。
-
报告的权威性。 本技能产出的是安全评估,而非“通过”。 即使是一轮干净的结果,也是“在范围 X 内、时间 T 内、 使用方法 Y,未发现可利用问题”—— 而非“该应用程序是安全的”。 报告中的措辞应与之一致。
阶段 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:
localhost127.0.0.1staging.example.com192.168.1.0/24 # 仅限内部实验环境,需经操作员确认 -
阅读
references/scope-enforcement.md,在发出第一个主动请求之前——该文档包含你在每个命令/URL 发出之前应用的主机提取规则。
阶段 1: 前期侦察(代码分析,可选)
如果没有源代码访问权限(黑盒参与),则跳过。
如果你有应用程序源代码的读取权限:
- 映射架构——框架、路由、中间件栈
- 清点接收点——每个
execute(、os.system(、eval(、模板渲染、文件读/写、重定向目标 - 映射认证——会话 cookie vs JWT、OAuth 流程、密码重置、特权端点
- 识别信任边界——哪些已认证、哪些未认证、哪些来自
request.* - 从每个接收点向后污点分析到请求源。在发现适当净化时提前终止(参数化查询、允许列表、
shlex.quote、已知转义器)。
输出:evidence/pre-recon.md——架构图、接收点清单、疑似易受攻击的代码路径。
这是离线工作。不向目标发送流量。
阶段 2: 侦察(实时,只读)
映射攻击面。所有请求均为公开页面的 GET 请求,暂无有效载荷。仍然受范围限制。
-
验证范围。 将每个目标主机名解析为 IP。确认 IP 在范围内(避免"DNS 指向意外位置"的陷阱)。
-
网络表面(仅在范围允许端口扫描时):
nmap -sT -T3 --top-ports 100 -oN evidence/nmap.txt $TARGET使用
-T3(默认),而非-T4/-T5。更具隐蔽性,并避免在共享环境中触发 IDS/IPS。 -
技术指纹识别:
whatweb -v $TARGET_URL > evidence/whatweb.txtcurl -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。每个智能体读取 evidence/recon.md(如果存在,还包括 evidence/pre-recon.md),使用 templates/exploitation-queue.json 生成 findings/<class>-queue.json。
使用 delegate_task 及以下专注的子智能体(尽可能并行):
| 类别 | 目标 | 参考 |
|---|---|---|
injection | SQLi、命令、路径遍历、SSTI、LFI/RFI、反序列化 | references/vuln-taxonomy.md(槽位类型) |
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、漏洞类别、来源(file:line 如果已知)、端点、参数、槽位类型、疑似防御、判定(identified / partial / confirmed / critical)、见证有效载荷、置信度(0-1)、备注。
分析阶段暂不发送恶意有效载荷——它将其暂存。利用阶段才实际触发它们。
阶段 4:利用(基于证明,有条件执行)
仅对分析队列中存在可操作条目(identified 或 partial)的类别,按类别运行一个子智能体。
对每个候选项:
- 发送前检查 — 主机在范围内?认证门槛已满足?如果是破坏性载荷,是否已获批?
- 发送见证载荷 — 最小证明。SQLi:
' AND 1=1--然后' AND 1=2--。XSS:使用良性标记,例如<svg/onload=console.log("HERMES-PENTEST-XSS")>。存储型 XSS 中绝不使用alert(1)— 它在共享环境中会为其他用户触发。 - 验证见证载荷生效 — 对于盲注,使用睡眠探测(
SLEEP(5))并对响应计时。对于 SSRF,使用你控制的测试方回调主机(对于敏感项目,不要使用 webhook.site 等公共服务 — 存在外泄路径)。 - 提升等级:
- L1 已识别 — 模式匹配,但行为未改变
- L2 部分成立 — 到达了危险点(sink),但存在防御
- L3 已确认 — 载荷以可观察的方式改变了应用行为
- L4 严重 — 数据被提取、代码被执行、权限被提升
- 在归类为误报前穷尽绕过手段。 对每个被拦截的候选项:至少尝试
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 风暴 — 退后,与运营者重新商议。
- 你发现了合同范围之外的东西(例如在测试无关端点时发现暴露的客户数据库)。停止、记录、向运营者报告。未经明确批准不得横向转移 — 那种横向转移正是使渗透测试违法的行为。
本技能不涵盖的内容
- 端口扫描之外的网络层渗透测试(不涉及 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 封装