Nmap — это мощный инструмент сетевого сканирования для аудита безопасности и тестирования на проникновение. Это один из основных инструментов, используемых администраторами сети для устранения проблем с подключением к сети и сканирования портов .
Nmap также может определять Mac-адрес, тип ОС , версию службы и многое другое.
В этой статье объясняются основы того, как использовать команду nmap
для выполнения различных сетевых задач.
Установка Nmap
Nmap — это многоплатформенная программа, которую можно установить во всех основных операционных системах. Первоначально он был выпущен как инструмент только для Linux, а позже был перенесен на другие системы, такие как BSD, Windows и macOS.
Если вы предпочитаете графический интерфейс, а не командную строку, Nmap также имеет графический пользовательский интерфейс под названием Zenmap.
Официальные бинарные пакеты доступны для загрузки со страницы загрузки Nmap.
Процедура установки проста и зависит от вашей операционной системы.
Установка Nmap в Ubuntu и Debian
Nmap доступен из репозиториев Ubuntu и Debian по умолчанию. Чтобы установить его, запустите:
sudo apt update sudo apt install nmap
Установка Nmap на CentOS и Fedora
На CentOS и других производных от Red Hat запускаются:
sudo dnf install nmap
Установка Nmap на macOS
Пользователи macOS могут установить Nmap, загрузив установочный пакет «.dmg» с сайта Nmap или через Homebrew:
brew install nmap
Установка Nmap в Windows
Версия Nmap для Windows имеет некоторые ограничения и, как правило, немного медленнее, чем версия для UNIX.
Самый простой вариант установки Nmap в Windows — это загрузить и запустить самоустанавливающийся exe-файл.
Вы можете запустить Nmap в Windows либо из командной строки, либо запустив программу Zenmap. Для получения дополнительной информации о том, как использовать Nmap в Windows, ознакомьтесь с инструкциями по использованию после установки.
Использование Nmap
Nmap обычно используется для аудита сетевой безопасности, отображения сети, определения открытых портов и поиска сетевых устройств.
Упрощенный синтаксис команды nmap выглядит следующим образом:
nmap [Options] [Target...]
Самый простой пример использования Nmap — сканирование одной цели от имени обычного пользователя без указания каких-либо параметров:
nmap scanme.nmap.org
При вызове от имени пользователя без полномочий root, у которого нет прав на использование сырых пакетов, nmap запускает сканирование TCP-соединения. Параметр -sT
по умолчанию включен в непривилегированном режиме.
Вывод будет выглядеть примерно так, включая основную информацию о сканировании и список открытых и отфильтрованных TCP-портов.
Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-16 20:19 CET Nmap scan report for cast.lan (192.168.10.121) Host is up (0.048s latency). Not shown: 981 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http 110/tcp open pop3 143/tcp open imap 443/tcp open https 587/tcp open submission 993/tcp open imaps 995/tcp open pop3s 1025/tcp open NFS-or-IIS 1080/tcp open socks 8080/tcp open http-proxy 8081/tcp open blackice-icecap Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds
Самым популярным вариантом сканирования является TCP SYN scan (-sS
), который быстрее, чем вариант подключения, и работает со всеми совместимыми стеками TCP.
-sS
включается по умолчанию, когда nmap вызывает пользователь с административными привилегиями:
sudo nmap 192.168.10.121
Для более подробного вывода используйте увеличение детализации с помощью -v
или -vv
:
sudo nmap -vv 192.168.10.121
Чтобы выполнить сканирование UDP, вызовите команду с параметром ( -sU) от имени пользователя root:
sudo nmap -sU 192.168.10.121
Для получения полного списка методов сканирования портов посетите страницу документации Nmap.
Nmap также поддерживает адреса IPv6. Чтобы указать хост IPv6, используйте опцию -6
:
sudo nmap -6 fd12:3456:789a:1::1
Указание целевых хостов
Nmap рассматривает все аргументы, которые не являются опциями, как целевые хосты.
Аргументы считаются вариантами, если они начинаются с одинарного или двойного тире (-
, --
).
Самый простой вариант — передать один или несколько целевых адресов или доменных имен:
nmap 192.168.10.121 host.to.scan
Вы можете использовать нотацию CIDR, чтобы указать диапазон сети:
nmap 192.168.10.0/24
Чтобы указать диапазон октетов, используйте символ тире. Например, для сканирования 192.168.10.1, 192.168.11.1и 192.168.12.1:
nmap 192.168.10-12.1
Другой символ, который вы можете использовать для указания целей, — это запятая. Следующая команда нацелена на те же хосты, что и предыдущая:
nmap 192.168.10,11,12.1
Вы можете комбинировать все формы:
nmap 10.8-10.10,11,12.0/28 192.168.1-2.100,101
Чтобы убедиться, что вы указали правильные хосты перед сканированием, используйте параметр сканирования списка (-sL
), который перечисляет только цели без запуска сканирования:
nmap -sL 10.8-10.10,11,12.0/28 192.168.1-2.100,101
Если вы хотите исключить цели, которые включены в указанный вами диапазон, используйте опцию --exclude
:
nmap 10.8-10.10,11,12.0/28 --exclude 10.10.12.12
Указание и сканирование портов
По умолчанию Nmap выполняет быстрое сканирование 1000 самых популярных портов. Это не первые 1000 последовательных портов, а 1000 наиболее часто используемых портов в диапазоне от 1 до 65389.
Для поиска всех портов с 1 по 65535 используйте опцию -p
:
nmap -p- 192.168.10.121
Каждый порт может находиться в одном из следующих состояний:
- open — программа, запущенная на порту, отвечает на запрос.
- closed — на порту не работает ни одна программа, и хост отвечает на запросы.
- filtered — хост не отвечает на запрос.
Порты и диапазоны портов указываются с помощью опции -p
.
Например, чтобы просканировать только порт 443, вы должны использовать следующую команду:
nmap -p 443 192.168.10.121
Чтобы указать более одного порта, разделите целевые порты запятой:
nmap -p 80,443 192.168.10.121
Диапазоны портов можно указать с помощью символа тире. Например, чтобы просканировать все порты UDP в диапазоне от 1 до 1024, вы должны запустить:
sudo nmap -sU -p 1-1024 192.168.10.121
Все вместе:
nmap -p 1-1024,8080,9000 192.168.10.121
Порты также можно указать с помощью имени порта. Например, для поиска порта 22, ssh, вы можете использовать:
nmap -p ssh 192.168.10.121
Ping сканирование
Чтобы выполнить ping-сканирование или обнаружение хоста, вызовите команду nmap с опцией -sn
:
sudo nmap -sn 192.168.10.0/24
Эта опция указывает Nmap только на обнаружение сетевых хостов, а не на сканирование портов. Это полезно, когда вы хотите быстро определить, какой из указанных хостов запущен и работает.
Отключение разрешения DNS-имен
По умолчанию Nmap выполняет обратное разрешение DNS для каждого обнаруженного хоста, что увеличивает время сканирования.
При сканировании больших сетей рекомендуется отключить разрешение обратного DNS и ускорить сканирование. Для этого вызовите команду с опцией -n
:
sudo nmap -n 192.168.10.0/16
Определение ОС, служб и версий
Nmap может обнаружить операционную систему удаленного хоста с помощью снятия отпечатков стека TCP/IP. Чтобы запустить обнаружение ОС, вызовите команду с опцией -O
:
sudo nmap -O scanme.nmap.org
Если Nmap может обнаружить ОС хоста, он напечатает что-то вроде следующего:
... Device type: general purpose Running: Linux 5.X OS CPE: cpe:/o:linux:linux_kernel:5 OS details: Linux 5.0 - 5.4 Network Distance: 18 hops OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 26.47 seconds
Обычно системные службы прослушивают стандартные порты, которые хорошо известны и зарезервированы для них. Например, если порт 22, соответствующий службе SSH, открыт, вы предполагаете, что на хосте работает SSH-сервер. Однако вы не можете быть абсолютно уверены, потому что люди могут запускать службы на любых портах, которые им нужны.
Благодаря обнаружению службы и версии Nmap покажет вам, какая программа прослушивает порт и версию программы.
Для поиска службы и версии используйте опцию -sV
:
sudo nmap -sV scanme.nmap.org
... PORT STATE SERVICE VERSION 19/tcp filtered chargen 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.7 ((Ubuntu)) 135/tcp filtered msrpc 139/tcp filtered netbios-ssn 445/tcp filtered microsoft-ds 9929/tcp open nping-echo Nping echo 31337/tcp open tcpwrapped Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel ...
Вы также можете сканировать ОС, версии и запускать traceroute с помощью одной команды, используя параметр -A
:
sudo nmap -A 192.168.10.121
Вывод Nmap
По умолчанию Nmap выводит информацию на стандартный вывод (stdout).
Если вы сканируете большую сеть или нуждаетесь в информации для дальнейшего использования, вы можете сохранить результат в файл.
Nmap предоставляет несколько типов вывода. Чтобы сохранить вывод в нормальном формате, используйте параметр, за которым следует имя файла -oN
:
sudo nmap -sU -p 1-1024 192.168.10.121 -oN output.txt
Самый популярный вариант — сохранить вывод в формате XML. Для этого воспользуйтесь опцией -oX
:
sudo nmap -sU -p 1-1024 192.168.10.121 -oX output.xml
Еще один полезный формат — вывод grepable, который можно анализировать с помощью стандартных инструментов Unix, таких как grep
, awk
и cut
. Вывод grepable указывается с опцией -oG
:
sudo nmap -sU -p 1-1024 192.168.10.121 -oG output
Механизм сценариев Nmap
Одна из самых мощных функций Nmap — это скриптовый движок. Nmap поставляется с сотнями скриптов , и вы также можете писать свои собственные скрипты на языке Lua.
Вы можете использовать скрипты для обнаружения вредоносных программ и бэкдоров, выполнения атак методом перебора и т.д.
Например, чтобы проверить, скомпрометирован ли данный хост, вы можете использовать:
nmap -sV --script http-malware-host scanme.nmap.org
Заключение
Nmap — это инструмент с открытым исходным кодом, который в основном используется администраторами сети для обнаружения узлов и сканирования портов.
Обратите внимание, что в некоторых странах сканирование сетей без разрешения является незаконным.
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.