Máquina: Upload, from DockerLabs
nmap -p- --open -sS -vvv --min-rate 5000 -n -Pn 172.17.0.2
El único puerto abierto es el 80.
nmap -p80 -sC -vvv 172.17.0.2
Observamos que la pagina del puerto 80 soporta los siguientes métodos: GET/POST/HEAD/OPTIONS. Y además menciona que hay una página con el título "Upload here your file" lo cual nos da una pauta de que podremos subir un archivo. ¿Podremos lograr RCE (remote code executio) por medio de un archivo? Sería ideal para entablar una reverse shell.
gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 200 -x php,txt
Aparecen 2 resultados: \
Endpoint | Status code |
---|---|
/upload.php | 200 |
/uploads | 301 |
/.php | 403 |
Efectivamente hay un botón que permite subir cualquier tipo de archivo, APARENTEMENTE.
Luego de jugar un rato con BurpSuite y subir varios archivos no se observa ningún comportamiento "extraño" ni que permita intuir cómo ejecutar el archivo que acabamos de subir.
En el paso (4) encontramos que había otro endpoint (/uploads) quizá allí se almacenan los archivos y los podamos ejecutar.
Efectivamente encontramos ahí los archivos pero no podemos ejecutarlos, se descargan, al menos los que subimos sin extensión o con extensión .sh. ¿Y si probamos subiendo alguno .php?
7) Creamos un payload PHP con el objetivo de poder ejecutarlo y entablar una reverse shell. Para ello usamos revshells.com/
Dentro de revshells.com cargamos la IP de nuestra máquina atacante y el puerto por el que queremos escuchar. De payload seleccionamos el modo 'PHP PentestMonkey' y lo copiamos a un archivo con extensión .php y lo subimos a /upload.php
nc -n -vv -l -p 8080
-n: solo IPs, evita resolución DNS
-vv: doble verbosidad
-l: modo escucha
-p: puerto local
\
Si vamos al endpointe /uploads
ya vimos que se listaban todos los archivos. Si clickeamos a un archivo con extensión .php se va a ejecutar y recibimos, en la terminal con netcat corriendo, una conexión.
El usuario es www-data
, ahora ya es cuestión de escalar privilegios.
Lo principal es ver si tenemos algún permiso especial para ejecutar comandos, para ello usamos\
sudo -ll
-ll: lista los privilegios del usuario actual. Doble para más detalles
Sorprendentemente el usuario actual tiene permisos para ejecutar /usr/bin/env
como root. Entonces simplemente podemos aprovecharnos de ese permiso para abrir una terminal.
sudo /usr/bin/env bash
Así de fácil logramos que se abra una terminal donde el usuario ahora es root
.
Este método funcionó por lo siguiente:
- logramos un RCE via la subida de un archivo
- no se requirió contraseña del usuario actual para ejecutar
sudo
- el usuario actual tiene acceso a
/usr/bin/env
como root