Les requêtes LDAP utiles dans les pentests Windows Active Directory

Table des matières :

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 kerberos CN=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)

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*)))

Références