• XSS.stack #1 – первый литературный журнал от юзеров форума

Полезные скрипты

50cent

RAID-массив
Пользователь
Регистрация
01.12.2021
Сообщения
62
Решения
1
Реакции
37
Предлагаю в данной теме делиться полезными скриптами. Начну.

Часто видел что люди пытаются получить список доменных админов используя команду net group с различными вариациями "domain admins" в зависимости от региона сети. Это достаточно топорно и не будет работать если админ переименовал эту группу, не говоря уже о том что переводить "domain admins" на разные языки это огромный костыль. Вот скрипт который получит админов, независимо от языка системы.

Код:
Param(
    [String]$Host,
    [String]$Domain,
    [String]$User,
    [String]$Password
)

try {
    $pass = ConvertTo-SecureString -AsPlainText -Force $Password
    $cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Domain\$User, $pass
    $groups = Get-WmiObject -ErrorAction Stop -Class Win32_Group -ComputerName $Host -Credential $cred
    $dagroup = $groups | Where-Object { $_.SID -like "S-1-5-*-512" }
    $dausers = $dagroup.GetRelated("Win32_UserAccount")
    foreach ($dauser in $dausers) {
        $d = $dauser.Domain
        $n = $dauser.Name
        Write-Host "$d\$n"
    }
}
catch {
    Write-Host "Failed:", $_.Exception.Message
}

Как можете заметить - каждая группа имеет собственный SID, таким образом можно получить Enterprise Admins или любую другрую группу или юзера из списка Well Known SIDs.
Так же учитывайте что в скрипте используется WMI (если заблокрирован фаерволом то скрипт не отработает), для удаленного получения груп и юзеров.
 
Последнее редактирование:
Заметил ошибку в первом посте. У меня нормально работало потому что был черновой вариант. Сюда писал с нормальными названиями переменных. Исправленный код:
Код:
Param(
    [String]$RHost,
    [String]$Domain,
    [String]$RUser,
    [String]$Password
)

try {
    $pass = ConvertTo-SecureString -AsPlainText -Force $Password
    $cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Domain\$RUser, $pass
    $groups = Get-WmiObject -ErrorAction Stop -Class Win32_Group -ComputerName $RHost -Credential $cred
    $dagroup = $groups | Where-Object { $_.SID -like "S-1-5-*-512" }
    $dausers = $dagroup.GetRelated("Win32_UserAccount")
    foreach ($dauser in $dausers) {
        $d = $dauser.Domain
        $n = $dauser.Name
        Write-Host "$d\$n"
    }
}
catch {
    Write-Host "Failed:", $_.Exception.Message
}

P.S никто даже не указал что не работает...
 
Получение всех компьютеров, находящихся в домене:
Код:
Param(
    [String]$RHost,
    [String]$Domain,
    [String]$RUser,
    [String]$Password
)
try {
    $pass = ConvertTo-SecureString -AsPlainText -Force $Password
    $cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Domain\$RUser, $pass
    $comps = Get-WmiObject -ErrorAction Stop -ComputerName $RHost -Credential $cred -Namespace "root\directory\ldap" -Query "SELECT DS_dNSHostName FROM DS_computer"
    foreach ($comp in $comps) {
        Write-Host $comp.DS_dNSHostName
    }
}
catch {
    Write-Host "Failed:", $_.Exception.Message
}

На большом домене будет исполняться около минуты.

P.S Можно было бы использовать Get-ADComputer, однако целью было использование минимальной версии powershell.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх