alphasec
PowerShell protip 002e
in 𝕏

([adsisearcher]"objectCategory=computer").FindAll() - pobierz listę komputerów z Active Directory

tty1 · powershell
PS> ([adsisearcher]"objectCategory=computer").FindAll()
#Windows#RedTeam#Powershell#ActiveDirectory#Recon

Upraszczając wszystko mocno, [adsisearcher] to akcelerator typu dla System.DirectoryServices.DirectorySearcher, dzięki któremu możemy przeszukiwać Active Directory. Jako, że jeden obraz wart tysiąca słów:

PS C:\Users\drg> ([adsisearcher]"objectCategory=computer").FindAll()

Path                                                  Properties
----                                                  ----------
LDAP://CN=DC,OU=Domain Controllers,DC=alphacorp,DC=ad {ridsetreferences, logoncount, codepage, o...
LDAP://CN=2012R2,CN=Computers,DC=alphacorp,DC=ad      {logoncount, codepage, objectcategory, isc...
LDAP://CN=PIOTRPC,CN=Computers,DC=alphacorp,DC=ad     {logoncount, codepage, objectcategory, isc...
LDAP://CN=ANNAPC,CN=Computers,DC=alphacorp,DC=ad      {logoncount, codepage, objectcategory, isc...
LDAP://CN=AGAPC,CN=Computers,DC=alphacorp,DC=ad       {logoncount, codepage, objectcategory, isc...
LDAP://CN=CORE19,CN=Computers,DC=alphacorp,DC=ad      {logoncount, codepage, objectcategory, isc...

PS C:\Users\drg>

Możemy analogicznie użyć innych filtrów, np.: objectCategory=user czy objectCategory=group, które wiadomo co odnajdą.

Nic nie stoi również na przeszkodzie, żeby nasze filtry były jeszcze bardziej wyszukane, np. dzięki servicePrincipalName=MSSQLSvc/* będziemy mogli zlokalizować serwery MS SQL:

PS C:\Users\drg> ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll()

Path                                              Properties
----                                              ----------
LDAP://CN=Agnieszka Kuc,DC=alphacorp,DC=ad        {givenname, codepage, objectcategory, dscorepr...
LDAP://CN=PIOTRPC,CN=Computers,DC=alphacorp,DC=ad {logoncount, codepage, objectcategory, iscriti...

PS C:\Users\drg>

By zanurkować jeszcze głębiej, wykorzystajmy Get-Member (gm), by zobaczyć co nam jest tak naprawdę zwracane:

PS C:\Users\drg> ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll()|gm

   TypeName: System.DirectoryServices.SearchResult

Name              MemberType Definition
----              ---------- ----------
Equals            Method     bool Equals(System.Object obj)
GetDirectoryEntry Method     adsi GetDirectoryEntry()
GetHashCode       Method     int GetHashCode()
GetType           Method     type GetType()
ToString          Method     string ToString()
Path              Property   string Path {get;}
Properties        Property   System.DirectoryServices.ResultPropertyCollection Properties {get;}

PS C:\Users\drg>

Ciekawym tutaj zdaje się być metoda GetDirectoryEntry zwracająca nam System.DirectoryServices.DirectoryEntry. Co się kryje w środku zostawiam już jako zadanie własne, czyli:

    ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll().GetDirectoryEntry()|gm

W wyniku tak zebranej wiedzy, możemy sobie wybrać tylko interesujące nas informacje:

PS C:\Users\drg> ([adsisearcher]"servicePrincipalName=MSSQLSvc/*").FindAll().GetDirectoryEntry()|select cn,SchemaClassName,servicePrincipalName|fl

cn                   : {Agnieszka Kuc}
SchemaClassName      : user
servicePrincipalName : {MSSQLSvc/agapc}

cn                   : {PIOTRPC}
SchemaClassName      : computer
servicePrincipalName : {MSSQLSvc/piotrpc.alphacorp.ad:1433, MSSQLSvc/piotrpc.alphacorp.ad, TERMSRV/PIOTRPC, TERMSRV/piotrpc.alphacorp.ad...}

PS C:\Users\drg>

Przydatne linki

https://devblogs.microsoft.com/scripting/use-powershell-to-find-powershell-type-accelerators/ kilka słów o akceleratorach typów w Powershellu web ↗ https://youtu.be/qjfJh-B8Beg Dark Lord vs Sigma Guard część II, w której Grzegorz Tworek wspominał o [adsisearcher] video ↗
← poprzedni protip 002d ••• Wszystkie protipy następny → protip 002f
// subskrybuj

Nowe protipy prosto na maila.

Mięsiste jednolinijkowce i triki z prawdziwych zleceń. Zero spamu, zero teorii. Wypisujesz się jednym kliknięciem.

wersja newslettera: