Уведомления
Очистить все

Рецепты nmap: делимся интересными примерами использования  

  RSS

MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
18/12/2018 5:07 дп  

Nmap применяется для анализа сети и сканирования портов. У программы огромное количество опций. Изучению этой программы посвящены целые книги! Предлагаю в этой теме делиться интересными находками по nmap. Если тема разрастётся, лучшие примеры будут подняты в шапку.

Обычное сканирование выполняется командой вида:

sudo nmap ЦЕЛЬ

В качестве ЦЕЛИ можно указать имя хоста, IP адрес, диапазоны IP адресов в разных нотациях.

Если нужно просканировать определённый порт или диапазон портов, то используется опция -p


Цитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
18/12/2018 5:08 дп  

Как просканировать все порты с nmap

По умолчанию nmap сканирует только самые популярные порты. Чтобы просканировать все порты, можно использовать опцию -p с указанием полного диапазона:

sudo nmap -p 1-65535 ЦЕЛЬ

Если вы забываете максимальное количество портов (у меня есть такая проблема), то вы всегда можете посчитать его по формуле: 216 - 1

Но ещё проще использовать опцию -p следующим образом:

sudo nmap -p- ЦЕЛЬ

В качестве сканируемых портов можно указывать диапазон, разделённый дефисом. Если не указать начальное значение диапазона, то будут просканированы номера начиная с 1. Если не указать конечное значение диапазона, то будут просканированы номера вплоть до последнего. Если не указать ни начальное, ни конечное значение диапазона, то будут просканированые все возможные порты.


ОтветитьЦитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
18/12/2018 5:20 дп  

Как узнать какие хосты в сети без сканирования портов

Иногда нужно только узнать, онлайн ли хост, либо просканировать локальную сеть, чтобы увидеть, какие устройства подключены к ней.

Если в этой ситуации пропустить сканирование портов, то можно сильно сэкономить время.

Чтобы только обнаружить активные хосты, но не сканировать их порты, используется опция -sn, например:

sudo nmap -sn 192.168.50.0/24

ОтветитьЦитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
18/12/2018 6:05 дп  

Как собрать банеры служб

Если служба запущена на нестандартном порту, то получается, что по номеру порта невозможно определить что это за служба. Тем не менее при попытке подключения служба может вывести достаточно информации, чтобы раскрыть себя. Именно этим пользуются сборщики банеров — инициализируют самое начало процесса подключения и смотрят, что им прислала служба. В nmap есть скрипт (NSE) который называется banner, чтобы он использовался, добавьте две опции к вашей команде -sV --script=banner.

Можно собирать банеры как для всех портов, так и для одного или нескольких.

Пример команды:

sudo nmap -p 25,53,80,81,135,137,138,139,445,1121,1122,2921,2980,2988,4949,5554,9306,9312 -sV --script=banner 88.99.152.33

Пример вывода:

Host is up (0.32s latency).

PORT     STATE  SERVICE      VERSION
25/tcp   closed smtp
53/tcp   open   domain       ISC BIND 9.8.2rc1 (RedHat Enterprise Linux 6)
80/tcp   open   http         nginx 1.10.2
81/tcp   open   http         Apache httpd 2.2.15 ((CentOS))
|_http-server-header: Apache/2.2.15 (CentOS)
135/tcp  closed msrpc
137/tcp  closed netbios-ns
138/tcp  closed netbios-dgm
139/tcp  closed netbios-ssn
445/tcp  closed microsoft-ds
1121/tcp open   ftp          vsftpd 2.2.2
|_banner: 220 (vsFTPd 2.2.2)
1122/tcp open   ssh          OpenSSH 5.3 (protocol 2.0)
|_banner: SSH-2.0-OpenSSH_5.3
2921/tcp open   cesdcdman?
|_banner: 220 Ready
| fingerprint-strings: 
|   DNSStatusRequestTCP, DNSVersionBindReqTCP, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, Kerberos, NULL, RPCCheck, RTSPRequest, SMBProgNeg, SSLSessionReq, TLSSessionReq, X11Probe: 
|_    220 Ready
2980/tcp open   http-proxy   3Proxy http proxy
2988/tcp open   socks-proxy  Socks4A
|_banner: \x00[\x81\xF6\xEF\x7F\x00\x00
4949/tcp open   tcpwrapped
5554/tcp closed sgi-esphttp
9306/tcp open   mysql        Sphinx Search SphinxQL 2.2.11-id64-release
| banner: K\x00\x00\x00\x0A2.2.11-id64-release (95ae9a6)\x00\x01\x00\x00\
|_x00\x01\x02\x03\x04\x05\x06\x07\x08\x00\x08\x82!\x02\x00\x00\x00\x00...
9312/tcp open   sphinxapi?
|_banner: \x00\x00\x00\x01
| fingerprint-strings: 
|   X11Probe: 
|_    :major command version mismatch (expected v.1.x, got v.0.0)
3 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at  https://nmap.org/cgi-bin/submit.cgi?new-service  :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port2921-TCP:V=7.70%I=7%D=12/18%Time=5C185B1C%P=x86_64-unknown-linux-gn
SF:u%r(NULL,B,"220\x20Ready\r\n")%r(GenericLines,B,"220\x20Ready\r\n")%r(G
SF:etRequest,B,"220\x20Ready\r\n")%r(HTTPOptions,B,"220\x20Ready\r\n")%r(R
SF:TSPRequest,B,"220\x20Ready\r\n")%r(RPCCheck,B,"220\x20Ready\r\n")%r(DNS
SF:VersionBindReqTCP,B,"220\x20Ready\r\n")%r(DNSStatusRequestTCP,B,"220\x2
SF:0Ready\r\n")%r(Help,B,"220\x20Ready\r\n")%r(SSLSessionReq,B,"220\x20Rea
SF:dy\r\n")%r(TLSSessionReq,B,"220\x20Ready\r\n")%r(Kerberos,B,"220\x20Rea
SF:dy\r\n")%r(SMBProgNeg,B,"220\x20Ready\r\n")%r(X11Probe,B,"220\x20Ready\
SF:r\n")%r(FourOhFourRequest,B,"220\x20Ready\r\n");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port2988-TCP:V=7.70%I=7%D=12/18%Time=5C185B1C%P=x86_64-unknown-linux-gn
SF:u%r(NULL,8,"\0\[\x81\xf6\xef\x7f\0\0");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port9312-TCP:V=7.70%I=7%D=12/18%Time=5C185B1C%P=x86_64-unknown-linux-gn
SF:u%r(NULL,4,"\0\0\0\x01")%r(GenericLines,4,"\0\0\0\x01")%r(Help,4,"\0\0\
SF:0\x01")%r(X11Probe,4A,"\0\0\0\x01\0\x01\0\0\0\0\0>\0\0\0:major\x20comma
SF:nd\x20version\x20mismatch\x20\(expected\x20v\.1\.x,\x20got\x20v\.0\.0\)
SF:")%r(LPDString,4,"\0\0\0\x01")%r(TerminalServer,4,"\0\0\0\x01")%r(JavaR
SF:MI,4,"\0\0\0\x01")%r(ms-sql-s,4,"\0\0\0\x01");
Service Info: OSs: Linux, Unix; CPE: cpe:/o:redhat:enterprise_linux:6

Service detection performed. Please report any incorrect results at  https://nmap.org/submit/  .
Nmap done: 1 IP address (1 host up) scanned in 106.88 seconds

ОтветитьЦитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
18/12/2018 7:07 дп  

Как просканировать UDP порты в nmap

По умолчанию nmap сканирует только TCP порты. Если использовать опцию -sU, то будут просканированы только UDP порты. Если нужно просканировать оба типа портов, то используйте одновременно -sS и -sU. Например:

sudo nmap -p 53 -sS -sU 88.99.152.33

Также с опцией -p перед номерами портов можно указать букву: T для TCP, U для UDP, S для SCTP или P для IP протоколов. Например, при задании аргумента -p U:53,111,137,T:21-25,80,139,8080 будут просканированы UDP порты 53,111, и 137, а также все перечисленные TCP порты. Имейте в виду, что для сканирования обоих и UDP и TCP портов, вы должны указать опцию -sU и, по крайне мере, один из типов сканирования TCP (таких как -sS, -sF или -sT) — если этого не сделать, то даже не смотря на буквы U и T при перечислении портов, будет использоваться опции по умолчанию, то есть будут просканированы только TCP порты.

sudo nmap -p U:53,111,137,T:21-25,80,139,8080 -sU -sS 88.99.152.33

Сканирование UDP портов не совсем тривиальная задача (из-за специфики протокола), поэтому полученные данные могут быть неточны, а сам процесс сканирования может сильно затянуться, поскольку UDP сканирование является довольно медленным.


ОтветитьЦитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
25/01/2019 7:42 дп  

Как в Nmap делать трассировку узлов сети

В Nmap для трассировки есть опция --traceroute, пример трассировки до сайта suip.biz:

sudo nmap --traceroute suip.biz

Если вы не хотите сканировать порты, а хотите просто выполнить трассировку, то добавьте опцию -sn:

sudo nmap --traceroute -sn suip.biz

Кстати, это значительно сократить время до вывода результатов.

Бывает, что выводимые при трассировке программой nmap данные не являются полными. В этом случае попробуйте дополнительно добавить опцию -PE:

sudo nmap --traceroute -sn -PE suip.biz


ОтветитьЦитата
SuperUser
(@superuser)
Eminent Member
Присоединился: 2 года назад
Сообщения: 20
14/07/2019 5:43 пп  

Указание диапазонов IP в Nmap

В Nmap очень гибкая система указания диапазонов — пожалуй, Nmap поддерживает больше всего форматов.

Диапазоны можно указывать через дефис, причём он может использоваться не только в последнем октете, но и вообще в любом. Запись при этом может выглядеть трудно читаемой, но зато такой способ является максимально гибким:

sudo nmap 91.235.128-129.0-255

Можно использовать звёздочку и при этом её можно совмещать с другими способами записи диапазонов:

sudo nmap -sn 91.235.128-129.*

Поддерживается бесклассовая нотация:

sudo nmap 91.235.128.0/24

ОтветитьЦитата
SuperUser
(@superuser)
Eminent Member
Присоединился: 2 года назад
Сообщения: 20
14/07/2019 5:53 пп  

Запускать Nmap с правами root или от обычного пользователя?

Программу Nmap можно запускать с привилегиями суперпользователя:

sudo nmap 91.235.129.250

Или с привилегиями обычного пользователя:

nmap 91.235.129.250

На первый взгляд может показаться, что разницы нет, поскольку программа в любом случае возвращает результат. Но на самом деле при запуске от root программа Nmap может отправлять сырые пакеты с помощью которых сканирование является менее заметным: используются полуоткрытые соединения, которые приложения, прослушивающие порт, обычно вообще не замечают (но могут заметить файерволы и другое специальное сетевое оборудование).

При запуске от обычного пользователя, Nmap использует системный вызов и открывает полноценное соединение, что является более заметным и более медленным.

Некоторые виды сканирования невозможно запустить от пользователя с обычными правами! В этом случае программа выведет:

You requested a scan type which requires root privileges.

QUITTING!

Это означает, что перед вашей командой нужно добавить sudo.


ОтветитьЦитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
07/10/2019 9:54 дп  

Как сканировать IPv6 адреса в nmap

Чтобы сканировать открытые порты на IPv6 адресах необходимо соблюдение ряда условий:

  • удалённых хост должен иметь IPv6 адрес
  • ваш провайдер Интернет-услуг также должен иметь поддержку IPv6 и вашему устройству должен быть присвоен IPv6 адрес
  • если устройство, с которого выполняется сканирование, не напрямую подключено к роутеру, то эта сеть также должна поддерживать IPv6. Например, Интернет-провайдер, ваш роутер и ваш компьютер поддерживают IPv6 — следовательно, вы можете сканировать эту версию адресов. Но если вы с этого же компьютера попытаетесь выполнить сканирование, например, из виртуальной машины за NAT, которая подключена к сети 10.*.*.*, то сканирование завершиться неудачей из-за ошибки вида:

setup_target: failed to determine route to suip.biz (2a02:f680:1:1100::3d5f)

Если все условия соблюдены, то к команде сканирования nmap нужно добавить опцию -6 и в качестве цели указать:

  • полный IPv6 адрес
  • имя хоста (если к нему привязан IPv6)
  • для подсетей можно использовать нотацию CIDR

В настоящее время диапазоны октетов для IPv6 ещё не поддерживаются.

Даже если в качестве цели явно указан IPv6 адрес, опцию -6 нужно обязательно указывать, иначе возникнет ошибка вида:

2a0b:f4c0:16c:4::1 looks like an IPv6 target specification -- you have to use the -6 option.

Все опции и возможности nmap поддерживаются также и для IPv6 адресов.

Если вам нужно просканировать порты на IPv6 адресе, но отсутствует такая техническая возможность, то вы можете воспользоваться онлайн сервисом «Сканирование открытых портов IPv6 адреса» (бесплатный, не требует регистрации).

Пример сканирования IPv6 адреса в Nmap:

sudo nmap -6 2604:a880:800:c1::2ae:d001

ОтветитьЦитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
21/10/2020 11:08 дп  

Завершён перевод документации по опциям Nmap

В системах Linux документацию по Nmap можно посмотреть командой:

man nmap

Там содержится полный перечень опций с их подробным описанием, причём на русском языке.

Но проблема в том, что русскоязычный вариант не обновлялся как минимум 10 лет!

В 2016 было решено актуализировать русскоязычную справку по опциям Nmap на странице https://kali.tools/?p=1317 . За основу была взята актуальная справка на английском. Была сделана сверка с русской версией и она использовалась для уже переведённых фрагментов.

Был начат перевод отсутствующих в русской версии фрагментов, одновременно отслеживался чейнджлог Nmap для добавления информации о новых опциях.

В результате:

- по сравнению с оригинальной русской версией дополнена информация по уже присутствующим опциям

- добавлены новые опции с описанием, которые полностью отсутствуют в русскоязычной справке, в частности:

  • --discovery-ignore-rst
  • --defeat-icmp-ratelimit
  • --resolve-all
  • --script-timeout
  • --data
  • --data-string
  • --exclude-ports
  • --disable-arp-ping
  • --nsock-engine
  • --script-args-file

Теперь полную, актуальную справку по опциям Nmap на русском языке вы можете прочитать на странице: https://kali.tools/?p=1317

На самом деле, работа над поддержкой документации в актуальном состоянии продолжается. Скоро будут сделаны обновления, которые принёс недавний выпуск Nmap 7.90.


ОтветитьЦитата
MiAl
 MiAl
(@mial)
Участник Admin
Присоединился: 2 года назад
Сообщения: 167
21/10/2020 11:49 дп  

Быстрое сканирование огромных сетей в nmap

lijiejie, в своём блоге предложил вариант быстрого сканирования огромных подсетей.

Сканирование больших подсетей в nmap, например 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16,100.64.0.0/10 — это нетривиальная задача. На таких сетях nmap очень медленный и можно никогда не дождаться результатов сканирования. В результате многие просто используют другие инструменты, такие как Masscan и Zmap

Сканируя огромное сетевое пространство, нас больше всего беспокоит эффективность, то есть затраты времени. Ради быстроты иногда можно пожертвовать точностью.

Основная идея быстрого сканирования — пинговать с высоким уровнем параллелизма:

sudo nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 -oX nmap_output.xml 100.64.0.0/10

Значение опций:

  • -sn: не сканировать порты, только пинговать хост
  • -PE: определяет, жив ли хост через эхо ICMP
  • -n: не преобразует IP-адреса в доменные имена.
  • --min-hostgroup 1024: Регулирует размер групп для параллельного сканирования. Минимальная группировка установлена на 1024 IP-адреса. В Nmap есть возможность осуществлять сканирование портов или сканирование с целью определения версии нескольких хостов параллельно. Это происходит путём разделения целевого IP пространства на группы, а затем сканирования одной группы за раз. В общем случае целесообразно использовать большие группы. Недостатком является то, что вы не можете узанть информацию о каком-либо хосте, пока не закончится сканирование всей группы. Таким образом, если Nmap начнет сканирование группы из 50-ти хостов, то пользователь не будет получать никакой информации (кроме обновлений информации предлагаемых в вербальном режиме), пока не будет завершено сканирование всех 50-ти хостов. о умолчанию Nmap использует компромиссный подход к решению этой проблемы. Сначала производится сканирование небольших групп из 5-ти хостов, поэтому первые результаты приходят быстро, затем размер группы постепенно увеличивается до максимального - 1024. Точные значения по умолчанию зависят от заданных опций. Для большей эффективности Nmap использует группы больших размеров для UDP сканирования и для некоторых типов TCP сканирования портов.
  • --min-parallelism 1024: Регулирует распараллеливание запросов. Этот параметр очень важен. Чтобы в полной мере использовать системные и сетевые ресурсы, мы устанавливаем количество проверок на не менее чем 1024. Эти опции регулируют общее количество запросов для группы хостов. Опции используются при сканировании портов и при обнаружении хостов. По умолчанию Nmap высчитывает степень параллельности основываясь на производительности сети. Если пакеты отбрасываются, то Nmap использует меньшее количество запросов. Количество запросов медленно увеличивается по мере того, как сеть продолжает нормально работать. Эти опции устанавливают минимальную и максимальную границы для этой переменной. По умолчанию параллелизм устанавливается в 1, если сеть работает плохо, и может достигать нескольких сотен при идеальных условиях.
  • -oX nmap_output.xml: Вывести результат в формате XML, имя файла — nmap_output.xml

По окончании сканирования вы можете проанализировать XML-документ, чтобы узнать, какие IP-адреса активны.

Совет: количество одновременных зондов можно настроить в соответствии с условиями вашей сети.

Посмотрите на следующие данные результатов сканирования:

 
Read data files from: /usr/bin/../share/nmap
Nmap done: 4012855 IP addresses (140507 hosts up) scanned in 2590.61 seconds
           Raw packets sent: 7897197 (221.122MB) | Rcvd: 160371 (6.456MB)

Просканировано 4012855 адресов за 2590 секунд — это 43 минуты. Найдено 140507 хостов онлайн. С настройками по умолчанию сканирование сети /10 заняло бы намного больше времени.


ОтветитьЦитата
Поделиться: