Monday, April 20, 2020

HTTPRevShell: Shell Reversa En PowerShell & Bypass AMSI (All-in-One)

Estas cinco semanas de confinamiento ha dado lugar a que podamos revisar más información y que intentamos evadirnos conociendo nuevos conceptos y nuevas herramientas. Hace poco estuve revisando el blog de DarkByte y encontré un artículo interesante sobre un proyecto llevado a cabo por @3v4Si0N en el que se proporciona una shell inversa en Powershell. Hasta aquí puede parecer un shell inversa más, pero lo que llamó mi atención es que ya preveía que AMSI daría guerra.

Figura 1: HTTPRevShell: Shell reversa en PowerShell & Bypass AMSI (All-in-One)

Ya hemos comentado por aquí que a veces nos dicen que iBombshell no funciona, que AMSI te la detecta y nosotros siempre respondemos que si una medida defensiva como AMSI y Windows Defender detectan la consola de iBombshell es algo bueno y positivo, pero no es lo que tú quieres cuando estas haciendo un Hacking a un Windows.

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

Lo 'único' que tiene que hacer el pentester es hacer un bypass de AMSI. Existen diferentes técnicas y en este blog se han visto unas cuantas. Es más, el propio iBombShell dispone de varias funciones de bypass de AMSI.

Figura 3: iBombShell en GitHub

La estrategia seguida por @3v4Si0N es clara: primero lanzo una función que me permita hacer el bypass de AMSI y luego ya ejecuto el código de la shell inversa. Está bien. Si nos encontramos que el día de mañana al descargar la función que nos propone @3v4Si0N nos la detecta AMSI, habría que ir parte por parte:
1. Cogemos la parte de código del bypass de AMSI e intentamos cargarlo en memoria. 
2. Si nos lo detecta. Tendremos que ir, casi o sin casi, instrucción por instrucción para ver dónde está rompiendo, es decir, dónde se está detectando. Si tenemos esto claro, lograremos llegar a la instrucción que no le gusta a AMSI. A partir de aquí la ofuscación, la modificación o el cifrado pueden ser aliados. Esto ya lo hemos visto en algún post dónde hablamos de los AMSI "Classics". 
3. Una vez que tenemos localizado esto y conseguimos cargar la función en memoria, se ejecuta. AMSI deshabilitado. La técnica más buscada y utilizada es ScanBuffer igual a 0. De esta forma AMSI informará de que no ha leído nada, pero realmente se está ejecutando lo que queramos.
De todo esto se habla en la charla Powershell Revolution: El mundo del pentesting en tus manos que os dejo aquí en un vídeo para que te la veas y no te dejes nada sin aprender.


Figura 4: PowerShell Revolution

Y ahora vamos a ver paso a paso cómo probar estos dos escenarios de los que hemos hablando antes. Primero con conexiones HTTP y luego añadiendo una capa de cifrado SSL a las comunicaciones para tener una conexión HTTPs.

Manos a la obra: probando HTTP revshell

Se puede descargar desde su Github, recomendable hacer un clone desde su rama Dev:
git clone –b dev [git url]
De esta forma ver sus últimos avances disponibles antes de pasar a master. Como decía anteriormente, lo que me llamó la atención de la herramienta era su integración directa con un bypass de AMSI. En el script podemos encontrar una función llamada Invoke-PatchMe, la cual implementa ese bypass.

Figura 5: Función Invoke-Patchme

En la parte del command and control no hay mucho que decir, tenemos dos opciones o ir por HTTP o gestionar la shell a través de HTTPs. La segunda opción es una opción más interesante, ya que permitirá evadir la detección por análisis de lo que estamos enviando, pero se podrá detectar el uso del SSL en una comunicación, digamos no autorizada. Hay que barajar el entorno y los PROs y CONs en cada escenario de red y veremos cómo hacerlo usando este servidor escrito en Pyhton.

Figura 6: Libro de "Python para Pentesters" y "Hacking con Python" de 0xWord

La ejecución del C2 es sencilla, simplemente utilizamos o lanzamos el fichero server.py apuntando a una dirección IP y un puerto local. Tanto dirección IP como puerto son locales, y como podéis ver, el servidor está escrito en nuestro querido Python.

Figura 7: HTTP/S Revshell escrito en Python desde nuestro Kali Linux

Para el ejemplo, levantamos una Powershell en un Windows 10 y probamos a descargar el script, tal y como comenté anteriormente, si esto lo detecta AMSI habría que dividir el contenido del script e ir cargándolo poco y, quizá, necesitemos del uso de la ofuscación.

Figura 8: Pentesting con PowerShell 2ª Edición

Es decir, para aplicar esa aproximación paso a paso, sería como utilizar la estrategia Divide & Conquer (Divide y Vencerás) que tanto se usa en algorítmica tradicional, pero aplicado al mundo del pentesting en una disciplina de un ciberseguridad.

Figura 9: Ejecución Invoke-WebRev

En este caso, no hay detección por parte de AMSI, por lo que podemos invocar directamente la shell reversa. Una vez que se ejecuta la función Invoke-WebRev pasan dos cosas:
1. La primera es que se ha ejecutado el Invoke-PatchMe y AMSI se ha parcheado, logrando el bypass de éste. 
2. Ahora se invoca a la función Invoke-WebRev y se conecta contra el C2 escrito en Python.
De la primera situación podemos sacar lo siguiente. Para comprobar que AMSI está deshabilitado, si ejecutamos el comando "amsiutils" veremos que no lo reconoce. Si AMSI estuviera habilitado, el mensaje sería distinto, indicando que ha sido bloqueado por ser software malicioso. Este comando es un comando de prueba para ver si AMSI está habilitado o no.

Figura 10: Comprobando si AMSI está deshabilitado o no

Cuando la función Invoke-WebRev es ejecutada, se logra la conexión con el C2. Debemos aceptarla dando un ENTER. El juego de peticiones es curioso, ya que desde la shell se envía un POST, la primera vez, dejando abierta la conexión. Cuando queramos interactuar con la shell, contestaremos con un OK y algo más de info en forma de comando.

Figura 11: Ejecución de comando dir sobre sesión PowerShell remota

Entonces, el resultado de la ejecución de la shell se devuelve de nuevo en un POST que deja abierta la conexión para el siguiente comando. Es como si hubiera un desfase. En la siguiente imagen se puede ver la salida de la ejecución del comando "dir" sobre la Powershell remota con la que se interactúa gracias al uso de la shell implementada en Powershell.

Figura 12: Tráfico generado por HTTP ( POST y OKs)

Aquí se puede ver el tráfico por HTTP y el juego de POST y respuestas de OK. Salvo que el OK lo manda el C2 cuando quiere algo, y el POST es generado como una nueva petición que sale desde la Powershell hasta el C2 cuando se quiere devolver resultados. Es cómo utilizar HTTP de forma asíncrona.

Figura 13: Ejecución de servidor con cifrado SSL

Para ver cómo funciona la opción con SSL ejecutamos lo siguiente:
 Python server.py –ssl [ip] [puerto]
La única diferencia con el caso anterior es que hacemos uso del parámetro SSL. Tal y como se puede ver en las imágenes anterior y siguiente.

Figura 14: Ejecución con cifrado ssl

Si analizamos con Wireshark la comunicación, veremos que ya no hay tráfico por HTTP y que en cuanto enviamos comandos y obtenemos resultados, tenemos el tráfico cifrado. Ahí se puede ver el inicio de una conexión con el Client HELLO.

Figura 15: Ahora el tráfico va completamente cifrado

Sin duda es una herramienta interesante que puede ser utilizada dentro de herramientas como iBombShell o Empire. Incluso, se puede hacer uso a través de Metasploit gracias al uso de la extensión de Powershell que existe en Meterpreter. Lo ideal es almacenarla dentro de alguna DLL y que en el proceso de explotación de una vulnerabilidad se inyecte la DLL y se ejecute esta interesante shell.

Saludos,

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 16: Contactar con Pablo González

Related articles

No comments:

Why Should you take care of Day by Day Pregnancy?


Taking care of your baby and your body on Day by Day Pregnancy

If you're pregnant now, you should know how important is to take care of yourself and your future baby. Well, pregnant is something that every married girl dream of. Sooner or later, after you married and settle down, your husband and yourself will love to have a new comer in your house, especially if only both of you living together without living with your other family members like your parents, grandparents or any other sibling

It is extremely important to take care of your baby and yourself on day by day pregnancy. You must eat the right food and make sure that the food you ate will not harm your baby and yourself.

Yes, pregnant is great, eating right and good nutrition food for your baby is a must! but how about the excessive pounds you will get when you're pregnant and after you delivered? is it something that you must consider of? as a woman, it is extremely important to take care of our weight, fat means ugly, and what happen when we're fat? of course, we will lost our self confident at first. And what happen when we lost our self confident?

If you're not even dare to look at yourself in the mirror, do you think that your belove husband will like to hug you, kiss you and look at you like before? even if your husband looks at you like before, you might probably think, "what's wrong with him, he look at my fat meat all the time!"

well, dont' let this happens to you. It is Extremely important to get rid of the excessive fat during and after pregnancy.

Here at Pregnancy Without Pounds, I found an absolutely great course and guide for your day by day pregnancy course, free of charge. They'll send you article and some guide several times a week for you to learn how to take care of yourself and your baby.

This is what they claim: