Skip to main content

Command Palette

Search for a command to run...

A Complete Guide to Nmap

Updated
6 min read
A Complete Guide to Nmap
S

Professional pentester, technical writer, telegram channel owner

Эта статья написана, чтобы стать максимально подробным гайдом по nmap.

Что это такое? Как им пользоваться? Оптимизация процесса сканирования. Примеры обычного и продвинутого сканирования nmap. Советы по его использования при разных обстоятельствах.

Nmap - это очень популярный сканер сети с открытым исходным кодом, который может использоваться как в Windows, так и в Linux. Программа Nmap или Network Mapper была разработана Гордоном Луоном и на данный момент используется специалистами по безопасности и системными администраторами по всему миру.

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

А как мы используем nmap обычно?

nmap 192.168.1.1 - Сканирование только 1 IP

nmap 192.168.1.1 192.168.2.1 - Сканирование несколько IP

nmap 192.168.1.1-254 - Сканирование список IP адресов

nmap scanme.nmap.org - Сканирование домена

nmap 192.168.1.0/24 - Сканирование с указанием CIDR

А что здесь не так спросите вы? Всё не так! NMAP имеет поистине огромные возможности в расширении своего функционала в зависимости от того, чего вы хотите добиться.

Необходимые базовые флаги для сканирования

-iL <list.txt>: Сканирования список целей(IP, домены)

--exclude <IP/s>: Исключить указанный цели из сканирования

--excludefile <файл>: Исключить указанный цели из списка для сканирования

Техники сканирования:

-sS/-sT/-sA/-sW/-sM: сканирование с использованием системного вызова TCP

SYN/Connect()/ACK/Window/Maimon

-sU: UDP сканирование

-sN/-sF/-sX: TCP Null, FIN и Xmas сканирование

--scanflags <флаги>: Указать собственные TCP флаги

-sI: <зомби_хост[:порт]>: "Ленивое" (Idle) сканирование

-sO: Сканирование IP протокола

--traceroute: Трассировка пути к хосту

--reason: Выводить причину, почему Nmap установил порт в определенном состоянии

Обнаружение хостов

-sL: Сканирование с целью составления списка - просто составить список целей для сканирования

-sP: Пинг сканирование - просто определить, работает ли хост

-Pn: Пропустить ping хостов. nmap будет считать, что все хосты UP

-PS/-PA/-PU [список_портов]: TCP SYN/ACK или UDP пингование заданных хостов

-PE/-PP/-PM: Пингование с использованием ICMP-эхо запросов, запросов временной метки и сетевой маски

-PO [список_протоколов]: Пингование с использованием IP протокола

-PR: ARP сканирование сети

-n: Никогда не делать DNS resolution

--dns-servers <сервер1[,сервер2],...>: Задать собственные DNS сервера для разрешения доменных имён

Определение портов и порядка сканирования

-p- : Сканирование всех портов (1-65535)

-p <диапазон_портов>: Сканирование только определенных портов

Пример: -p22; -p1-65535; -pU:53,111,T:21-25,80,8080 (U - UDP, T - TCP);

-p http, https

-F: Быстрое сканирование - Сканирование ограниченного количества портов (100 портов)

-r: Сканировать порты последовательно - не использовать случайный порядок портов

--top-ports <количество_портов>: Сканировать <количество_портов> наиболее распространенных портов

Пример: --top-ports 1000 ; --top-ports 5000

Определение служб и их версий

-sV: Исследовать открытые порты для определения информации о службе/версии

-sV --version-intensity <уровень>: Устанавливать от 0 (легкое) до 9 (пробовать все запросы)

-sV --version-light: Ограничиться наиболее легкими запросами (интенсивность 2)

-sV --version-all: Использовать каждый единичный запрос (интенсивность 9)

Определение OS

-O: Активировать функцию определения ОС

-O --osscan-limit: Использовать функцию определения ОС только для "перспективных" хостов

-O --osscan-guess: Угадать результаты определения ОС

-O –max-os-tries: Сколько раз nmap будет пытаться определить OS Пример:

-O –max-os-tries 1

-A: Включает обнаружение ОС, определение версии, сканирование при помощи скриптов и traceroute.

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

Опции, принимающие аргумент <время>, задаются в миллисекундах, пока вы не добавите 's' (секунды), 'm' (минуты), или 'h' (часы) к значению.

-T0: Параноик (0) Уклонение от системы обнаружения вторжений

-T1: Незаметный (1) обход системы обнаружения вторжений

-T2: Вежливый (2) замедляет сканирование, чтобы использовать меньшую пропускную способность и меньше ресурсов целевой машины

-T3: Нормальный (3) - скорость по умолчанию

-T4: Агрессивный (4) скорость сканирования; предполагает, что вы находитесь в достаточно быстрой и надежной сети

-T5: Безумный (5) ускоряет сканирование; предполагает, что вы находитесь в чрезвычайно быстрой сети

--min-rate <число>: Посылать запросы с интенсивностью не меньше чем <число> в секунду

--max-rate <число>: Посылать запросы с интенсивностью не больше чем <число> в секунду

--scan-delay/--max-scan-delay <время>: Регулирует задержку между запросами

--host-timeout <время>: Прекращает сканирование целей, которые не отвечают какое-то время

--max-retries <количество_попыток>: Задает максимальное количество количество попыток на запрос

--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <время>: Регулирует время ожидания ответа на запрос

--min-parallelism/max-parallelism <количество_запросов>: Регулирует распараллеливание запросов

--min-hostgroup/max-hostgroup <кол_хостов>: Установить размер групп для параллельного сканирования

Обход Firewall/IDS

-f: Отправка маленьких IP пакетов(включая ping-сканирование), что может помочь обойти фильтрацию пакетов

--mtu <значение>: Фрагментировать пакеты с указаннием конкретного значения фрагментации

-D <фикт_хост1,фикт_хост2[,ME],...>: Маскировка сканирования с помощью фиктивных хостов

-S <IP_адрес>: Изменить исходный IP адрес -e <интерфейс>: Использовать конкретный сетевой интерфейс

-g/--source-port <номер_порта>: Изменить исходный номер порта

--data-length <число>: Добавить произвольные данные к посылаемым пакетам. Число это количество байт

--ip-options <опции>: Посылать пакет с заданным ip опциями

--ttl <значение>: Установить TTL запроса (time-to-live (время жизни пакета))

--spoof-mac <MAC_адрес/префикс/название производителя>: Задать собственный MAC адрес

--badsum: Посылать пакеты с фиктивными TCP/UDP контрольными суммами –proxies: Передача соединений через HTTP/SOCKS4 прокси Пример команды для

Пример обхода Firewall/IDS

nmap -f -T0 -n -Pn –data-length 200 -D 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.23 192.168.1.1

Вывод результатов

-oN/-oX/-oS/-oG <файл>: Выводить результаты нормальном виде, XML, s|<rIpt kIddi3 и Grepable формата вывода, соответственно, в заданный файл

-oA <базовове_имя_файла>: Использовать сразу три основных формата вывода

-v: Увеличить уровень вербальности (задать дважды или более для увеличения эффекта)

-d[уровень]: Увеличить или установить уровень отладки (до 9)

--open: Показывать только открытые (или возможно открытые) порты

--packet-trace: Отслеживание принятых и переданных пакетов

--iflist: Вывести список интерфейсов и роутеров (для отладки)

--log-errors: Записывать ошибки/предупреждения в выходной файл нормального режима

--append-output: Добавлять выходные данные в конец, а не перезаписывать выходные файлы

--resume <имя_файла>: Продолжить прерванное сканирование

--stylesheet <путь/URL>: Устанавливает XSL таблицу стилей для преобразования XML вывода в HTML

--webxml: Загружает таблицу стилей с Nmap.Org

--no-stylesheet: Убрать объявление XSL таблицы стилей из XML

--reason: Вывести причину, по которой порт находится в определенном состоянии, вывод такой же, как и -vv

NSE скрипты

-sC / --script default: запускает стандартные скрипты –script: можно указать какой конкретно скрипт/ы использовать

Пример: nmap 192.168.1.1 –script=http,banner; nmap 192.168.1.1 –script=http*

--script-args: NSE скрипты с аргументами

Пример: nmap –script snmp-sysdescr –script-args snmpcommunity=admin 192.168.1.1

Теперь перейдем к разным полезным командами

Примеры nmap команд для вывод/обработки результатов

nmap -p80,443,8080,8443,8081 -sV -oG – –open 192.168.1.1/24 | grep open : Сканирование на наличие веб-серверов и grep на каких IP-адресах запущены веб-серверы

nmap -iR 10 -n -oX out.xml | grep "Nmap" | cut -d " " -f5 > live-hosts.txt: Генерация списка IP живых хостов

nmap -iR 10 -n -oX out2.xml | grep "Nmap" | cut -d " " -f5 >> live-hosts.txt: Добавление IP в список живых хостов

ndiff scanl.xml scan2.xml: сравнение результатов двух сканирований с помощью ndiff

xsltproc nmap.xml -o nmap.html: конвертация xml в html

Примеры nmap команд для сканирования

nmap 192.168.1.1-1/24 -PR -sn -vv : ARP сканирование локальной сети

nmap -sV --top-ports 5000 -T1 –reason -oG nmap.scan -f -n -Pn –data-length 200 -A --mtu 30 --badsum : Скрытное сканирование топ 5000 популярных портов, без ping и резолва DNS; добавление рандомых 200 байт; определение OS; указание причины, почему nmap считает, что порт в том или ином состоянии; фрагментация пакетов; отправка пакетов с фиктивными TCP/UDP контрольными суммами

nmap -sV --version-all -p- -T5 –reason -oA nmap.scan -Pn –min-rate 3000 –host-timeout 2m –max-retries 3 --script vulners --min-parallelism 10 : Данный режим сканирования больше подходит для лаб, тестовых заданий, CTF и в случаях если не применяются никакие средства защиты от сетевого сканирования. Данный скан будет максимально агрессивным и быстрым; агрессивное распознование сервисов; без ping; nmap будет считать, что хост/ы жив/ы; минимальная скорость сканирования: 3000; сканирование OS и скрипты по умолчанию; если хост не отвечает 2 минуты, то он пропускается; максимум 3 попытки для сканирования; запуститься скрипт vulners - скрипт ищет уязвимости по найденным сервисам.

Дополнительный материал

Отличная подробка репозиторием с различными NSE скриптами под разным цели, системы, CVE и т.д.

https://github.com/emadshanab/Nmap-NSE-scripts-collection

More from this blog

Инъекция XSS в скрытых полях ввода и мета-тегах

​Введение​ В этом посте автор покажет, как вы можете использовать новую функцию всплывающих окон HTML в Chrome для эксплуатации XSS в мета-тегах и скрытых полях ввода. Все началось, когда я заметил новое поведение всплывающих окон в Chrome на Twitter...

Jul 13, 20233 min read178
Инъекция XSS в скрытых полях ввода и мета-тегах

Zybnev Sergey | Pentester | Blog

19 posts

Professional pentester, programmer and web designer.