Оглавление
- Преамбула
- Сводка опций
- Определение цели сканирования
- Обнаружение хостов
- Основы сканирования портов
- Различные приемы сканирования портов
- Определение портов и порядка сканирования
- Обнаружение служб и их версий
- Определение ОС
- Скриптовый движок Nmap(NSE – Nmap Scripting Engine)
- Опции управления временем и производительностью
- Обход Брандмауэров/IDS
- Вывод результатов
- Различные опции
- Взаимодействие во время выполнения
- Примеры
Информация по скриптам Nmap (на английском):Ссылка скрыта от гостей
Самая последня версия документации по Nmap (на английском):Ссылка скрыта от гостей
Официальная книга по Nmap от создателей Nmap (на английском):Ссылка скрыта от гостей
Преамбула
nmap — Утилита для исследования сети и сканер портов
Nmap (“Network Mapper”) это утилита с открытым исходным кодом для исследования сети и проверки безопасности. Она была разработана для быстрого сканирования больших сетей, хотя прекрасно справляется и с единичными целями. Nmap использует сырые IP пакеты оригинальными способами, чтобы определить какие хосты доступны в сети, какие службы (название приложения и версию) они предлагают, какие операционные системы (и версии ОС) они используют, какие типы пакетных фильтров/брандмауэров используются и еще дюжины других характеристик. В тот время как Nmap обычно используется для проверки безопасности, многие сетевые и системные администраторы находят ее полезной для обычных задач, таких как контролирование структуры сети, управление расписаниями запуска служб и учет времени работы хоста или службы.
Выходные данные Nmap это список просканированных целей с дополнительной информацией по каждой в зависимости от заданных опций. Ключевой информацией является “таблица важных портов”. Эта таблица содержит номер порта, протокол, имя службы и состояние. Состояние может иметь значение open (открыт), filtered (фильтруется), closed (закрыт) или unfiltered (не фильтруется). Открыт означает, что приложение на целевой машине готово для установки соединения/принятия пакетов на этот порт. Фильтруется означает, что брандмауэр, сетевой фильт или какая-то другая помеха в сети блокирует порт, и Nmap не может установить открыт этот порт или закрыт. Закрытые порты не связаны ни с каким приложение, так что они могут быть открыты в любой момент. Порты расцениваются как не фильтрованные, когда они отвечают на запросы Nmap, но Nmap не может определить открыты они или закрыты. Nmap выдает комбинации открыт|фильтруется и закрыт|фильтруется, когда не может определить, какое из этих двух состояний описывает порт. Эта таблица также может предоставлять детали о версии программного обеспечения, если это было запрошено. Когда осуществляется сканирование по IP протоколу (-sO), Nmap предоставляет информацию о поддерживаемых IP протоколах, а не об открытых портах.
В дополнение к таблице важных портов Nmap может предоставлять дальнейшую информацию о целях: преобразованные DNS имена, предположение о используемой операционной системе, типы устройств и MAC адреса.
Типичное сканирование с использованием Nmap показано в Примере 1. Единственные аргументы, использованные в этом примере это -A, для определения версии ОС, сканирования с использованием скриптов и трассировки; -T4 для более быстрого выполнения; затем два целевых хоста.
Пример 1. Типичный пример сканирования с помощью Nmap:
Код:
# nmap -A -T4 scanme.nmap.org playground
Starting Nmap ( https://nmap.org/ )
Interesting ports on scanme.nmap.org (64.13.134.52):
(The 1663 ports scanned but not shown below are in state: filtered)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.9p1 (protocol 1.99)
53/tcp open domain
70/tcp closed gopher
80/tcp open http Apache httpd 2.0.52 ((Fedora))
113/tcp closed auth
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.4.7 - 2.6.11, Linux 2.6.0 - 2.6.11
Interesting ports on playground.nmap.org (192.168.0.40):
(The 1659 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
389/tcp open ldap?
445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds
1002/tcp open windows-icfw?
1025/tcp open msrpc Microsoft Windows RPC
1720/tcp open H.323/Q.931 CompTek AquaGateKeeper
5800/tcp open vnc-http RealVNC 4.0 (Resolution 400x250; VNC port: 5900)
5900/tcp open vnc VNC (protocol 3.8)
MAC Address: 00:A0:CC:63:85:4B (Lite-on Communications)
Device type: general purpose
Running: Microsoft Windows NT/2K/XP
OS details: Microsoft Windows XP Pro RC1+ through final release
Service Info: OSs: Windows, Windows XP
Nmap finished: 2 IP addresses (2 hosts up) scanned in 88.392 seconds
Использование:
nmap [Тип(ы) сканирования] [Опции] {заданные_цели}
ОПРЕДЕЛЕНИЕ ЦЕЛИ СКАНИРОВАНИЯ:
ОБНАРУЖЕНИЕ ХОСТОВ:Может работать с именами хостов, IP адресами, сетями и т.д.
Например: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <ввести_имя_файла>: Импорт из списка хостов/сетей
-iR <количество хостов>: Выбор случайных целей
–exclude <host1[,host2][,host3],…>: Исключить хосты/сети
–excludefile <файл_с_исключениями>: Исключить список из файла
РАЗЛИЧНЫЕ ПРИЕМЫ СКАНИРОВАНИЯ:-sL: Сканирование с целью составления списка – просто составить список целей для сканирования
-sn: Пинг сканирование – просто определить, работает ли хост
-Pn: Расценивать все хосты как работающие – пропустить обнаружение хостов
-PS/PA/PU/PY[список_портов]: TCP SYN/ACK, UDP или SCTP пингование заданных хостов
-PE/PP/PM: Пингование с использованием ICMP эхо запросов, запросов временной метки и сетевой маски
-PO[список_протоколов]: Пингование с использованием IP протокола
-n/-R: Никогда не производить DNS разрешение/Всегда производить разрешение [по умолчанию: иногда]
–dns-servers <сервер1[,сервер2],…>: Задать собственные DNS сервера
–system-dns: Использовать системный DNS преобразователь
–traceroute: Провести трассировку (проследить путь) до каждого хоста
ОПРЕДЕЛЕНИЕ ПОРТОВ И ПОРЯДКА СКАНИРОВАНИЯ:-sS/sT/sA/sW/sM: TCP SYN/с использованием системного вызова Connect()/ACK/Window/Maimon сканирования
-sU: UDP сканирование
-sN/sF/sX: TCP Null, FIN и Xmas сканирования
–scanflags <флаги>: Задать собственные TCP флаги
-sI <зомби_хост[:порт]>: "Ленивое" (Idle) сканирование
-sY/sZ: SCTP INIT/COOKIE-ECHO сканирование
-sO: Сканирование IP протокола
-b <FTP_хост>: FTP bounce сканирование
ОПРЕДЕЛЕНИЕ СЛУЖБ И ИХ ВЕРСИЙ:-p <диапазон_портов>: Сканирование только определенных портов
Пример: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
-F: Быстрое сканирование – Сканирование ограниченного количества портов
-r: Сканировать порты последовательно – не использовать случайный порядок портов
–top-ports <количество_портов>: Сканировать <количество_портов> наиболее распространенных портов
–port-ratio <рейтинг>: Сканировать порты с рейтингом большим чем <рейтинг>
СКАНИРОВАНИЕ С ИПОЛЬЗОВАНИЕМ СКРИПТОВ:-sV: Исследовать открытые порты для определения информации о службе/версии
–version-intensity <уровень>: Устанавливать от 0 (легкое) до 9 (пробовать все запросы)
–version-light: Ограничиться наиболее легкими запросами (интенсивность 2)
–version-all: Использовать каждый единичный запрос (интенсивность 9)
–version-trace: Выводить подробную информацию о процессе сканирования (для отладки)
ОПРЕДЕЛЕНИЕ ОС:-sC: эквивалентно опции –script=default
–script=<Lua скрипты>: <Lua скрипты> это разделенный запятыми список директорий, файлов скриптов или категорий скриптов
–script-args=<имя1=значение1,[имя2=значение2,…]>: Передача аргументов скриптам
–script-args-file=filename: Передача NSE скриптам аргументов в файле
–script-trace: Выводить все полученные и отправленные данные
–script-updatedb: Обновить базу данных скриптов
–script-help=<Lua скрипты>: Показ помощи о скриптах. <Lua скрипты>разделённый запятой список скриптов или список категорий скриптов.
ОПЦИИ УПРАВЛЕНИЯ ВРЕМЕНЕМ И ПРОИЗВОДИТЕЛЬНОСТЬЮ:-O: Активировать функцию определения ОС
–osscan-limit: Использовать функцию определения ОС только для "перспективных" хостов
–osscan-guess: Угадать результаты определения ОС
ОБХОД БРАНДМАУЭРОВ/IDS:Опции, принимающие аргумент <время>, задаются в миллисекундах, пока вы не добавите 's' (секунды), 'm' (минуты), или 'h' (часы) к значению (напр. 30m).
-T<0-5>: Установить шаблон настроек управления временем (больше – быстрее)
–min-hostgroup/max-hostgroup <кол_хостов>: Установить размер групп для параллельного сканирования
–min-parallelism/max-parallelism <кол_хостов>: Регулирует распараллеливание запросов
–min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <время>: Регулирует время ожидания ответа на запрос
–max-retries <количество_попыток>: Задает максимальное количество повторных передач запроса
–host-timeout <время>: Прекращает сканирование медленных целей
–scan-delay/–max-scan-delay <время>: Регулирует задержку между запросами
–min-rate <число>: Посылать запросы с интенсивностью не меньше чем <число> в секунду
–max-rate <число>: Посылать запросы с интенсивностью не больше чем <число> в секунду
ВЫВОД РЕЗУЛЬТАТОВ:-f; –mtu <значение>: Фрагментировать пакеты (опционально с заданным значениме MTU)
-D <фикт_хост1,фикт_хост2[,ME],…>: Маскировка сканирования с помощью фиктивных хостов
-S <IP_адрес>: Изменить исходный адрес
-e <интерфейс>: Использовать конкретный интерфейс
-g/–source-port <номер_порта>: Использовать заданный номер порта
–proxies <url1,[url2],…>: Ретранслировать соединения через прокси HTTP/SOCKS4
–data-length <число>: Добавить произвольные данные к посылаемым пакетам
–ip-options <опции>: Посылать пакет с заданным ip опциями
–ttl <значение>: Установить IP поле time-to-live (время жизни)
–spoof-mac <MAC_адрес/префикс/название производителя>: Задать собственный MAC адрес
–badsum: Посылать пакеты с фиктивными TCP/UDP/SCTP контрольными суммами
РАЗЛИЧНЫЕ ОПЦИИ:-oN/-oX/-oS/-oG Выводить результаты нормального, XML, s|<rIpt kIddi3, и Grepable формата вывода, соответственно, в заданный файл
-oA <базовове_имя_файла>: Использовать сразу три основных формата вывода
-v: Увеличить уровень вербальности (задать дважды или более для увеличения эффекта)
-d: Увеличить или установить уровень отладки (до 9)
–reason: Показать причину нахождения порта в определённом состоянии
–open: Показывать только открытые (или возможно открытые) порты
–packet-trace: Отслеживание принятых и переданных пакетов
–iflist: Вывести список интерфейсов и роутеров (для отладки)
–log-errors: Записывать ошибки/предупреждения в выходной файл нормального режима
–append-output: Добавлять в конец, а не перезаписывать выходные файлы
–resume <имя_файла>: Продолжить прерванное сканирование
–stylesheet <путь/URL>: Устанавливает XSL таблицу стилей для преобразования XML вывода в HTML
–webxml: Загружает таблицу стилей с Nmap.Org
–no-stylesheet: Убрать объявление XSL таблицы стилей из XML
ИНТЕРАКТИВНЫЕ КОМАНДЫ:-6: Включить IPv6 сканирование
-A: Активировать функции определения ОС и версии, сканирование с использованием скриптов и трассировку
–datadir <имя_директории>: Определяет место расположения файлов Nmap
–send-eth/–send-ip: Использовать сырой уровень ethernet/IP
–privileged: Подразумевать, что у пользователя есть все привилегии
–unprivileged: Подразумевать, что у пользователя нет привилегий для использования сырых сокетов
-V: Вывести номер версии
-h: Вывести эту страницу помощи
ПРИМЕРЫ:СПРАВКА: Не будет работать с “sudo nmap”, поэтому используйте “sudo –i”
Во время работы вы можете делать запросы в nmap следующими ключами:
? Показать эту информацию
v/V увеличить/уменьшить вербальность
d/D увеличить/уменьшить отладку
p/P включить/отключить трассировку пакетов
и другие ключи, которые будут напечатаны в статусе
Определение цели сканированияnmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
В командной строке Nmap все, что не является опцией (или аргументом опции), рассматривается как цель сканирования. В простейшем случае для сканирования используется IP адрес или сетевое имя целевой машины.
Иногда необходимо просканировать целую сеть. Для этого Nmap поддерживает CIDR адресацию. Вы можете добавить /<кол-во бит> к IP адресу или сетевому имени и Nmap просканирует каждый IP адрес, для которого первые <кол-во бит> такие же как и у заданного хоста. Например, 192.168.10.0/24 просканирует 256 хостов между 192.168.10.0 (бинарное: 11000000 10101000 00001010 00000000) и 192.168.10.255 (бинарное: 11000000 10101000 00001010 11111111) включительно. 192.168.10.40/24 сделает абсолютно то же самое. Зная, что IP адрес scanme.nmap.org 64.13.134.52, при записи типа scanme.nmap.org/16 будет произведено сканирование 65,536 IP адресов между 64.13.0.0 и 64.13.255.255. Наименьшее допустимое значение /0, при котором будет просканирован весь Интернет. Наибольшее значение /32, при котором будет просканирован только заданный хост или IP адрес, т.к. все адресные биты заблокированы.
CIDR нотация коротка, однако не всегда достаточно гибка. Например, вы хотите просканировать 192.168.0.0/16, но пропустить все IP-ки оканчивающиеся на .0 или .255, т.к. обычно это широковещательные адреса. Nmap может осуществить такое сканирование путем задания диапазонов в октетах. Вместо определния обычного IP адреса, вы можете определить для каждого октета либо разделенный запятыми список чисел, либо диапазон. Например, 192.168.0-255.1-254 пропустит все адреса в диапазоне оканчивающиеся на .0 и .255. Диапазоны не обязательно задавать только в последних октетах: при записи 0-255.0-255.13.37 будет произведено сканирование всех адресов в Интернете оканчивающихся на 13.37. Такой тип сканирования может быть полезен для обозрения просторов Интернета и различных исследований.
IPv6 адреса могут быть определны только в форме, полностью соответствующей правильной форме записи IPv6 адресов. CIDR и использование диапазонов в октетах не применимо к IPv6 адресам, т.к. они редко используются.
Вы можете передавать в командной строке Nmap различные варианты определения целей, не обязательно одного типа. Команда nmap scanme.nmap.org 192.168.0.0/16 10.0.0,1,3-7.0-255 сделает то, что вы ожидаете.
Цели сканирования обычно задаются в командной строке, и существуют различные опции контроля выбора целей:
Код:
-iL <имя_файла> (Ввод из списка)
Код:
-iR <кол-во хостов> (Выбирает произвольные цели)
Код:
–exclude <хост1>[,<хост2>[,…]] (Исключить хосты/сети)
Код:
–excludefile <имя_файла> (Исключить список из файла)
К следующей части книги Как обнаружить хосты с помощью nmap