Nmap — швейцарський ніж розвідника в руках айтішника

💡 Усі статті, обговорення, новини про тестування — в одному місці. Приєднуйтесь до QA спільноти!

З вами знову Антон Калакуцький, засновник спільноти «ПТСР && Айті» і вже фахівець з тестування на проникнення, тобто penetration tester в компанії IT Specialist!

В мене виникло бажання поділитись з вами одним дивовижним інструментом, з яким працюють майже всі спеціалісти, що мають справу з мережами — це Nmap (network mapper). А далі розкажу вам, що це таке, звідки воно взялось та як ним користуватись!

Всі приклади команд записані з Kali Linux та відпрацьовані на тачці в Hack The Box.

ВАЖЛИВО: Nmap — це інструмент активної розвідки, тобто ми активно взаємодіємо з ціллю і можемо наробити біди. Ніколи не скануйте цілі без дозволу їх власника. Але оскільки ми країна, яка веде війну, то ніхто не забороняє сканувати цілі на території ворога. Головне не забувайте про анонімність!

Ну що, погнали?

Що таке Nmap і чому він досі топ

Nmap (Network Mapper) — це безкоштовний інструмент з відкритим кодом для сканування мереж. З’явився ще в 1997 році. Його створив Гордон Лайон (також відомий як Fyodor). Спочатку це був простенький тул для визначення відкритих портів, але за роки існування він виріс у справжній швейцарський ніж для дослідника мереж.

Уперше світ побачив Nmap у журналі «Phrack Magazine», справжній Біблії хакерів 90-х. З того часу інструмент постійно оновлюється, підтримується спільнотою та розробниками, і його активно використовують як кіберзлочинці, так і фахівці з безпеки, дослідники, сисадміни та пентестери.

Чому ж Nmap досі актуальний у 2025 році? Бо:

Долучайтесь до збору на Павуки Допхіна!

  • Він працює стабільно і передбачувано.
  • Підтримує найновіші протоколи та методи сканування.
  • Постійно оновлюється, зокрема база скриптів NSE (Nmap Scripting Engine).
  • Його легко автоматизувати в пайплайнах CI/CD або інтегрувати в свої тулчейни.

Як встановити Nmap

Якщо в тебе Linux, то Nmap, швидше за все, вже є. Але якщо ні, то тримай команду:

sudo apt install nmap

На Mac:

brew install nmap

На Windows:

  1. Йдеш на офіційний сайт nmap.org.
  2. Скачуєш інсталятор.
  3. Тицяєш «Next» до переможного кінця.

Є також Zenmap — це графічна обгортка для Nmap, але я ним ніколи не користувався, тож грець з ним.

Тепер нарешті перейдемо вже до практичних прикладів!

Взагалі ознайомитись з усіма командами nmap доволі просто, для цього потрібно просто до nmap додати ключ -h (що по ідеї повинно означати help, але це не точно).

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

Перейдемо вже нарешті до сканування і до того, як читати результати. Спершу я запущу просто загальну команду nmap, виглядати це буде так:

nmap 10.10.10.245 (це IP-адреса надана HackTheBox (сканувати також можна цілі мережі).

До речі, взагалі перед скануванням можна перевірити, чи взагалі ціль «живе». Тобто перевірити, чи доступний інший пристрій у мережі, і як швидко він відповідає.

Робиться це дуже легко за допомогою команди ping:

На цьому скріні ми бачимо, що ціль доступна в мережі і з нею можна комунікувати.

Коли ping не працює?

  • Ціль блокує ICMP (наприклад, firewall налаштований блокувати ping).
  • Пристрій офлайн.
  • Проблеми з DNS або маршрутом до цілі.

А тепер повернемось до результатів нашого сканування:

10.10.10.245 — IP-адреса цілі;

Host is up — хост відповідає, а значить живий;

Latency 0.12s — затримка відповіді (час відгуку).

При загальній команді nmap без ключів скануються перші 1000 портів. Але ми можемо визначати більший діапазон портів або взагалі тільки конкретний. Загалом треба просканувати всі порти. Але нам для статті це не потрібно, вистачить і цих трьох (дописав цей рядок для душніл в коментарях).

Ми бачимо з 1000 портів тільки 3 відкритих і це:

  1. 21 FTP ( можна перевірити анонімний доступ);
  2. 22 SSH (можна зняти банер або перевірити брутфорс);
  3. 80 HTTP (можна дивитись сайт, запустити dirb/gobuster і так далі).

Добре, тепер ми знаємо, які порти нам доступні та з якими ми можемо працювати далі, якщо ви розумієте про що я, хехехе. Але через nmap ми можемо дізнатись ще більше інформації про ці порти. Наприклад, які версії служб на них працюють. Ось приклад команди:

nmap -sV -p 21,22,80 10.10.10.245

Ключі:

  • -sV — виявлення версій сервісів.
  • -p — список портів через кому або діапазон 1-65535.

О, оце інше діло! Тепер ми бачимо, які версії служб працюють на цих портах і це дає нам ще більше поле для діяльності.

Як ви могли помітити, в цьому скануванні я використав ключ -p — цей ключ означає порт (port) і ми можемо через кому вказати, які саме порти треба сканувати, або через тире -p 1-1024 вказуємо, який діапазон портів сканувати. Це так звані «well-known ports»:

Як бачимо зі скріна, нічого нового немає. До речі можемо перевірити, яка операційна система на цій тачці стоїть. Це робиться просто, ми тільки додаємо ключ -O (о, а не нуль 🙂).

nmap -O -p 21,22,80 10.10.10.245 (вказую порти, щоб швидше сканувало).

І, як бачимо, за результатами сканування наша операційна система — це Linux.

Давайте підемо далі, а то можна ще довго гратись з цими портами, а стаття не резинова.

Поки ми не пішли в більш важкі теми, хочу розповісти про основні команди сканування. Звичайно, з прикладами. Погнали!

Основні типи сканів Nmap

TCP Connect Scan (-sT)

nmap -sT 10.10.10.245

  • Повноцінне TCP-з’єднання (3-way handshake).
  • Легко виявляється.

SYN Scan (-sS)

nmap -sS 10.10.10.245

  • Напіввідкрите з’єднання (SYN, SYN-ACK, RST).
  • Найшвидший і найпопулярніший тип.
  • Чудовий для прихованого сканування, коли не хочеш сильно палитися.

UDP Scan (-sU)

nmap -sU 10.10.10.245

  • Виявляє сервіси типу DNS, SNMP.
  • Повільний, не завжди точний.
  • Корисний для сканування сервісів, що працюють поверх UDP, особливо в інфраструктурах, де активно використовується DNS або VoIP.

Ping Sweep (-sn)

nmap -sn 192.168.1.0/24

  • Просто перевіряє, хто живий у мережі.
  • Не сканує порти.
  • Чудовий для первинної розвідки в локальній мережі.

Cподіваюсь, всім зрозуміло про ці основні скануванням, для чого вони і що роблять. А тепер підемо далі, до однієї з найцікавіших тем в цій статті, а саме NSE.

NSE — Nmap Scripting Engine

А тепер давайте поговоримо про справжню магію Nmap — NSE (Nmap Scripting Engine). Це рушій, який дозволяє запускати скрипти прямо в процесі сканування. Тобто ти не просто бачиш, що порт відкритий, а й одразу можеш:

  • Знайти відомі вразливості (як CVE).
  • Протестувати логіни/паролі.
  • Провести HTTP/FTP/SMB/SSH-аналіз.
  • Отримати банери, сертифікати, навіть вміст директорій.

І все це однією командою! Використовувати їх дуже легко, треба просто до команди nmap додати — script. І за аналогією ключа -h можна отримати доступ з консолі: короткий опис кожного скрипта, призначення, категорію та можливі аргументи.

nmap —script-help=all

Окей, ми знаємо, що на цілі (10.10.10.245) відкриті порти 21 (FTP), 22 (SSH), 80 (HTTP). Тепер протестуємо їх за допомогою конкретних NSE-скриптів.

Примітка для душніл. Я не ліз в якісь:

Анонімний доступ до FTP:

nmap —script ftp-anon -p 21 10.10.10.245

Оскільки скрипт нічого не вивів, це означає, що анонімного доступу немає. Сумно 🙁

SSH: інформація про ключі:

nmap —script ssh-hostkey -p 22 10.10.10.245

Є, тут скрипт спрацював коректно і Nmap витягнув усі публічні ключі, які використовує сервер:

ssh-hostkey:

| 3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)

| 256 96:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)

| 256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)

Навіщо це треба?

  • Це дозволяє перевірити, які саме типи ключів використовуються (RSA, ECDSA, ED25519).
  • Якщо бачимо лише старі типи — це може свідчити про застарілий або вразливий сервер.
  • Іноді за цим можна знайти сервери з однаковим ключем в інтернеті через Shodan чи Censys.

HTTP: Заголовок веб-сторінки

nmap —script http-title -p 80 10.10.10.245

На жаль, скрін не зберігся. Але можете повірити мені на слово, там нічого цікавого не було.

На жаль, нам нічого не вивело, але є ще один варіант. Ми можемо прикинутись браузером! Прикольно, правда?)

Робиться це, якщо додати ще такий ключ:

