Attacktive Directory (FR)
Environ 99% des environnements corporatifs en entreprise utilise Active Directory. Avez-vous les compétences techniques pour exploiter un Contrôleur de Domaine?
Qu’est-ce qu’Active Directory?
Active Directory est un logiciel de Microsoft fonctionnant sous le protocole LDAP (Lightweight Directory Access Protocol) et permet de fournir des services d’authentification et d’identification centralisés pour les réseaux d’ordinateurs sous Windows. Ce logiciel permet de répertorier les éléments de ce réseau, comme les serveurs, les postes de travail, les imprimantes, les dossiers partagés, le personnel ou les comptes utilisateurs.
Objectif
Aujourd’hui, je vais vous montrer comment compromettre totalement la machine de la chambre Attacktive Directory par TryHackMe.
Étape #2 — Installation de la suite Impacket
Impacket est une collection de classes PYTHON utilisé pour exploiter les protocoles réseaux. Pour l’installer, il suffit d’exécuter les commandes ci-dessous sur notre terminal:
git clone https://github.com/SecureAuthCorp/impacket.git /opt/impacket
pip3 install -r /opt/impacket/requirements.txt
cd /opt/impacket/ && python3 ./setup.py install
Étape #3 — Énumérer le Contrôleur de Domaine (Domain Controller)
La première étape a exécuté dans l’énumération de notre contrôleur de domaine cible est de découvrir quels sont les ports et les services disponibles. Pour ce faire, nous allons utiliser l’outil nmap.
Maintenant que nous avons une vue d’ensemble des ports et services disponibles sur notre hôte cible, il est temps d’extraire le plus d’informations sur le contrôleur de domaine. Afin de répondre à cet objectif, nous allons scanner plus profondément les ports 53, 139, 445 et 3389.
Avec les résultats de notre scan, nous avons trouver une information d’importance majeure, le nom de domaine : spookysec.local. Avec cette information, nous allons maintenant modifier notre répertoire /hosts pour pouvoir y accéder localement.
À présent, nous allons rescanner avec nmap le contrôleur de domaine sur les ports précédemment scanné (53,139,445 et 3389).
Et voilà, nous avons des résultats plus approfondis que nos scans précédents. Dorénavant, nous connaissons le nom de l’ordinateur que nous ciblons (THM-AD) et plus encore!
Q: What tool will allow us to enumerate port 139/445?
R: enum4linux
Q: What is the NetBIOS-Domain Name of the machine?
R: THM-AD
Q: What invalid TLD do people commonly use for their Active Directory Domain?
R: local
Maintenant, voyons voir si nous pouvons lister les répertoires de partage sur SMB. Pour ce faire nous allons utiliser l’outil SMBClient.
Malheureusement, nous ne sommes pas en mesure de lister les répertoires de partage sur SMB.
Étape #4 — Énumération du contrôleur de domaine (PT. 2)
Avec les résultats de nos scans nmap, nous avons découvert que le service Kerberos est disponible sur le port 88. Nous pouvons tenter d’énumérer les noms d’utilisateurs présent dans le répertoire Active Directory de notre hôte cible.
Nous allons utiliser le logiciel Kerbrute pour répondre à cet objectif. Cet outil nous permet d’énumérer les comptes actifs sur Active Directory grâce à la pré-authentification du service Kerberos.
P.S: TryHackMe nous partage une liste de noms d’utilisateur et de mots de passes que nous allons utiliser pour cette attaque et d’autres à venir.
Et voilà! Kerbrute a été en mesure de trouver plusieurs utilisateurs pour nous. L’un d’eux est svc-admin qui semble se démarquer des autres. Et aussi, backup.
Q: What command within Kerbrute will allow us to enumerate valid usernames?
R: userenum
Q: What notable account is discovered? (These should jump out at you)
R: svc-admin
Q: What is the other notable account is discovered? (These should jump out at you)
R: backup
Étape #5 — Exploitation de Kerberos
Une fois l’énumération des comptes utilisateurs terminée, nous pouvons tenter d’abuser une fonctionnalité de Kerberos avec une méthode d’attaque appelée ASREPRoasting. Cette méthode se produit lorsqu’un compte utilisateur a le privilège “Ne Nécessite Pas De Pré-Authentification”. Cela signifie que le compte n’a pas besoin de fournir une identification valide avant de demander un ticket Kerberos sur le compte utilisateur spécifié.
Nous allons utiliser le script PYTHON GetNPUsers inclus dans Impacket pour exécuter cette attaque.
Boom! Nous avons obtenu le hash du ticket Kerberos du compte svc-admin! Essayons maintenant de cracker le hash avec le logiciel John The Ripper.
Voilà! Nous avons un mot de passe!
Q: We have two user accounts that we could potentially query a ticket from. Which user account can you query a ticket from with no password?
R: svc-admin
Q: Looking at the Hashcat Examples Wiki page, what type of Kerberos hash did we retrieve from the KDC? (Specify the full name)
R: Kerberos 5 AS-REP etype 23
Q: What mode is the hash?
R: 18200
Q: Now crack the hash with the modified password list provided, what is the user accounts password?
R: management2005
Étape #6 — Énumération du contrôleur de domaine (PT. 3)
À présent que nous avons un mot de passe, nous allons tenter de lister à nouveau le répertoire de partage SMB. Vous rappelez-vous que nous avons essayer de l’énumérer sans succès. Voyons voir si nous pouvons la lister dorénavant.
En effet, nous sommes en mesure de lister le répertoire SMB avec le nom d’utilisateur svc-admin et le mot de passe management2005.
Nous remarquons que le répertoire backup se distingue des autres, car il ne demande aucun privilège spécial. Allons voir ce qui se cache derrière celui-ci.
Nous avons trouvé un fichier s’intitulant : backup_credentials.txt
Nous l’avons téléchargé dans notre machine Kali. En lisant le fichier, nous obtenons une suite de mot qui semble être encodée sous l’algorithme BASE64. Nous allons la décoder.
@#@$! Nous avons trouvé un identifiant. Super! :-)
Q: Using utility can we map remote SMB shares?
R: smbclient
Q: Which option will list shares?
R: -L
Q: How many remote shares is the server listing?
R: 6
Q: There is one particular share that we have access to that contains a text file. Which share is it?
R: backup
Q: What is the content of the file?
R: YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw
Q: Decoding the contents of the file, what is the full contents?
R: backup@spookysec.local:backup2517860
Étape #7 — Escalade de privilèges
Maintenant que nous disposons d’un nouvel identifiant, nous pouvons avoir plus de privilèges sur le système qu’auparavant. Le nom d’utilisateur du compte backup nous fait réfléchir. À quoi sert ce compte de sauvegarde?
C’est le compte de sauvegarde du contrôleur de domaine. Ce compte a une autorisation unique qui permet de synchroniser toutes les modifications d’Active Directory. Ceci inclut les hachages de mots de passe :-)
Ainsi, nous allons exploiter ce privilège en utilisant une fois de plus, un script PYTHON dans le répertoire d’Impacket, secretsdump.py.
Super! Voilà une liste complète des hash de tous les comptes d’utilisateurs du Active Directory de notre hôte cible.
Q: What method allowed us to dump NTDS.DIT?
R: DRSUAPI
Q: What is the Administrators NTLM hash?
R: 0e0363213e37b94221497260b0bcb4fc
Q: What method of attack could allow us to authenticate as the user without the password?
R: Pass The Hash
Q: Using a tool called Evil-WinRM what option will allow us to use a hash?
R: -H
Avec le hash du compte Administrateur maintenant en main. Nous allons utiliser une attaque qui s’intitule Pass The Hash. Celle-ci nous permettra de nous authentifier à l’intérieur du système avec les privilèges de l’Administrateur.
Malheureusement, je n’ai pas été en mesure d’utiliser l’outil Evil-WinRM et/ou PSExec pour exécuter l’attaque. Par contre, j’ai trouvé un outil alternatif SMBClient.py. Vive Impacket les amis(es) :-) !
Étape #8 — Drapeau
Q: svc-admin
R: TryHackMe{K3rb3r0s_Pr3_4uth}
Q: backup
R: TryHackMe{B4ckM3UpSc0tty!}
Q: Administrator
R: TryHackMe{4ctiveD1rectoryM4st3r}