redttps

Enumerating AD with ADSI

Description

ADSI (Active Directory Service Interfaces) is a set of COM interfaces provided by Windows that allows scripts or programs to interact with Active Directory. Red teams and attackers can use ADSI in PowerShell or VBScript to query domain objects (users, groups, computers, OUs) without importing any external tools, making it stealthy and effective.


Domain Enumeration Using PowerShell

  1. List DCs:
  2. ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).DomainControllers | ForEach-Object { $_.Name }
  3. List DCs 2:
  4. ([adsisearcher]'(&(objectCategory=computer)(primaryGroupID=516))').FindAll()
    
  5. Get information about a user:
  6. $userSearcher = [System.DirectoryServices.DirectorySearcher]'(&(objectClass=user)(sAMAccountName='Username'))'
    $userSearcher.FindOne().Properties
  7. List groups:
  8. ([ADSISearcher]"(&(ObjectClass=group))").FindAll() | ForEach-Object { $_.Properties['member'] | ForEach-Object { $_ } }
    
  9. Show members of a group:
  10. ([ADSISearcher]"(&(ObjectClass=group)(sAMAccountName='GroupName'))").FindOne().Properties['member'] | ForEach-Object { $_ }
    
  11. Show which groups a user belongs to:
  12. ([ADSISearcher]"(&(ObjectClass=user)(sAMAccountName='Username'))").FindOne().Properties['memberOf'] | ForEach-Object { $_ }
    
  13. List all computers in the domain:
  14. ([ADSISearcher]"ObjectClass=computer").FindAll() | ForEach-Object { $_.Properties['name'][0] }
    
  15. Returns information about a computer:
  16. ([ADSISearcher]"(&(ObjectClass=computer)(ObjectCategory=computer)(cn='Computer Name'))").FindOne().Properties
    
  17. Lists and returns information about the OUs (Organizational Units):
  18. ([ADSISearcher]"ObjectClass=organizationalUnit").FindAll() | ForEach-Object { $_.Properties }
    
  19. Returns information about GPOs (Group Policy Objects):
  20. ([ADSISearcher]"ObjectClass=groupPolicyContainer").FindAll() | ForEach-Object { $_.Properties }
    
  21. Enumerates all users in the domain:
  22. ([ADSISearcher]"ObjectClass=user").FindAll() | ForEach-Object { $_.Properties['sAMAccountName'][0] }
    
  23. Returns users who are members of protected groups:
  24. ([adsisearcher]'(&(objectClass=user)(adminCount=1))').FindAll()
    
  25. Returns accounts configured with Unconstrained Delegation:
  26. ([adsisearcher]'(&(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=524288))').FindAll()
    
  27. Enumerates all ACLs:
  28. $ADSI=[ADSI]"LDAP://DC=dominio,DC=com"
    $ADSI.psbase.get_ObjectSecurity().getAccessRules($true, $true,[system.security.principal.NtAccount])