ADMIN_TO
Summary
Description
Identification
PowerShell
function Find-ADMIN_TO {
[CmdletBinding()]
param( [string[]]$Target = $null, [string]$SearchBase = $null, [string]$OutputPath = "ADMIN_TO.csv", [int]$TimeoutSec = 6 )
Import-Module ActiveDirectory -ErrorAction Stop
$computers = @()
if ($Target) {
Write-Host "Using provided target(s): $($Target -join ', ')"
foreach ($t in $Target) {
# If it's an IP or FQDN, use as-is; otherwise try to resolve via AD
if ($t -match '^\d{1,3}(\.\d{1,3}){3}$' -or $t -like "*.*") {
$computers += $t
} else {
try {
$adComp = Get-ADComputer -Identity $t -Properties dNSHostName -ErrorAction Stop
if ($adComp.dNSHostName) { $computers += $adComp.dNSHostName } else { $computers += $adComp.Name }
} catch {
Write-Warning "Couldn't resolve '$t' from AD: $($_.Exception.Message). Using as provided."
$computers += $t
}
}
}
$computers = $computers | Sort-Object -Unique
} else {
Write-Host "Gathering computer objects from Active Directory..."
try {
$computers = if ($SearchBase) {
Write-Host "Filtering computers under '$SearchBase'"
Get-ADComputer -Filter * -SearchBase $SearchBase -ErrorAction Stop | Select-Object -ExpandProperty Name
} else {
Get-ADComputer -Filter * -ErrorAction Stop | Select-Object -ExpandProperty Name
}
} catch {
Write-Error "Failed to retrieve computer objects: $($_.Exception.Message)"
return
}
}
if (-not $computers) {
Write-Warning "No computers found; exiting."
return
}
$results = New-Object System.Collections.Generic.List[object]
Write-Host "Enumerating local Administrators on $($computers.Count) computers..."
$opt = New-CimSessionOption -Protocol Dcom
foreach ($c in $computers) {
try {
$sess = New-CimSession -ComputerName $c -SessionOption $opt -OperationTimeoutSec $TimeoutSec -ErrorAction Stop
try {
$grp = Get-CimInstance -CimSession $sess -ClassName Win32_Group -Filter "LocalAccount=TRUE AND Name='Administrators'" -ErrorAction Stop
if (-not $grp) {
Write-Warning "Administrators group not found on '$c'."
continue
}
$members = Get-CimAssociatedInstance -CimSession $sess -InputObject $grp -Association Win32_GroupUser -ErrorAction Stop
foreach ($m in $members) {
$memberType = if ($m.CimClass.CimClassName -eq 'Win32_Group') { 'Group' } else { 'User' }
$memberName = if ($m.Domain) { "$($m.Domain)\$($m.Name)" } else { $m.Name }
$results.Add([PSCustomObject]@{
ComputerName = $c
MemberName = $memberName
MemberType = $memberType
})
}
}
finally { if ($sess) { $sess | Remove-CimSession -ErrorAction SilentlyContinue } }
} catch { Write-Warning "Unable to enumerate Administrators on '$c': $($_.Exception.Message)"}
}
if ($results.Count -gt 0) {
try {$results | Select-Object ComputerName, MemberName, MemberType |Sort-Object ComputerName, MemberType, MemberName | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8 -ErrorAction Stop
Write-Host "Results exported to '$OutputPath'"
} catch { Write-Error "Failed to export to CSV: $($_.Exception.Message)" }
} else { Write-Output "No local administrator members found across scanned computers." }}Computer Management

Exploitation
Windows


Linux



Mitigation

Detection
Event ID
Description
Fields/Attributes
References
References
Last updated
Was this helpful?