Aller au contenu principal
own2pwn
ad/ad-ldap.tsx

LDAP : où l'AD stocke tout

Comprendre l'usage de LDAP dans Active Directory : enregistrements DNS SRV, MS-RPC sur SMB, structure des objets (DN, OU, CN) et filtres de requetes courants.

Maxime Jérôme··5 min de lecture

Prérequis

Hello ! o/

Active Directory (AD) repose sur plusieurs protocoles et technologies. Voici un aperçu des éléments clés avant de plonger dans LDAP (Lightweight Directory Access Protocol).

Protocoles et outils

  • LDAP (Lightweight Directory Access Protocol) : RFC 4511. On l'interroge typiquement avec openldap / ldapsearch.
  • DNS : utilisé pour localiser les services AD. Commandes utiles : dig et nslookup.
  • NetBIOS et MS-RPC (Microsoft Remote Procedure Call) :
    • Samba : rpcclient, smbclient, net.
    • Impacket : implémentation Python de la stack MS-RPC.

Enregistrements DNS pour AD

Pour trouver un contrôleur de domaine AD, on s'appuie sur des enregistrements SRV. Les plus courants :

Enregistrement SRVRôle
_gc._tcpGlobal Catalog (LDAP pour l'ensemble de la foret AD)
_ldap._tcpServeurs LDAP du domaine
_kerberos._tcpKerberos KDC (Key Distribution Center)
_kpasswd._tcpKerberos Password Change

Exemple de requete SRV avec dig :

bash
dig -t SRV _gc._tcp.domain.com

MS-RPC et DCE-RPC

MS-RPC est basé sur DCE-RPC (Distributed Computing Environment - Remote Procedure Calls). Il permet aux machines d'un domaine de communiquer entre elles. Le transport se fait soit via RPC over SMB avec des pipes nommés, soit en TCP clair.

bash
net user /domain

Simple en apparence, mais sous le capot cette commande enclenche toute une série d'operations.

Fonctionnement de net user

Lorsqu'on execute net user myAccount /domain, voici ce qui se passe concrètement :

net-user-flow.txt
  Client Windows
  │
  ├─ 1. Ouvre une connexion SMB vers le DC
  │
  ├─ 2. Requete le partage IPC$
  │
  ├─ 3. Bind sur le pipe nommé "samr"
  │       (Security Account Manager Remote)
  │
  └─ 4. Requetes SAMR :
          EnumDomains
          LookupDomains
          LookupNames
          QueryUserInfo
          GetGroupsForUser
          ...
Séquence RPC over SMB déclenchée par net user /domain.

Utilisation de LDAP dans Active Directory

Active Directory utilise LDAP (Lightweight Directory Access Protocol) comme protocole d'accès à l'annuaire. Ports par défaut :

PortUsage
389 TCP/IPLDAP standard
636 SSL/TLSLDAPS (chiffré)
3269LDAP Global Catalog (foret entière)

Chaque objet dans LDAP possède un DN (Distinguished Name), qui est une combinaison d'attributs formant un chemin unique dans le DIT (Directory Information Tree) :

  • DC (Domain Component) : composant du nom de domaine
  • OU (Organizational Unit) : unité d'organisation
  • CN (Common Name) : nom d'utilisateur, de groupe, d'ordinateur, etc.
dit-structure.txt
  DC=corp,DC=example,DC=com
  │
  ├── OU=Users
  │   ├── CN=Alice (RDN: CN=Alice)
  │   │     DN: CN=Alice,OU=Users,DC=corp,DC=example,DC=com
  │   └── CN=Bob
  │         DN: CN=Bob,OU=Users,DC=corp,DC=example,DC=com
  │
  ├── OU=Computers
  │   └── CN=WORKSTATION01
  │         DN: CN=WORKSTATION01,OU=Computers,DC=corp,DC=example,DC=com
  │
  └── OU=Groups
      └── CN=Domain Admins
            DN: CN=Domain Admins,OU=Groups,DC=corp,DC=example,DC=com
DIT (Directory Information Tree) : exemple de structure DN dans un domaine AD.

Chaque segment du DN est un RDN (Relative Distinguished Name). Le RDN est le composant le plus à gauche du DN complet.

Sécurité et filtres LDAP

LDAP ouvert = fuite d'informations
Un annuaire LDAP accessible sans restriction expose des données sensibles : SAM account names, UPN (User Principal Name), SID/GUID des objets, GPO (Group Policy Objects), membres des groupes privilegiés...

Filtres LDAP courants en recon :

FiltreRésultat
(objectClass=user)Tous les objets utilisateur
(objectClass=group)Tous les groupes
(objectClass=computer)Tous les ordinateurs

Structure d'une requete LDAP

Voici la structure ASN.1 d'un SearchRequest LDAP telle que définie dans la RFC 4511 :

plaintext
SearchRequest ::= [APPLICATION 3] SEQUENCE {
    baseObject      LDAPDN,
    scope           ENUMERATED {
        baseObject              (0),
        singleLevel             (1),
        wholeSubtree            (2),
    ...  },
    derefAliases    ENUMERATED {
        neverDerefAliases       (0),
        derefInSearching        (1),
        derefFindingBaseObj     (2),
        derefAlways             (3) },
    sizeLimit       INTEGER (0 ..  maxInt),
    timeLimit       INTEGER (0 ..  maxInt),
    typesOnly       BOOLEAN,
    filter          Filter,
    attributes      AttributeSelection
}
scope : les 3 modes de recherche
baseObject : uniquement l'objet cible. singleLevel : enfants directs. wholeSubtree : l'arbre complet sous la base. En recon AD on utilise quasi toujours wholeSubtree.

Source : RFC 4511 - Lightweight Directory Access Protocol (LDAP)

Conclusion

Active Directory est un système complexe qui repose sur plusieurs protocoles pour fonctionner efficacement. Pour en savoir plus sur Kerberos, rendez-vous ici !