Nmap — эталон среди сканеров портов и один из важнейших инструментов пентестера. Но можешь ли ты сказать, что досконально изучил все его особенности и способы применения? Из этой статьи ты узнаешь, как использовать Nmap для сканирования хостов за файрволом, повысить производительность сканирования, искать дыры в настройках HTTP-сервера, организовать DoS-атаку и даже поднять веб-сервер.

WARNING

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

 

Базовые возможности

Перед тем как перейти к обсуждению продвинутых возможностей Nmap, давай уделим немного внимания использованию Nmap на базовом уровне. Ты можешь возразить, что говорить тут не о чем, — достаточно всего лишь натравить Nmap на нужный хост, и спустя некоторое время он выдаст на экран информацию об открытых портах:

$ nmap 192.168.0.1

Это действительно так, но стоит иметь в виду две особенности реализации Nmap. Первая: запущенный с правами обычного пользователя Nmap крайне неэффективен. Весь процесс сканирования при этом фактически сводится к попытке установить полноценное соединение с каждым из портов. В случае протокола TCP это значит, что Nmap пошлет на удаленную сторону пакет SYN; если запрошенный порт открыт, машина ответит пакетом SYN/ACK, после чего Nmap отправит пакет ACK и только потом закроет соединение с помощью пакета FIN.

Весь этот процесс осуществляется с помощью системного вызова connect() и, по сути, целиком ложится на сетевой стек ОС. В результате страдает как производительность сканирования, так и скрытность (сервисы, висящие на сканируемых портах, будут активно логировать соединения).

Совсем по-другому Nmap ведет себя, когда запущен с правами root:

$ sudo nmap 192.168.0.1

В этом случае он полностью берет на себя формирование пакетов и управление соединением. Подключение к открытым портам будет выглядеть так: Nmap посылает SYN, машина отвечает SYN/ACK, Nmap посылает FIN, разрывая наполовину открытое соединение (это называется TCP SYN сканирование). В результате сервис, висящий на порте, не логирует попытку соединения, а Nmap способен обнаружить брандмауэр, который просто отбрасывает SYN-пакеты вместо того, чтобы отправить в ответ SYN/ACK (порт открыт) или FIN (порт закрыт), как это должна делать операционная система по умолчанию. Кроме того, этот способ сканирования намного более производительный.

Вторая особенность Nmap заключается в том, что на самом деле он сканирует не весь диапазон портов (65 536), а только 1000 портов типовых служб, определенных в файле /usr/share/nmap/nmap-services. Так что, если кто-то повесит сервис на нестандартный порт, которого просто нет в этом файле, Nmap его не увидит. Изменить подобное поведение можно при помощи такой команды:

$ sudo nmap -sS -sU -p 1-65535 192.168.0.1

Nmap будет использовать сканирование типа TCP SYN и UDP-сканирование для всего диапазона портов.

 

Определяем название и версию сервиса на порте

Одна из интересных особенностей Nmap в том, что он способен не только определить состояние порта (открыт, закрыт, фильтруется), но и идентифицировать имя демона/службы на этом порте, а в некоторых случаях даже его версию. Для этого Nmap может применять несколько разных техник, например подключиться к порту 80 и послать HTTP-запрос для идентификации имени и версии веб-сервера либо использовать информацию о том, как сервис отвечает на те или иные пакеты и запросы.

Все правила идентификации служб и их версий определены в файле <span class="nobr">/usr/share/nmap/nmap-service-probes, а заставит Nmap их применить флаг -sV:

$ sudo nmap -sV 192.168.0.1

Причем есть возможность даже усилить попытки Nmap определить службу с помощью флага --version-all:

$ sudo nmap -sV --version-all 192.168.0.1

Однако обычно это не повышает качество распознавания.

Nmap не смог определить версию HTTP-сервера, но узнал его имя
Nmap не смог определить версию HTTP-сервера, но узнал его имя
 

Определяем имя и версию ОС

Наверное, это одна из самых известных функций Nmap. Отправляя машине нестандартные пакеты и сопоставляя ее ответ (время ответа, значения полей TTL, MTU, ACK и многое другое) с «базой отпечатков ОС» (/usr/share/nmap/nmap-os-db), Nmap способен достаточно точно определить запущенную на машине ОС. Все, что нужно сделать, — это запустить Nmap с флагом -O:

$ sudo nmap -O 192.168.0.1

Однако далеко не всегда Nmap способен на 100% правильно угадать ОС. Если сделать это не получится, Nmap выведет на экран наиболее близкие к правильному варианты, заботливо снабдив их «процентом попадания»: 90%, 82%...

Более того, ты можешь пойти еще дальше и воспользоваться флагом -A, чтобы заставить Nmap попытаться определить версию ОС, версию служб и даже провести более детальный анализ служб с помощью скриптов NSE (о них позже):

$ sudo nmap -A 192.168.0.1
Предположения Nmap о версии ОС сканируемой машины
Предположения Nmap о версии ОС сканируемой машины
 

Повышаем скорость сканирования

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

Nmap поддерживает десяток флагов, позволяющих тонко контролировать такие параметры, как задержка между попытками подключения к порту или количество попыток подключения. Разобраться с ними с наскоку довольно тяжело, поэтому в Nmap есть набор преднастроенных шаблонов агрессивности сканирования. Всего их шесть (от 0 до 5), а сделать выбор можно с помощью опции -T:

$ sudo nmap -T3 192.168.0.1

В данном случае мы выбрали шаблон номер 3. Это дефолтовое значение, своеобразный компромисс между скоростью и точностью сканирования в медленных сетях. Однако в современных условиях, когда минимальная скорость проводного доступа в сеть уже перешагнула за 30 Мбит/с, лучшим выбором будет -T4 или даже -T5. Последний стоит применять только в стабильных сетях без провалов скорости.

Более низкие значения предназначены для обхода систем обнаружения вторжений. Например, -T0 отключает многопоточное сканирование и устанавливает задержку между пробами портов в пять минут; потратив весь день (ночь) на сканирование, ты можешь надеяться, что сама попытка сканирования будет не замечена (тем более что Nmap перебирает порты в случайном порядке). Шаблон -T1 — более быстрый режим с задержкой в 15 с, -T2 — 0,4 с, -T3 — 10 мс, -T4 — 5 мс.

Режим -T5 в полтора раза более производительный, чем дефолтовый
Режим -T5 в полтора раза более производительный, чем дефолтовый

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Неинновационные инновации. Откуда растут корни технологий Apple

Тройная камера, умный режим HDR, «ночной режим» Night Shift, True Tone, Liquid Retina Disp…

10 комментариев

  1. Аватар

    Fsociety

    31.03.2017 at 13:53

    Очень базово, но молодцы, возвращение к истокам прям

  2. Аватар

    Tapac

    31.03.2017 at 23:50

    Спасибо, за хорошую статью. Деды, не серчайте — молодежи тоже где-то надо учиться. Знаете больше — пишите статью или в коменты пару срок. Будем благодарны за опыт и знания.

    • Аватар

      nucleus

      02.04.2017 at 21:00

      Комментов на пару сроков нам не надо))) и без сроков живется не плохо)

      а по поводу статьи — да, это уже явно лучше обзора проги из гугл маркета) Теперь верной дорогой идёте товарищи)

  3. Аватар

    GrafGrigorio

    02.04.2017 at 14:20

  4. Аватар

    Themistocles

    11.04.2017 at 23:43

    Отличная статья, далеко не провсе фишки знал. Есть куда стремиться, спасибо

  5. Аватар

    Inject0r

    15.04.2017 at 09:00

    По поводу того, что инкрементное увеличение IPID только на Windows 95 работает — неправда. У меня Windows 8.1 и на нем инкрементное увеличение оказалось)

  6. Аватар

    Inject0r

    15.04.2017 at 09:38

    А вообще, статья добротная. Я хоть и детально изучил инструкцию по nmap официальную, но нашел несколько интересных и важных моментов для себя 🙂

  7. Аватар

    Skybad

    20.04.2017 at 20:16

    Спасибо. Есть что подчеркнуть для себя.

  8. Аватар

    MyHacker

    06.05.2017 at 10:23

    Происходит так потому, что при SYN-сканировании состояние открыт/зaкрыт определяется путем анализа ответа машины: SYN/ACK — открыт, FIN — закрыт. Не FIN, а RST в соответствии с rfc 793.

  9. Аватар

    Laglag

    21.10.2019 at 18:28

    Столкнулся вчера с сайтом на котором нет кроме базового открыт. Сайт на статика. Остаётся только класть т. к. сайт работает на статике. Вообще не каких результатов не даёт не какая ос. Походу несколько перекидов идёт между железчками. Первый раз такое вижу.

Оставить мнение