Сначала перечисляются опции и последним указывается цель (хост или диапазон/подсеть).
nmap -опция1 параметр_опции -опция2 -опция3 хост
Пример
nmap -n -oX результат.xml -Pn -sV 192.168.1.1
При запуске nmap для сканирования портов (по умолчанию без указания опций) из под непривилегированного пользователя устанавливается TCP соединение (используется системный вызов connect()), что медленней чем просто отправка пакета SYN (Stealth Scan) которая происходит при запуске из под суперпользователя.
В качестве быстрого старта (не думаем об опциях, получаем максимум информации - сканирование с предустановленным набором опций -O -sV –traceroute -sC):
nmap -A <хост>
Поиск рабочих хостов - выполнить только фазу обнаружения без сканирования портов (хосты определяются с помощью различных методик, в том числе через ARP request):
nmap -sn сеть
Ping диапазона, для определения рабочих хостов, работает даже в случае блокирования PING request и response (если ICMP ответы не приходят, то есть запрещены на хосте или заблокированы МЭ), посылается SYN запрос, и, если в ответ приходит SYN/ACK или RST хост считается рабочим
nmap –sP диапазон адресов
Состояние портов
nmap -Pn -sS <хост>
nmap -n -sS <хост>
Опции T0 - T5 задают шаблоны временных параметров используемых nmap
С помощью опции -T4 можно указать что сканирование порта не должно превышать 10 мс.
Примеры задания перечня сканируемых хостов
По умолчанию nmap сканирует первые 1000 портов хоста. Для указания конкретного порта или диапазона используется опция -p
nmap -p 80,110-111 <хост>
Все (65535) порты (-)
nmap -p- <хост>
Топ “популярных” портов
nmap --top-ports <количество> <хост>
Список популярных портов берется из собственной базы nmap, в которой у каждого порта имеется число, определяющее его распространенность.
Посмотреть список популярных портов можно одним из следующих способов
nmap --top-ports 2000 localhost -v -oG -
или
sort -r -k3 /usr/share/nmap/nmap-services
nmap –sS <хост>
Цели посылается SYN, если в ответ приходит SYN/ACK – порт открыт (opened), соединение сбрасывается пакетом RST и не фиксируется в журналах атакуемой системы как установленное соединение,) если в ответ приходит RST – порт закрыт (не используется) если в ответ ничего не приходит – порт фильтруется
Сканирование UDP портов
nmap –sU <хост>
Если в ответ на UDP пакет цель пришлет ICP port unreachable, порт считается закрытым (не используется), если ответа нет, порт считается или открытым (UDP не устанавливает соединения и ответа об успешном получении пакета хостом жертвой не будет) или фильтруемым МЭ)
ACK сканирование портов, позволяет выяснить какой МЭ на хосте используется statefull или stateless
nmap –sA <хост>
Хосту посылается ACK пакет, пропускаемый stateless МЭ
Сканирование с установлением TCP соединения
nmap –sT <хост>
Обнаружение сервисов и определение версии ОС
Версия ОС
nmap –O <хост>
Название и версия запущенных сетевых служб
nmap –sV <хост>
Версия ОС и версия сервиса возвращается в формате CPE (Common Platform Enumeration - стандарт MITRE для описания объектов защиты - программ, платформ и систем).
Для управления количеством различных проверок версии ОС и сервиса задается опция (фактически - управление временем проверки)
**–version-intensity <число>**число>
где число может быть от 0 до 9 (по умолчанию 7)
При указании 0 - информация о службе берется из файла, в котором номер порта сопоставлен с названием службы
-oN имя <файл.tt>файл.tt>
-oX <файл.xml>файл.xml>
-oG <файл.xml>файл.xml>
nmap -sS -v3 10.1.1.1
nmap –6 <хост>
-f
–source-port <порт>порт>
–data-length
–max-parallelism
–scan-delay
Скрипты — это текстовые файлы на языке lua.
Они размещены в папке /scripts, которая расположена в папке программы nmap.
NSE скрипты поделены на категории по их назначению, опасности/безопасности и т.п
Один скрипт может принадлежать нескольким категориям.
nmap -sС <хост>
При этом перечень скриптов выбирается nmap самостоятельно, в зависимости от выполнения условий (значения хостов или портов), заданных в предопределенных правилах
nmap --script <скрипт> <хост>
или
nmap --script <категория> <хост>
где скрипт это или сам скрипт (файл в папке scripts), категория скриптов или папка со скриптами.
Одновременно можно выбрать несколько скриптов
nmap --script <скрипт1>, <скрипт2> <хост>
Также можно выбрать несколько скриптов используя wildcard (будут выбраны все скрипты, начинающиеся с ssl)
nmap --script ssl* -p 443 jumpnowtek.com
nmap --script <скрипт> --script-args <аргумент>=<значение> <хост>
Используемые скрипты можно указывать через условия
Пример запуска всех скриптов из категории оценки наличия уязвимостей (категория vuln)
nmap --script vuln <хост>
База не включенных в поставку nmap скриптов https://secwiki.org/w/Nmap/External_Script_Library
1) положить новые скрипты в папку /scripts 2) выполнить
nmap --script-updatedb
Скрипты можно использовать и без добавления в базу, указав к ним путь
nmap --script <скрипт>.nse <хост>
nmap --script broadcast
nmap --script broadcast-listener
Сторонний (не включен в базовую поставку) скрипт описка уязвимостей по локальной копии баз osvdb, cve и т.п.
http://www.computec.ch/projekte/vulscan/
nmap -Pn -sV --script vulscan.nse хост
где опция -sV обязательна
Базы уязвимостей необходимо обновлять и размещать в папке vulscan вручную.
Для ускорения работы можно использовать опцию
–script-args vulscanversiondetection=0
Сбор информации о веб-сервере (HTTP заголовки сервера, HTTP методы сервера, title сайта, SSL сертификат)
nmap -Pn -p80 --script http-headers, http-title, ssl-cert, http-methods http.useragent="Mozilla 42" <хост>
nmap -Pn -p80 --script http-enum <хост>
Нижеследующие скрипты по умолчанию используют базы логинов и паролей unpwdb из папки Nmap\nselib\data.
nmap -p 80 - script http-brute <хост>
nmap -p 80 - script http-form-brute хост
Можно указать имена полей формы для логина/пароля
http-form-brute.uservar=имя
http-form-brute.passvar=имя
nmap -p 21 - script ftp-brute <хост>