0 знаков
12. Поиск хостов с помощью Nmap
Изучаемые инструменты- 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 позволяет применять альтернативные способы сканирования за счёт комбинирования и использования различных своих опций.
Для доступа необходимо авторизоваться на сайте Codebra.
Краткая теория по флагам TCP-пакета
Говоря о сканировании и Nmap, нельзя не затронуть тему, касающуюся TCP-пакетов. Рекомендую прочитать, например, эту статью: [ссылка доступна авторизованным пользователям]
Поиск хостов при помощи Nmap
Щупаем Nmap и первое сканирование
Попробуем просканировать один хост (DC meereen.essos.local
), чтобы пояснить некоторые особенности сканирования.
nmap -sn -PE 192.168.56.12
Для доступа необходимо авторизоваться на сайте Codebra.
Первое, с чем вы столкнетесь, используя такой тип сканирования, необходимость запуска Nmap с правами суперпользователя (root). Это не проблема, если вы имеете такие права:
sudo nmap -sn -PE 192.168.56.12
Для доступа необходимо авторизоваться на сайте Codebra.
ПримечаниеВы вероятно заметили использование других ключей в
nmap
. Вместо-sP
мы используем ключ-sn
. Это связано с тем, что многие переводы справочников по Nmap устарели, но все равно используются, поэтому в примерах можно встретить ключ-sP
(обычное ping-сканирование), который все так же работает, но не освещается в новой документации по Nmap. Ключ-sn
(без сканирования портов) так же означает ping-сканирование (nmap -h | grep '\-sn'
).Ключ
-PE
(Ping-сканирование ICMP Echo) - отправляется ICMP echo-запрос, чтобы получить ICMP echo-ответ.
Следующий не очевидный момент, который поможет заметить Wireshark (познакомимся с Wireshark далее):
Для доступа необходимо авторизоваться на сайте Codebra.
Так как хосты находятся в одной подсети (атакующая машина и контроллер домена), то сканирование было выполнено на канальном уровне с использованием протокола APR. Давайте запретим использование протокола ARP:
sudo nmap -sn -PE --disable-arp-ping 192.168.56.12
Результат не изменился:
Для доступа необходимо авторизоваться на сайте Codebra.
Результат в Wireshark:
Для доступа необходимо авторизоваться на сайте Codebra.
Далее мы немного улучшим нашу команду, чтобы в дальнейшем автоматизировать сканирование сети и не потерять собранные данные. Теперь рассмотрим другие способы обнаружения хоста.
Различные способы обнаружения хостов
Для экономии времени будем сканировать один 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
Для доступа необходимо авторизоваться на сайте Codebra.
Для доступа необходимо авторизоваться на сайте Codebra.
Попробуем отправить пакет на другой порт, например, 135:
nmap -sn -PS135 --disable-arp-ping 192.168.56.12
Для доступа необходимо авторизоваться на сайте Codebra.
Примечание из документации 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 у него открыт.
Для доступа необходимо авторизоваться на сайте Codebra.
Для доступа необходимо авторизоваться на сайте Codebra.
Ping-сканирование IP
При таком способе сканирования будут посылаться различные IP-протоколы. Задается опцией -PO список_протоколов
:
sudo nmap -sn -PO --disable-arp-ping 192.168.56.12
Для доступа необходимо авторизоваться на сайте Codebra.
Для доступа необходимо авторизоваться на сайте Codebra.
Как видно на скриншоте, было отправлено три пакета: (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
Для доступа необходимо авторизоваться на сайте Codebra.
Для доступа необходимо авторизоваться на сайте Codebra.
Сканирование ARP
Достаточно эффективный способ поиска активных хостов в подсети. Не забываем, что ARP - протокол канального уровня.
sudo nmap -sn -PR 192.168.56.12
Для доступа необходимо авторизоваться на сайте Codebra.
Для доступа необходимо авторизоваться на сайте Codebra.
Автоматизируем сканирование Nmap и сохраняем результат
Мы познакомились с Nmap, немного научились им пользоваться, разобрали несколько способов обнаружения хостов. Теперь применим полученные знания на стенде GOAD и немного автоматизируем нашу дальнейшую работу.
В Nmap есть флаг -oA путь
, который позволяет сохранить результаты сканирования в обычном (-oN
), XML (-oX
) и grepable (-oG
) форматах сразу.
sudo nmap -sn -PO 192.168.56.1-25 -oA hosts/pings
Для доступа необходимо авторизоваться на сайте Codebra.
В grepable формате (файл pings.gnmsp
) результат выглядит следующим образом:
Для доступа необходимо авторизоваться на сайте Codebra.
Составим список активных хостов при помощи стандартных утилит Linux:
cat hosts/pings.gnmap |grep ": Up" |cut -d " " -f2 |cut -d ":" -f1 > targets.txt
Содержимое файла targets.txt
:
Для доступа необходимо авторизоваться на сайте Codebra.
В нашем случае мы не сильно упростили работу, но когда хостов тысячи - это другой разговор.
Теперь мы можем использовать файл 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
- SSH80
- HTTP443
- HTTPS3389
- RDP
Запускаем с правами суперпользователя, иначе результат будет некорректный (все хосты будут определены как активные):
sudo nmap -n -p -Pn 22,80,443,2222,3389 -iL targets.txt -oA hosts/rmi
Для доступа необходимо авторизоваться на сайте Codebra.
На поиск активных среди 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
Для доступа необходимо авторизоваться на сайте Codebra.
Поиск подсетей среди большого диапазона адресов
Напоследок научимся искать подсети среди большого диапазона адресов. Способ не самый эффективный, но точно натолкнет на мысли где и как это применить. Большинство сетей имеет хост с 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.
Источники и похожее- [ссылка доступна авторизованным пользователям]
- Документация по Nmap
Тест
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