Les requêtes LDAP utiles dans les pentests Windows Active Directory
Introduction
Dans les domaines Windows Active Directory, une grande quantité d’informations est stockée dans le LDAP. Ces informations contiennent notamment les droits des utilisateurs, les groupes, les sous-réseaux, les machines rattachées au domaine, etc …
Note: Certaines requêtes utilisent des opérateurs de comparaison spéciaux, (notamment sur le userAccountControl
) dont voici les descriptions:
Opérateurs | OID | Description |
---|---|---|
LDAP_MATCHING_RULE_BIT_AND |
1.2.840.113556.1.4.803 |
Opération “AND” bit à bit |
LDAP_MATCHING_RULE_BIT_OR |
1.2.840.113556.1.4.804 |
Opération “OR” bit à bit |
LDAP_MATCHING_RULE_TRANSITIVE_EVAL |
1.2.840.113556.1.4.1941 |
Recursive search of a link attribute. (See documentation?WT.mc_id=SEC-MVP-5005286) |
LDAP_MATCHING_RULE_DN_WITH_DATA |
1.2.840.113556.1.4.2253 |
Match on portions of values of syntax Object(DN-String) and Object(DN-Binary). |
Dans la suite de cet article, je vous propose une liste de requêtes LDAP très utiles lors d’un pentest.
Utilisateurs
Liste de tous les utilisateurs
Pour ce faire on séléctionne tous les utilisateurs ((objectClass=user)
) et toutes les personnes ((objectClass=person)
) du LDAP:
(&(objectCategory=person)(objectClass=user))
Liste de tous les utilisateurs kerberoastables
Pour ce faire on séléctionne tous les utilisateurs ((objectClass=user)
) ayant un Service Principal Name (SPN) défini ((servicePrincipalName=*)
) et on enlève de nos résultats:
- L’utilisateur
krbtgt
(qui par définition possède un SPN) avec le filtre(!(cn=krbtgt))
. - Les utilisateurs désactivés, avec le filtre
(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Ce qui nous donne:
(&(objectClass=user)(servicePrincipalName=*)(!(cn=krbtgt))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Liste des utilisateurs asrep-roastables
Pour ce faire, nous sélectionnons tous les utilisateurs ((objectClass=user)
) qui ont l’indicateur “Do not require Kerberos preauthentication” défini dans leur userAccountControl
:
(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))
Liste de tous les utilisateurs qui doivent changer de mot de passe lors de la prochaine connexion
(&(objectCategory=user)(pwdLastSet=0))
Liste de tous les utilisateurs qui sont presque verrouillés
(&(objectCategory=user)(badPwdCount>=4))
Liste de tous les utilisateurs avec *pass* ou *pwd* dans leur description
(&(objectCategory=user)(|(description=*pass*)(description=*pwd*)))
Liste de tous les utilisateurs protégés par l’adminCount
L’attribut adminCount
spécifie qu’un objet donné a eu sa liste de contrôle d’accès (ACL) changées en une valeur plus sécurisée par le système Active Directory car l’objet est membre de l’un des groupes d’administration, soit directement, soit de manière transitive.
(&(objectCategory=user)(adminCount=1))
Groupes
Liste de tous les groupes
(objectCategory=group)
Liste de tous les groupes protégés par l’adminCount
L’attribut adminCount
spécifie qu’un objet donné a eu sa liste de contrôle d’accès (ACL) changées en une valeur plus sécurisée par le système Active Directory car l’objet est membre de l’un des groupes d’administration, soit directement, soit de manière transitive.
(&(objectCategory=group)(adminCount=1))
Services
Liste de tous les servicePrincipalName
(servicePrincipalName=*)
Liste de services spécifiques à partir de leur servicePrincipalName
Pour lister des services spécifiques, nous pouvons utiliser le début de l’attribut servicePrincipalName
:
(servicePrincipalName=http/*)
Voici quelques exemples de servicePrincipalName
:
ldap/DC01.LAB.local
kadmin/changepw
(du service kerberosCN=krbtgt,CN=Users,DC=LAB,DC=local
)MSSQLSvc/DC01.LAB.local
Machines
Lister toutes les machines ayant un système d’exploitation donné
Par exemple pour lister toutes les machines sous Windows XP
:
(&(objectCategory=Computer)(operatingSystem=Windows XP*))
Avec operatingSystem
dans:
Windows Server 2022*
Windows Server 2019*
Windows Server 2016*
Windows Server 2008*
Windows 11*
Windows 10*
Windows 8*
Windows 7*
Windows Vista*
Windows XP*
Windows Server 2003*
Windows 2000*
Liste de toutes les Workstations
(sAMAccountType=805306369)
Liste des machines ayant un KeyCredentialLink
Cette requête est utile pour vérifier si des shadow credentials sont présents sur des comptes machine:
(&(objectClass=computer)(msDS-KeyCredentialLink=*))
Liste des machines ayant un OS obsolete
(&(objectCategory=Computer)(|(operatingSystem=Windows 2000*)(operatingSystem=Windows Vista*)(operatingSystem=Windows XP*)(operatingSystem=Windows 7*)(operatingSystem=Windows 8*)(operatingSystem=Windows Server 200*)(operatingSystem=Windows Server 2012*)))