miércoles, marzo 18, 2020

Pentesting con PowerShell: Movimiento lateral con Invoke-WMIExec

En las últimas semanas y meses he ido hablando sobre diferentes técnicas de movimiento lateral como, por ejemplo, el uso de los objetos DCOM con la técnica ShellWindows - también con DCOM usando la MMC (Microsoft Management Console) - o con el uso del protocolo RDP con SharpRDP. Hoy quería mostrar otra forma de hacer un Lateral Movement (Movimiento Lateral) en un Ethical Hacking a través del uso de WMI y Powershell. Es decir, un poquito de Pentesting con PowerShell para hoy.

Figura 1: Pentesting con PowerShell: Movimiento lateral con Invoke-WMIExec

Ya sabemos que Powershell es muy utilizado hoy en día por cualquier Red Team y en cualquier proyecto de Ethical Hacking. La importancia que ha cobrado Powershell en la post-explotación es muy grande. Por esta razón han ido saliendo protecciones como el modo restringido del lenguaje o el propio AMSI. De estos también hemos hablado en el último año, y es que el bypass de AMSI está cotizado y es un proceso con el que cualquier pentester debe enfrentarse.

Figura 2: Libro de Pentesting con PowerShell 2ª Edición

Lo dicho, hoy quería analizar el uso de WMI para hacer movimiento lateral, incluyendo una escalada de privilegios, en el caso de que se consiga el hash de un administrador local de una máquina del dominio o de la red en la que nos encontremos. La función Invoke-WMIExec puede descargarse desde el repositorio de Github de su creador Kevin Robertson.

Figura 3: GitHub de Kevin Robertson

Lo primero que nos puede llamar la atención al volcar la función en una Powershell en Windows 10 es que AMSI “no se queja”. Aunque en el artículo veremos cómo desde un Windows 7 llegamos a ejecutar código en Windows 10 gracias a este pass-the-hash, me ha resultado curioso ver que AMSI no diga nada sobre la función.

Figura 4: Hacking Windows: Ataques a sistemas y redes Microsoft

Eso sí, si tenéis activo el modo restringido del lenguaje en Powershell, éste sí que evitará la ejecución de la función. En la siguiente imagen se puede ver cómo se ha cargado la función en el proveedor de funciones de Powershell en Windows 10. Dicho esto, vamos a seguir viendo qué podemos hacer.

Figura 5: Función cargada en el proveedor de PowerShell

Ahora vamos a probar en Windows 7 con una Powershell 5.1 la función. Lo primero es descargarla a memoria y una vez cargada la vamos a ejecutar. La instrucción que vamos a lanzar es:
Invoke-WMIExec –Hash [hash NTLM] –Target [Dirección IP] 
        –Username Administrator –Command [comando a ejecutar]
Aquí nos damos cuenta que si ejecutamos el comando whoami no podremos ver la salida, por lo que optamos por el comando “cmd.exe /K echo hola > c:\boom.txt”. Este comando remoto levantará una CMD que pintará un “hola” y lo redirigirá a un archivo en C:\ llamado boom.txt.

Figura 6: Redirección a boom.txt

Tenemos que tener claro que para poder escribir en C:\ tenemos que tener privilegios en el sistema, pero estamos autenticando como Administrator, por lo que los tenemos. Aquí también hacemos escalada de privilegios en el sistema, gracias al hash.

Muchas veces nos preguntamos y podemos hacer lo mismo con un usuario que no sea RID = 500, es decir, que no sea administrador “real” de la máquina. Tal como está el sistema actualmente no, pero existe una clave en el sistema que si está activa habilita el uso del pass-the-hash a usuario no RID 500. En la siguiente imagen podemos ver cómo creamos la clave LocalAccountTokenFilterPolicy. Es una DWORD con valor 1.

Figura 7: Clave que habilita que se haga el pth (pass-the-hash)

Si esta clave existe, se podrá hacer un ataque de red tipo pth (pass-the-hash) con cualquier usuario. Vamos a comprobarlo. En el primer ejemplo de la imagen vemos que cambiamos el hash del usuario Administrator y la ejecución de Invoke-WMIExec falla. Acceso denegado. Después, probamos con el usuario IEUser y con su hash correcto, pero nos falla, ¿Por qué? Esa ejecución es de antes de habilitar la clave del registro anterior.

El tercer intento que ya es correcto, en lo que autenticación se refiere, funciona debido a que el hash es correcto con el usuario y la clave del registro está habilitada. El fichero boom.txt no se escribe en C:\ ya que el usuario IEUser no tiene privilegio. El último caso es el que funciona correctamente, tanto en autenticación como en la creación del fichero, ya que el usuario tiene permisos en su carpeta.

Figura 8: Ejecución correcta

Ahora vamos a ver el resultado de la última ejecución. Se crea el fichero indicado en el parámetro Command. El escritorio del usuario IEUser recoge el archivo ridnot500.txt con el contenido “hola”, como se indicaba en la instrucción Invoke-WMIExec.
Figura 9: Fichero creado en C:/

Como se puede ver esta técnica proporciona integración con Powershell, lo cual ayuda a ejecutarla en modo “fileless” y permite tener más vías para llevar a cabo este tipo de movimientos laterales en un pentest o un Ethical Hacking. Otra técnica para la mochila del pentester a tener muy en cuenta.

Como nota final, en esta campaña de encierro - donde también #YoMeQuedoEnCasa - sabéis que tenéis un descuento del 10% en todos los libros de hacking, pentesting y seguridad informática en 0xWord. Aprovechemos este tiempo para aprender muchas más cosas.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González


Figura 11: Contactar con Pablo González

No hay comentarios:

Publicar un comentario