.Существует множество сканеров сетевых портов. Некоторые из самых популярных включают Nmap, Masscan, Angry IP Scanner, ZMap и многие другие.Все они великолепны, хорошо протестированы и функциональны, но они также большие, сложные и, что самое главное, отмечены каждым достойным антивирусом или решением EDR. И это может стать преградой в некоторых сценариях тестирования на проникновение. На этот раз мы рассмотрим минималистичный сканер портов в PowerShell (TCP / UDP).
Написание инструментов с нуля может потребоваться, например, когда мы выполняем пентест в строго ограниченной среде, где мы не можем использовать какие-либо типичные инструменты пентестинга.
Это было бы жизненно важно при тестировании изолированной среды VDI / Citrix, в которую мы не можем ничего загружать, или когда мы выполняем моделирование недовольного сотрудника с рабочей станции со всеми установленными средствами безопасности.
Во всех этих случаях нам нужно будет создать наши собственные инструменты, чтобы мы могли выполнять базовые операции, такие как сканирование портов.
Без возможности сканирования портов мы вряд ли сможем добиться каких-либо успехов, обнаружить системы в сети или совершить какое-либо горизонтальное движение в этом отношении.
Сканер портов просто необходим, и если мы не можем его использовать, мы должны его сделать.
Для таких случаев был разработан следующий быстрый и простой, но мощный и надежный сканер портов.
Чтобы сохранить небольшой размер, сканер разделен на два отдельных независимых модуля:
Так что это действительно два сканера портов, а не один. Оба сканера можно найти в следующем репозитории GitHub:
Оба сканера портов имеют следующие особенности:
С точки зрения дизайна:
Давайте посмотрим, как пользоваться этими сканерами.
Поскольку сканеры портов написаны на PowerShell, мы должны иметь возможность запускать команды PowerShell в системе, которую мы используем. На рабочей станции с ограниченным доступом это может быть проблемой, так что ..
(1) Первым шагом обычно является обойти ограничения и создать оболочку. Как только мы сможем комфортно запускать команды PowerShell, мы сможем перейти к следующему шагу.
(2) Теперь мы можем записать сканеры портов где-нибудь в файловой системе. Например, мы могли бы разместить их на нашем рабочем столе, но из-за различных ограничений нам, возможно, придется разместить их где-нибудь еще, где мы можем писать, например:
Теперь мы можем начать сканирование портов. Вот краткое введение в их использование.
Сканер TCP-портов:
Import-Module .\port-scan-tcp.ps1
# Usage:
port-scan-tcp <host(s)> <port(s)>
Сканер портов UDP:
Import-Module .\port-scan-udp.ps1
# Usage:
port-scan-udp <host(s)> <port(s)>
Давайте посмотрим на несколько примеров их использования на практике.
Вот простейший пример — проверьте, открыт ли на удаленном хосте порт tcp / 445:
port-scan-tcp 192.168.204.183 445
Вот пример сканирования одного хоста на предмет выбранных TCP-портов:
port-scan-tcp 192.168.204.183 (21,22,23,25,80,443,445,3389)
Вот пример сканирования порта в диапазоне 192.168.204.0/24 для порта tcp / 445 (сканирование портов):
0..255 | foreach { port-scan-tcp 192.168.204.$_ 445 }
Вот пример сканирования сетевого диапазона 192.168.204.0/24 для выбранных TCP-портов:
0..255 | foreach { port-scan-tcp 192.168.204.$_ (22,80,445) }
Мы также можем предоставить список целей в качестве входного файла.
Например, в корпоративных сетях с развертыванием Active Directory (AD) мы могли бы извлечь список компьютеров из AD с помощью командлетов PowerShell следующим образом:
$a = [adsisearcher]”(objectCategory=computer)”
$a.PropertiesToLoad.add(“dnshostname”) | out-null
$a.PageSize = 1
$a.FindAll() | % { echo $_.properties.dnshostname } > computers.txt
Теперь мы можем идентифицировать все живые системы Windows путем сканирования порта tcp / 445:
port-scan-tcp (gc .\computers.txt) 445
Оба сканера отслеживают все, используя файл состояния (scanresults.txt), который создается в текущем рабочем каталоге. Это позволяет нам проверять результаты в любое время, даже во время текущего сканирования.
Например, вот как мы можем получить список систем с открытым портом tcp / 445:
Get-Content .\scanresults.txt | Select-String "tcp,445,Open"
Если бы мы хотели перечислить только первый столбец, мы могли бы легко сделать это с помощью PowerShell следующим образом:
(Get-Content .\scanresults.txt | Select-String "tcp,445,Open") -replace ",.*",""
Теперь мы могли бы передать этот список в наш брутфорсер входа в SMB, например, и попытаться взломать некоторые из этих машин Windows. Или мы могли бы использовать какую-нибудь другую автоматизацию, все, что захотим.
Совместимость. Сканер TCP поставляется в двух версиях, но с той разницей, что используется метод TcpClient.ConnectAsync (). Этот метод, доступный в .NET 4.5, дает сканеру возможность различать «закрытые» и «отфильтрованные» порты. Совместимая версия сканера (для более старых систем) не может распознать это и просто сообщает обо всех таких случаях как «Закрыто».
Скорость. Оба сканера портов (TCP и UDP) представляют собой только однопоточные циклы без какого-либо распараллеливания. Таким образом, скорость сканирования ограничена. Но в худшем случае скорость должна быть около 1 сканирования порта в секунду, в зависимости от значений тайм-аута, которые вы также можете просто изменить.
Снижение скорости. Также следует иметь в виду, что сканеры могут немного замедлиться через некоторое время, если уже есть слишком много результатов. Чтобы смягчить эту проблему, мы можем повернуть файл результатов или использовать другой, изменив модули и перезагрузив:
Import-Module .\port-scan-tcp.ps1 -force
Import-Module .\port-scan-udp.ps1 -force
Хотя эти сканеры портов не идеальны, в некоторых ситуациях именно они справляются со своей задачей благодаря красивому списку функций и компактной форме. Надеюсь, вы тоже найдете их иногда полезными.
Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…
Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…
Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…
С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…
Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…
Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…