Soccer

Publicado: 12 de Mayo de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Easy
๐ Descripciรณn
Soccer es una mรกquina Linux de dificultad Easy que presenta mรบltiples vectores de ataque interesantes. La explotaciรณn inicial se basa en el descubrimiento de un Tiny File Manager vulnerable alojado en un directorio oculto, el cual utiliza credenciales por defecto. Aunque los exploits pรบblicos fallan debido a restricciones de permisos, es posible aprovechar la funcionalidad nativa del file manager para crear y modificar archivos PHP, permitiendo la ejecuciรณn de una reverse shell.
La escalada horizontal involucra el descubrimiento de un segundo vhost mediante enumeraciรณn de configuraciones de nginx. Este nuevo sitio web contiene una aplicaciรณn con funcionalidad de tickets que es vulnerable a SQL Injection ciega a travรฉs de WebSockets, lo que permite extraer credenciales de la base de datos usando sqlmap.
Finalmente, la escalada de privilegios se logra mediante el binario doas (alternativa a sudo) que permite ejecutar dstat como root. Aprovechando la capacidad de dstat para cargar plugins de Python personalizados desde directorios escribibles, es posible ejecutar cรณdigo arbitrario con privilegios de root.
Esta mรกquina es excelente para practicar tรฉcnicas de enumeraciรณn web avanzada, explotaciรณn de file managers, SQL injection en protocolos no convencionales y escalada de privilegios mediante binarios menos comunes.
๐ญ Reconocimiento
Ping para verificaciรณn en base a TTL
๐ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.
Escaneo de puertos y servicios
โ ๏ธ Importante: Detectamos durante la fase de enumeraciรณn con nmap que se estรก realizando virtual hosting. Debemos aรฑadir el siguiente vhost a nuestro fichero /etc/hosts
๐ Enumeraciรณn Web
HTTP (80)
http://soccer.htb/

๐ท๏ธFuzzing de directorios
A priori no tenemos gran cosa, realizamos fuzzing web usando la herramienta gobuster:
Gobuster nos revela un recurso poco convencional:


Cuando intentamos acceder, nos redirige automรกticamente a un sitio web que estรก utilizando un servicio llamado tiny file manager y nos encontramos ante un panel de autenticaciรณn.
Buscamos y probamos credenciales por defecto de este servicio
En el sitio web https://exploit-notes.hdks.org/exploit/web/tiny-file-manager-pentesting/ encontramos credenciales por defecto para este servicio:
![[Pasted image 20250527123255.png]]

Logramos entrar y enumeramos la versiรณn del servicio:

๐ป Explotaciรณn
Parece que esta versiรณn es vulnerable y existen algunos exploits pรบblicos:
https://github.com/febinrev/tinyfilemanager-2.4.3-exploit
Descargamos la versiรณn en python de este exploit: https://github.com/febinrev/tinyfilemanager-2.4.3-exploit/blob/main/tiny_file_manager_exploit.py
Este exploit no nos funciona porque el directorio /var/www/html/tiny no tiene permisos de escritura y no nos permite subir ahรญ el payload

Tampoco nos funciona si intentamos incrustar una webshell php dentro del codigo tinyfilemanager.php:
Probamos con este otro exploit:
Obtenemos el mismo error, no tenemos permisos para subir nada a la ruta por defecto:

Cambiemos el enfoque, el file manager de tiny nos da la opciรณn de copiar y mover archivos y directorios. Vamos a usar la utilidad Copy para crear una copia de tinyfilemanager.php de la siguiente forma:

A continuaciรณn renombramos el archivo a shell.php, le damos permisos de ejecuciรณn (que de inicio no los tiene) y reemplazamos el cรณdigo por el de una reverse shell php de pentestmonkey:


Ahora solo nos queda iniciar un listener y cuando hagamos click en Open ganaremos una reverse shell


Una vez dentro de la mรกquina, vamos a busca archivos de configuraciรณn de nginx por si pudiera haber otros vhosts alojados:
Localizamos la instalaciรณn de nginx en /etc/nginx y en su interior estรก el archivo nginx.conf
Este archivo nos indica que la configuraciรณn de los vhosts estรก definida en estos otros archivos:

Descubrimos un nuevo subdominio:

Lo aรฑadimos en el fichero /etc/hosts de nuesto host de ataque y accedemos:
http://soc-player.soccer.htb/

La web tiene un formulario de registro, nos registramos usando las siguientes credendiales:
Al acceder con nuestra nueva cuenta, tenemos una secciรณn de tickets:
Revisando el cรณdigo fuente de la pรกgina encontramos un script que indica la peticiรณn que se estรก realizando mediante websocket:

Al jugar con el formulario de tickets tenemos un error de ticket no existe:

Vamos a ver con Burp como se estรก enviando esta peticiรณn y manipularla para ver si es vulnerable a SQLI y en efecto lo es, ya que logramos que nos diga que el ticket es vรกlido.

Usamos sqlmap de la siguiente forma para automatizar la blind sqli injection:

Relizamos un dump de la base de datos soccer_db
Obtenemos un nombre de usuario y una contraseรฑa. Anteriormente enumeramos dos usuarios en el directorio /home de la mรกquina que habรญamos comprometido y uno de ellos era player, podemos ver si el usuario estรก reutilizando la contraseรฑa para varios servicios.
Ahora ya podemos capturamos la flag en el directorio del usuario player.
๐ Escalada de privilegios
Enumeramos binarios con SUID:
De la lista, hay varios binarios con bit SetUID, pero el que se parece mรกs a sudo y no es sudo es:
๐ธ
/usr/local/bin/doas
โ
ยฟPor quรฉ doas?
doas?doases una alternativa asudoque permite ejecutar comandos como otro usuario (normalmente root).Se originรณ en OpenBSD y algunas distros de Linux lo usan como una alternativa mรกs simple y segura que
sudo.Al tener el bit SetUID, puede ejecutarse con privilegios elevados, igual que
sudo.
Si estรก configurado correctamente (en /etc/doas.conf) y tu usuario tiene permiso, deberรญamos obtener algo como:
Dstat es una herramienta para generar estadรญsticas de recursos del sistema. Su manual ofrece informaciรณn interesante, especialmente la posibilidad de usar complementos de Python para la herramienta.
Si podemos ejecutar cรณdigo Python como usuario root, podrรญamos generar un shell con los privilegios elevados intactos. Aunque los complementos de dstat solo se pueden alojar en ciertos directorios, tenemos acceso de escritura a uno de ellos: /usr/local/share/dstat. Esto significa que potencialmente podemos explotar este acceso para ejecutar cรณdigo arbitrario como usuario root.
Creamos un script de Python que genera un shell bash y lo guardamos en el directorio mencionado anteriormente, asegurรกndonos de anteponerle dstat_, segรบn el manual.
Para verificar que dstat detecte el complemento, ejecutamos el comando con el indicador --list.
Finalmente, despuรฉs de confirmar que nuestro complemento es detectado, ejecutamos dstat y especificamos el complemento pasรกndolo como un argumento de lรญnea de comando, usando un prefijo --.

Last updated