nmap —script http-title —script-args http.useragent="Mozilla/5.0″ -p 80 10.10.10.245

Скрипт http-title, але з аргументом, який прикидається браузером, щоб сервер точно видав сторінку. Так, тут можна додавати ще аргументи до скриптів. Вони додають додаткові параметри до скрипта.

Знайти їх до кожного скрипта можна на офіційному сайті nmap.org/nsedoc/scripts.

Але ми відволіклись від результату сканування:

Опа, через аргумент ми змогли обманути ціль і отримали заголовок вебсторінки. Круто, правда?)

І це не просто вебсторінка, а ціла адмінка. І з цього сканування ми вже маємо шляхи для подальшої роботи. Та поки на цьому все. Дуже різке закінчення вийшло, хаха 😅

Мінуси використання nmap

А тепер перейдемо до мінусів nmap. Звичайно, як і усі ми, він не ідеальний. Тут вже більш професійна мова. По-іншому я хрін його знає, як написати. Тож почнемо:

1. Може привернути увагу (дуже гучний в мережі). Якщо скануєш чужу ціль без згоди — це легкий спосіб отримати бан, репорт або гірше.

2. Деякі скани повільні. Особливо на нестабільних мережах або під час UDP-скану. Скани можуть зависати або давати неповні результати.

3. False Negative/Positive. Іноді не побачиш відкритий порт, якщо сервер блокує SYN/ACK або стоїть firewall з tarpitting або rate-limiting. А іноді навпаки, відкритий порт виявиться honeypot’ом. Що дуже неприємно 😓

4. NSE-скрипти бувають нестабільними. Не всі скрипти дружелюбні. Можуть видавати помилки або ламати сервіси, якщо виявляться занадто агресивними 🤷‍♂️

5. Немає автоматичного виведення експлойтів. Nmap не скаже тобі: «О, тут уразливість CVE-2021-12345!». Це все робиться вручну: гугли, юзай searchsploit, vulners або підключай Nessus/OpenVAS.

6. Важко масштабувати на великі мережі. Якщо треба сканити /16, nmap вже не той інструмент. Потрібна паралелізація або masscan, а потім уже nmap для уточнення.

7. Не замінює інші інструменти. Він класний для рекону та поверхневого скану, а далі вже йдуть інші тулзи, такі як: Burp, Metasploit, Hydra, sqlmap тощо.

Хоч мінусів і вистачає, але nmap все одно незамінний. І тому дуже важливо знати його сильні і слабкі сторони! 🫡

Наостанок

Але хочу звернутись до тих, хто дочитав аж сюди, які ви можете порадити best practices у користуванні Nmap? А може, маєте якісь професійні секретики? Коротше, буду чекати на ваші коментарі!

Це був лише вступ до великого світу Nmap. Якщо вам зайшло, то не соромтесь писати, запитувати, пропонувати теми для наступної частини. Бо Nmap — це лише вершина айсбергу того, що ми можемо робити з мережею. Тому якщо буде інтерес, то зафігачу другу частину!

Ну і сподіваюсь, вам було цікаво, бо я реально старався у свій вихідний день. Додавайтесь у LinkedIn, буду радий новим знайомствам!

🔗 Посилання на мій профіль:
https://www.linkedin.com/in/anton-kalakutskyi-3b6411293/

Всім дякую за увагу і до нових зустрічей на просторах DOU!

👍ПодобаєтьсяСподобалось30
До обраногоВ обраному20
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Цікаво та доступно написано, дякую!
Сподобалась частина з NSE — давно хотів розібратись, а тут все по поличках.
Чекаю другу частину!

Дивні люди, у яких Ubuntu/Debian == Linux. Хоча, може це професійна деформація і досвід лише з Kali.
Ну й просто щоб не загубити самому собі
nmap -O -sS -sU -sV -T4 --host-timeout 20m ...
Ну і да, треба більше прикладів скриптів.

взгалі-то швейцарській ніж, це busybox

Свого часу до busybox я спортував
networking/arping.c
networking/nameif.c (ну і відповідно uclibc add libc/inet/ether_addr.c)

busybox як all-in-one (умовний швейцарській ніж) на рівні групи тулз з мін.базовими функціоналами, і інший варіант це — якась одна тулза але з розширеним функціоналом (умовний швейцарській ніж). Тобто розгляд з різних ракурсів, абож на іншому рівні «швейцарській ніж».

Цікаво було б про про розробку власних скриптів для nmap

на жаль, я поки не такий продвинутий юзер нмапу, але дякую за інсайт)) Тепер цікаво в цьому розібратись!

