
Shell WinRM nativa de Nim con NTLM, Kerberos, transferencia de archivos, utilidades en memoria e informes de AD/OPSEC.
Cliente de shell WinRM nativo escrito en Nim
Versión 1.2.0 · Autor Chokri Hammedi (blue0x1) · Licencia MIT
nimrm está diseñado para administración legítima, pruebas de seguridad e investigación en sistemas que usted posee o para los que tiene permiso explícito de acceso. El autor no es responsable por el uso indebido o los daños causados por esta herramienta.
nimrm proporciona un shell WinRM compacto y rápido con ayudantes prácticos de autenticación, ejecución de comandos, transferencia y elaboración de informes. Está compilado como un binario Nim nativo sin dependencias de paquetes Nim.
| Componente |
|---|
Nimble:
nimble install nimrm
Descargar la última versión:
curl -L -o nimrm https://github.com/blue0x1/nimrm/releases/latest/download/nimrm
chmod +x nimrm
Binario de la versión para Windows:
Invoke-WebRequest -Uri https://github.com/blue0x1/nimrm/releases/latest/download/nimrm.exe -OutFile nimrm.exe
Paquete 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
El PKGBUILD de BlackArch sigue la última confirmación de git del repositorio upstream, por lo que las nuevas versiones llegan a los usuarios de BlackArch en su próxima actualización del sistema. Si nimrm ya está instalado, actúalice con:
sudo pacman -Syu nimrm
Compilar desde el código fuente:
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
make linux
make ssl
make windows
Compilación manual:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm está diseñado para mantenerse rápido mediante el uso de un binario Nim nativo, un espacio de ejecución WinRM persistente, lógica de transferencia por fragmentos y una representación compacta del progreso.
Contraseña NTLM:
./nimrm -T 192.168.1.10 -A 'CORP\administrator' -P 'Password123'
Pass-the-hash NTLM:
./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
Forzar cifrado de mensajes NTLM sobre HTTP:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --seal
Puerto personalizado:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -p 5985
Comando único:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -c 'whoami'
Omitir verificación del certificado TLS (certificados autofirmados):
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure
nimrm admite múltiples sesiones WinRM concurrentes. Puede moverse entre diferentes hosts y usuarios sin salir del shell.
Cree una nueva sesión desde una sesión existente:
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
Listar sesiones activas:
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
Cambiar entre sesiones:
[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)
Cerrar una sesión:
[dc02] PS C:\Users\user> kill 2
[*] Killed session: session-2
Copiar archivos entre sesiones activas:
[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 y rupload-dir usan la sesión activa como origen y la sesión nombrada como destino. rdownload y rdownload-dir usan la sesión nombrada como origen y la sesión activa como destino. Estos comandos retransmiten los bytes a través de la memoria de nimrm, por lo que el host controlador no escribe una copia temporal en el disco.
Opciones de sesión:
PowerShell y CMD:
PS> hostname
PS> Get-Process
PS> !ipconfig /all
Transferencias:
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
Dirección de retransmisión remota de sesiones:
# 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
Autocompletado:
PS> upl<Tab>
PS> upload ./pay<Tab>
El prompt interactivo autocompleta nombres de comandos y rutas del sistema de archivos local para comandos de origen local como upload, upload-dir, invoke-script y execute-assembly.
Ayudantes en memoria:
PS> invoke-script ./AdminTools.ps1
PS> execute-assembly ./tool.exe arg1 arg2
Informes:
PS> ad-info
PS> opsec-check
execute-assembly solo admite ensamblados .NET administrados.invoke-script importa en el espacio de ejecución remoto actual.rupload, rdownload, rupload-dir y rdownload-dir no escriben archivos temporales en el host controlador, pero los bytes igualmente pasan por la memoria del controlador y utilizan dos tramos de transferencia WinRM.ad-info y opsec-check son comandos de informe de solo lectura.MIT. Consulte LICENSE.
| Área | Soporte |
|---|
| Autenticación | Contraseña NTLM, hash NTLM, Kerberos mediante KRB5CCNAME |
| Transporte WinRM | HTTP, HTTPS/TLS, puerto personalizado |
| Shell | PowerShell interactivo, prefijo CMD, modo de comando único, autocompletado de comandos y rutas locales |
| Transferencias | Subida/descarga de archivos, transferencia recursiva de directorios, retransmisión remota de archivos y directorios entre sesiones |
| En memoria | Importación de scripts de PowerShell, ejecución de ensamblados .NET administrados |
| Informes | Contexto de AD/dominio, postura de registro y auditoría |
| Fiabilidad | Envoltura de mensajes Kerberos, manejo de reinicio/reintento del transporte |
| Requisito |
|---|
| Compilación | Nim >= 1.6.0 |
| Kerberos | libgssapi_krb5.so.2 en Linux o libgssapi_krb5.dylib en macOS |
| Compilación TLS | OpenSSL y -d:ssl |
| Objetivo | WinRM accesible en el puerto seleccionado |
| Operación | Implementación |
|---|
| Subida | Escrituras Base64 por fragmentos con reintento adaptativo en sobres grandes |
| Descarga | Fragmentos Base64 en streaming con seguimiento del progreso y una ruta rápida para archivos pequeños |
| Retransmisión remota entre sesiones | Lee de una sesión WinRM y escribe en otra a través de la memoria del controlador sin escribir el archivo en el disco local |
| Transferencia de directorios | Enumeración recursiva de archivos mediante la misma ruta de transferencia por fragmentos |
| Ejecución de comandos | Reutiliza el shell/espacio de ejecución WinRM activo en lugar de reconectar por cada comando |
| Opción | Descripción |
|---|
-T, --target | IP o nombre de host de destino |
-A, --account | Nombre de usuario: user, user@domain o DOMAIN\user |
-P, --secret | Contraseña NTLM |
-p, --port | Puerto WinRM |
-N, --nt-proof | Hash NT o hash LM:NT |
-Z, --krb-zone | Anulación del realm Kerberos |
-K, --kerb-spn | Anulación del SPN Kerberos |
-k, --kerb | Usar autenticación Kerberos |
-c, --command | Ejecutar un comando y salir |
--tls | Usar HTTPS/TLS |
--insecure | Omitir la verificación del certificado TLS |
-h, --help | Mostrar ayuda |
| Comando | Descripción |
|---|
/help | Mostrar ayuda |
exit, quit | Cerrar el shell |
!<cmd> | Ejecutar mediante cmd.exe |
upload <local> [remote] | Subir un archivo |
download <remote> [local] | Descargar un archivo |
rupload <remote> <session> [dest] | Copiar un archivo remoto de la sesión activa a otra sesión a través de la memoria |
rdownload <session> <remote> [dest] | Copiar un archivo remoto de otra sesión a la sesión activa a través de la memoria |
rupload-dir <remote> <session> [dest] | Copiar un directorio remoto de la sesión activa a otra sesión a través de la memoria |
rdownload-dir <session> <remote> [dest] | Copiar un directorio remoto de otra sesión a la sesión activa a través de la memoria |
upload-dir <local> [remote] | Subir un directorio |
download-dir <remote> [local] | Descargar un directorio |
invoke-script <ps1> [args] | Importar PowerShell local desde la memoria |
execute-assembly <exe> [args] | Ejecutar .NET administrado desde la memoria |
ad-info | Mostrar contexto de AD/dominio |
opsec-check | Mostrar postura de registro y auditoría |
sessions | Listar todas las sesiones activas |
session <opts> | Crear una nueva sesión |
use <name|id> | Cambiar a una sesión |
kill <name|id> | Cerrar y eliminar una sesión |
| Opción | Descripción |
|---|
-T | Host de destino |
-A | Nombre de usuario |
-P | Contraseña |
-N | Hash NT |
-k | Autenticación Kerberos |
-Z | Realm Kerberos |
-K | Anulación de SPN |
-p | Puerto |
--tls | Usar HTTPS |
-n | Nombre de sesión personalizado |