martes, abril 21, 2015

PSBot: Dame PowerShell y Moveré el Mundo [2 de 2]

Por resumir la lista de cosas que se pueden hacer en este entorno con el bot que hemos construido en la primera parte de este artículo, es fácil decir que podemos ejecutar cualquier código o cualquier aplicación a través de la PowerShell y de este bot, pero vamos a ilustrar algunas de las acciones más interesantes en un proceso de Ethical Hacking. Con el objeto de poder sacar el máximo partido de este PSBot, lo mejor es poder generar las funciones de payload directamente en tiempo real. Existen algunas funciones que son enormes, por ejemplo las propias de PowerSploit, como Mimikatz o portscan.

Figura 8: Dame PowerShell y moveré el mundo. Ataques que se pueden hacer.

Por otro lado, podemos tener situaciones en las que necesitamos generar el script con un Meterpreter, por ejemplo con SET, por ello necesitamos crear el código casi dinámicamente y descargarlo al bot. A continuación una lista de las funciones que se incorporaron al bot en esta prueba de concepto.
1. Funciones de calibración: Estas funciones fueron creadas para ejecutar pequeñas instrucciones que prueben que el bot está funcionando correctamente. 
2. Identity: Determina qué usuario somos, el hostname del equipo, los privilegios que tenemos en el equipo o si pertenecemos al grupo administradores. Es fundamental conocer dónde está el bot cuando se hace un pentesting. 
3. Subida y descarga de ficheros: La utilización de funciones que transformar los ficheros a base64 permiten subir y descargar estos ficheros. Al final todo se transforma en un flujo en base64, el cual puede ser subido o descargado. Esta es una de las vías que podemos utilizar para colar binarios en la máquina u obtener información de la máquina, quizá algún pdf, docx, etcétera. 
Figura 9: Subida de Ficheros en BASE64
En la imagen anterior se puede ver contenido en base64 el cual es un fichero que al llegar al bot se transforma en el fichero querido. Para ejecutar la función con el bot se invoca load|download|-path [path fichero base64] –pathTarget [path remoto] –ip [dirección IP dónde leer el fichero en base64].
4. Portscan + PtH: Tener la posibilidad de realizar un escáner de puertos desde PowerShell es algo fundamental para un pentesting. Este código está disponible en PowerSploit, y podemos descargarlo a la máquina dónde nos encontremos con nuestro bot. Utilizar técnicas como Pass the Hash para realizar un desplazamiento lateral en el pentest es otra de las técnicas básicas y más necesarias.
La función portscan dispone de diferentes parámetros, se recomienda su lectura. Un posible ejemplo desde nuestro bot sería ejecutar la siguiente instrucción load|portscan|-hosts [red interna] –xmlout [fichero XML con datos]. El escaneo será volcado a un fichero XML con las direcciones IP escaneadas y los puertos abiertos.

Figura 10: Escaneo de puertos con PortScan usando PSBot
Respecto al PtH, podríamos utilizar la función anterior para subir aplicaciones como WCE, y llevar a cabo la modificación de los hashes. Si los hashes actuales son los necesarios para hacer un desplazamiento horizontal o lateral, podríamos directamente ejecutar una función que permita acceder a otros recursos de otras máquinas, por ejemplo y en “windows clásico” net use x: \\[ip]\c$. 
5. Por supuesto, el gran Mimikatz: Mi amigo Carlos García, pentester en Praga, me comentaba cuando vio la charla que Mimikatz era su día a día en los pentest. Por supuesto, Mimikatz no podía faltar. 
Figura 11: Usando Mimikatz desde PSBot
En PowerSploit tenemos disponible una función que hace la implementación de Mimikatz y que podemos utilizar para, si tenemos el privilegio suficiente en la máquina, obtener información sobre qué usuarios y con qué credenciales se loguearon en dicha máquina. 
6. Pon una VPN en tu pentest y haz un MiTM: En un momento dado del pentesting puede ser interesante sacar información hacia el exterior, o hacer que la navegación de una máquina salga por VPN hacia un servidor externo. Esto podemos verlo como MiTM muy especial. 
Figura 12: Código de Payload para hacer una VPN desde PSBot 
La idea surge del módulo de Metasploit implementado por Borja Merino y que estudiándolo podemos ver que genera un profile de VPN y después utiliza rasdial.exe para ejecutar el profile y generar la conexión. En la siguiente imagen se puede ver cómo quedaría la función para que el bot la descargue, la cargue y la ejecute. Hay que tener en cuenta las tablas de enrutamiento, ya que deberíamos hacer que la métrica de dicha conexión sea la menor, para que automáticamente el tráfico salga a través de la VPN. 

