Prérequis

Hello ! o/

LDAP: RFC 4511 openldap ldapsearch DNS dig nslookup NetBIOS MS-RPC Samba rpcclient smbclient net Impacket python impl de la stack ms-rpc

NETLOGON
SAMR NTLM Auth

Pour trouver un AD on peut utiliser DNS, les AD utilisent beaucoup l’enregistrement SRV. Les plus communs sont: _gc._tcp: Global Catalog (LDAP for entire forest) _ldap._tcp: Serveurs LDAP _kerberos._tcp: Kerberos KDC _kpasswd._tcp: Kerberos Password Change

dig -t SRV _gc._tcp.domain.com

MS-RPC est basé sur DCE-RPC (COM Object) C’est plein de protocoles pour permettre aux pc dans un domaine de communiquer Ca utilise RPC over SMB avec des pipes nommés ou du TCP clair pour transport Exemple de RPC over SMB: net user /domain net * == MS-RPC SMB c’est du filesharing, et pour avoir une RCE tu montes un pipe nommé et tu fais un call MS-RPC à travers SMB dessus

net user myAccount /domain: 1- Ouvre une connexion SMB sur le DC 2- Requête le IPC$ Share 3- Bind sur le pipe nommé “samr” (Security Account Manager Remote) 4- Fait des SAMR queries - EnumDomains - LookupDomains - LookupNames - QueryUserInfo - GetGroupsForUser - …

Active Directory utilise LDAP LDAP sert de Directory Access Protocol.. Ca tombe bien c’est son utilité première ! Tous les DC communiquent sur 3 ports pour LDAP par défaut: 389 TCP/IP 636 SSL/TLS 3269 LDAP GC LDAP c’est fait d’objets, et chaque objet a un Distinguished Name (DN) DC: Domain Component, == Domain Name OU: Organization Unit, == “dossiers” CN: Common Name, == username, groupname, computername, … DN = un ensemble d’attributs Avoir un LDAP ouvert à tlm c’est dangereux car tlm peut avoir: Les infos user: User SAM UPN SID/GUID La GPO … Filtres LDAP: (objectClass=user): Dump tous les objets LDAP qui sont des objets user (objectClass=group) (objectClass=computer)

OID = Object ID

adminCount est un attribut spécifique à Windows =0, =1 si c’est 1.. c’est admin :)

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 }

La suite ici !