# Nmap Резюме (ESP) {{#include ../../banners/hacktricks-training.md}} ``` nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24 ``` ## Параметри ### IP-адреси для сканування - **`,`:** Вказати IP-адреси безпосередньо - **`-iL `:** list_IPs - **`-iR `**: Кількість випадкових IP-адрес, ви можете виключити можливі IP-адреси за допомогою `--exclude ` або `--excludefile `. ### Виявлення обладнання За замовчуванням Nmap запускає фазу виявлення, що складається з: `-PA80 -PS443 -PE -PP` - **`-sL`**: Не є інвазивним, перераховує цілі, роблячи **DNS** запити для розв'язання імен. Це корисно, щоб дізнатися, чи, наприклад, www.prueba.es/24 всі IP-адреси є нашими цілями. - **`-Pn`**: **Без пінгу**. Це корисно, якщо ви знаєте, що всі вони активні (якщо ні, ви можете втратити багато часу, але ця опція також дає хибні негативи, кажучи, що вони не активні), вона запобігає фазі виявлення. - **`-sn`** : **Без сканування портів**. Після завершення фази розвідки не сканує порти. Це відносно непомітно і дозволяє провести невелике сканування мережі. З привілеями надсилає ACK (-PA) на 80, SYN(-PS) на 443 і запит на ехо та запит на мітку часу, без привілеїв завжди завершує з'єднання. Якщо ціллю є мережа, використовується лише ARP(-PR). Якщо використовується з іншою опцією, скидаються лише пакети іншої опції. - **`-PR`**: **Ping ARP**. Використовується за замовчуванням при аналізі комп'ютерів у нашій мережі, швидше, ніж використання пінгів. Якщо ви не хочете використовувати ARP-пакети, використовуйте `--send-ip`. - **`-PS `**: Надсилає SYN-пакети, на які, якщо відповідає SYN/ACK, порт відкритий (на який відповідає RST, щоб не завершити з'єднання), якщо відповідає RST, він закритий, а якщо не відповідає, він недоступний. У разі відсутності привілеїв автоматично використовується загальне з'єднання. Якщо порти не вказані, він скидає на 80. - **`-PA `**: Як попередня, але з ACK, поєднання обох дає кращі результати. - **`-PU `**: Мета є протилежною, їх надсилають на порти, які, як очікується, закриті. Деякі брандмауери перевіряють лише TCP-з'єднання. Якщо закрито, відповідає з портом недоступним, якщо відповідає іншим icmp або не відповідає, залишає як недоступний. - **`-PE, -PP, -PM`** : ICMP PINGS: відповідь на ехо, мітка часу та маска адреси. Вони запускаються, щоб дізнатися, чи активна ціль. - **`-PY`**: Надсилає SCTP INIT запити на 80 за замовчуванням, INIT-ACK (відкрито) або ABORT (закрито) або нічого або ICMP недоступний (неактивний) можуть бути відповіді. - **`-PO `**: Вказується протокол у заголовках, за замовчуванням 1 (ICMP), 2 (IGMP) і 4 (Encap IP). Для ICMP, IGMP, TCP (6) і UDP (17) протоколів надсилаються заголовки протоколів, для решти надсилається лише IP-заголовок. Мета цього полягає в тому, що через деформацію заголовків відповідають на запити "Протокол недоступний" або відповіді того ж протоколу, щоб дізнатися, чи він активний. - **`-n`**: Без DNS - **`-R`**: DNS завжди ### Техніки сканування портів - **`-sS`**: Не завершує з'єднання, тому не залишає слідів, дуже добре, якщо його можна використовувати. (привілеї) Це той, що використовується за замовчуванням. - **`-sT`**: Завершує з'єднання, тому залишає слід, але його можна використовувати напевно. За замовчуванням без привілеїв. - **`-sU`**: Повільніше, для UDP. В основному: DNS(53), SNMP(161,162), DHCP(67 і 68), (-sU53,161,162,67,68): відкрито (відповідь), закрито (порт недоступний), фільтровано (інший ICMP), відкрито/фільтровано (нічого). У разі відкрито/фільтровано, -sV надсилає численні запити для виявлення будь-якої з версій, які підтримує nmap, і може виявити справжній стан. Це значно збільшує час. - **`-sY`**: Протокол SCTP не вдається встановити з'єднання, тому немає журналів, працює як -PY - **`-sN,-sX,-sF`:** Null, Fin, Xmas, можуть проникати через деякі брандмауери та витягувати інформацію. Вони базуються на тому, що машини, що відповідають стандартам, повинні відповідати RST на всі запити, які не мають SYN, RST або ACK затримок: відкрито/фільтровано (нічого), закрито (RST), фільтровано (ICMP недоступний). Ненадійно на Windows, Cisco, BSDI та OS/400. На unix так. - **`-sM`**: Сканування Мaimon: Надсилає FIN і ACK прапори, використовується для BSD, наразі поверне все як закрите. - **`-sA, sW`**: ACK і Window, використовується для виявлення брандмауерів, щоб дізнатися, чи порти фільтруються чи ні. -sW дійсно розрізняє між відкритими/закритими, оскільки відкриті відповідають з іншим значенням вікна: відкрито (RST з вікном, відмінним від 0), закрито (RST вікно = 0), фільтровано (ICMP недоступний або нічого). Не всі комп'ютери працюють таким чином, тому якщо все закрито, це не працює, якщо кілька відкриті, це працює добре, а якщо багато відкриті і кілька закриті, це працює навпаки. - **`-sI`:** Сканування в режимі простою. У випадках, коли є активний брандмауер, але ми знаємо, що він не фільтрує до певної IP-адреси (або коли ми просто хочемо анонімності), ми можемо використовувати зомбі-сканер (він працює для всіх портів), щоб шукати можливі зомбі, ми можемо використовувати скрипт ipidseq або експлойт auxiliary/scanner/ip/ipidseq. Цей сканер базується на номері IPID IP-пакетів. - **`--badsum`:** Надсилає неправильну суму, комп'ютери відкинуть пакети, але брандмауери можуть відповісти на щось, використовується для виявлення брандмауерів. - **`-sZ`:** "Дивний" SCTP сканер, при надсиланні запитів з фрагментами cookie echo їх слід відкинути, якщо відкрито, або відповісти ABORT, якщо закрито. Він може проходити через брандмауери, які не проходять через ініціалізацію, погано те, що він не розрізняє між фільтрованими та відкритими. - **`-sO`:** Сканування протоколу Ip. Надсилає погані та порожні заголовки, в яких іноді навіть протокол не можна розрізнити. Якщо прибуває ICMP недоступний протокол, він закритий, якщо прибуває недоступний порт, він відкритий, якщо прибуває інша помилка, фільтровано, якщо нічого не прибуває, відкрито|фільтровано. - **`-b `:** FTPhost--> Використовується для сканування хоста з іншого, це робиться шляхом підключення до ftp іншої машини та прохання надіслати файли на порти, які ви хочете сканувати з іншої машини, відповідно до відповідей ми дізнаємося, чи вони відкриті чи ні. \[\:\@]\\[:\] Майже всі ftps сервери більше не дозволяють це робити, тому це має мало практичного використання. ### **Аналіз фокусу** **-p:** Використовується для вказівки портів для сканування. Щоб вибрати всі 65,335 портів: **-p-** або **-p all**. Nmap має внутрішню класифікацію на основі популярності. За замовчуванням використовує 1000 найпопулярніших портів. З **-F** (швидке сканування) аналізує 100 найпопулярніших. З **--top-ports ** аналізує цю кількість найпопулярніших портів (від 1 до 65,335). Перевіряє порти в випадковому порядку; щоб запобігти цьому, використовуйте **-r**. Ми також можемо вибрати конкретні порти: 20-30,80,443,1024- (остання означає шукати з 1024 і далі). Ми також можемо групувати порти за протоколами: U:53,T:21-25,80,139,S:9. Ми також можемо вибрати діапазон серед популярних портів Nmap: -p [-1024] аналізує до порту 1024 з тих, що включені в nmap-services. **--port-ratio ** Аналізує найпоширеніші порти в межах співвідношення від 0 до 1 **-sV** Сканування версій, інтенсивність можна регулювати від 0 до 9, за замовчуванням 7. **--version-intensity ** Ми регулюємо інтенсивність, так що чим нижча, тим лише найімовірніші запити, але не всі. З цим ми можемо значно скоротити час сканування UDP **-O** Виявлення ОС **--osscan-limit** Для правильного сканування хоста потрібно принаймні один відкритий порт і один закритий порт. Якщо ця умова не виконується і ми це встановили, він не спробує передбачити ОС (економить час) **--osscan-guess** Коли виявлення ОС не ідеальне, це змушує його намагатися більше **Скрипти** --script __|__|__|__[,...] Щоб використовувати стандартні скрипти, використовуйте -sC або --script=default Доступні типи: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, і vuln - **Auth:** виконує всі доступні скрипти аутентифікації - **Default:** виконує базові стандартні скрипти інструментів - **Discovery:** отримує інформацію з цілі або жертви - **External:** скрипт для використання зовнішніх ресурсів - **Intrusive:** використовує скрипти, які вважаються інвазивними для жертви або цілі - **Malware:** перевіряє на наявність з'єднань, відкритих шкідливим кодом або бекдорами - **Safe:** виконує неінвазивні скрипти - **Vuln:** виявляє найбільш відомі вразливості - **All:** виконує абсолютно всі доступні скрипти розширення NSE Щоб шукати скрипти: **nmap --script-help="http-\*" -> Ті, що починаються з http-** **nmap --script-help="not intrusive" -> Усі, крім тих** **nmap --script-help="default or safe" -> Ті в будь-якому з або обох** **nmap --script-help="default and safe" --> Ті в обох** **nmap --script-help="(default or safe or intrusive) and not http-\*"** --script-args __=__,__={__=__},__={__,__} --script-args-file __ --script-help __|__|__|__|all[,...] --script-trace ---> Надає інформацію про те, як просувається скрипт --script-updatedb **Щоб використовувати скрипт, просто наберіть: nmap --script Script_Name target** --> При використанні скрипта, як скрипт, так і сканер виконуватимуться, тому також можна додати параметри сканера. Ми можемо додати **"safe=1"** для виконання лише безпечних. **Контроль часу** **Nmap може змінювати час у секундах, хвилинах, мс:** --host-timeout arguments 900000ms, 900, 900s, і 15m все робить те саме. Nmap ділить загальну кількість хостів для сканування на групи та аналізує ці групи блоками, тому не переходить до наступного блоку, поки всі не будуть проаналізовані (і користувач не отримує жодних оновлень, поки блок не буде проаналізований). Таким чином, для Nmap оптимальніше використовувати великі групи. За замовчуванням у класі C використовує 256. Це можна змінити за допомогою **--min-hostgroup** _****_**;** **--max-hostgroup** _****_ (Регулює розміри паралельних груп сканування) Ви можете контролювати кількість паралельних сканерів, але краще цього не робити (Nmap вже включає автоматичний контроль на основі стану мережі): **--min-parallelism** _****_**;** **--max-parallelism** _****_ Ми можемо змінити тайм-аут RTT, але зазвичай це не потрібно: **--min-rtt-timeout** _**