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
- List DCs:
- List DCs 2:
- Get information about a user:
- List groups:
- Show members of a group:
- Show which groups a user belongs to:
- List all computers in the domain:
- Returns information about a computer:
- Lists and returns information about the OUs (Organizational Units):
- Returns information about GPOs (Group Policy Objects):
- Enumerates all users in the domain:
- Returns users who are members of protected groups:
- Returns accounts configured with Unconstrained Delegation:
- Enumerates all ACLs:
([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).DomainControllers | ForEach-Object { $_.Name }
([adsisearcher]'(&(objectCategory=computer)(primaryGroupID=516))').FindAll()
$userSearcher = [System.DirectoryServices.DirectorySearcher]'(&(objectClass=user)(sAMAccountName='Username'))' $userSearcher.FindOne().Properties
([ADSISearcher]"(&(ObjectClass=group))").FindAll() | ForEach-Object { $_.Properties['member'] | ForEach-Object { $_ } }
([ADSISearcher]"(&(ObjectClass=group)(sAMAccountName='GroupName'))").FindOne().Properties['member'] | ForEach-Object { $_ }
([ADSISearcher]"(&(ObjectClass=user)(sAMAccountName='Username'))").FindOne().Properties['memberOf'] | ForEach-Object { $_ }
([ADSISearcher]"ObjectClass=computer").FindAll() | ForEach-Object { $_.Properties['name'][0] }
([ADSISearcher]"(&(ObjectClass=computer)(ObjectCategory=computer)(cn='Computer Name'))").FindOne().Properties
([ADSISearcher]"ObjectClass=organizationalUnit").FindAll() | ForEach-Object { $_.Properties }
([ADSISearcher]"ObjectClass=groupPolicyContainer").FindAll() | ForEach-Object { $_.Properties }
([ADSISearcher]"ObjectClass=user").FindAll() | ForEach-Object { $_.Properties['sAMAccountName'][0] }
([adsisearcher]'(&(objectClass=user)(adminCount=1))').FindAll()
([adsisearcher]'(&(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=524288))').FindAll()
$ADSI=[ADSI]"LDAP://DC=dominio,DC=com" $ADSI.psbase.get_ObjectSecurity().getAccessRules($true, $true,[system.security.principal.NtAccount])