Evil-WinRM: shell que usa WinRM para hacking/pentesting

Uno de los proyectos más interesantes que tenemos en el Github de Hackplayers es el de Evil-WinRM, que Luis, Oscar y Jari acaban de actualizar con una nueva release que implementa pass-the-hash.


Si alguno no conocía la herramienta, decir que Evil-WinRM es una shell que usa WinRM con características muy interesantes para ayudarnos en la post-explotación:
  • Historial de comandos      
  • Autocompletado de comandos y ficheros locales
  • Subida y descarga de archivos
  • Listar servicios de máquinas remotas
  • Cargar scripts de Powershell
  • Cargar en memoria dlls evadiendo algunos AV
  • Cargar en memoria C# compilados/exe's evadiendo algunos AV
  • Cargar payloads x64 generados con la técnica de donut
  • Mensajes de salida en color (se puede deshabilitar opcionalmente)
  • SSL y soporte de certificados
  • Soporte para pass-the-hash
Requisitos

Ruby 2.3 o superior con algunas gemas:

winrm >=2.3.2, winrm-fs >=1.3.2, stringio >=0.0.2 y colorize >=0.8.1. 

Dependiendo del método de instalación (3 disponibles) podría ser necesario instalarlas manualmente.

Instalación

Método 1. Clonar Git e instalar dependencias en el sistema manualmente

    Paso 1. Instalar dependencias manualmente: ~$ sudo gem install winrm winrm-fs colorize stringio
    Paso 2. Clonar el repositorio: git clone https://github.com/Hackplayers/evil-winrm.git
    Paso 3. Listo. ¡Solo ejecútalo! ~$ cd evil-winrm && ruby ​​evil-winrm.rb -i 192.168.1.100 -u Administrador -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'

Método 2. Uso de bundler (las dependencias no se instalarán en el sistema, solo para usar evil-winrm)

    Paso 1. Instalar bundler: gem install bundler: 2.0.2
    Paso 2. Instalar dependencias con bundler: cd evil-winrm && bundle install --path vendor /bundle
    Paso 3. Lánzalo con bundler: bundle exec evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'

Método 3. Instalación directamente como ruby ​​gem (las dependencias se instalarán automáticamente en el sistema)

    Paso 1. Instálalo (instalará dependencias automáticamente): gem install evil-winrm
    Paso 2. Listo. ¡Solo ejecútalo! ~$ evil-winrm -i 192.168.1.100 -u Administrador -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'

Uso

Usage: evil-winrm -i IP -u USER [-s SCRIPTS_PATH] [-e EXES_PATH] [-P PORT] [-p PASS] [-H HASH] [-U URL] [-S] [-c PUBLIC_KEY_PATH ] [-k PRIVATE_KEY_PATH ]
    -S, --ssl                        Enable ssl
    -c, --pub-key PUBLIC_KEY_PATH    Local path to public key certificate
    -k, --priv-key PRIVATE_KEY_PATH  Local path to private key certificate
    -s, --scripts PS_SCRIPTS_PATH    Powershell scripts local path
    -e, --executables EXES_PATH      C# executables local path
    -i, --ip IP                      Remote host IP or hostname (required)
    -U, --url URL                    Remote url endpoint (default /wsman)
    -u, --user USER                  Username (required)
    -p, --password PASS              Password
    -H, --hash HASH                  NTLM hash
    -P, --port PORT                  Remote host port (default 5985)
    -V, --version                    Show version
    -h, --help                       Display this help message

upload: los archivos locales se pueden completar automáticamente con el tabulador. Se recomienda utilizar rutas absolutas para el destino para evitar errores. De lo contrario, podría obtener errores no controlados debido a las limitaciones de Winrm-fs.

         uso: upload local_path remote_absolute_path

download: lo mismo de antes, se recomienda utilizar rutas absolutas para evitar errores. De lo contrario, se podría obtener errores no controlados debido a las limitaciones de Winrm-fs.

         uso: download remote_absolute_path local_path

services: enumera todos los servicios. No se necesitan permisos de administrador.


menu: permite cargar las funciones Donut-Loader, Invoke-Binary o l04d3r-LoadDll que se explican a continuación.


Donut-Loader: permite inyectar payloads x64 generados con la técnica de donut. No es necesario encodear el payload.bin, ¡solo genera e inyecta!


Puedes usar donut-maker para generar el payload.bin directamente si no usas Windows. Este script usa un módulo de Python escrito por Marcello Salvati (byt3bl33d3r). Se puede instalar usando pip:

pip3 install donut-shellcode


Invoke-Binary: permite ejecutar exes compilados de c# en la memoria. El nombre se puede completar automáticamente con la tecla tab y permite hasta 3 parámetros. Los ejecutables deben estar en la ruta establecida en el argumento -e.


l04d3r-LoadDll: permite cargar dlls en memoria, es equivalente a:
[Reflection.Assembly]::Load([IO.File]::ReadAllBytes("pwn.dll"))


Como veis, el archivo dll puede ser alojado por smb, http o localmente. Una vez que se carga el menú de tipos, es posible completar automáticamente todas las funciones.


Carga de scripts ps1

Para cargar un archivo ps1 solo se tiene que escribir el nombre (permite autocompletar). Los scripts deben estar en la ruta establecida en el argumento -s. Escribiremos menu nuevamente y veremos las funciones cargadas.


Repositorio: https://github.com/Hackplayers/evil-winrm

Comentarios