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

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

info

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

Ха­керу Nmap пре­дос­тавит началь­ный спи­сок век­торов для ата­ки. Может ока­зать­ся, что на одном из пор­тов висит уяз­вимое ПО и есть пуб­личный экс­пло­ит, который в две коман­ды даст дос­туп к сер­веру. Глянь любой гайд по про­хож­дению машин: каж­дый раз все начина­ется со ска­ниро­вания (или, как еще говорят, «перечис­ления») пор­тов при помощи Nmap. Нап­ример, можешь пос­мотреть недав­нее про­хож­дение машины Editor с Hack The Box.

У спе­циалис­тов по защите Nmap тоже всег­да под рукой: нуж­но знать, что «тор­чит наружу», то есть какие час­ти инфраструк­туры дос­тупны извне перимет­ра сети.

Иног­да мож­но най­ти что‑то очень инте­рес­ное. Нап­ример, такая ситу­ация: раз­работ­чики под­няли сер­вис для тес­тов и забыли его зак­рыть, подарив хакерам пря­мой путь к экс­плу­ата­ции. Или взять неп­ропат­ченные вер­сии ПО.

info

Воз­можно, ты слы­шал про ата­ку WannaCry. Крип­точервь ата­ковал служ­бу SMB на 445-м пор­те, у которой была пуб­личная уяз­вимость и был патч, но не все его уста­нови­ли. Информа­ция на компь­юте­ре шиф­ровалась, за дешиф­ровку зло­умыш­ленни­ки тре­бова­ли выкуп в бит­коинах. Ата­ка мас­штаб­ная, зараже­но око­ло 300 тысяч компь­юте­ров, общий ущерб боль­ше четырех мил­лиар­дов дол­ларов.

В «хакер­ских» ОС (Kali Linux, HTB-вер­сии ParrotOS и про­чие) ути­лита пре­дус­танов­лена. В дру­гих Linux ути­лита дос­тупна из стан­дар­тных репози­тори­ев.

В Debian и Ubuntu пиши

sudo apt install nmap

В Fedora:

sudo dnf install nmap

В Arch:

sudo pacman -S nmap

Ес­ли поль­зуешь Windows, качай ус­танов­щик Nmap.

На macOS мож­но пос­тавить так же, но луч­ше вос­поль­зовать­ся пакет­ным менед­жером Homebrew. Уста­новив его, пиши в кон­соли

brew install nmap

Да­вай запус­тим пер­вое ска­ниро­вание.

