Active Directories

N'hésitez pas à consulter la mindmap sur la pénétration d'Active Directories.

Il existe deux difficultés dans la pénétration d'AD :

  • Pénétration via authentification (Les protocoles d'authentifications sont NTLM et Kerberos)

  • Escalade de privilèges (Via analyse des permissions et accès de l'utilisateur pawned)

Plusieurs services peuvent être observés sur un AD :

  • Kerberos port:88 (service d'authentification Kerberos)

  • RPC port:135/593 (Remote Procedure Call)

  • LDAP port:389/636 (Consultation de l'annuaire AD)

  • SMB port:445 (service de partage de ressources qui permet d'accéder à ces ressources)

  • RDP port:3889 (Remote Desktop Protocol)

  • WinRM port:5985/5986 (Remote Shell)

Authentifié ou non, crackmapexec permet de lister à peu près ce que l'on souhaite. Sinon enum4linux si ça ne marche pas. On peut aussi utiliser smbclient pour se connecter au service SMB.

#Enumérer les users|groups|shares|pass-pol
sudo crackmapexec smb <IP> -u <user> -p <mdp> --groups|users|shares|pass-pol

Non authentifié

  • Si le service RPC existe, essayer d'énumérer des informations utilisateurs avec rpcclient.

  • Vérifier si on peut s'identifier sans mdp ni user.

  • On peut récupérer beaucoup d'informations avec ldapsearch si un service LDAP tourne. (Peut fonctionner en non authentifié)

  • SMB Relay : Attaque MitM permettant d'avoir l'accès de l'utilisateur lors de sa tentative de connexion. Si SMB Signing est activé sur la machine, l'attaque est impossible.

  • On peut énumérer les utilisateurs de Kerberos avec Kerbrute ou crackmapexec.

  • AS_REP Roasting : Possibilité d'obtenir le TGT sans avoir le mdp (l'utilisateur ciblé doit avoir la pré authentification désactivée). Permet ensuite de cracker le hash en bruteforce en local.

Authentifié

  • On peut lancer BloodHound pour commencer à trouver des chemins d'attaque et consulter les fichiers et permissions et groupes de chaque utilisateur de manière simple et efficace :

#Installer Java si besoin pour Neo4j
sudo apt-get install openjdk-11-jdk
#Installer Neo4j
sudo apt-get install apt-transport-https
sudo add-apt-repository universe
sudo apt install neo4j
#Installer BloodHound
sudo apt install bloodhound
#Lancer neo4j (accessible via https://localhost:7474/)
sudo neo4j console
#Lancer BloodHound
bloodhound
#Générer les json à charger dans BloodHound.
python3 -m pip install bloodhound
bloodhound-python -u username -p 'mdp' -ns ip_du_serveur -d domaine.local -c all
  • Une fois authentifié, on peut lister tous les utilisateurs de l'AD afin de récupérer leur nom et vérifier qu'aucun ne sont vulnérables à l'AS_REP Roasting.

#Non authentifié : Vérifier parmis une liste d'utilisateurs si ils sont AS_REP Roastsable
impacket-GetNPUsers domain/ -usersfile <users_file> -format [hashcat|john] -outputfile outfile
#Authentifié : Vérifier les comptes AS_REP Roastable pour tous les utilisateurs
impacket-GetNPUsers domain/user:passwrd -request -format [hashcat|john] -outputfile outfile
  • Kerberoast : On peut demander les TGS de tous les comptes SPN (Service Principal Name) si on est authentifié. Ils peuvent être bruteforce mais les mdp sont aléatoires. Cependant, si un compte utilisateur est SPN, alors on pourra peut être cracker le mot de passe via son TGS.

  • TGT : ticket généré par kerberos à l'aide de son Golden Ticket, permet d'aller demander à un service son TGS.

  • TGS : Ticket généré par un service à l'aide de son Silver Ticket. Le service exige le TGT de l'user pour lui générer un TGS.

#Consulter la date de votre machine
date
#Télécharger rdate (remote date)
sudo apt install rdate
#Consulter la date de la machine distante
rdate -p <IP>
#Synchroniser votre date avec celle de la machine distante
rdate -s <IP>
  • On peut obtenir les hashs NTLM des comptes GMSA (Group Managed Service Account) auquel notre compte authentifié a accès via du GMSA Dumping. On pourra donc faire du PtH (Pass the Hash).

python3 gMSADumper.py -u user -p password -d domain.local
  • Si l'utilisateur authentifié peut gérer le DC (Domain Controller), alors il aura les permissions pour voir les hashs des mots de passe d'autres utilisateurs. On peut les dump via le module secretsdump de impacket.

Pour obtenir les hash de comptes auxquels on a accès, on peut également mentionner la technique de timeroasting. Elle peut être complexe à mener et requiert de toute façon les droits administrateurs dans la plupart des cas, mais c'est un moyen original d'obtenir ces informations en diminuant nos chances d'éveiller les EDR en conditions réelles.

  • Selon la configuration d'un domaine enfant, la compromission de celui-ci peut permettre une escalade de privilège sur le domaine parent via injection de SID-History.

  • Si l'utilisateur authentifié est dans le groupe Account Operators, il peut changer le mot de passe et faire plusieurs autres manipulations sur les autres utilisateurs. D'autres groupes ont des permissions qui peuvent s'utiliser pour privesc :

Groupe
Description

Il peut tout faire au sein du domaine.

Il peut gérer les comptes, notamment changer les mots de passe d'autres comptes plus privilégiés.

Il a des permissions de lecture et d'écriture sur beaucoup de fichiers du domaine, voire tous.

Peut tout faire dans le domaine.

Peut tout faire dans une fôret.

Peut créer de nouvelles GPO et donc privesc via ce procédé.

Peut se connecter en RDP aux machines du domaine, notamment le serveur d'administration de l'AD.

Groupe vestige qui possède des permissions d'administrateur réduites.

Peut permettre à un utilisateur de configurer des trusts unidirectionnels de manière à ce que les ressources de son propre domaine soient accessibles depuis d'autres domaines.

Peut accéder à la base de données des clés d'authentification passwordless de Windows Hellow For Business (les empreintes, reconnaissance faciale, etc..)

Pareil que le précédent mais pas uniquement dans son domaine, mais dans l'ensemble des domaines de la fôret.

Peut gérer la configuration TCP/IP et divers options réseau du domaine. On peut s'en servir pour mettre en place un montage de type MitM.

Peut administrer toute la configuration de la politique de réplication. Y compris le chiffrement. Peut alors accéder à l'ensemble des données auxquelles il est autorisé à accéder.

Peut modifier les autorités de certification, facilitant (voire rendant possible selon la configuration des machines) les attaques de type MitM.

Peut répliquer les mots de passe de tous les utilisateurs du domaine sur un autre DC (potentiellement possédé par l'attaquant)

Peut ajouter des certificats (considérés alors comme valides) sur les machines du domaine. Même problème que le groupe Certificate Service DCOM Access, c'est à dire une facilitation des attaques de type MitM.

Peut gérer les clés et certificats présents sur les machines du domaine, notamment importer et exporter des clés privées.

Peut activer et lancer les objets COM sur les machines du domaine. Le risque est plus minime mais existant selon la configuration des objets COM du domaine.

Peut gérer administrer les serveurs DNS du domaine. Les conséquences sont alors du déni des service, par suppression d'enregistrements, ou bien des attaques élaborées de phishing via modification des enregistrements, et encore bien d'autres.

Peut répliquer les mots de passe d'utilisateurs, via soon droit étendu Replicating Directory Changes All.

  • On peut choper les hashs avec responder en faisant exécuter un fichier automatiquement par un utilisateur lorsqu'il entre dans le répertoire concerné en uploadant certains types de fichiers sur le SMB.

  • Pour toute action spécifiques, l'exécution de commandes PS (PowerShell) nécessite une connexion à WinRM (avec evil-winrm par exemple), ce n'est pas possible via SMB. On peut cependant essayer diverses méthodes avec crackmapexec.

#Connexion WinRM avec mot de passe
evil-winrm -u <username> -p <password>  -i <IP>/<Domain>
#Connexion WinRM avec Pass the Hash NTLM
evil-winrm -u <username> -H <Hash> -i <IP>

Dernière mise à jour

Cet article vous a-t-il été utile ?