Web 渗透测试
经授权的 Web 应用程序渗透测试——包括侦察、漏洞分析、基于证据的利用以及专业报告编制。采用 Shannon 的“无利用,无报告”(No Exploit, No Report)方法论,并针对范围、授权和辅助客户端(aux-client)泄露设置了严格的护栏。仅对您拥有或已获得书面授权测试的运行中应用程序进行主动测试。
技能元数据
| 来源 | 可选 — 使用 hermes skills install official/security/web-pentest 安装 |
| 路径 | optional-skills/security/web-pentest |
| 平台 | linux, macos |
参考:完整 SKILL.md
以下是触发此技能时 Hermes 加载的完整技能定义。当技能处于活动状态时,代理将这些内容视为指令。
Web 应用程序渗透测试
针对运行中的 Web 应用程序的分阶段渗透测试工作流。改编自 Shannon 的流水线(Keygraph,AGPL 许可——仅借鉴概念,未借用代码)。围绕以下三条规则构建:
- 无利用,无报告——每个发现都需要可复现的证据。
- 范围受限——每个主动请求必须针对操作员预先声明的目标。拒绝超出范围的主机。
- 在排除误报之前先穷尽绕过方法——在尝试完绕过集合之前,“被拦截”的有效负载并不代表安全无恙。
⚠️ 严格护栏——每次参与前必读
违反任何一条都将导致本次参与无效,并可能构成非法行为。
-
授权关口。 在会话中进行首次主动扫描之前,您必须以书面形式与用户确认,他们拥有目标的所有权或拥有测试目标的书面授权。将确认记录在
engagement/authorization.md中(参见模板)。无确认 → 无主动扫描。使用curl读取公共页面是可以的;发送有效负载则不行。 -
范围允许列表。 维护
engagement/scope.txt——每行一个主机名或 CIDR。每个nmap、curl、whatweb、浏览器导航或携带有效负载的请求必须针对范围列表中的条目。如果目标将您重定向到范围外(3xx 重定向到其他主机,或 HTML 中的链接),请停止并在跟随之前与用户确认。 -
无书面批准不测试生产系统。 如果用户未明确告知“是的,生产环境在范围内,且我有书面签字批准”,则默认假设不在范围内。默认目标应为预发布环境(staging)、本地 Docker 容器或专用测试实例。
-
默认禁止探测云元数据。 除非参与范围明确将 SSRF 至元数据作为目标,且目标在您控制之下,否则不要探测
169.254.169.254、metadata.google.internal、100.100.100.200、[fd00:ec2::254]或等效地址。代理的浏览器工具可以从您的基础设施内部访问这些地址——请勿这样做。 -
破坏性有效负载需批准。 会导致 DROP/DELETE 的 SQL 注入有效负载、文件系统写入型 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脚本会强制执行此限制。未经操作员批准,不要绕过此限制。 -
报告的权威性。 此技能生成的是安全评估报告,而非“通过”证明。即使是干净的运行结果,也应表述为“在时间 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 # internal lab only, with operator OK -
在发出第一个活动请求之前,阅读
references/scope-enforcement.md—— 该文档包含你在每个命令/URL 发出之前必须应用的主机提取规则。
阶段 1:预侦察(代码分析,可选)
如果没有源代码访问权限(黑盒参与),请跳过此阶段。
如果你拥有应用程序源代码的读取权限:
- 映射架构 —— 框架、路由、中间件栈
- 清点汇点(sinks) —— 每个
execute(、os.system(、eval(、模板渲染、文件读/写、重定向目标 - 映射认证机制 —— Session Cookie 与 JWT、OAuth 流程、密码重置、特权端点
- 识别信任边界 —— 哪些是已认证的,哪些不是,哪些来自
request.* - 从每个汇点进行反向污点追踪至请求源。当发现适当的 sanitization(参数化查询、允许列表、
shlex.quote、知名的转义器)时早期终止。
输出:evidence/pre-recon.md —— 架构图、汇点清单、疑似漏洞代码路径。
这是离线工作。不向目标发送任何流量。
阶段 2:侦察(实时,只读)
映射攻击面。所有请求均为公共页面的 GET 请求,尚不包含 payload。仍然受范围限制。
-
验证范围。 解析每个目标主机名 → 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.txt
curl -sIk $TARGET_URL > evidence/headers.txt -
端点发现:
- 使用浏览器工具爬取应用(
browser_navigate、browser_get_images,跟随链接)。 - 检查
robots.txt、sitemap.xml、.well-known/*。 - 通过浏览器工具的开发者工具网络面板捕获 XHR/fetch 调用。
- 使用浏览器工具爬取应用(
-
认证表面: 识别登录、注册、密码重置、Session 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 | SQL 注入、命令注入、路径遍历、SSTI、LFI/RFI、反序列化 | references/vuln-taxonomy.md(槽位类型) |
xss | 反射型、存储型、基于 DOM 的 XSS | 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)、见证 payload、置信度(0-1)、备注。
分析阶段尚未发送恶意 payload——它们只是被暂存。利用阶段才会实际发送它们。
阶段 4:利用(基于证明,有条件)
仅在分析队列中存在可操作条目(identified 或 partial)的类别中运行子代理。
对于每个候选者:
- 发送前检查 — 主机是否在范围内?是否满足认证关卡?如果是破坏性操作,载荷(payload)是否已获批准?
- 发送验证载荷 — 最小化证明。SQL 注入:先发送
' 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 严重 — 数据被提取、代码被执行或权限被提升
- 在归类为误报(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,附注说明是什么阻断了它们)
- 范围外的观察结果
- 方法论 / 使用的工具
- 局限性以及未测试的内容
严重程度策略: 仅对 L3/L4 使用 CVSS。L1/L2 为“待验证候选项” — 不要为未验证的发现项分配 CVSS。
何时停止
- 用户撤销授权。
- 候选发现项明显影响生产数据,且你没有获得破坏性测试的批准 — 停止并询问。
- 目标开始返回大量的 503/429 错误 — 退避,并与操作员重新协调。
- 你发现了合同范围之外的东西(例如,在测试不相关的端点时发现了一个暴露的客户数据库)。停止、记录、向操作员报告。未经明确批准不得横向移动(pivot)— 这种横向移动会使渗透测试变得非法。
此技能不包含的内容
- 超出端口扫描的网络层渗透测试(不使用 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— 每类发现项队列 schemascripts/recon-scan.sh— 速率限制的 nmap+whatweb+headers 包装脚本