
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 die rechtmäßige Administration, Sicherheitstests und Forschung an Systemen gedacht, die Ihnen gehören oder für die Sie eine ausdrückliche Zugriffsberechtigung haben. Der Autor übernimmt keine Verantwortung für Missbrauch oder Schäden, die durch dieses Tool verursacht werden.
nimrm bietet eine kompakte und schnelle WinRM-Shell mit praktischen Helfern für Authentifizierung, Befehlsausführung, Übertragung und Berichterstattung. Es ist als natives Nim-Binary ohne Nim-Paketabhängigkeiten gebaut.
| Komponente |
|---|
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-Binary:
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 folgt dem neuesten Upstream-Git-Commit, sodass neue Versionen BlackArch-Nutzer mit dem nächsten Systemupdate erreichen. Falls 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
Manueller Build:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm wurde entwickelt, um schnell zu bleiben, indem es ein natives Nim-Binary, einen persistenten WinRM-Runspace, eine chunkbasierte Übertragungslogik und eine kompakte Fortschrittsanzeige verwendet.
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-Zertifikatsprüfung überspringen (selbstsignierte Zertifikate):
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure
nimrm unterstützt mehrere gleichzeitige WinRM-Sessions. Sie können zwischen verschiedenen Hosts und Benutzern wechseln, ohne die Shell zu verlassen.
Eine neue Session aus einer bestehenden heraus erstellen:
PS C:\Users\Administrator> session -T 10.0.0.5 -A 'CORP\user2' -P 'Pass123'
PS C:\Users\Administrator> session -T dc02.corp.local -A [email protected] -N aad3b435:0123456789abcdef -n dc02
PS C:\Users\Administrator> session -T dc03.corp.local -k -Z CORP.LOCAL -n dc03
Aktive Sessions auflisten:
PS C:\Users\Administrator> sessions
ID Name Target User Auth
-- ---- ------ ---- ----
* 1 session-1 dc01.corp.local:5985 administrator Kerberos
2 session-2 10.0.0.5:5985 user2 NTLM
3 dc02 dc02.corp.local:5985 user NTLM
Zwischen Sessions wechseln:
[session-2] PS C:\Users\user2> use 1
[*] Switched to session: session-1 (dc01.corp.local:5985)
[session-1] PS C:\Users\Administrator> use dc02
[*] Switched to session: dc02 (dc02.corp.local:5985)
Eine Session schließen:
[dc02] PS C:\Users\user> kill 2
[*] Killed session: session-2
Dateien zwischen aktiven Sessions kopieren:
[session-1] PS C:\Users\user1> rupload C:\Users\user1\tool.exe session-2 C:\Users\user2\Desktop\tool.exe
[*] Download mode: WinRS binary stream
✔ rupload-read [━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━] 100% 442.0 KB/442.0 KB done in 0.7s
[*] Upload mode: WinRS stream
✔ rupload-write [━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━] 100% 442.0 KB/442.0 KB done in 0.4s
[+] Remote uploaded 452608 bytes from session-1:C:\Users\user1\tool.exe to session-2:C:\Users\user2\Desktop\tool.exe
[session-1] PS C:\Users\user1> rdownload session-2 C:\Users\user2\Desktop\out.txt C:\Users\user1\out.txt
[+] Remote downloaded 1024 bytes from session-2:C:\Users\user2\Desktop\out.txt to session-1:C:\Users\user1\out.txt
rupload und rupload-dir verwenden die aktive Session als Quelle und die benannte Session als Ziel. rdownload und rdownload-dir verwenden die benannte Session als Quelle und die aktive Session als Ziel. Diese Befehle leiten die Bytes über den Speicher von nimrm weiter, sodass der Controller-Host keine temporäre Kopie auf die Festplatte schreibt.
Session-Optionen:
PowerShell und CMD:
PS> hostname
PS> Get-Process
PS> !ipconfig /all
Übertragungen:
PS> upload ./tool.exe C:\Temp\tool.exe
PS> download C:\Temp\out.txt ./out.txt
PS> rupload C:\Temp\tool.exe session-2 C:\Temp\tool.exe
PS> rdownload session-2 C:\Temp\out.txt C:\Temp\out.txt
PS> rupload-dir C:\Temp\logs session-2 C:\Temp\logs
PS> rdownload-dir session-2 C:\Temp\loot C:\Temp\loot
PS> upload-dir ./payloads C:\Temp\payloads
PS> download-dir C:\Temp\logs ./logs
Richtung der Remote-Session-Weiterleitung:
# Active session -> another session
PS> rupload C:\Temp\payload.exe session-2 C:\Users\Public\payload.exe
# Another session -> active session
PS> rdownload session-2 C:\Users\Public\loot.zip C:\Temp\loot.zip
Autovervollständigung:
PS> upl<Tab>
PS> upload ./pay<Tab>
Die interaktive Eingabeaufforderung vervollständigt Befehlsnamen und lokale Dateisystempfade für Befehle mit lokaler Quelle wie upload, upload-dir, invoke-script und execute-assembly.
In-Memory-Helfer:
PS> invoke-script ./AdminTools.ps1
PS> execute-assembly ./tool.exe arg1 arg2
Berichterstattung:
PS> ad-info
PS> opsec-check
execute-assembly unterstützt nur verwaltete .NET-Assemblys.invoke-script importiert in den aktuellen Remote-Runspace.rupload, rdownload, rupload-dir und rdownload-dir schreiben keine temporären Dateien auf dem Controller-Host, aber die Bytes durchlaufen weiterhin den Controller-Speicher und nutzen zwei WinRM-Übertragungsstrecken.ad-info und opsec-check sind schreibgeschützte Berichtsbefehle.MIT. Siehe LICENSE.
| Bereich | Unterstützung |
|---|
| Authentifizierung | NTLM-Passwort, NTLM-Hash, Kerberos über KRB5CCNAME |
| WinRM-Transport | HTTP, HTTPS/TLS, benutzerdefinierter Port |
| Shell | Interaktive PowerShell, CMD-Präfix, Einzelbefehl-Modus, Autovervollständigung für Befehle und lokale Pfade |
| Übertragungen | Datei-Upload/-Download, rekursive Verzeichnisübertragung, Remote-Weiterleitung von Dateien und Verzeichnissen zwischen Sessions |
| In-Memory | PowerShell-Skriptimport, Ausführung verwalteter .NET-Assemblys |
| Berichterstattung | AD-/Domänenkontext, Logging- und Audit-Posture |
| Zuverlässigkeit | Kerberos-Nachrichten-Wrapping, Behandlung von Transport-Resets/Wiederholungen |
| 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 über den gewählten Port erreichbar |
| Vorgang | Implementierung |
|---|
| Upload | Chunked-Base64-Schreibvorgänge mit adaptivem Wiederholungsversuch bei großen Envelopes |
| Download | Gestreamte Base64-Chunks mit Fortschrittsverfolgung und einem Schnellpfad für kleine Dateien |
| Remote-Session-Relay | Liest aus einer WinRM-Session und schreibt über den Controller-Speicher in eine andere, ohne die Datei auf die lokale Festplatte zu schreiben |
| Verzeichnisübertragung | Rekursive Dateiaufzählung über denselben Chunked-Übertragungspfad |
| Befehlsausführung | Verwendet die aktive WinRM-Shell/den aktiven Runspace erneut, anstatt sich pro Befehl neu zu verbinden |
| 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 überschreiben |
-K, --kerb-spn | Kerberos-SPN überschreiben |
-k, --kerb | Kerberos-Authentifizierung verwenden |
-c, --command | Einen Befehl ausführen und beenden |
--tls | HTTPS/TLS verwenden |
--insecure | TLS-Zertifikatsprüfung überspringen |
-h, --help | Hilfe anzeigen |
| Befehl | Beschreibung |
|---|
/help | Hilfe anzeigen |
exit, quit | Shell schließen |
!<cmd> | Über cmd.exe ausführen |
upload <local> [remote] | Eine Datei hochladen |
download <remote> [local] | Eine Datei herunterladen |
rupload <remote> <session> [dest] | Eine Remote-Datei aus der aktiven Session über den Speicher in eine andere Session kopieren |
rdownload <session> <remote> [dest] | Eine Remote-Datei aus einer anderen Session über den Speicher in die aktive Session kopieren |
rupload-dir <remote> <session> [dest] | Ein Remote-Verzeichnis aus der aktiven Session über den Speicher in eine andere Session kopieren |
rdownload-dir <session> <remote> [dest] | Ein Remote-Verzeichnis aus einer anderen Session über den Speicher in die aktive Session kopieren |
upload-dir <local> [remote] | Ein Verzeichnis hochladen |
download-dir <remote> [local] | Ein Verzeichnis herunterladen |
invoke-script <ps1> [args] | Lokales PowerShell-Skript aus dem Speicher importieren |
execute-assembly <exe> [args] | Verwaltetes .NET aus dem Speicher ausführen |
ad-info | AD-/Domänenkontext anzeigen |
opsec-check | Logging- und Audit-Posture anzeigen |
sessions | Alle aktiven Sessions auflisten |
session <opts> | Eine neue Session erstellen |
use <name|id> | Zu einer Session wechseln |
kill <name|id> | Eine Session schließen und entfernen |
| Option | Beschreibung |
|---|
-T | Ziel-Host |
-A | Benutzername |
-P | Passwort |
-N | NT-Hash |
-k | Kerberos-Authentifizierung |
-Z | Kerberos-Realm |
-K | SPN überschreiben |
-p | Port |
--tls | HTTPS verwenden |
-n | Benutzerdefinierter Session-Name |