ret0x2a@kali:~$ sudo nmap localhost --reason
Starting Nmap 7.95 ( https://nmap.org ) at 2025-12-17 00:14 EST
Nmap scan report for localhost (127.0.0.1)
Host is up, received localhost-response (0.0000060s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
5432/tcp open postgresql syn-ack ttl 64
8000/tcp open http-alt syn-ack ttl 64

Nmap done: 1 IP address (1 host up) scanned in 0.14 seconds

Изу­чив резуль­тат, ты можешь уви­деть, что на компь­юте­ре три пол­ностью откры­тых пор­та без филь­тра­ции. На них висит SSH, СУБД PostgreSQL и что‑то, что обра­баты­вает HTTP-зап­росы. Это может быть API, админка или какой‑то сер­вер. Зна­чит, есть три век­тора для ата­ки.

Мож­но попытать­ся получить более под­робную информа­цию по этим трем кон­крет­ным пор­там, добавив в коман­ду парамет­ры -p22,5432,8000 и -sV, который пыта­ется опре­делить вид и вер­сии ПО.

Я добавил параметр --reason, что­бы Nmap давал пояс­нения к сво­им выводам. Осталь­ные парамет­ры по дефол­ту. В этот раз Nmap исполь­зовал тип ска­ниро­вания TCP SYN. Ути­лита в этом слу­чае сама фор­миру­ет «сырой» TCP-зап­рос и ана­лизи­рует ответ сер­вера. На трех пор­тах сер­вер вер­нул SYN-ACK, что озна­чает «порт открыт». Осталь­ные пор­ты вер­нули RST или сброс соеди­нения — эти пор­ты зак­рыты.

info

По­лучен­ный RST не всег­да обоз­нача­ет, что порт зак­рыт. Это акту­аль­но для ска­ниро­вания вида TCP SYN. Nmap интер­пре­тиру­ет RST, исхо­дя из типа ска­ниро­вания.

Ко­ман­ду мы запус­кали от име­ни супер­поль­зовате­ля, через sudo. В ином слу­чае Nmap не смог бы пол­ноцен­но работать с «сырыми» зап­росами и сбра­сывать соеди­нение без завер­шения рукопо­жатия. Сброс соеди­нения в некото­рых слу­чаях помога­ет не оставлять сле­дов ска­ниро­вания в логах и дела­ет ска­ны менее шум­ными.

«Сырые», или RAW, зап­росы поз­воля­ют Nmap уста­новить нес­тандар­тные фла­ги в TCP-пакете. Опе­раци­онная сис­тема не раз­реша­ет обыч­ным поль­зовате­лям такое поведе­ние, тре­буя кор­рек­тные пакеты и выпол­нение все­го про­цес­са соеди­нения. Без прав root Nmap ска­ниро­вал бы с пол­ным рукопо­жати­ем (-sT).

За­пуск ска­ниро­вания с дефол­тны­ми парамет­рами рав­носилен такому запус­ку:

sudo nmap -sS -T3 localhost

Эти парамет­ры ука­зыва­ют:

  • sS — тип ска­ниро­вания TCP SYN. Стелс, который обес­печива­ется час­тичным рукопо­жати­ем;
  • по дефол­ту — ска­ниро­вать толь­ко 1000 наибо­лее час­то исполь­зуемых пор­тов. Для ска­ниро­вания отдель­ных пор­тов исполь­зуй -p<PORT_NUMBER> (без про­бела и тре­уголь­ных ско­бок). Что­бы про­верить все 65 536 пор­тов, вби­вай -p-. Быс­трая про­вер­ка топ-100 наибо­лее час­то исполь­зуемых пор­тов — -F;
  • T3 — опре­деля­ет вре­мен­ные задер­жки меж­ду зап­росами. Дос­тупны зна­чения от T0 (Paranoid) с отправ­кой одно­го зап­роса каж­дые пять минут, до T5 (Insane) — мега­агрессив­ное ска­ниро­вание.

warning

За­пуск без прав root рав­носилен коман­де sudo nmap -sT -T3 localhost.

 

Порты, сервисы, рукопожатия

Пе­ред тем как углублять­ся в типы ска­ниро­вания и парамет­ры Nmap, раз­берем­ся с базовы­ми поняти­ями. Ты явно встре­чал запись вида 192.168.0.1:8080, которая ука­зыва­ет на порт 8080 у машины с IP-адре­сом 192.168.0.1. Что­бы снять все воп­росы, исполь­зуем ана­логию. Пред­ставь офис­ное зда­ние. IP-адрес — это его адрес, а пор­ты — это номера кабине­тов.

В каж­дом кабине­те находит­ся фир­ма, которая выпол­няет какую‑то работу, — это и есть сер­вис. В 21-м кабине­те кан­целярия зда­ния, которая отве­чает за работу с докумен­тами. Через них ты можешь передать фай­лы или получить сог­ласно сво­ему дос­тупу. Кабинет 110 при­нима­ет поч­товые отправ­ления, а 25-й отве­чает за исхо­дящую поч­ту. В 3306-м рас­положен архив — база дан­ных MySQL.

В одном зда­нии может быть нес­коль­ко похожих фирм. Нап­ример, в кабине­те 80 рань­ше обра­баты­вали HTTP-зап­росы, выдавая каж­дому посети­телю кра­сивые стра­ницы. Но с недав­него вре­мени все переш­ли на более безопас­ный HTTPS, поэто­му из 80-го кабине­та тебя отпра­вят в кабинет 443.

В кабине­те 3000 тоже при­нима­ют HTTP, но там сидят любите­ли JavaScript и работа­ют на Node.js. Этот кабинет обра­баты­вает толь­ко зап­росы, пос­тро­енные по опре­делен­ной схе­ме, и пред­став­ляет собой сер­вис API. В кабине­те 8080 любите­ли Python раз­мести­ли админку. Все это сер­висы работа­ют с вебом, но выпол­няют раз­ную работу.

Ка­бине­ты могут быть в раз­ных сос­тояниях. Один открыт для сво­бод­ного посеще­ния любым жела­ющим — он находит­ся в сос­тоянии open. В дру­гом пус­то, и он в сос­тоянии closed. Тре­тий может быть сегод­ня closed, а зав­тра в нем появит­ся новая фир­ма и он ста­нет open.

Есть кабине­ты, в которые прос­то так не попасть. Дос­туп в них жес­тко филь­тру­ется, для пор­тов это зна­чит, что они filtered. Что­бы каж­дый праз­дно шата­ющий­ся граж­данин не узнал, какие кон­крет­но кабине­ты работа­ют и что в них находит­ся, адми­нис­тра­ция зда­ния нас­тро­ила фай­рвол. Его задача — догадать­ся, что идет ска­ниро­вание, и мак­сималь­но скрыть информа­цию. Что­бы обма­нуть филь­тр, при­дума­ны раз­ные вари­анты ска­ниро­вания.

По­лучи­лось не очень при­вет­ливое зда­ние, но имен­но так и выг­лядит сер­вер для слу­чай­ного посети­теля. Адми­нис­тра­торы не хотят, что­бы мам­кины хакеры зна­ли, что и где работа­ет. Есть чет­ко раз­решен­ные кабине­ты, к ним и обра­щай­ся.

Как выглядит процесс полного TCP-рукопожатия
Как выг­лядит про­цесс пол­ного TCP-рукопо­жатия

Те­перь подумай: как ты обыч­но вхо­дишь в неиз­вес­тный тебе кабинет? Сту­чишь, спра­шива­ют «Кто там?», пред­став­ляешь­ся и вхо­дишь. В сетях этот про­цесс называ­ется «рукопо­жатие». При работе с про­токо­лом TCP твоя машина отправ­ляет пакет SYN. В ответ при­лета­ет либо сброс RST (зна­чит, никого нет и кабинет, ско­рее все­го, зак­рыт), либо ответное при­ветс­твие SYN-ACK, вро­де «Кто там? Про­ходи!». Пос­ле чего с тво­ей сто­роны летит под­твержда­ющий пакет ACK — «я вхо­жу». Это весь про­цесс тре­хэтап­ного рукопо­жатия.

Процесс прерывания TCP-рукопожатия
Про­цесс пре­рыва­ния TCP-рукопо­жатия

Иног­да на твой SYN нет никако­го отве­та, даже RST. Это один из мар­керов того, что порт филь­тру­ется. Если внут­ри кто‑то есть, он тихонь­ко передал информа­цию о тво­ем сту­ке в служ­бу безопас­ности.

Если порт закрыт
Ес­ли порт зак­рыт

Ска­ниро­вать мож­но не толь­ко TCP, но и UDP (параметр -sU). В этом слу­чае сту­чать в дверь бес­полез­но. На такой две­ри есть ящик для писем. Ты бро­саешь в него датаг­рамму и ухо­дишь.

info

Да­таг­рамма — это пакет дан­ных, который, кро­ме самих дан­ных, содер­жит информа­цию об источни­ке и получа­теле, плюс в нем ука­зана дли­на самих дан­ных и чек‑сум­ма.

Ни­каких рукопо­жатий в UDP нет, как и гаран­тий, что твои дан­ные дой­дут. Если порт открыт, в ответ может при­лететь датаг­рамма от сер­вера. Но не факт, чаще все­го в ответ не при­ходит ничего, и Nmap помеча­ет порт как open|filtered. Зак­рытый порт отдаст пакет ICMP Unreachable.

 

Виды сканирований

Ты уже зна­ешь основные типы ска­ниро­ваний:

  • -sT — пол­ное соеди­нение по TCP;
  • -sS — ска­ниро­вание TCP SYN со сбро­сом соеди­нения;
  • -sU — ска­ниро­вание по UDP.

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

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    5 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии