Certified - Hackthebox - Season7

Certified - Hackthebox - Season7

Escaneo de puertos

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
❯ nmap -sC -O -n 10.10.11.41
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-11 12:19 CET
Stats: 0:01:02 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 95.50% done; ETC: 12:20 (0:00:01 remaining)
Nmap scan report for 10.10.11.41
Host is up (0.086s latency).
Not shown: 988 filtered tcp ports (no-response)
PORT     STATE SERVICE
53/tcp   open  domain
88/tcp   open  kerberos-sec
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
389/tcp  open  ldap
| 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
|_ssl-date: 2025-02-11T18:20:23+00:00; +7h00m01s from scanner time.
445/tcp  open  microsoft-ds
464/tcp  open  kpasswd5
593/tcp  open  http-rpc-epmap
636/tcp  open  ldapssl
|_ssl-date: 2025-02-11T18:19:51+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
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl
| 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
|_ssl-date: 2025-02-11T18:19:51+00:00; +7h00m00s from scanner time.
5985/tcp open  wsman
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2019|10 (97%)
OS CPE: cpe:/o:microsoft:windows_server_2019 cpe:/o:microsoft:windows_10
Aggressive OS guesses: Windows Server 2019 (97%), Microsoft Windows 10 1903 - 21H1 (91%)
No exact OS matches for host (test conditions non-ideal).

Host script results:
|_clock-skew: mean: 7h00m00s, deviation: 0s, median: 6h59m59s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2025-02-11T18:19:53
|_  start_date: N/A

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

Puntos clave

Indicadores de Active Directory: Los puertos 88 (Kerberos), 389 (LDAP) y 445 (SMB) sugieren la presencia de un controlador de dominio de Windows.

Certificados SSL: Los detalles del certificado revelaron el nombre de host DC01.certified.htb y información adicional del dominio, lo que confirma el rol del objetivo como autoridad certificadora.

Firma SMB: Los scripts de Nmap indicaron que la firma SMB está habilitada y es obligatoria, lo que puede limitar algunos vectores de ataque SMB.

Comprobación de credenciales en SMB

1
2
3
❯ nxc smb certified.htb -u 'judith.mader' -p 'judith09'
SMB         10.10.11.41     445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:certified.htb) (signing:True) (SMBv1:False)
SMB         10.10.11.41     445    DC01             [+] certified.htb\judith.mader:judith09

Las credenciales parecen ser válidas por lo que de primeras tenemos acceso de bajo nivel.

Comprobación de credenciales en LDAP y mapeo para BloodHound

1
2
3
4
5
6
❯ nxc ldap dc01.certified.htb -u judith.mader -p judith09 --bloodhound --collection All --dns-tcp --dns-server 10.10.11.41
SMB         10.10.11.41     445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:certified.htb) (signing:True) (SMBv1:False)
LDAP        10.10.11.41     389    DC01             [+] certified.htb\judith.mader:judith09 
LDAP        10.10.11.41     389    DC01             Resolved collection methods: rdp, container, psremote, acl, group, objectprops, session, localadmin, dcom, trusts
LDAP        10.10.11.41     389    DC01             Done in 00M 14S
LDAP        10.10.11.41     389    DC01             Compressing output into /home/kali/.nxc/logs/DC01_10.10.11.41_2025-02-11_123007_bloodhound.zip

Importamos el zip a BloodHound para obtener el posible camino de entrada al AD.

Análisis con BloodHound

alt text

  • Permisos de Judith Mader:
    • Judith Mader tiene permisos de WriteOwner sobre el grupo de Gestión.
  • Cuenta de Servicio (Management_SVC):
    • La cuenta Management_SVC tiene permisos de GenericWrite sobre el grupo de Gestión.
  • Privilegios de CA_Operator:
    • La cuenta Management_SVC tiene permisos de GenericAll sobre el usuario CA_Operator.

Sabiendo esto y teniendo nuestro punto de entrada claro vamos a explotar estas realciones para poder escalar privilegios de usuario.

Escalando privilegios de usuario

Estableciendo la Propiedad

Utilizamos bloodyAD para establecer a judith.mader como la propietaria del grupo “Management”.

alt text

Concediendo Permisos de Escritura

Haciendo uso de imapacket-dacledit modificamos los permisos del grupo.

alt text

Añadiendo a Judith al grupo

Añadimos al usuario judith.mader al grupo Management.

alt text

Como la cuenta de servicio management_svc es parte del grupo management podemos explotar esta vulnerabilidad que nos permite modificar o crear certificados en nombre de una cuenta de la que no tenemos sus credenciales, es decir impersonar.

Usamos pwhysker para crear un certificado de management_svc

alt text

Obtención del Ticket Granting Ticket

Para realizar la obtención del TGT necesitaremos este script python

Ahora que disponemos de un certificado que nos permite impersonar al management_svc podemos obtener un TGT para hacer uso de los servicios en su nombre.

Para esto hay que tener en cuenta que es posible no estar sincronizados con el AD de forma suficiente para que el TGS nos genere un TGT válido.

Recomiento preparar bien los siguientes comandos para realizarlos lo más rapido posibles uno detrás de otro o mediante un pipe.

Sincronizamos nuestro equipo con el servidor NTP del AD.

1
sudo ntpdate -s 10.10.11.41

Creamos el TGT en nombre de management_svc

alt text

Si todo ha ido bien nos genera una key y un fichero .ccache con el TGT

Recuperando el HASH NT

Ahora que disponemos de un TGT a nombre de management_svc podemos utilizarlo para extraer su NT hash desde la base de datos LDAP.

Antes de ejecutar el script es necesario indicar la ruta a nuestro fichero .ccache mediante la variable $KRB5CCNAME

alt text

Extraemos el NT hash de management_svc usando gettgtpkinit.py

alt text

Recordad indicar la key del TGT

Aceso por WinRM

Ahora que tenemos el hash de management_svc podemos acceder a WinRM

alt text

Escalando privilegios - movimiento lateral

Teniendo acceso al usuario management_svc, como vimos en Bloodhound este usuario tiene permisos GenericAll sobre el CA_Operator por lo que podemos modificar cualquier cosa de este usuario.

Modificamos las credenciales del CA_OPERATOR

Utilizamos certipy-ad para modificar la keyCredential de ca_operator

alt text

Actualizamos el UserPrincipalName de ca_operator

Para explotar el hecho de poder crear certificados en nombre de otros usuario vamos a modificar como el AD identifica a ca_operator para que crea que es administrator y así poder generar un certificado en su nombre.

Actualizamos el UPN (UserPrincipalName) de ca_operator a administrator

alt text

Generamos el certificado en nombre de administrator

Usamos de nuevo certipy-ad para generar el certificado

alt text

Volvemos a actualizar el UPN a su estado anterior

Para evitar que impersonemos al usuario ca_operator con el UPN modificado, debemos actualizar de nuevo este a su anterior estado.

alt text

Impersonamos a administrator para obtener su NT hash

alt text

Acceso WinRM como administrator

alt text