Поиск доступа по RDP на терминальные сервера Терминальные сервера могут предоставлять доступ в другие сегменты сети, которые не доступны из пользовательской сети, на терминальных серверах можно обнаружить интересные файлы и скрипты, на серверах чаще всего антивирус настроен менее жестко и можно найти исключения для запуска приложений. Даже если на терминальном сервере не удалось повысить привилегии он может стать плацдармом для дальнейшего выполнения проекта.
Можно посмотреть в Bloodhound связь
CanRDP, которая устанавливается из групповых политик, но доступы могут предоставляться через другие механизмы управления, например, SCCM или вручную. Для проверки доступа по протоколу RDP обычно используются средства для перебора паролей типа hydra или собственные разработки. Но есть другой способ.
Члены группы удаленных столов могут удаленно выполнять команду
qwinsta.exe на сервере, например,
qwinsta.exe /server:term.domain.local. Эта возможность связана с работой службы терминалов через вызов процедур. Для аутентификации используется Kerberos.
В PowerView есть функция
Get-NetRDPSessions (аналог qwinsta), которая позволяет получить список сессий на удаленном хосте:
Get-DomainComputer -LDAPFilter "(operatingsystem=*Windows Server*)(!userAccountControl:1.2.840.113556.1.4.803:=2)" |Get-NetRDPSession|ft -AutoSize
Если нам нужно получить только список уникальных компьютеров обработку вывода можно изменить на
Get-DomainComputer -LDAPFilter "(operatingsystem=*Windows Server*)(!userAccountControl:1.2.840.113556.1.4.803:=2)" |Get-NetRDPSession|Select-Object ComputerName -Unique
Если нет возможности запустить PowerView, то можно использовать команду qwinsta в цикле по всем серверам.
Создадим скрипт, который выберет из домена все активные компьютеры с операционной системой
Windows Server. И затем выполним команду
qwinsta /server:$ComputerName. Так как в первую очередь нас интересует только доступ, то мы не будем разбирать вывод самой команды.
function Invoke-CheckRDPAccess {
$searcher = [adsisearcher]'(&(objectCategory=computer)(operatingsystem=*Windows Server*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
$searcher.PageSize = 1000
$comps=$searcher.FindAll()
foreach ($comp in $comps)
{
$ComputerName = $comp.Properties["name"][0].ToLower()
$ComputerName
if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet)
{
# Запускаем qwinsta
$processInfo = New-Object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = "qwinsta.exe"
$processInfo.Arguments = "/server:$ComputerName"
$processInfo.RedirectStandardOutput = $true
$processInfo.RedirectStandardError = $true
$processInfo.UseShellExecute = $false
$processInfo.CreateNoWindow = $true
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $processInfo
$process.Start() | Out-Null
$output = $process.StandardOutput.ReadToEnd()
$errorOutput = $process.StandardError.ReadToEnd()
$process.WaitForExit()
if($process.ExitCode -eq 0 -and $output)
{
Write-Host -ForegroundColor Green "You have RDP access to $ComputerName"
# Если нужно получить список сессий раскомментировать следующую строку
# $output
}
}
}
}Стоит помнить, что администраторы могут настроить доступ к терминальному серверу только по порту 3389, все остальные порты будут не доступны и в этом случае описанный выше метод не сработает.
#Внутрянка #ActiveDirectory