Windows

Сканер портов в PowerShell (TCP / UDP)

.Существует множество сканеров сетевых портов. Некоторые из самых популярных включают Nmap, Masscan, Angry IP Scanner, ZMap и многие другие.Все они великолепны, хорошо протестированы и функциональны, но они также большие, сложные и, что самое главное, отмечены каждым достойным антивирусом или решением EDR. И это может стать преградой в некоторых сценариях тестирования на проникновение. На этот раз мы рассмотрим минималистичный сканер портов в PowerShell (TCP / UDP).

Зачем писать сканер портов с нуля?

Написание инструментов с нуля может потребоваться, например, когда мы выполняем пентест в строго ограниченной среде, где мы не можем использовать какие-либо типичные инструменты пентестинга.

Это было бы жизненно важно при тестировании изолированной среды VDI / Citrix, в которую мы не можем ничего загружать, или когда мы выполняем моделирование недовольного сотрудника с рабочей станции со всеми установленными средствами безопасности.

Во всех этих случаях нам нужно будет создать наши собственные инструменты, чтобы мы могли выполнять базовые операции, такие как сканирование портов.

Без возможности сканирования портов мы вряд ли сможем добиться каких-либо успехов, обнаружить системы в сети или совершить какое-либо горизонтальное движение в этом отношении.

Сканер портов просто необходим, и если мы не можем его использовать, мы должны его сделать.

Сканер портов TCP и UDP в PowerShell

Для таких случаев был разработан следующий быстрый и простой, но мощный и надежный сканер портов.

Чтобы сохранить небольшой размер, сканер разделен на два отдельных независимых модуля:

Так что это действительно два сканера портов, а не один. Оба сканера можно найти в следующем репозитории GitHub:

Список возможностей

Оба сканера портов имеют следующие особенности:

      • Обнаружение открытых, закрытых и фильтруемых портов (как TCP, так и UDP)
      • Возможность сканирования отдельного хоста, диапазона сети или списка хостов в файле
      • Настраиваемые значения тайм-аута для эффективного и надежного сканирования портов
      • Не является вредоносным — не обнаруживается никаким антивирусом или решением EDR

С точки зрения дизайна:

      • Маленький и минималистичный — набирается вручную (на клавиатуре)
      • Написано на чистом PowerShell — дополнительных модулей не требуется
      • Практичный и продуманный дизайн:
        • Поддержка возобновления, если прервана
        • Пропустить уже просканированные хосты / порты

Давайте посмотрим, как пользоваться этими сканерами.

Типичный сценарий использования

Поскольку сканеры портов написаны на PowerShell, мы должны иметь возможность запускать команды PowerShell в системе, которую мы используем. На рабочей станции с ограниченным доступом это может быть проблемой, так что ..

(1) Первым шагом обычно является обойти ограничения и создать оболочку. Как только мы сможем комфортно запускать команды PowerShell, мы сможем перейти к следующему шагу.

(2) Теперь мы можем записать сканеры портов где-нибудь в файловой системе. Например, мы могли бы разместить их на нашем рабочем столе, но из-за различных ограничений нам, возможно, придется разместить их где-нибудь еще, где мы можем писать, например:

      • C:\Users\Public
      • C:\Windows\Tasks
      • C:\Windows\Tracing
      • C:\Windows\System32\Spool\Drivers\Color
      • etc.

Теперь мы можем начать сканирование портов. Вот краткое введение в их использование.

Сканер 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

Заключение

Хотя эти сканеры портов не идеальны, в некоторых ситуациях именно они справляются со своей задачей благодаря красивому списку функций и компактной форме. Надеюсь, вы тоже найдете их иногда полезными.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click to rate this post!
[Total: 1 Average: 5]
faza

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

12 месяцев ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

1 год ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

1 год ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

1 год ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

1 год ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

1 год ago