Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Seznam všech loginů z Active Directory
září 29
Seznam všech loginů z Active Directory

Někde to tady mám, ale nemůžu to najít a docela často to potřebuju, takže znovu :-)

Úkol zní - vylistovat všechny loginy z Active Directory (ADDS) za použití minimálních oprávnění a tak, aby to pokud možno šlo kdykoliv. A ono to jde. Bez ohledu na oprávnění, která máte na objektech a organizačních jednotkách v AD, tahle metoda funguje pod jakýmkoliv ověřeným účtem vždy. Protože nepoužívá LDAP připojení, ale nechává si pomocí SAM rozhraní překládat SIDy na loginy. Takže stačí libovolný účet, který je Authenticated Users.

Jak to funguje? Každý účet, účet počítače, nebo skupina má SID. Všechny SIDy v jedné doméně jsou stejné, kromě koncovky (RID). RIDy vznikají tak, že se pouze inkrementují pro každý nový účet. Stačí tedy nechat si přeložit všechny SIDy od 1 do 2 miliard :-) Samozřejmě skončíte jakmile cítíte, že tam už žádné další nebudou.

function global:Get-PrimaryDomainSID ()
{
  # Note: this script obtains SID of the primary AD domain for the local computer. It works both
  #       if the local computer is a domain member (DomainRole = 1 or DomainRole = 3)
  #       or if the local computer is a domain controller (DomainRole = 4 or DomainRole = 4).
  #       The code works even under local user account and does not require calling user
  #       to be domain account. This should also work on any AD domain regardless of language
  #       mutation because, hopefully, the krbtgt account has always the same name

  [string] $domainSID = $null

  [int] $domainRole = gwmi Win32_ComputerSystem | Select -Expand DomainRole
  [bool] $isDomainMember = ($domainRole -ne 0) -and ($domainRole -ne 2)

  if ($isDomainMember) {

    [string] $domain = gwmi Win32_ComputerSystem | Select -Expand Domain
    [string] $krbtgtSID = (New-Object Security.Principal.NTAccount $domain\krbtgt).Translate([Security.Principal.SecurityIdentifier]).Value
    $domainSID = $krbtgtSID.SubString(0, $krbtgtSID.LastIndexOf('-'))
  }

  return $domainSID
}

$domainSID = Get-PrimaryDomainSID

(500..10000) | % { 

  $user = New-Object Security.Principal.SecurityIdentifier $domainSID-$_
  $errorActionPreference = 'SilentlyContinue'
  $user.Translate([Type]::GetType('System.Security.Principal.NTAccount')).Value
  $errorActionPreference = 'Continue'
}

Comments

Re: Seznam všech loginů z Active Directory

To se mi prave hodi, dekuji :)
Kubajs on 29.9.2017 13:16

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments