
Native Nim-WinRM-Shell mit NTLM, Kerberos, Dateiübertragung, In-Memory-Hilfsprogrammen und AD/OPSEC-Reporting
Nativer WinRM-Shell-Client, geschrieben in Nim
Version 1.2.0 · Autor Chokri Hammedi (blue0x1) · Lizenz MIT
nimrm ist für rechtmäßige Administration, Sicherheitstests und Forschung an Systemen gedacht, die Sie besitzen oder für die Sie eine ausdrückliche Zugriffsberechtigung haben. Der Autor ist nicht für Missbrauch oder Schäden verantwortlich, die durch dieses Tool verursacht werden.
nimrm bietet eine kompakte und schnelle WinRM-Shell mit praktischen Helfern für Authentifizierung, Befehlsausführung, Übertragung und Berichterstellung. Es ist als native Nim-Binärdatei ohne Nim-Paketabhängigkeiten konzipiert.
| Bereich | Unterstützung |
|---|---|
| Authentifizierung | NTLM-Passwort, NTLM-Hash, Kerberos über KRB5CCNAME |
| WinRM-Transport | HTTP, HTTPS/TLS, benutzerdefinierter Port |
| Shell | Interaktives PowerShell, CMD-Präfix, Einzelbefehlmodus, Autovervollständigung für Befehle und lokale Pfade |
| Übertragungen | Datei-Upload/Download, rekursive Verzeichnisübertragung, Datei- und Verzeichnis-Relay zwischen Remote-Sitzungen |
| In-Memory | PowerShell-Skript-Import, Ausführung verwalteter .NET-Assemblys |
| Berichterstellung | AD-/Domänenkontext, Protokollierungs- und Auditierungsstatus |
| Zuverlässigkeit | Kerberos-Nachrichten-Wrapping, Transport-Reset-/Retry-Behandlung |
| Komponente | Anforderung |
|---|---|
| Build | Nim >= 1.6.0 |
| Kerberos | libgssapi_krb5.so.2 unter Linux oder libgssapi_krb5.dylib unter macOS |
| TLS-Build | OpenSSL und -d:ssl |
| Ziel | WinRM erreichbar auf dem ausgewählten Port |
Nimble:
nimble install nimrm
Neueste Version herunterladen:
curl -L -o nimrm https://github.com/blue0x1/nimrm/releases/latest/download/nimrm
chmod +x nimrm
Windows-Release-Binärdatei:
Invoke-WebRequest -Uri https://github.com/blue0x1/nimrm/releases/latest/download/nimrm.exe -OutFile nimrm.exe
Debian-Paket:
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
Das BlackArch-PKGBUILD verfolgt den neuesten Upstream-Git-Commit, sodass neue Releases BlackArch-Benutzer beim nächsten System-Update erreichen. Wenn nimrm bereits installiert ist, aktualisieren Sie es mit:
sudo pacman -Syu nimrm
Aus dem Quellcode bauen:
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
make linux
make ssl
make windows
Das Windows-Ziel erstellt eine eigenständige SSL-fähige ausführbare Datei unter dist/windows/nimrm.exe. Der Launcher ist in Nim geschrieben und bettet den generierten WinRM-Kern sowie die erforderlichen Runtime-DLLs aus vendor/windows-runtime/ ein, extrahiert sie bei der Ausführung in ein temporäres Runtime-Verzeichnis und führt dann den Kern mit denselben Argumenten aus. Dies unterstützt einfaches HTTP-WinRM, sofern nicht --tls / --ssl übergeben wird, und HTTPS-WinRM, wenn TLS aktiviert ist. Die eingebettete OpenSSL-Runtime verwendet:
libssl-3-x64.dll
libcrypto-3-x64.dll
Der Kerberos-Modus (-k / --kerb) wird unter Windows verzögert geladen, sodass die ausführbare Datei auch dann starten kann, wenn Kerberos nicht verwendet wird. Der Windows-Build bettet die MIT-Kerberos/GSSAPI-Runtime ein, die vom Kerberos-Modus verwendet wird.
Manueller Build:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm ist darauf ausgelegt, schnell zu bleiben, indem es eine native Nim-Binärdatei, einen persistenten WinRM-Runspace, eine chunked Übertragungslogik und eine kompakte Fortschrittsdarstellung verwendet.
| Vorgang | Implementierung |
|---|---|
| Upload | Chunked Base64-Schreibvorgänge mit adaptivem Retry bei großen Envelopes |
| Download | Gestreamte Base64-Chunks mit Fortschrittsverfolgung und einem schnellen Pfad für kleine Dateien |
| Remote-Sitzungs-Relay | Liest aus einer WinRM-Sitzung und schreibt in eine andere über den Controller-Speicher, ohne die Datei auf die lokale Festplatte zu schreiben |
| Verzeichnisübertragung | Rekursive Dateiaufzählung über denselben chunked Übertragungspfad |
| Befehlsausführung | Wiederverwendung der aktiven WinRM-Shell/des Runspace statt Neuverbindung pro Befehl |
NTLM-Passwort:
./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-Nachrichtenverschlüsselung über HTTP erzwingen:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --seal
Benutzerdefinierter Port:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -p 5985
Einzelbefehl:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -c 'whoami'
TLS-Zertifikatsüberprüfung überspringen (selbstsignierte Zertifikate):
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure
| Option | Beschreibung |
|---|---|
-T, --target | Ziel-IP oder Hostname |
-A, --account | Benutzername: user, user@domain oder DOMAIN\user |
-P, --secret | NTLM-Passwort |
-p, --port | WinRM-Port |
-N, --nt-proof | NT-Hash oder LM:NT-Hash |
-Z, --krb-zone | Kerberos-Realm-Überschreibung |
-K, --kerb-spn | Kerberos-SPN-Überschreibung |
-k, --kerb | Kerberos-Authentifizierung verwenden |
-c, --command | Einen Befehl ausführen und beenden |
--tls | HTTPS/TLS verwenden |
--insecure | TLS-Zertifikatsüberprüfung überspringen |
-h, --help | Hilfe anzeigen |