Nmap - лучший сканер сети

Nmap - лучший сканер сети

#root

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

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

Итак, первое с чего нужно начать это:

# nmap localhost

В мануалах часто пишут, что nmap сканирует только первые 1024 порта по умолчанию, ну во-первых: можно задать диапазон портов в ручную через опцию -p

# nmap localhost -p 1-65535

А во-вторых: список портов которые nmap будет сканировать по дефолту определен в файле "/usr/share/nmap/nmap-services".

Опция -sV поможет тебе определить версию сервиса на сканируемом хосте

# nmap localhost -sV

А опция -O попросит утилиту определить ОС хоста.
Есть возможность более детального сканирования (агрессивного) с помощью опции -A. Ниже я приведу список примеров сканирований.

Настройка диапазонов портов

# nmap localhost -p 22,21,80,100-200

Сканируем подсеть

# nmap 192.168.0.0/24 -p 22

Сканирование списка хостов из файла

# nmap -p 22 -iL hosts.txt

TCP сканирование (будет использован системный вызов Connect())

# nmap -p22 -sT localhost

SYN, FIN, Xmas, TCP Null сканирования

# nmap -p22 -sS localhost
# nmap -p22 -sF localhost
# nmap -p22 -sX localhost
# nmap -p22 -sN localhost

Не определять доменные имена

# nmap -n -p22 localhost

Показывать причину, по которой определенный порт считается «открытым»:

# nmap -p22,80,100-200 --reason localhost

Пингануть хосты для проверки, онлайн ли они, но не сканировать порты:

# nmap -sn 192.168.0.0/24

Сканировать хосты, даже если они не отвечают на пинги:

# nmap -p22,80 -Pn localhost

Считать, что хост онлайн, если он отвечает на SYN, посланный на порт 443:

# nmap -p22,80,443 -PS 443 192.168.0.0/24

Сканирование UDP (работает медленнее обычного сканирования TCP):

# nmap -sU -p111 localhost

Ограничиваем время, которое можно потратить на один хост:

# nmap -p22 --host-timeout 1m localhost

Управление степенью параллелизма:

# nmap -p22 --max-parallelism 2 localhost

# nmap -p22 --min-parallelism 2 localhost

Делаем паузу прежде, чем перейти к следующему хосту:

# nmap -p22 --scan-delay 5s 192.168.0.0/24

Ограничение на число пакетов, посылаемых в секунду:

# nmap -p22 --min-rate 1 --max-rate 100 localhost

Обновить базу данных скриптов NSE (Nmap Scripting Engine)

# nmap --script-updatedb

Натравляем все скрипты из группы default:

# nmap --script default localhost

Все скрипты, название которых начинается на http

# nmap --script http-* localhost

 Не пинговать перед сканированием(будет расценивать все хосты как работающие)

# nmap -p22 -Pn localhost

Сохранить результат в файл

# nmap -p22 -o scan.log localhost

Указываем адреса по маске, диапазону, диапазонам, вся сеть по маске 255.255.0.0

# nmap 192.168.*.*
# nmap 192.168.0-255.0-255
# nmap 192.168.1-50,51-255.1,2,3,4,5-255
# nmap 192.168.0.0/16

Обход брандмауэров

Разные методы сканирования необходимы для обхода IDS (система обнаружения вторжений) и брандмауэров.

Для фильтрации порта брандмауэр отбрасывает пакеты ASK, которые отправляются при создании нового соединения, а пакеты SYN, которые отправляются в рамках текущего соединения, проходят свободно. 

Еще есть stateful-брандмауэры, они более детальнее анализируют приходящие пакеты и могут определить пакеты nmap отправленные в рамках сканирования, такое умеет например Iptables.

Выяснить, какой тип брандмауэра используется, можно, выполнив SYN-сканирование и сразу за ним — ACK-сканирование. Если порты, отмеченные во время SYN-сканирования как filtered, стали unfiltered, значит, перед тобой не stateful-брандмауэр.

Кроме того, можно попробовать обойти брандмауэр с помощью изменения номера исходящего порта:

# nmap --source-port 53 192.168.0.1