Що варто додати:
1. Таймінг шаблони «T0-T5» та «—max-retries=0».
2. Сканування портів під різними протоколами «-p T:22,U:53».
3. Вербозіті -vv
4. Вказання інтерфейсу, з якого проводити сканування «-e en0»
5. Опцію «-6» для сканування IPv6
6. «-Pn» для трактування всіх хостів як онлайн та фільтрування безпортових з «—open»
7. Ручну конфігурацію «-sn» з «-P*» опціями
8. Зберігання результатів в XML файл з опцією «-oX »

так, дякую, все не влізло в статтю та як писав не все згадав(

якщо для базової перевірки connectivity [зі звичайної адмін.практики] — в абс.більшості випадків достатньо стд інструментарія як ping, traceroute, mtr, ...

Часто интересует подключение на конкретный порт, а не только по айпи. Тогда уже и используются nmap, telnet, nc...

Ping тільки для icmp, а traceroute чи mtr мають опції для udp,tcp +port але заточені під показ траси. Netcat гарна тулза, але більш для організації мін.взаємодії вже. Telnet під свій прото, але колись і ним tcp port перевіряли. Якщо http, то curl функціонал відповідний має. У кожної тулзи є своє базове призначення, хоча функціонал може перекриватися і з іншими.

Щось таке старе-забуте про швейцарський ніж мені пригадалося — опа, Netcat!
isearch.kiev.ua/...​-army-knife-hacking-tools

7. Не замінює інші інструменти.

Це не мінус, це використання за призначенням.

Цікава стаття, дякую.
А от скріншоти не можливо дивитись, було б добре мати їх збільшення

Якщо скануєш чужу ціль без згоди — це легкий спосіб отримати бан, репорт або гірше.

— отут було би цікаво дізнатися більше деталей. По всіх пунктах (бан, репорт і, особливо — «гірше»). :)

Бан це блокування вашої IP, тим же WAFом або IDS/IPS. Ну і після цього звичайно, не вийде продовжити розвідку.
Репорт або просто скарга від адміна ресурса до вашого інтернет провайдера, що може призвести до відключення інернету наприклад)

А гірше це вже юридичні наслідки(

Цікаво що це в світі помінялося щоб провайдер банив за скан портів? Які тут юридичні наслідки? Я пригадую випадки зі свого досвіду, коли декі просунуті користувачі жалілися що хтось їх сканує, бо про це повідомляв файрвол. Моя відповідь — ну і шо з того вам сталося? А нічого, просто дізнався. Блокати source ip на кожні такі звернення то для провайдера жах, особливо у випадку коли source ip через NAT працює для великої корп мережі.

в старые времена в эпохи червей боты и зараженные компы сканировали всю сеть на открытые порты, у некоторых провайдеров стояло железо которое считало количество syn пакетов отправленного с порта и банило по превышению лимитов

я помітив, що саме більше душнять і мудрячать люди, які не сильно дотичні до сфери кібербезпеки)

Це ви помітили в мою адресу, шановний? Ну десь так, напевно вже не сильно я дотичний. Бо свій мережевий сніфер та спуфер я писав ще в ті часи, коли слово «кібербезпека» ще не використовувалось взагалі. (Але з часом це слово саме з’явилося в моїй ВОС). Проте знали що таке кібернетіка, на відміну від багатьох сучасних діжиталізаторів, що спотворюють (ой нє — душнять же!) сенс слова на свій маркерінговий нетехнічний розсуд.

Ще не був в нас поширений nmap, але аналіз пакетів робили власноруч написаними сішними програмами, аналізуючі дамп мережевого фрейма побайтно, а деінде і побітно. RFC то все що було в допомогу. Вже потім я створив (ой нє — намудрячів) файрвол і методику його сертифікації (от там вже nmap та iperf задіяні були — от вам і BEST PRACTICE), сертифікував його для надання послуг державним установам.

Отже про юридичні наслідки і провайдерів можу багато діскусувати, але не буду витрачати час, бо то всеж не про nmap.

Бажаю вам Антоне корисно витратити час та написати (ой нє — зафігачити! :) ) цікаву другу частину, читачі знайдуться.

Наприклад, в якості логічниго продовження цієї статті, тема наступної частини може бути про виялення та блокування прикладів використаня nmap з цієї статті. Ну хіба що протидію анонімнному ftp то можна скіпнути бо це вже дуже обсолетний семпл.

Ну і після цього звичайно, не вийде продовжити розвідку.

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

Дякую за статтю. Журбинка звісно що скріни не зумляться, принаймні в мене під Хромом всі скріни статичні та не клікабельні, роздивитись можна звісно але важкувато.

на жаль, я тут допомогти не можу(

То перекладіить цю статтю на розташуйте десь на іншому ресурсі — де можна її нормально почитати. (Medium, LinkedIn)

Підписатись на коментарі