Demostración en vídeo del post

En el post anterior sobre Evil-WinRM he mencionado cómo funciona, los mecanismos de autenticación que se podrían emplear sobre un sistema Windows y cómo hacerlo con la herramienta. En esta segunda parte es un buen momento para explorar algunas de las características que a mi juicio, son las más interesantes y por las que la herramienta destaca en un proceso de post-explotación sobre sistemas Windows.

Comandos básicos

Para empezar, la herramienta cuenta con algunas funciones que ayudan en los movimientos de ficheros entre el atacante y la víctima. Estas funciones permiten subir o descargar ficheros con facilidad y son upload y download respectivamente.

Otros comandos básicos también permiten lanzar scripts en Powershell que se encuentran en el «path» indicado en la opción «-s». Esto es especialmente útil para ejecutar rutinas de enumeración sobre el sistema comprometido sin necesidad de subir manualmente el script y lanzarlo en la máquina, además son rutinas que se ejecutan en memoria, lo que facilita en algunos casos la evasión de AVs.

El comando «menu» enseña los comandos disponibles de forma «nativa» en la herramienta y los que se cargan por medio de scripts Powershell. Es una buena manera de ver rápidamente cuáles son los comandos que se encuentran disponibles. Además, cuando se carga un script como el de PowerView entre otros, los módulos (cmdlets) de dichas utilidades aparecen en el listado de comandos, lo que también permite apreciar cuáles son los elementos que se encuentran disponibles en los scripts que se van cargando. El comando services también es útil, ya que permite ver los servicios que se encuentran en ejecución en ese momento y además, enseña el path correspondiente del binario lo que permite ver si hay algún servicio que sea vulnerable a Unquoted Service Path.

Por otro lado, hay una serie de labores que son habituales cuando se ejecutan procedimientos de pentesting sobre entornos Windows, entre las que se encuentran la carga y ejecución dinámica de DLLs y binarios (creados utilizando C#). Nuevamente, Evil-WinRM ayuda en estos procedimientos ya que cuenta con rutinas preparadas para ello. Además, soporta la técnica Donut, la cual permite crear un payload utilizando dicho proyecto y luego «enchufarlo» utilizando Evil-WinRM, evidentemente hacerlo así resulta muy cómodo y ahorra tiempo.

Carga dinámica de DLLs y binarios

Para la carga de una DLL que se encuentra ubicada en el sistema del atacante es posible utilizar la instrucción Dll-Loader. Permite indicar la ubicación de dicha DLL, ya sea en un directorio local, en un servidor HTTP o un recurso compartido SMB. Lo único que hay que tener en cuenta es que no es posible subir cualquier DLL, solamente son admitidas aquellas que se han creado a partir de un programa en C# y compilado con el una herramienta como el Visual Studio .Net o el compilador «dotnet» disponible también para sistemas Linux. Un buen candidato para este tipo de rutinas es precisamente el proyecto GhostPack, el cual incluye herramientas tan potentes e interesantes como Rubeus, Seatbealt, SharpUp o SafetyKatz.

Como se puede apreciar, el binario se ejecuta sin problema y no ha sido necesario transferirlo a la máquina comprometida, se ejecuta en memoria y devuelve el flujo de salida correspondiente. Aunque en la documentación disponible en GitHub se indica que los binarios admiten un máximo de 3 parámetros, tal como se puede comprobar en la imagen anterior se pueden especificar más, todos ellos separados por coma.

Carga y ejecución de «Donuts»

Otra característica interesante que tiene Evil-WinRM es el soporte a los payloads que se pueden generar utilizando la herramienta Donut, la cual cuenta entre sus funcionalidades, la posibilidad de inyectar binarios, DLLs y Assemblies de .Net en la memoria de un proceso seleccionado. Donut es una herramienta muy completa, por ese motivo merece la pena dedicar un post independiente a explicar qué tiene para ofrecer en procesos de pentesting.
La instrucción Donut-Loader disponible en Evil-WinRM es de gran ayuda para simplificar la ejecución de un «Donut» en la máquina comprometida, ya que simplemente recibe el identificador del proceso objetivo y el fichero con el payload generado por Donut, a continuación se encarga de cargar y ejecutar dicho payload en el sistema comprometido, utilizando la memoria del proceso anfitrión.

En la imagen anterior se aprecia cómo se ha se ejecutado un payload de meterpreter utilizando la técnica Donut y Evil-WinRM. No obstante, hay que tener en cuenta que en este caso concreto se ha utilizado el script «donut-maker.py» que permite exporta un fichero «bin» partiendo del ejecutable generado por msfvenom o cualquier otra herramienta.

Sin duda Evil-WinRM ha alcanzado un buen nivel de madurez y se puede utilizar con total confianza en procesos de pentesting, su simplicidad y facilidad de uso le convierten en una herramienta fundamental a la hora de realizar conexiones a sistemas Windows con el servicio de WinRM habilitado. De hecho, como se ha podido comprobar dadas sus características no solamente aplica a procedimientos de pentesting, su uso es perfectamente válido por parte de administradores de sistemas que quieran controlar remotamente un servidor Windows sin necesidad de utilizar un protocolo como RDP.
Merece la pena que aprendas a utilizarla y la adaptes en tus pruebas sobre sistemas Windows.

Un saludo y Happy Hack!
Adastra.