Это эксплуатация старой как мир ошибки настройки брандмауэра, которая заключается в том, что админ открывает доступ всему входящему трафику (включая протокол TCP) с порта 53, чтобы позволить приложениям беспрепятственно выполнять DNS-запросы.
Сегодня такое встречается редко, но, как показывает практика, иногда бывает.

Кроме всего прочего, в Nmap есть средства для скрытия факта сканирования от глаз брандмауэров и IDS:

# nmap -f 192.168.0.1

В этом случае Nmap будет разбивать пакеты на крохотные фрагменты размером 8 байт.
Делает он это в надежде на то, что брандмауэр или IDS не сможет собрать пакет из фрагментов и проанализировать его заголовок (по причине плохой реализации или в угоду производительности) и просто пропустит пакет или отбросит.

# nmap --mtu 16 192.168.0.1

Та же история, только с возможностью контролировать размер пакета (в данном случае 16). Можно использовать против брандмауэров и IDS, которые умеют ловить факты сканирования с помощью Nmap, анализируя размер фрагмента.

# nmap --data-length 25 192.168.0.1

Добавляет в конец пакета указанное количество рандомных байтов. Цель та же, что и в предыдущем случае: обмануть IDS, которая может быть способна обнаружить сканирование, анализируя размер пакета (Nmap всегда посылает пакеты длиной 40 байт при использовании протокола TCP).

Расширение функционала с помощью скриптов

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

  • auth — проверка возможности логина. Например, скрипт ftp-anon пробует выполнить анонимный логин на FTP-сервер.
  • broadcast — различные виды обнаружения хостов в сети.
    Пример: broadcast-upnp-info — скрипт для поиска UPnP-сервисов.
  • brute — реализация техник брутфорса паролей.
    Пример: http-brute — брутфорс паролей от веб-сервера.
  • default — скрипты, запускаемые автоматически при указании опции -A или -sC. Обычно это простые быстрые скрипты, собирающие дополнительную информацию о машине, вроде уже приведенного выше ftp-anon.
  • discovery — практически аналог broadcast.
    Пример: smb-enum-shares — поиск расшаренных с помощью протокола SMB дисков.
  • dos — скрипты для организации DoS-атак.
    Пример: smb-vuln-regsvc-dos — выводит из строя Windows 2000 путем эксплуатации уязвимости MSRC8742.
  • exploit — эксплуатация или проверка на уязвимость.
    Пример: smb-vuln-ms06-025 — проверка машин Windows на уязвимость MS06-025.
  • external — скрипты, использующие внешние ресурсы для получения дополнительной информации о машине.
    Пример: whois.
  • fuzzer — скрипты, посылающие удаленной стороне неожиданные и неправильно сформированные данные с целью поиска уязвимостей или попытки выполнить DoS.
    Пример: dns-fuzz.
  • intrusive — скрипты, выполняющие активные действия в отношении машины.
    Пример: snmp-brute — брутфорс SNMP-сервера.
  • malware — проверка на зараженность машины вирусами и бэкдорами. Пример: smtp-strangeport — поиск SMTP-сервера на нестандартном порте, что может быть свидетельством заражения машины трояном, рассылающим спам.
  • safe — «безопасные» скрипты, которые не совершают активных действий в отношении машины, не забивают канал пакетами и не эксплуатируют уязвимости.
    Пример: ssh-hostkey — получает публичные ключи SSH-сервера.
  • version — получение версий работающих служб.
    Пример: pptp-version — выводит на экран дополнительную информацию о PPTP-сервере.
  • vuln — проверка служб на уязвимости.

Если указать опции -A или -sC, скрипты категории default будут запускаться автоматически. 
Все скрипты расположены по пути:  /usr/share/nmap/scripts.

Шесть состояний порта Nmap

  • open — порт открыт.
  • closed — порт закрыт.
  • filtered — порт фильтруется, неизвестно, закрыт или открыт.
  • unfiltered — порт не фильтруется, неизвестно, закрыт или открыт (такой результат может дать только ACK-сканирование).
  • open|filtered — порт либо открыт, либо фильтруется.
  • closed|filtered — порт либо закрыт, либо фильтруется (такой результат может дать только Idle-сканирование).

Также рекомендую добавить плагин vulners, который при сканировании с флагом -sV соберет известные уязвимости для сервиса, работающим на этом порту.

Report Page