
Shell WinRM natif Nim avec NTLM, Kerberos, transfert de fichiers, utilitaires en mémoire et reporting AD/OPSEC
Client shell WinRM natif écrit en Nim
Version 1.2.0 · Auteur Chokri Hammedi (blue0x1) · Licence MIT
nimrm est destiné à l'administration légale, aux tests de sécurité et à la recherche sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite d'accès. L'auteur n'est pas responsable de toute utilisation abusive ou de tout dommage causé par cet outil.
nimrm fournit un shell WinRM compact et rapide avec des assistants pratiques d'authentification, d'exécution de commandes, de transfert et de reporting. Il est compilé comme un binaire Nim natif sans dépendances de paquets Nim.
| Domaine | Prise en charge |
|---|---|
| Authentification | Mot de passe NTLM, hash NTLM, Kerberos via KRB5CCNAME |
| Transport WinRM | HTTP, HTTPS/TLS, port personnalisé |
| Shell | PowerShell interactif, préfixe CMD, mode commande unique, autocomplétion des commandes et des chemins locaux |
| Transferts | Envoi/téléchargement de fichiers, transfert récursif de répertoires, relais de fichiers et de répertoires de session à session distante |
| En mémoire | Import de scripts PowerShell, exécution d'assemblies .NET managés |
| Reporting | Contexte AD/domaine, posture de journalisation et d'audit |
| Fiabilité | Encapsulation des messages Kerberos, gestion de la réinitialisation/réessai du transport |
| Composant | Prérequis |
|---|---|
| Compilation | Nim >= 1.6.0 |
| Kerberos | libgssapi_krb5.so.2 sous Linux ou libgssapi_krb5.dylib sous macOS |
| Compilation TLS | OpenSSL et -d:ssl |
| Cible | WinRM joignable sur le port sélectionné |
Nimble :
nimble install nimrm
Télécharger la dernière version :
curl -L -o nimrm https://github.com/blue0x1/nimrm/releases/latest/download/nimrm
chmod +x nimrm
Binaire de version Windows :
Invoke-WebRequest -Uri https://github.com/blue0x1/nimrm/releases/latest/download/nimrm.exe -OutFile nimrm.exe
Paquet 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
Le PKGBUILD BlackArch suit le dernier commit git amont, de sorte que les nouvelles versions parviennent aux utilisateurs de BlackArch lors de leur prochaine mise à jour système. Si nimrm est déjà installé, mettez-le à jour avec :
sudo pacman -Syu nimrm
Compiler depuis les sources :
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
make linux
make ssl
make windows
La cible Windows produit un exécutable autonome compatible SSL à l'emplacement dist/windows/nimrm.exe. Le lanceur est écrit en Nim et intègre le cœur WinRM généré ainsi que les DLL d'exécution requises depuis vendor/windows-runtime/, les extrait dans un répertoire d'exécution temporaire lors de l'exécution, puis lance le cœur avec les mêmes arguments. Cela prend en charge WinRM en HTTP simple sauf si --tls / --ssl est passé, et WinRM en HTTPS lorsque TLS est activé. Le runtime OpenSSL intégré utilise :
libssl-3-x64.dll
libcrypto-3-x64.dll
Le mode Kerberos (-k / --kerb) est chargé paresseusement sous Windows afin que l'exécutable puisse démarrer même lorsque Kerberos n'est pas utilisé. La compilation Windows intègre le runtime MIT Kerberos/GSSAPI utilisé par le mode Kerberos.
Compilation manuelle :
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm est conçu pour rester rapide en utilisant un binaire Nim natif, un runspace WinRM persistant, une logique de transfert par blocs et un rendu de progression compact.
| Opération | Implémentation |
|---|---|
| Envoi | Écritures Base64 par blocs avec réessai adaptatif sur les grandes enveloppes |
| Téléchargement | Blocs Base64 en flux avec suivi de progression et chemin rapide pour les petits fichiers |
| Relais de session distante | Lit depuis une session WinRM et écrit vers une autre via la mémoire du contrôleur sans écrire le fichier sur le disque local |
| Transfert de répertoire | Énumération récursive des fichiers utilisant le même chemin de transfert par blocs |
| Exécution de commandes | Réutilise le shell/runspace WinRM actif au lieu de se reconnecter à chaque commande |
Mot de passe 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
Forcer le chiffrement des messages NTLM sur HTTP :
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --seal
Port personnalisé :
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -p 5985
Commande unique :
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -c 'whoami'
Ignorer la vérification du certificat TLS (certificats auto-signés) :
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure