Devvortex
Executive summary — Devvortex is a very current Easy Linux box: a hidden subdomain (
dev.devvortex.htb) hosts a Joomla 4.2.6 vulnerable to CVE-2023-23752, which leaks the database credentials unauthenticated. With them we log into Joomla's admin panel and inject a webshell through the template editor (RCE aswww-data); a bcrypt hash dumped from the users table gives SSH once cracked, and root comes from abusing apport-cli viasudo(CVE-2023-1326), forcing a crash and escaping from thelesspager. A vhost fuzzing → Joomla → info leak → RCE → MySQL → SSH → apport-cli → root path.
| Platform | Hack The Box |
| Operating system | Linux (Ubuntu) |
| Difficulty | Easy |
| Status | Retired |
| Target IP | 10.129.16.227 |
Attack map
[22,80] nmap → SSH held in reserve, nginx with no CMS on the default vhost
│ whatweb + ffuf (Host: FUZZ) → dev.devvortex.htb (Joomla 4.2.6)
▼
CVE-2023-23752 — /api/.../config/application?public=true → MySQL creds (lewis)
│ reused on Joomla's admin panel
▼
[Joomla admin] template editor (Atum) → webshell → RCE (www-data)
│ MySQL → sd4fg_users table → logan's bcrypt hash → hashcat (19 s)
▼
[SSH] logan : tequieromucho (user.txt)
│ sudo -l → /usr/bin/apport-cli (ALL : ALL)
▼
[ROOT] CVE-2023-1326: forced crash → apport-cli opens less as root → !/bin/bash
1. Recon
1.1 Port scan
Without knowing what the box exposes, a full scan of every TCP port (not just the top-1000) avoids missing services on high ports.
nmap -p- --min-rate 5000 -sV -sC -oA devvortex 10.129.16.227
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11
80/tcp open http nginx/1.18.0 (Ubuntu)
Only two ports: SSH is kept in reserve until we have credentials, and HTTP is the main attack surface.
1.2 Technology fingerprinting
whatweb http://devvortex.htb
curl -I http://devvortex.htb
Bootstrap, jQuery 3.4.1, nginx 1.18.0, Ubuntu Linux
The main domain shows no CMS at all — it's a static page. That suggests the real application lives elsewhere, likely a different vhost that nginx routes by the Host header.
1.3 Subdomain fuzzing
nginxcommonly acts as a reverse proxy and decides which backend to serve based on the request'sHostheader. Swapping that header for every word in a wordlist, and filtering out responses identical to the default vhost's, uncovers subdomains that don't resolve in public DNS.
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://devvortex.htb -H 'Host: FUZZ.devvortex.htb' -fc 302,301
dev [Status: 200, Size: 23221] (the default vhost's response is 18048 bytes)
dev.devvortex.htb returns a different size than the default vhost: a different application sits behind it. Added to /etc/hosts:
echo "10.129.16.227 dev.devvortex.htb" | sudo tee -a /etc/hosts
1.4 Identifying Joomla
whatweb http://dev.devvortex.htb
curl -s http://dev.devvortex.htb/administrator/ | head -50
The /administrator/ path is Joomla's classic login screen. The exact version is confirmed from the installation's manifest file:
curl -s http://dev.devvortex.htb/administrator/manifests/files/joomla.xml | grep '<version>'
<version>4.2.6</version>
Resumen ejecutivo — Devvortex es un Linux Easy con una cadena muy actual: un subdominio oculto (
dev.devvortex.htb) aloja un Joomla 4.2.6 vulnerable a CVE-2023-23752, que filtra las credenciales de la base de datos sin autenticación. Con ellas se entra al panel de administración de Joomla y se inyecta una webshell por el editor de plantillas (RCE comowww-data); un hash bcrypt volcado de la tabla de usuarios da acceso SSH tras crackearlo, y el root llega abusando de apport-cli porsudo(CVE-2023-1326), forzando un crash y escapando desde el paginadorless. Recorrido vhost fuzzing → Joomla → info leak → RCE → MySQL → SSH → apport-cli → root.
| Plataforma | Hack The Box |
| Sistema operativo | Linux (Ubuntu) |
| Dificultad | Easy |
| Estado | Retired |
| IP objetivo | 10.129.16.227 |
Mapa del ataque
[22,80] nmap → SSH de reserva, nginx sin CMS en el vhost por defecto
│ whatweb + ffuf (Host: FUZZ) → dev.devvortex.htb (Joomla 4.2.6)
▼
CVE-2023-23752 — /api/.../config/application?public=true → creds MySQL (lewis)
│ reutilizadas en el panel de admin de Joomla
▼
[Joomla admin] editor de plantillas (Atum) → webshell → RCE (www-data)
│ MySQL → tabla sd4fg_users → hash bcrypt de logan → hashcat (19 s)
▼
[SSH] logan : tequieromucho (user.txt)
│ sudo -l → /usr/bin/apport-cli (ALL : ALL)
▼
[ROOT] CVE-2023-1326: crash forzado → apport-cli abre less como root → !/bin/bash
1. Reconocimiento
1.1 Escaneo de puertos
Sin saber qué expone la máquina, un escaneo completo de todos los puertos TCP (no solo el top-1000) evita pasar por alto servicios en puertos altos.
nmap -p- --min-rate 5000 -sV -sC -oA devvortex 10.129.16.227
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11
80/tcp open http nginx/1.18.0 (Ubuntu)
Solo dos puertos: SSH se guarda para cuando haya credenciales, y HTTP es la superficie de ataque principal.
1.2 Identificación de tecnologías
whatweb http://devvortex.htb
curl -I http://devvortex.htb
Bootstrap, jQuery 3.4.1, nginx 1.18.0, Ubuntu Linux
El dominio principal no muestra ningún CMS: es una página estática. Esto sugiere que la aplicación real vive en otro sitio — probablemente un vhost distinto que nginx enruta por el header Host.
1.3 Fuzzing de subdominios
nginxsuele actuar como reverse proxy y decide qué backend servir según el headerHostde la petición. Sustituyendo ese header por cada palabra de un diccionario, y filtrando las respuestas idénticas a la del vhost por defecto, se pueden descubrir subdominios que no resuelven en DNS público.
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://devvortex.htb -H 'Host: FUZZ.devvortex.htb' -fc 302,301
dev [Status: 200, Size: 23221] (la respuesta por defecto pesa 18048 bytes)
dev.devvortex.htb devuelve un tamaño distinto al del vhost por defecto: hay una aplicación diferente detrás. Se añade a /etc/hosts:
echo "10.129.16.227 dev.devvortex.htb" | sudo tee -a /etc/hosts
1.4 Identificación de Joomla
whatweb http://dev.devvortex.htb
curl -s http://dev.devvortex.htb/administrator/ | head -50
La ruta /administrator/ es el panel de login clásico de Joomla. Se confirma la versión exacta consultando el manifiesto de la instalación:
curl -s http://dev.devvortex.htb/administrator/manifests/files/joomla.xml | grep '<version>'
<version>4.2.6</version>
This content is Root Access only. Everything else on the site — the free tier, the whole public library — stays open.
See Root Access plansNo account? Create one free then upgrade from your console.
Este contenido es solo para Root Access. Todo lo demás del sitio — el nivel gratuito, toda la biblioteca pública — sigue abierto.
Ver planes de Root Access¿Sin cuenta? Crea una gratis y luego mejora desde tu consola.