mcpField
A
authenticated-session-acquisition

authenticated-session-acquisition

github.com/transilienceai安全598113 次安装13 周前更新
代码仓库

关于 authenticated-session-acquisition

面向安全测试的技能,用于在 MFA 阻碍自动化测试时获取合法的已认证会话。它导出可复用的浏览器状态和令牌,供认证后测试使用,并将秘密保存在文件中。

主要功能

  1. 01支持 TOTP、人工输入 OTP 和暂停恢复
  2. 02提供 Auth0、Okta、Cognito 和 Descope 流程
  3. 03导出 Playwright 状态和 bearer 令牌
  4. 04通过已认证请求验证访问
  5. 05记录受阻时延期的覆盖项

适用场景

  1. 01为授权的登录后 API 测试准备会话
  2. 02在操作员输入 OTP 后恢复登录流程
  3. 03记录必须延期的认证后测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/transilienceai/communitytools --skill authenticated-session-acquisition

安装后在 Claude Code 中输入/authenticated-session-acquisition确认已加载。

附带文件reference/session-acquisition.md

详细介绍

已认证会话获取

在金融和多租户目标中,登录受短信 OTP/TOTP MFA 保护,自动化运行无法通过验证,因此认证后的攻击面(真实数据 API 上的 BOLA/IDOR/批量赋值/注入、会话处理、API 跳转)会悄然缩减为仅有认证前发现。本技能的目标范围明确且具体:**获取一个合法的已认证会话,并将其作为可复用的产物交给执行器。**本技能不会攻击认证机制——相关内容请参见 authentication。

产物约定(会话如何传递给执行器)

在本次测试的 OUTPUT_DIR 中生成以下两个文件,并通过文件名引用(绝不内联机密信息——credential-loading.md):

  • OUTPUT_DIR/<asset>/session/storageState.json — Playwright 存储状态(cookies + localStorage),用于浏览器驱动的认证后测试。
  • OUTPUT_DIR/<asset>/session/bearer.txt — 原始访问/ID 令牌(及其 expires_at),用于直接重放 API 请求。

执行器会像使用通过环境变量加载的机密信息一样使用这些文件:范围文件的 creds_env 指明所属域,且会话路径作为文件引用传递,因此令牌绝不会写入提示词、experiments.md 或 attack-chain.md。令牌过期后重新运行本技能(记录 expires_at;如果存在刷新令牌,应刷新令牌而不是重新登录)。

模式(根据客户端能提供的内容选择)

模式适用情况操作方法
TOTP-from-seed客户端已分享测试账户的 TOTP 密钥(Base32 种子)使用 tools/totp_now.py <BASE32_SEED> 确定性地生成当前验证码,并在登录流程中提交。完全自动化,可重复执行。
Explicit-OTP操作员可以在运行时读取一次性验证码(短信/电子邮件/身份验证器)驱动登录流程直至出现 OTP 提示,由操作员提供一次验证码,然后继续。
Human-in-the-loop resumeOTP 通过带外方式送达,运行必须暂停保留 OTP 验证前的浏览器上下文并暂停;由操作员完成验证,然后恢复运行并捕获 storageState。

提供商操作指南

各身份提供商(IdP)的详细流程见 reference/session-acquisition.md:Auth0、Okta、Amazon Cognito(SRP 身份验证 + UNSIGNED 未认证状态检查)和 Descope。每份指南的最后都会按照上述约定导出 storageState.json + bearer.txt。

无法获取会话时——如实延期,不要伪造

如果没有可用的测试账户/OTP 种子,也无法转交 OTP,则该域的认证后攻击面无法测试,这并非测试人员的过错。应如实记录,而不是伪造 NA 或悄然漏报:

  1. 在 reports/client-input-requests/CIR-NNN.md 中提交客户端输入请求,准确写明所需内容(“需要 <realm> 的测试账户/OTP 种子/允许列表”)。
  2. 在 attack-chain.md 中设置域级 BLOCKED_REASON。
  3. 在 coverage.json 中将该域认证后的覆盖单元标记为 status:"deferred",每个单元都附带 deferral_reason + client_input_request(CIR 路径)——参见 coverage-matrix.md。随后,确定性门禁会在报告中披露延期的攻击面,而不是将其隐藏;只有父级编排器(通过 coverage_gate.py --accept-deferrals)才能最终确认已充分说明延期原因的测试。完全受认证限制的范围绝不会完成。

预检凭据可达性探测(preflight-checklist.md,Phase-1 门禁)会触发此流程:存在凭据不等于凭据可用;启动认证后执行器前,应先验证每个域的可达性。

工作流

  1. 查看范围:creds_env 中包含哪些 realm/租户、这些租户对应哪些资产,以及测试租户的 roe.reversible_writes。
  2. 识别 IdP(登录重定向主机 / /.well-known/openid-configuration / SDK 包)→ 选择对应的操作方案。
  3. 以适当模式获取会话 → 写入 storageState.json + bearer.txt。
  4. 验证:发送一个最小化的已认证请求,并获得已授权响应(不是 401/403/登录重定向)。
  5. 将产物路径交给认证后执行器批次;失败时,运行上文的延期流程。

反模式

  • 不要将令牌、种子或 Cookie 粘贴到提示词、experiments.md、attack-chain.md 或任何 tools/*.md 中——只通过路径引用产物文件。
  • 不要在此处暴力破解或绕过 OTP/MFA 挑战——这属于 authentication 发现项,而不是会话获取。
  • 不要将受 MFA 阻碍的单元标记为 covered/NA——应将其标记为 deferred,并提交 CIR,以便门禁披露该情况。
  • 不要测试分配给你的已认证租户之外的对象,并遵守 roe.reversible_writes(只能在你自己的测试租户中执行先创建后删除的操作)。

参考

评论

支持 Markdown