Ir al contenido

Los 40 ladrones

Este documento describe la resolución completa de la máquina Los 40 ladrones, creada por firstatack para la plataforma DockerLabs y clasificada como fácil.

El objetivo es ofrecer un análisis claro, ordenado y técnicamente fundamentado que incluya:

  • Identificación de vectores de entrada.
  • Explotación mediante técnicas de enumeración y uso de utilidades de red.
  • Descubrimiento y uso de artefactos sensibles presentes en la aplicación.
  • Escalada de privilegios mediante uso controlado de sudo.

La metodología se organiza en tres fases principales:

  1. Reconocimiento: detección de servicios y análisis del contenido web.
  2. Explotación: activación de servicios ocultos y obtención de acceso inicial.
  3. Escalada de privilegios: aprovechamiento de privilegios sudo para obtener root.

Todas las pruebas se realizaron en el entorno aislado ofrecido por DockerLabs.


AtributoValor
NombreLos 40 ladrones
Autorfirstatack
DificultadFácil
Fecha04/07/2024
PlataformaDockerLabs

Descomprimir la máquina:

Ventana de terminal
unzip "Los 40 ladrones.zip"

Arrancar el contenedor:

Ventana de terminal
sudo bash auto_deploy.sh "Los 40 ladrones.tar"

El script de despliegue devuelve la IP interna que será utilizada durante todo el análisis:

IP asignada


Organizar un directorio donde centralizar hallazgos y herramientas mejora la trazabilidad:

Ventana de terminal
mkdir -p "Los 40 ladrones"/{content,exploits,nmap,gobuster,scripts}
cd "Los 40 ladrones"

Sugerencia: para evitar problemas con espacios en nombres, en flujos automatizados conviene usar guiones bajos (por ejemplo los_40_ladrones), pero aquí mantengo el nombre original por coherencia con el repositorio.

Se realiza un escaneo de puertos TCP para identificar servicios expuestos:

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

Puertos detectados:

  • 80/tcp — HTTP

Puertos abiertos

Observación: en este objetivo el servicio HTTP es el vector inicial; no se observa SSH abierto antes de realizar acciones adicionales.

Se usó gobuster para descubrir rutas y archivos accesibles desde el servidor web:

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

gobuster scan

Se detectaron dos recursos de interés:

  • index.html — página por defecto del servidor Apache.
  • qdefense.txt — archivo de texto accesible que contiene una pista operativa. adefense

El contenido de qdefense.txt sugiere una secuencia de puertos (knock sequence) que activa un servicio adicional (knockd) en la máquina objetivo. Esta es la pista clave para los siguientes pasos.


2.1 Activación de puertos mediante port knocking

Sección titulada «2.1 Activación de puertos mediante port knocking»

La pista contenida en qdefense.txt indicaba la secuencia de puertos a golpear (por ejemplo 7000,8000,9000). Se usó la utilidad knock para enviar la secuencia:

Ventana de terminal
knock 172.17.0.2 7000,8000,9000 -v

knock salida

Nota: observa la inconsistencia habitual en entornos CTF entre IPs usadas en distintos ejemplos (172.18.0.2 vs 172.17.0.2). Debes usar la IP que te devolvió el script de despliegue. Aquí se ejemplifica el flujo: primero se “golpean” los puertos en la IP objetivo.

Tras enviar la secuencia se re-ejecutó un escaneo de puertos para comprobar cambios en el estado de los servicios:

Ventana de terminal
nmap -p- -sS -n 172.17.0.2 -oG after_knock
extractPorts after_knock

La segunda pasada mostró que 22/tcp (SSH) se encontraba ahora abierto:

second scan with nmap

La pista en qdefense.txt también sugería un nombre de usuario (toctoc). Con SSH disponible y un usuario objetivo, se intentó un ataque por diccionario con hydra (solo en entorno de laboratorio):

Ventana de terminal
hydra -l toctoc -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2

hydra attack

Tras la ejecución se obtuvo una credencial válida y se estableció sesión SSH con el usuario toctoc.


Una vez dentro como toctoc, procedimos a identificar posibilidades de escalada.

Listar los comandos permitidos por sudo para el usuario:

Ventana de terminal
sudo -l

Salida relevante (captura):

sudo -l result

La salida indica que el usuario puede ejecutar /opt/bash con privilegios de root sin necesidad de contraseña.

Razonamiento: si un binario se puede ejecutar como root y permite interacción o ejecución de comandos arbitrarios (por ejemplo, un intérprete de comandos o una utilidad que permite abrir shells), se puede utilizar para invocar una shell privilegiada.

Ejecución como toctoc:

Ventana de terminal
sudo /opt/bash

Esto proporciona una shell con UID 0, por lo tanto acceso root:

root user

Comentario de seguridad: conceder ejecución sin restricciones de binarios que actúan como intérpretes o que permiten ejecutar subcomandos es una práctica insegura. El uso de sudo debe restringirse a comandos específicos y, cuando sea posible, evitar NOPASSWD para utilidades con alto impacto.


  1. Exposición de un mecanismo de activación (port knocking) documentado públicamente: la pista en qdefense.txt facilita el re-descubrimiento de servicios ocultos. Este tipo de información no debe publicarse o debe protegerse.
  2. Servicios que cambian de estado mediante knockd sin control adicional: activar servicios a través de secuencias conocidas puede facilitar el acceso si la secuencia es descubierta o incluida en archivos accesibles.
  3. Cuenta con credenciales débiles o predecibles: un usuario objetivo (toctoc) fue susceptible a un ataque por diccionario; políticas de contraseñas robustas son necesarias.
  4. Permisos sudo demasiado permisivos: permitir ejecutar /opt/bash como root sin restricciones representa una vulnerabilidad crítica que permite elevación directa a root.

  1. Eliminar pistas operativas del contenido público

    • No publicar archivos que describan mecanismos de seguridad o secuencias de activación (por ejemplo, knock sequences).
  2. Fortalecer el control sobre servicios dinámicos (knockd)

    • Usar mecanismos adicionales de autenticación o listas blancas de IP para controlar quién puede activar servicios.
    • Evitar dejar la secuencia escrita en archivos accesibles públicamente.
  3. Política de contraseñas y protección contra fuerza bruta

    • Forzar contraseñas largas y únicas; habilitar bloqueo de cuentas o rate-limiting tras intentos fallidos.
    • Monitorizar intentos de acceso sospechosos y establecer alertas.
  4. Revisar y restringir reglas sudo

    • No permitir NOPASSWD para binarios que brinden capacidad de ejecución de comandos o shells.
    • Reemplazar permisos genéricos por comandos concretos y, si es necesario, envolverlos con scripts controlados que validen argumentos.
  5. Seguridad en capas

    • Implementar segmentación de red y firewall para proteger servicios sensibles.
    • Registrar y auditar el uso de herramientas administrativas y cambios de estado en servicios.
  6. Pruebas periódicas y hardening

    • Realizar revisiones de configuración y pruebas de penetración internas con regularidad.
    • Mantener inventario de servicios y control de cambios para evitar fugas de información operativa.