Nmap - это лучший сканер портов и главный инструмент пинтестера. Nmap умеет сканировать диапазоны IP, подсети и отдельные хосты и может определить ОС, сервисы на портах и их версии. Функционал расширяется за счет сторонних скриптов, которые можно писать и самому. Итак первое с чего можно начать это
В манах часто пишут, что nmap сканирует только првые 1024 порта по умолчанию, ну во-первых: можно задать диапазон портов в ручную через опцию -p
А во-вторых: список портов которые nmap будет сканировать по дефолту определен в файле "/usr/share/nmap/nmap-services". Nmap также может попытаться определить версию сервиса, для этого надо указать опцию -sV
# nmap localhost -sV
А опция -O попросит утилиту определить ОС хоста. Есть возможность более детального сканирования (агрессивного) с помощью опции -A. Ниже я приведу список примеров сканирований.
Настройка диапазонов портов
Сканируем подсеть
Сканирование списка хостов из файла
TCP сканирование (будет использован системный вызов Connect())
SYN, FIN, Xmas, TCP Null сканирования
Не определять доменные имена
Показывать причину, по которой определенный порт считается «открытым»:
Пингануть хосты для проверки, онлайн ли они, но не сканировать порты:
Сканировать хосты, даже если они не отвечают на пинги:
Считать, что хост онлайн, если он отвечает на SYN, посланный на порт 443:
Сканирование UDP (работает медленнее обычного сканирования TCP):
Ограничиваем время, которое можно потратить на один хост:
Управление степенью параллелизма:
Делаем паузу прежде, чем перейти к следующему хосту:
Ограничение на число пакетов, посылаемых в секунду:
Обновить базу данных скриптов NSE (Nmap Scripting Engine)
Натравляем все скрипты из группы default:
Все скрипты, название которых начинается на http
Не пинговать перед сканированием (при игнорировании ICMP)
Сохранить результат в файл
Указываем адреса по маске, диапазону, диапазонам, вся сеть по маске 255.255.0.0
Обход брэндмауеров
Разные методы сканирования необходимы для обхода IDS (это система обранужения вторжений) и брендмауеров. Для фильтрафии порта брендмауер отбрасывает пакеты ASK, которые отправляются при созднии нового соединения, а пакеты SYN, которые отправляются в рамках текущего соеинения, проходят свободно. А еще есть stateful-брандмауэры. Они более детальнее анализируют приходящие пакеты и могут определить пакеты nmap отправленные в рамках сканировани. Iptables такое умеет, например. А выяснить, какой тип брандмауэра используется, можно, выполнив SYN-сканирование и сразу за ним — ACK-сканирование. Если порты, отмеченные во время SYN-сканирования как filtered, стали unfiltered, значит, перед тобой не stateful-брандмауэр. Кроме того, можно попробовать обойти брандмауэр с помощью изменения номера исходящего порта:
Это эксплуатация старой как мир ошибки настройки брандмауэра, которая заключается в том, что админ открывает доступ всему входящему трафику (включая протокол TCP) с порта 53, чтобы позволить приложениям беспрепятственно выполнять DNS-запросы. Сегодня такое встречается редко, но, как показывает практика, некомпетентность со временем не исчезает. Кроме всего прочего, в Nmap есть средства для скрытия факта сканирования от глаз брандмауэров и IDS:
В этом случае Nmap будет разбивать пакеты на крохотные фрагменты размером 8 байт. Делает он это в надежде на то, что брандмауэр или IDS не сможет собрать пакет из фрагментов и проанализировать его заголовок (по причине плохой реализации или в угоду производительности) и просто пропустит пакет или отбросит.
Та же история, только с возможностью контролировать размер пакета (в данном случае 16). Можно использовать против брандмауэров и IDS, которые умеют ловить факты сканирования с помощью Nmap, анализируя размер фрагмента.
Добавляет в конец пакета указанное количество рандомных байтов. Цель та же, что и в предыдущем случае: обмануть 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 и ты можешь сам писать себе скрипты, ну если надумаешь выучить язык Lua.
Шесть состояний порта Nmap
- open — порт открыт.
- closed — порт закрыт.
- filtered — порт фильтруется, неизвестно, закрыт или открыт.
- unfiltered — порт не фильтруется, неизвестно, закрыт или открыт (такой результат может дать только ACK-сканирование).
- open|filtered — порт либо открыт, либо фильтруется.
- closed|filtered — порт либо закрыт, либо фильтруется (такой результат может дать только Idle-сканирование).
Также рекомендую добавить плагин vulners, который при сканировании с флагом -sV соберет известные уязвимости для сервиса, работающим на этом порту.