Figura 13: Demostración de PSBot para hacer mitm vía VPN
Una vez que se tiene la VPN conectada a través del bot, podemos ver todo el tráfico de la máquina, y por supuesto añadir más técnicas. Podemos concatenar desde la máquina dónde se encuentra el servidor de la VPN un SSL Strip, por lo que podríamos aprovecharnos de sitios que son vulnerables a esta técnica. 
7. Ejecución de shellcode, sí Meterpreter: Existen diversas formas de conseguir ejecutar una Meterpreter con PowerShell. Se puede utilizar la función Invoke-Shellcode que viene incorporada en PowerSploit. En esta ocasión, decidí utilizar una función propia denominada x86_shellcode, la cual dispone en el interior el código que proporciona SET. En la imagen podemos ver un ejemplo. 
Figura 14: Ejecución de un Meterpreter
El escenario es fácil de entender. Si estamos ejecutando el bot remoto le indicamos desde Twitter la instrucción load|x86_shellcode, por lo que nuestro PSBot irá al servidor de funciones para descargar la función x86_shellcode e invocarla desde el ámbito de la máquina. Una vez cargada la función ejecutará el contenido. Como se ha visto antes, el contenido de la función invoca una PowerShell que lanza instrucciones encodeadas, lo cual es nuestra Meterpreter.


Figura 15: Instalación de Meterpreter vía PowerShell

8. No todo es pentesting, reproducción de video: Una de las funciones curiosas que se pueden implementar es, si estamos en el bot remoto, abrir un Internet Explorer y dirigir al navegador a un video de Youtube. Aquí sí que el límite está en vuestra imaginación.
Presentación en Qurtuba Security Conference

Si queréis ver la presentación que se hizo, la hemos subido a Youtube para que podáis ver las demos en real. Aquí la tenéis íntegra.


Figura 16: Conferencia de PSBot de Pablo González

Por último, como moraleja final podemos decir que existen ciertos entornos en los que se realiza un Ethical Hacking en los cuales un pentester puede encontrarse en una situación así, en los que el bloqueo de los interfaces de comandos tradicionales está activo, pero no el de las PowerShells. Conocer y entender cómo funcionan herramientas como PowerShell es algo vital para ciertas circunstancias, como ya explicaban también Juan Garrido "Silverhack" y Chema Alonso en la charla de Bosses love Excel, Hackers Too: "Too many consoles"

Figura 17: Otro pentester feliz por la existencia de la PowerShell

Carlos García comentó que hacía menos de un mes se encontró con un escenario similar, que ya le podía haber dado la charla meses antes. Por lo que se ve, después de la charla se sigue acordando de ella. No tengo mucho más que añadir, el código no se encuentra disponible de momento, pero puede que pronto se encuentre en Github. Lo importante es la idea que queda de esto, y los millones de utilidades que podemos sacarle a PowerShell en un pentesting. Agradecer a Eduardo Sánchez, Miguel Ángel Arroyo y a todo el equipo de Qurtuba Security Congress su hospitalidad y buen hacer en el evento. ¡Edu, dale al play!

Autor: Pablo González Pérez (@pablogonzalezpe)
Project Manager en Eleven Paths y escritor de los libros:
"Metasploit para Pentesters", "Pentesting con PowerShell" y "Ethical Hacking"

3 comentarios:

Anónimo dijo...

Muchas gracias. Ya estoy creando maquina virtual para probarlo. Después le voy a poner el antivirus kaspersky a ver que hace.

http://forum.kaspersky.com/lofiversion/index.php/t257412-50.html

Anónimo dijo...

No entiendo nada soy un noob ._.

Unknown dijo...

amigo, necesito un codigo para que por medio de powershell pueda navegar en una pagina web por medio de links que no tienen id y les pueda dar click

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares