Amaterasu - Proving Grounds (OffSec)

En este walkthrough realizamos la máquina Amaterasu de Proving Grounds (OffSec). Exploraremos cada fase del pentesting, desde el reconocimiento hasta la explotación de una vulnerabilidad en un servidor de archivos basado en API REST, para obtener acceso inicial. Finalmente, escalaremos privilegios aprovechando crontab para obtener root. ¡Acompáñame en este proceso y descubre cómo hackear Amaterasu de principio a fin!

WALKTHROUGHSOFFSEC

3/10/20254 min read

👺Walkthrough de la Máquina Amaterasu🏮- Proving Grounds (OffSec)

📌 Detalles de la Máquina

🔍 Reconocimiento

Lanzamos un escaneo inicial para descubrir puertos abiertos en la máquina:

Puertos abiertos:

  • 21/tcp (FTP)

  • 25022/tcp (unknown)

  • 33414/tcp (unknown)

  • 40080/tcp (unknown)

Y comprobamos las versiones de los servicios:

Identificación de versiones:

  • 21/tcp (FTP) - vsftpd 3.0.3

  • 25022/tcp - OpenSSH 8.6

  • 33414/tcp - (unknown)

  • 40080/tcp - Apache httpd 2.4.53 ((Fedora))

🌐 Enumeración Web - Puerto 40080

Fuzzing con Dirsearch

Rutas encontradas:

  • /images

  • /LICENSE

  • /styles

No encontramos nada destacable.

Accedemos a http://192.168.196.249:40080 y encontramos una página de inicio de Mozilla.

🌐 Enumeración Web - Puerto 33414

Accedemos a http://192.168.196.249:33414 y nos dice que no ha encontrado la url en el servidor.

Fuzzing con Dirsearch

Rutas interesantes descubiertas:

  • /help

  • /info

Al acceder a http://192.168.196.249:33414/help encontramos una solicitud GET a un fichero de /tmp a través de file-list?dir= y una solicitud POST a la ruta /file-upload. Parece que hemos encontrado un servidor de archivos basado en una API REST, probablemente desarrollado en Python, que expone los archivos y directorios de un sistema a través de peticiones HTTP.

/help

/info

En http://192.168.196.249:33414/info confirmamos un endpoint que se utiliza para listar y cargar archivos y que actualmente está configurado en el directorio raíz del servidor. También tomamos nota de que el autor es el usuario alfredo para futuras referencias.

Comprobamos que funciona accediendo a /file-list?dir=/:

🎯 Explotación

Subimos un fichero a /home/alfredo a través de /file-upload, para verificar que el endpoint funciona correctamente.

Y comprobamos que se ha subido a la máquina con /file-list?dir=.

Intentamos subir un fichero a /var/www/html para ejecutarlo desde la web pero no nos deja.

Por lo tanto al ver que el usuario alfredo tiene un directorio .ssh, podemos intentar añadir nuestra clave pública (en formato .txt) a su fichero authorized_keys.

Y accedemos a la máquina vía ssh (Puerto 25022) con nuestra id_rsa.

Ya tenemos acceso al usuario alfredo y capturamos la primera flag 🏴.

🔼 Escalada de Privilegios

Tras revisar diferentes aspectos, como permisos en los binarios o capabilities, encontramos que en crontab hay una tarea "backup-flask.sh" que se ejecuta como root cada minuto.

Comprobamos el contenido del fichero:

Conseguimos root y capturamos la segunda flag🏴.

Este script de shell modifica el PATH, cambia al directorio /home/alfredo/restapi y crea un archivo tar comprimido llamado flask.tar.gz que contiene todos los archivos y directorios en ese directorio. Miramos el contenido de el directorio:

Nada a destacar. Podemos crear un nuevo fichero (tar) para crear una reverse shell a nuestra máquina con el siguiente contenido y le damos permisos de ejecución con chmod +x tar.

Pero al esperar un minuto no ocurre nada. Entre las posibles causas, existe la posibilidad de que el firewall este bloqueando el puerto indicado, así que vamos a ver que puertos tiene activos la máquina para ver si podemos usar uno de esos.

Vemos que tiene el puerto 21 abierto, un servidor ftp a que no hemos podido conectarnos ni con anonymous ni con las credenciales de alfredo. Por lo tanto probamos a cambiar el puerto de la reverse shell al 21. 

Nos ponemos a escuchar en el nuevo puerto y conseguimos acceso:

Extra: Vemos que en el directorio root, hay un firewall que bloquea las conexiones:

🏆 Conclusión

Puntos Clave:

  • Enumeración web reveló un endpoint de subida en 33414/file-upload.

  • Añadimos nuestra clave pública a las autorizadas por el usuario alfredo.

  • Escalamos privilegios explotando un fallo en crontab.

📌 Lecciones aprendidas:

  • La importancia de revisar configuraciones malseguras en servidores web.

  • Cómo abusar de malas configuraciones en tareas programadas (crontab).

  • La importancia de realizar una buena enumeración.

🔗 ¡Espero que este walkthrough te haya sido útil! 🚀