En este writeup vamos a resolver una de las máquinas de la plataforma Dockerlabs llamada Borazuwarah, con el nivel más sencillo de dificultad «Muy Fácil».

Resumen de conceptos trabajados:

Escaneo de Puertos
Esteganografía
Ataque de Fuerza Bruta con Hydra
Acceso SSH

Si quieres conocer más sobre la plataforma Dockerlabs y ver cómo se configura, etc, en este post te cuento cómo hacerlo.

Básicamente los pasos son: 1) Crear una carpeta con el nombre de la máquina, 2) Descargar la máquina de Dockerlabs, 3) Descomprimirla y desplegarla.

Para todas las máquinas, la IP de Dockerlabs es siempre la misma: 172.17.0.2

Una vez hemos descargado la máquina víctima de Dockerlabs y desplegada en nuestro entorno, empezamos con el escaneo.

ESCANEO DE PUERTOS

Comenzamos con la enumeración de puertos y conocimiento de versiones y servicios que corren sobre los mismos.

Antes, a mi me gusta asegurarme que efectivamente la máquina víctima está activa y ante qué sistema operativo (OS) nos enfrentamos. Para ello:

¿Está la máquina víctima activa y nos podemos comunicar con ella?

Aquí lo que haremos es ejecutar el siguiente comando y ver si el «host is up»:

nmap -sn 172.17.0.2

-sn : realiza un Ping Scan para verificar que el host está activo sin intentar descubrir puertos.

¿Qué OS está ejecutando la máquina víctima?

ping -c 1 172.17.0.2 -R

la explicación de los comandos es:

ping: se comprueba si la máquina víctima está conectada y responde en la red. Básicamente, manda un mensaje para ver si la máquina responde con un «¡Sí, estoy aquí!».

-c 1: aquí indicamos que solo queremos mandar un mensaje («un ping») en vez de muchos. Si no lo pones, el comando seguirá mandando mensajes hasta que lo detengas manualmente (CTRL+C).

[IP de la máquina víctima]: dirección de la máquina víctima.

-R: este comando Trace Route indica que quieres rastrear la ruta que sigue el mensaje para llegar a la máquina víctima y volver. En algunos laboratorios de pentesting como HTB suele haber un nodo intermediario en la comunicación que reduce en una unidad el TTL del SO.

En este caso el TTL es de 64 por lo que estamos antes una máquina Linux.

Con toda esta información de inicio ahora comenzamos el escaneo de puertos con el siguiente comando:

sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG Escaneo

La explicación de cada comando sería:

La idea de este escaneo es detectar puertos abiertos en la dirección IP especificada.

sudo : comando en Linux con privilegios de administrador.

nmap : nmap herramienta para escanear redes. Principalmente para descubrir hosts activos.

-p- : esta opción le indica a nmap que escanee todos los puertos del 1 al 65535.

--open : nmap solo mostrará los puertos que están abiertos.

-sS : especifica el tipo de escaneo que se va a realizar. En este caso, es un escaneo SYN, también conocido como «escaneo sigiloso» o TCP SYN scan. Este tipo de escaneo no establece una conexión completa con el puerto, solo envía un paquete SYN y espera una respuesta. Si el puerto está abierto, responde con un SYN-ACK; si está cerrado, responde con un RST.

--min-rate 5000 : establece la velocidad mínima del escaneo en 5000 paquetes por segundo, lo que significa que nmap intentará enviar al menos 5000 solicitudes cada segundo. Esto puede hacer que el escaneo sea más rápido, pero también puede aumentar las posibilidades de que sea detectado por sistemas de seguridad.

-vvv : Es el nivel de información que muestra nmap mientras escanea.

-n : esta opción le indica a nmap que no resuelva nombres de dominio (DNS). Es decir, solo utilizará direcciones IP sin intentar convertirlas en nombres de host.

-Pn : le dice a nmap que no haga un «ping» a la dirección IP antes de escanearla. Con -Pn, nmap asumirá que el host está activo y procederá directamente al escaneo de puertos, útil si el host bloquea pings.

-oG Escaneo : especifica el formato de salida y el nombre del archivo donde se guardarán los resultados del escaneo. Escaneo es el nombre del archivo de salida donde se guardarán los resultados.

Sabemos por tanto que los puertos 22 y 80 están abiertos, y que corresponden con los servicios de ssh y web.

Ahora vamos a lanzar un comando que nos va a reportar las versiones que corren para cada uno de esos servicios en sus puertos:

nmap -sCV -p22,80 172.17.0.2

La explicación de ese comando es:

-sCV: se pueden combinar ambos parámetros en uno:

  • -sC: Usa los scripts predeterminados de Nmap (llamados NSE scripts) para realizar pruebas adicionales. Esto ayuda a identificar detalles como versiones de software, configuraciones incorrectas o posibles vulnerabilidades.
  • -sV: Intenta detectar la versión exacta del servicio que corre en esos puertos abiertos.

-p22,80:
Esto especifica los puertos a escanear:

  • 22: Puerto utilizado por SSH (para conexiones remotas).
  • 80: puerto estándar para HTTP, el protocolo utilizado por sitios web no cifrados.

A continuación, me gusta analizar con searchsploit las versiones de esos servicios para ver si existe algún CVE o vulnerabilidad ya encontrada.

El puerto 22 ssh corre bajo la versión 9.2p1 (superior a la versión 7.7. vulnerable y visto en este writeup) no vulnerable a user enumeration por lo que no estaría aquí el vector de entrada.

Ahora vamos a investigar el puerto 80 web incluyendo la IP en el navegador para ver la respuesta web.

*Si hemos hecho un laboratorio de Dockerlabs antes, te recomiendo limpiar la caché web del navegador.

Sólo vemos una imagen, y seguimos analizando por ejemplo el robots.txt , código fuente, etc, pero nada.

Pasamos a ver con whatwebb o wappalyzer otros servicios web:

Y no veo nada relevante. A partir de aquí, me propongo hacer un descubrimiento de directorios o carpetas así como ficheros relevantes como php, etc ocultos en navegador.

Para ello, empleo la herramienta de fuzzing «Wfuzz«. Sin embargo después de haber probado más de 20K registros, no encuentro ningún directorio:

wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u 172.17.0.2/FUZZ

Pruebo a ver si a nivel de subdominios encontramos algo relevante:

wfuzz -c --hc 404,400 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://172.17.0.2 -H "Host: FUZZ.172.17.0.2"

Tampoco encontramos nada.

Probamos con gobuster para ver si se encuentran archivos con extensiones php, pdf, html, etc.

Tampoco vemos nada.

ESTEGANOGRAFÍA

Habiendo agotado estas opciones, se me ocurre que la parte de resolución esté en la esteganografía de la imagen que vimos al inicio.

La esteganografía es una técnica que oculta información dentro de archivos como imágenes, videos o audios.

Para ello, vamos a descargarnos la imagen y analizarla por ejemplo con la herramienta exiftool:

Y efectivamente vemos el usuario borazuwarah pero no tenemos la contraseña.

ATAQUE FUERZA BRUTA CON HYDRA

Para ello aplicamos fuerza bruta con Hydra para el usuario conocido:

hydra -l borazuwarah -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2/ -t 5

y ya tenemos la contraseña.

ACCESO SSH

Ahora accedemos por ssh a la máquina a través de esas credenciales:

si miramos cuáles son los privilegios que tiene el usuario, vemos que tiene permisos de superusuario o root:

  • (ALL : ALL) ALL:
    • ALL: Este usuario puede ejecutar cualquier comando como cualquier usuario o grupo en el sistema.
  • (ALL) NOPASSWD: /bin/bash:
    • Este permiso específico indica que el usuario puede ejecutar /bin/bash como superusuario (root) sin necesidad de ingresar la contraseña de sudo.

por lo que si yo ejecuto el siguiente comando:

sudo /bin/bash

me va a dar una consola shell con privilegios de root y ya estaría comprometida:

Otros posts relacionados