Искать
Вы превысили запрос на
0 знаков

12. Поиск хостов с помощью Nmap

0
0
Не пройден
Автор статьи никого не призывает к правонарушениям и отказывается нести ответственность за ваши действия. Вся информация предоставлена исключительно в ознакомительных целях. Все действия происходят на виртуальных машинах и внутри локальной сети автора. Спасибо!
Изучаемые инструменты

- Nmap

- Wireshark

- cat

- cut

- grep

Кратко

- Nmap - инструмент для сканирования сети и обнаружения активных хостов.

- Сканирование может быть выполнено на канальном уровне с использованием протокола APR.

- Познакомимся с различными способами обнаружения хостов: ping-сканирование TCP SYN, UDP, IP и ARP.

- Nmap позволяет сохранять результаты сканирования в различных форматах.

- Можно использовать порты интерфейса удаленного управления (RMI) для обнаружения активных хостов.

- Флаги Nmap позволяют регулировать размер групп для параллельного сканирования и задавать минимальную интенсивность сканирования.

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

Введение

О чем пойдет речь в этом уроке

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

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

Кратко о Nmap

Nmap - это сокращение от "network mapper". Он хорошо известен среди системных администраторов и является удобным средством исследования сети и проверки безопасности.

Nmap используется для сканирования сети на наличие активных хостов, сканирование портов, определение ОС, получение сведений о версии активных служб, проверка наличия и работы межсетевого экрана.

Синтаксис команды Nmap на первый взгляд простой:

ПРИМЕР
 
nmap опции_сканирования цель_сканирования
 

Почему "простой на первый взгляд"? Существует огромное количество опций, комбинирование которых позволяет проводить различные виды сканирования.

Использовать различные типы сканирования нужно по той причине, что, как правило, организации защищают свои сети (например, ваша организация, в которой вы являетесь системным администратором, использует межсетевые экраны или системы предотвращения вторжений - IPS). Эти системы могут блокировать попытки сканирования сети. В свою очередь, Nmap позволяет применять альтернативные способы сканирования за счёт комбинирования и использования различных своих опций.

Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Краткая теория по флагам TCP-пакета

Говоря о сканировании и Nmap, нельзя не затронуть тему, касающуюся TCP-пакетов. Рекомендую прочитать, например, эту статью: [ссылка доступна авторизованным пользователям]

Поиск хостов при помощи Nmap

Щупаем Nmap и первое сканирование

Попробуем просканировать один хост (DC meereen.essos.local), чтобы пояснить некоторые особенности сканирования.

ПРИМЕР
 
nmap -sn -PE 192.168.56.12
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Первое, с чем вы столкнетесь, используя такой тип сканирования, необходимость запуска Nmap с правами суперпользователя (root). Это не проблема, если вы имеете такие права:

ПРИМЕР
 
sudo nmap -sn -PE 192.168.56.12
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.
Примечание

Вы вероятно заметили использование других ключей в nmap. Вместо -sP мы используем ключ -sn. Это связано с тем, что многие переводы справочников по Nmap устарели, но все равно используются, поэтому в примерах можно встретить ключ -sP (обычное ping-сканирование), который все так же работает, но не освещается в новой документации по Nmap. Ключ -sn (без сканирования портов) так же означает ping-сканирование (nmap -h | grep '\-sn').

Ключ -PE (Ping-сканирование ICMP Echo) - отправляется ICMP echo-запрос, чтобы получить ICMP echo-ответ.

Следующий не очевидный момент, который поможет заметить Wireshark (познакомимся с Wireshark далее):

Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Так как хосты находятся в одной подсети (атакующая машина и контроллер домена), то сканирование было выполнено на канальном уровне с использованием протокола APR. Давайте запретим использование протокола ARP:

ПРИМЕР
 
sudo nmap -sn -PE --disable-arp-ping 192.168.56.12
 

Результат не изменился:

Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Результат в Wireshark:

Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

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

Различные способы обнаружения хостов

Для экономии времени будем сканировать один IP-адрес. Как ускорить процесс сканирования большого пула адресов поговорим в конце урока.

Ping-сканирование TCP SYN

Простой способ обнаружения хостов, в котором посылается пакет с SYN-флагом и ожидается ответный пакет с ACK-флагом. После посылается пакет с RST-флагом, означающем разрыв соединения.

Для такого метода сканирования используется флаг -PS список_портов. По умолчанию используется порт 80. Синтаксис флага следующий: -PS22 и -PS22-25,80,113,1050,35000, т.е. пробел после флага при перечислении портов не ставится.

ПРИМЕР
 
nmap -sn -PS --disable-arp-ping 192.168.56.12
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Попробуем отправить пакет на другой порт, например, 135:

ПРИМЕР
 
 nmap -sn -PS135 --disable-arp-ping 192.168.56.12
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.
Примечание из документации Nmap

Установленные флаг SYN указывает удаленной системе, что вы пытаетесь установить соединение. Если порт назначения закрыт, то в ответ посылается RST (сброс) пакет. Если порт открыт, то удаленная система предпримет второй шаг в 3-ех этапной последовательности установки TCP соединения путем ответа SYN/ACK TCP пакетом. Система, на которой работает Nmap, сбрасывает почти установленное соединение отвечая RST пакетом вместо ACK, что привело бы к установке полного соединения. RST пакет посылается ядром системы, на которой работает Nmap, в ответ на непредвиденный SYN/ACK пакет, а не самой Nmap.

Nmap не важно открыт порт или закрыт. Ответы пакетами RST или SYN/ACK описанными выше, указывают Nmap на то, что хост доступен и может отвечать на запросы.

Ping-сканирование UDP

Теперь попробуем определить активность хоста просканировав 53 UDP-порт:

ПРИМЕР
 
sudo nmap -sn -PU53 --disable-arp-ping 192.168.56.12
 

Этот хост является DNS-сервером, поэтому UDP порт 53 у него открыт.

Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Ping-сканирование IP

При таком способе сканирования будут посылаться различные IP-протоколы. Задается опцией -PO список_протоколов:

ПРИМЕР
 
sudo nmap -sn -PO --disable-arp-ping 192.168.56.12
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Как видно на скриншоте, было отправлено три пакета: (ICMP, IGMP, IPv4) и ответ был получен на ICMP.

Примечание из документации Nmap

Новейшей опцией для обнаружения хостов является пингование с использованием IP протокола, которая посылает IP пакеты с номером протокола, указанным в заголовке пакета. Список протоколов задается в том же формате, что и список портов в описанных выше опциях обнаружения хостов с помощью протоколов TCP и UDP. Если не указан ни один протокол, то по умолчанию будут использованы IP пакеты ICMP (протокол 1), IGMP (протокол 2) и IP-in-IP (протокол 4). Протоколы по умолчанию могут быть заданы во время компиляции путем изменения DEFAULT_PROTO_PROBE_PORT_SPEC в nmap.h. Имейте в виду, что для ICMP, IGMP, TCP (протокол 6) и UDP (протокол 17), пакеты посылаются с "правильными" заголовками протокола, в то время как для остальных протоколов пакеты посылаются без дополнительной информации после IP заголовка (пока не задана опция --data-length).

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

ПРИМЕР
 
sudo nmap -sn -PO1 --disable-arp-ping 192.168.56.12
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Сканирование ARP

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

ПРИМЕР
 
sudo nmap -sn -PR 192.168.56.12
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Автоматизируем сканирование Nmap и сохраняем результат

Мы познакомились с Nmap, немного научились им пользоваться, разобрали несколько способов обнаружения хостов. Теперь применим полученные знания на стенде GOAD и немного автоматизируем нашу дальнейшую работу.

В Nmap есть флаг -oA путь, который позволяет сохранить результаты сканирования в обычном (-oN), XML (-oX) и grepable (-oG) форматах сразу.

ПРИМЕР
 
sudo nmap -sn -PO 192.168.56.1-25 -oA hosts/pings
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

В grepable формате (файл pings.gnmsp) результат выглядит следующим образом:

Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Составим список активных хостов при помощи стандартных утилит Linux:

ПРИМЕР
 
cat hosts/pings.gnmap |grep ": Up" |cut -d " " -f2 |cut -d ":" -f1 > targets.txt
 

Содержимое файла targets.txt:

Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

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

Теперь мы можем использовать файл targets.txt, вместо указания диапазона адресов. Для этого в Nmap есть ключ -iL:

ПРИМЕР
 
sudo nmap -sn -PO -iL targets.txt -oA hosts/pings
 

