关于 authenticated-session-acquisition
面向安全测试的技能,用于在 MFA 阻碍自动化测试时获取合法的已认证会话。它导出可复用的浏览器状态和令牌,供认证后测试使用,并将秘密保存在文件中。
主要功能
- 01支持 TOTP、人工输入 OTP 和暂停恢复
- 02提供 Auth0、Okta、Cognito 和 Descope 流程
- 03导出 Playwright 状态和 bearer 令牌
- 04通过已认证请求验证访问
- 05记录受阻时延期的覆盖项
适用场景
- 01为授权的登录后 API 测试准备会话
- 02在操作员输入 OTP 后恢复登录流程
- 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 resume | OTP 通过带外方式送达,运行必须暂停 | 保留 OTP 验证前的浏览器上下文并暂停;由操作员完成验证,然后恢复运行并捕获 storageState。 |
提供商操作指南
各身份提供商(IdP)的详细流程见 reference/session-acquisition.md:Auth0、Okta、Amazon Cognito(SRP 身份验证 + UNSIGNED 未认证状态检查)和 Descope。每份指南的最后都会按照上述约定导出 storageState.json + bearer.txt。
无法获取会话时——如实延期,不要伪造
如果没有可用的测试账户/OTP 种子,也无法转交 OTP,则该域的认证后攻击面无法测试,这并非测试人员的过错。应如实记录,而不是伪造 NA 或悄然漏报:
- 在
reports/client-input-requests/CIR-NNN.md中提交客户端输入请求,准确写明所需内容(“需要<realm>的测试账户/OTP 种子/允许列表”)。 - 在
attack-chain.md中设置域级BLOCKED_REASON。 - 在
coverage.json中将该域认证后的覆盖单元标记为status:"deferred",每个单元都附带deferral_reason+client_input_request(CIR 路径)——参见coverage-matrix.md。随后,确定性门禁会在报告中披露延期的攻击面,而不是将其隐藏;只有父级编排器(通过coverage_gate.py --accept-deferrals)才能最终确认已充分说明延期原因的测试。完全受认证限制的范围绝不会完成。
预检凭据可达性探测(preflight-checklist.md,Phase-1 门禁)会触发此流程:存在凭据不等于凭据可用;启动认证后执行器前,应先验证每个域的可达性。
工作流
- 查看范围:
creds_env中包含哪些 realm/租户、这些租户对应哪些资产,以及测试租户的roe.reversible_writes。 - 识别 IdP(登录重定向主机 /
/.well-known/openid-configuration/ SDK 包)→ 选择对应的操作方案。 - 以适当模式获取会话 → 写入
storageState.json+bearer.txt。 - 验证:发送一个最小化的已认证请求,并获得已授权响应(不是 401/403/登录重定向)。
- 将产物路径交给认证后执行器批次;失败时,运行上文的延期流程。
反模式
- 不要将令牌、种子或 Cookie 粘贴到提示词、
experiments.md、attack-chain.md或任何tools/*.md中——只通过路径引用产物文件。 - 不要在此处暴力破解或绕过 OTP/MFA 挑战——这属于
authentication发现项,而不是会话获取。 - 不要将受 MFA 阻碍的单元标记为
covered/NA——应将其标记为deferred,并提交 CIR,以便门禁披露该情况。 - 不要测试分配给你的已认证租户之外的对象,并遵守
roe.reversible_writes(只能在你自己的测试租户中执行先创建后删除的操作)。
参考
reference/session-acquisition.md— 按 IdP 分类的获取方案(Auth0 / Okta / Cognito / Descope)+ storageState/Bearer 导出。tools/totp_now.py— 标准库 RFC-6238 TOTP 生成器(从种子生成 TOTP 模式)。