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:
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
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
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
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
Publicar un comentario