
Родная оболочка WinRM на Nim с поддержкой NTLM, Kerberos, передачи файлов, вспомогательных средств в памяти и отчётов AD/OPSEC.
Нативный клиент WinRM-шелла, написанный на Nim
Версия 1.2.0 · Автор Chokri Hammedi (blue0x1) · Лицензия MIT
nimrm предназначен для законного администрирования, тестирования безопасности и исследований на системах, которыми вы владеете или на доступ к которым у вас есть явное разрешение. Автор не несёт ответственности за неправомерное использование или ущерб, причинённый этим инструментом.
nimrm предоставляет компактный и быстрый WinRM-шелл с практичными помощниками для аутентификации, выполнения команд, передачи файлов и отчётности. Он собран как нативный бинарник Nim без зависимостей от пакетов Nim.
| Область | Поддержка |
|---|---|
| Аутентификация | NTLM-пароль, NTLM-хеш, Kerberos через KRB5CCNAME |
| Транспорт WinRM | HTTP, HTTPS/TLS, произвольный порт |
| Шелл | Интерактивный PowerShell, префикс CMD, режим одиночной команды, автодополнение команд и локальных путей |
| Передача | Загрузка/выгрузка файлов, рекурсивная передача каталогов, ретрансляция файлов и каталогов между удалёнными сессиями |
| В памяти | Импорт PowerShell-скриптов, выполнение управляемых .NET-сборок |
| Отчётность | Контекст AD/домена, состояние логирования и аудита |
| Надёжность | Обёртка сообщений Kerberos, обработка сброса/повтора транспорта |
| Компонент | Требование |
|---|---|
| Сборка | Nim >= 1.6.0 |
| Kerberos | libgssapi_krb5.so.2 в Linux или libgssapi_krb5.dylib в macOS |
| Сборка с TLS | OpenSSL и -d:ssl |
| Цель | WinRM, доступный на выбранном порту |
Nimble:
nimble install nimrm
Загрузка последнего релиза:
curl -L -o nimrm https://github.com/blue0x1/nimrm/releases/latest/download/nimrm
chmod +x nimrm
Бинарник для Windows:
Invoke-WebRequest -Uri https://github.com/blue0x1/nimrm/releases/latest/download/nimrm.exe -OutFile nimrm.exe
Пакет Debian:
curl -L -o nimrm_1.2.0_amd64.deb https://github.com/blue0x1/nimrm/releases/latest/download/nimrm_1.2.0_amd64.deb
sudo dpkg -i nimrm_1.2.0_amd64.deb
BlackArch:
sudo pacman -S nimrm
PKGBUILD в BlackArch отслеживает последний upstream-коммит git, поэтому новые релизы попадают к пользователям BlackArch при следующем обновлении системы. Если nimrm уже установлен, обновите его командой:
sudo pacman -Syu nimrm
Сборка из исходников:
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
make linux
make ssl
make windows
Цель Windows собирает один самодостаточный исполняемый файл с поддержкой SSL по пути dist/windows/nimrm.exe. Лаунчер написан на Nim и встраивает сгенерированное ядро WinRM вместе с необходимыми runtime-DLL из vendor/windows-runtime/, извлекает их во временный каталог runtime при запуске, а затем запускает ядро с теми же аргументами. Это поддерживает обычный HTTP WinRM, если не передан --tls / --ssl, и HTTPS WinRM при включённом TLS. Встроенный runtime OpenSSL использует:
libssl-3-x64.dll
libcrypto-3-x64.dll
Режим Kerberos (-k / --kerb) загружается лениво в Windows, поэтому исполняемый файл может запуститься, даже когда Kerberos не используется. Сборка для Windows встраивает runtime MIT Kerberos/GSSAPI, используемый в режиме Kerberos.
Ручная сборка:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm спроектирован так, чтобы оставаться быстрым за счёт нативного бинарника Nim, постоянного runspace WinRM, логики блочной передачи и компактного отображения прогресса.
| Операция | Реализация |
|---|---|
| Загрузка | Блочные записи Base64 с адаптивным повтором при больших объёмах |
| Выгрузка | Потоковые блоки Base64 с отслеживанием прогресса и быстрым путём для небольших файлов |
| Ретрансляция удалённых сессий | Чтение из одной сессии WinRM и запись в другую через память контроллера без записи файла на локальный диск |
| Передача каталогов | Рекурсивный обход файлов с использованием того же блочного пути передачи |
| Выполнение команд | Повторно использует активный шелл/runspace WinRM вместо переподключения для каждой команды |
NTLM-пароль:
./nimrm -T 192.168.1.10 -A 'CORP\administrator' -P 'Password123'
NTLM pass-the-hash:
./nimrm -T 192.168.1.10 -A 'CORP\user' -N aad3b435b51404eeaad3b435b51404ee:0123456789abcdef0123456789abcdef
Kerberos:
KRB5CCNAME=FILE:/tmp/user.ccache ./nimrm -k -T dc01.corp.local -Z CORP.LOCAL
Принудительное шифрование сообщений NTLM поверх HTTP:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --seal
Произвольный порт:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -p 5985
Одиночная команда:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -c 'whoami'
Пропуск проверки TLS-сертификата (самоподписанные сертификаты):
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure
| Опция | Описание |
|---|---|
-T, --target | IP-адрес или имя хоста цели |
-A, --account | Имя пользователя: user, user@domain или DOMAIN\user |
-P, --secret | NTLM-пароль |
-p, --port | Порт WinRM |
-N, --nt-proof | NT-хеш или хеш LM:NT |
-Z, --krb-zone | Переопределение области Kerberos |
-K, --kerb-spn | Переопределение SPN Kerberos |
-k, --kerb | Использовать аутентификацию Kerberos |
-c, --command | Выполнить одну команду и выйти |
--tls | Использовать HTTPS/TLS |
--insecure | Пропустить проверку TLS-сертификата |
-h, --help | Показать справку |