flagInternal DockerLabs (Easy)

Contexto de la maquina

Trayectoria Internal

Descripción

Internal – SysVault Backup Lab es una máquina Linux vulnerable desplegada en entorno local mediante contenedor. El laboratorio combina explotación web, evasión de filtros tipo WAF, inyección de comandos a nivel sistema y escalada de privilegios mediante binarios con permisos SUID mal configurados.

El escenario parte de un servicio web con virtual hosting interno, desde el cual se descubre un subdominio que expone una funcionalidad vulnerable a inyección de comandos. A partir de ahí, se obtiene una reverse shell como www-data, se compromete el usuario vault mediante reutilización de credenciales expuestas y finalmente se escalan privilegios a root explotando un binario SUID inseguro.

Objetivo del reto

  • Obtener acceso inicial al sistema mediante explotación web.

  • Comprometer el usuario vault.

  • Escalar privilegios hasta root.

  • Obtener las flags correspondientes.

Tipo de máquina

  • Linux

  • Web + Command Injection

  • Escalada de privilegios (SUID)

Habilidades y técnicas evaluadas

  • Enumeración de puertos y servicios.

  • Virtual Host Discovery.

  • Fuzzing de subdominios.

  • Bypass de WAF por blacklist.

  • Inyección de comandos en entorno web.

  • Obtención y estabilización de reverse shell.

  • Ataques de fuerza bruta con Hydra.

  • Escalada de privilegios mediante binarios SUID inseguros.

Análisis de vulnerabilidades

Instalación

Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

Info:

Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.

Escaneo de puertos

Info:

Observamos únicamente dos puertos expuestos:

  • 22/tcp → Servicio SSH

  • 80/tcp → Servidor web Apache 2.4.58

Es importante destacar que el puerto 80 redirige a un dominio interno llamado internal.dl, lo que indica el uso de virtual hosts.

Resolución del dominio interno

Para poder interactuar correctamente con el virtual host, añadimos el dominio al archivo /etc/hosts:

Accedemos entonces a:

Respuesta:

Observamos una página web aparentemente funcional y sin elementos sospechosos a simple vista.

Fuzzing de subdominios

Dado que se trata de un entorno interno, procedemos a enumerar posibles subdominios utilizando FFUF:

Respuesta:

Se descubre el subdominio backup.internal.dl.

Lo añadimos también al archivo /etc/hosts:

Lo guardamos y entramos a dicho subdominio de esta forma:

Respuesta:

Análisis del subdominio Backup

La aplicación expone un dashboard que incluye una funcionalidad llamada Directory Inspector, la cual permite introducir rutas y ejecuta internamente un ls -lah mostrando el output en pantalla.

Esto ya nos da una pista clara: existe una posible inyección de comandos del sistema (OS Command Injection).

Intento de Command Injection

Probamos inicialmente con:

Sin embargo, el sistema bloquea la ejecución. Esto indica la presencia de una blacklist que filtra operadores como:

  • ;

  • &&

  • ||

  • Espacios

  • Algunos comandos directos

Tras varias pruebas, se detecta que el filtrado no contempla correctamente la sustitución de comandos ($()), ni técnicas de evasión mediante fragmentación de cadenas.

Escalate user www-data

Bypass del filtro (WAF Evading)

Utilizamos sustitución de comandos junto con evasión básica:

Resultado:

El resultado muestra errores del comando ls, pero incluye el contenido de /etc/passwd embebido en la salida. Esto confirma que:

  • La inyección es viable.

  • El comando dentro de $() se ejecuta antes del ls.

  • El filtrado se basa en blacklist débil.

Entre los usuarios listados observamos uno interesante:

Obtención de Reverse Shell (www-data)

Una vez confirmada la inyección de comandos, el siguiente paso lógico es obtener una reverse shell para trabajar de forma más cómoda y estable sobre el sistema comprometido.

Preparación de la shell en la máquina atacante

Creamos un archivo llamado shell con el siguiente contenido:

shell

Este script abrirá una conexión TCP hacia nuestra máquina atacante y redirigirá la entrada/salida estándar, otorgándonos una shell interactiva.

A continuación, levantamos un servidor HTTP simple para alojar el archivo:

Descarga del payload desde el servidor vulnerable

Aprovechando la vulnerabilidad de command injection y el bypass previamente descubierto, forzamos la descarga del archivo hacia /tmp:

La fragmentación del comando (w''g''e''t) permite evadir la blacklist del WAF.

Confirmamos en nuestro servidor HTTP que la víctima realizó la petición:

Ejecución de la reverse shell

Ponemos el listener en nuestra máquina atacante:

Desde la aplicación vulnerable ejecutamos el script descargado:

Recibimos conexión:

Hemos obtenido acceso como www-data.

Sanitización de shell (TTY)

Escalate user vault

Explorando el sistema, accedemos al directorio /opt:

Respuesta:

El archivo .vault_pass.txt resulta interesante, ya que pertenece al grupo vault. Al leerlo observamos múltiples posibles contraseñas.

Dado que el puerto 22 (SSH) está abierto, decidimos realizar un ataque de fuerza bruta controlado contra el usuario vault.

Transferimos el archivo a nuestra máquina atacante y ejecutamos:

Resouesta:

Hemos identificado credenciales válidas.

SSH (vault)

Una vez identificadas las credenciales válidas del usuario vault, procedemos a conectarnos al sistema mediante SSH:

Metemos como contraseña Yk8$pZ5@cN4!...

Verificamos que la autenticación ha sido exitosa y que efectivamente tenemos una sesión interactiva como el usuario vault.

Con esto confirmamos el acceso al sistema con privilegios de usuario estándar. A continuación, procedemos a leer la flag correspondiente al usuario.

flag.txt

La flag confirma que la explotación previa se basó en una inyección de comandos del sistema operativo, combinada con técnicas de evasión de filtros (WAF) y bypass de listas negras mediante manipulación de operadores, espacios y comandos.

Escalate Privileges

Una vez comprometido el usuario vault, el siguiente objetivo es escalar privilegios a root.

Para ello, realizamos una enumeración de binarios con el bit SUID activo, ya que estos se ejecutan con los privilegios del propietario (normalmente root).

Resultado:

Entre los binarios listados, destaca especialmente:

Observamos que:

  • Pertenece al usuario root

  • Tiene el bit SUID activo (-rwsr-xr--)

  • Es ejecutable por el grupo vault

  • Nuestro usuario actual pertenece a dicho grupo

Esto lo convierte en un claro vector potencial de escalada.

Procedemos a ejecutarlo para analizar su comportamiento:

Respuesta:

Al ejecutarlo, obtenemos directamente una shell con privilegios de root.

Esto indica que internamente el binario está invocando una shell (por ejemplo, /bin/bash) sin sanitización ni control adecuado, heredando los privilegios efectivos del propietario debido al bit SUID.

Dado que el binario pertenece a root y se ejecuta con su UID efectivo, cualquier shell lanzada desde él se ejecutará también como root.

Last updated