Как еще можно попробовать определить активные хосты? Читаем следующий раздел.

Дополнительно: использование портов интерфейса удаленного управления (RMI) для обнаружения хостов

Если хосты не пингуются - это не проблема, можно попробовать пойти другим путем и обнаружить активные хосты по открытым RMI портам. RMI (Remote Management Interface) - порты интерфейса удаленного управления.

Будем использовать три опции:

  • -n - не тратить время на разрешение DNS-имен
  • -p - перечисление портов
  • -Pn - пропуск ping-сканирования

Просканируем следующие TCP порты:

  • 22, 2222 - SSH
  • 80 - HTTP
  • 443 - HTTPS
  • 3389 - RDP

Запускаем с правами суперпользователя, иначе результат будет некорректный (все хосты будут определены как активные):

ПРИМЕР
 
sudo nmap -n -p -Pn 22,80,443,2222,3389 -iL targets.txt -oA hosts/rmi
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

На поиск активных среди 25 хостов было потрачено 2.64 секунды. Давайте попробуем ускорить поиск активных хостов.

Внимание

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

В Nmap есть флаги --min-hostgroup количество_хостов и --max-hostgroup количество_хостов, которые регулируют размер групп для параллельного сканирования. Это позволяет разбить заданное IP-пространство на группы с последующим параллельным сканированием. Недостаток распараллеливания в том, что вы не узнаете результат до тех пор, пока не будет завершено сканирование всей группы.

Флаги --min-hostgroup и --max-hostgroup не имеют эффекта при ping-сканировании.

Флаг --min-rate число задает минимальную интенсивность сканирования. Под числом понимается количество пакетов в секунду. Это минимальное число и Nmap ничего не мешает отправлять пакеты с большей скоростью, если это позволяет пропускная способность сети.

Примечание из документации Nmap

Существуют два варианта, при которых реальная интенсивность работы будет меньше заданного минимума. Первый, когда заданный минимум быстрее, чем наиболее быстрый возможный уровень работы Nmap, который зависит от аппаратного обеспечения. В этом случае Nmap будет посылать пакеты так быстро, как может; но будьте осторожны, т.к. при быстрой скорости возможны потери точности. Второй случай, когда у Nmap больше нечего отсылать, например, в конце сканирования, когда последние запросы уже посланы, и Nmap ожидает ответы на них. Это нормально, когда интенсивность падает в конце сканирования или при смене групп сканирования.

Задание минимального уровня интенсивности должно производится с осторожностью. Сканирование быстрее, чем возможно в данной сети, может привести к потери точности. В некоторых случаях, задание высокого уровня интенсивности может привести к тому, что сканирование займет больше времени, чем с более низким уровнем. Это может произойти в случае, если адаптивные ретрансляционные алгоритмы Nmap обнаружат перегрузку сети, вызванную высоким уровнем интенсивности сканирования, и увеличат количество ретрансляций для повышения точности сканирования. Поэтому, даже хотя пакеты отсылаются с большой интенсивностью, еще больше пакетов отсылается впустую.

ПРИМЕР
 
sudo nmap -Pn -n -p 22,80,443,2222,3389 192.168.56.1-25 -oA hosts/rmi --min-hostgroup 256 --min-rate 1280
 
Здесь изображение или скриншот.
Они доступны только авторизованным пользователям.

Поиск подсетей среди большого диапазона адресов

Напоследок научимся искать подсети среди большого диапазона адресов. Способ не самый эффективный, но точно натолкнет на мысли где и как это применить. Большинство сетей имеет хост с IP-адресом, последний октет которого равен 1, правда в нашей виртуальной сети нет такого адреса :)

Пример:

ПРИМЕР
 
sudo nmap -sn -PE 192.0-255.0-255.1 --min-hostgroup 10000 --min-rate 10000
 

Заключение

В этом уроке мы познакомились с незаменимым инструментом Nmap, узнали как сканировать сеть в поисках активных хостов, немного автоматизировали процесс сбора информации. Узнали как ускорить работу Nmap и определить доступность хоста, если ping-сканирование не работает.

В следующем уроке научимся перебирать DNS-имена при помощи aiodnsbrute и генерировать словари утилитой Crunch. Познакомимся с Python-пакетом pipx.

Тест

Две секундочки...
@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию и компьютерной безопасности. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Пентесту Active Directory, Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно