258 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nmap Резюме (ESP)
{{#include ../../banners/hacktricks-training.md}}
```
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
```
## Параметри
### IP-адреси для сканування
- **`<ip>,<net/mask>`:** Вказати IP-адреси безпосередньо
- **`-iL <ips_file>`:** list_IPs
- **`-iR <number>`**: Кількість випадкових IP-адрес, ви можете виключити можливі IP-адреси за допомогою `--exclude <Ips>` або `--excludefile <file>`.
### Виявлення обладнання
За замовчуванням 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 <ports>`**: Надсилає SYN-пакети, на які, якщо відповідає SYN/ACK, порт відкритий (на який відповідає RST, щоб не завершити з'єднання), якщо відповідає RST, він закритий, а якщо не відповідає, він недоступний. У разі відсутності привілеїв автоматично використовується загальне з'єднання. Якщо порти не вказані, він скидає на 80.
- **`-PA <ports>`**: Як попередня, але з ACK, поєднання обох дає кращі результати.
- **`-PU <ports>`**: Мета є протилежною, їх надсилають на порти, які, як очікується, закриті. Деякі брандмауери перевіряють лише TCP-з'єднання. Якщо закрито, відповідає з портом недоступним, якщо відповідає іншим icmp або не відповідає, залишає як недоступний.
- **`-PE, -PP, -PM`** : ICMP PINGS: відповідь на ехо, мітка часу та маска адреси. Вони запускаються, щоб дізнатися, чи активна ціль.
- **`-PY<ports>`**: Надсилає SCTP INIT запити на 80 за замовчуванням, INIT-ACK (відкрито) або ABORT (закрито) або нічого або ICMP недоступний (неактивний) можуть бути відповіді.
- **`-PO <protocols>`**: Вказується протокол у заголовках, за замовчуванням 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 <server>`:** FTPhost--> Використовується для сканування хоста з іншого, це робиться шляхом підключення до ftp іншої машини та прохання надіслати файли на порти, які ви хочете сканувати з іншої машини, відповідно до відповідей ми дізнаємося, чи вони відкриті чи ні. \[\<user>:\<password>@]\<server>\[:\<port>] Майже всі ftps сервери більше не дозволяють це робити, тому це має мало практичного використання.
### **Аналіз фокусу**
**-p:** Використовується для вказівки портів для сканування. Щоб вибрати всі 65,335 портів: **-p-** або **-p all**. Nmap має внутрішню класифікацію на основі популярності. За замовчуванням використовує 1000 найпопулярніших портів. З **-F** (швидке сканування) аналізує 100 найпопулярніших. З **--top-ports <number>** аналізує цю кількість найпопулярніших портів (від 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 <ratio>** Аналізує найпоширеніші порти в межах співвідношення від 0 до 1
**-sV** Сканування версій, інтенсивність можна регулювати від 0 до 9, за замовчуванням 7.
**--version-intensity <number>** Ми регулюємо інтенсивність, так що чим нижча, тим лише найімовірніші запити, але не всі. З цим ми можемо значно скоротити час сканування UDP
**-O** Виявлення ОС
**--osscan-limit** Для правильного сканування хоста потрібно принаймні один відкритий порт і один закритий порт. Якщо ця умова не виконується і ми це встановили, він не спробує передбачити ОС (економить час)
**--osscan-guess** Коли виявлення ОС не ідеальне, це змушує його намагатися більше
**Скрипти**
--script _<filename>_|_<category>_|_<directory>_|_<expression>_[,...]
Щоб використовувати стандартні скрипти, використовуйте -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 _<n1>_=_<v1>_,_<n2>_={_<n3>_=_<v3>_},_<n4>_={_<v4>_,_<v5>_}
--script-args-file _<filename>_
--script-help _<filename>_|_<category>_|_<directory>_|_<expression>_|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** _**<numhosts>**_**;** **--max-hostgroup** _**<numhosts>**_ (Регулює розміри паралельних груп сканування)
Ви можете контролювати кількість паралельних сканерів, але краще цього не робити (Nmap вже включає автоматичний контроль на основі стану мережі): **--min-parallelism** _**<numprobes>**_**;** **--max-parallelism** _**<numprobes>**_
Ми можемо змінити тайм-аут RTT, але зазвичай це не потрібно: **--min-rtt-timeout** _**<time>**_**,** **--max-rtt-timeout** _**<time>**_**,** **--initial-rtt-timeout** _**<time>**_
Ми можемо змінити кількість спроб: **--max-retries** _**<numtries>**_
Ми можемо змінити час сканування хоста: **--host-timeout** _**<time>**_
Ми можемо змінити час між кожним тестом, щоб сповільнити його: **--scan-delay** _**<time>**_**;** **--max-scan-delay** _**<time>**_
Ми можемо змінити кількість пакетів на секунду: **--min-rate** _**<number>**_**;** **--max-rate** _**<number>**_
Багато портів займають багато часу для відповіді, коли вони фільтруються або закриті. Якщо нас цікавлять лише відкриті, ми можемо прискорити процес за допомогою: **--defeat-rst-ratelimit**
Щоб визначити, наскільки агресивним ми хочемо, щоб Nmap був: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 --> Сканує лише 1 порт за раз і чекає 5 хвилин до наступного
-T1 і T2 --> Дуже схожі, але чекають лише 15 і 0.4 секунди відповідно між кожним тестом
-T3 --> Операція за замовчуванням, включає паралельне сканування
-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms
-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms
**Брандмауер/IDS**
Вони не дозволяють доступ до портів і аналізують пакети.
**-f** Щоб фрагментувати пакети, за замовчуванням фрагментує їх на 8 байтів після заголовка, щоб вказати цей розмір, ми використовуємо ..mtu (з цим не використовуйте -f), зсув повинен бути кратним 8. **Сканери версій і скрипти не підтримують фрагментацію**
**-D decoy1,decoy2,ME** Nmap надсилає сканери, але з іншими IP-адресами як джерело, таким чином вони приховують вас. Якщо ви поставите ME в списку, Nmap помістить вас туди, краще поставити 5 або 6 перед вами, щоб повністю замаскувати вас. Випадкові IP-адреси можна згенерувати за допомогою RND:<number> Щоб згенерувати <number> випадкових IP-адрес. Вони не працюють з детекторами версій TCP без з'єднання. Якщо ви всередині мережі, вам цікаво використовувати активні IP-адреси, оскільки в іншому випадку буде дуже легко зрозуміти, що ви є єдиним активним.
Щоб використовувати випадкові IP-адреси: nmap -D RND:10 Target_IP
**-S IP** Коли Nmap не ловить вашу IP-адресу, ви повинні вказати її цим. Також служить для того, щоб змусити їх думати, що інша ціль сканує їх.
**-e <interface>** Щоб вибрати інтерфейс
Багато адміністраторів залишають вхідні порти відкритими, щоб все працювало правильно, і їм легше, ніж знайти інше рішення. Це можуть бути порти DNS або FTP... щоб знайти цю вразливість, Nmap включає: **--source-port** _**<portnumber>**_**;-g** _**<portnumber>**_ _Вони еквівалентні_
**--data** _**<hex string>**_ Щоб надіслати шістнадцятковий текст: --data 0xdeadbeef і --data \xCA\xFE\x09
**--data-string** _**<string>**_ Щоб надіслати звичайний текст: --data-string "Сканування проведено Security Ops, розширення 7192"
**--data-length** _**<number>**_ Nmap надсилає лише заголовки, з цим ми досягаємо додавання певної кількості байтів (які будуть згенеровані випадковим чином)
Щоб повністю налаштувати IP-пакет, використовуйте **--ip-options**
Якщо ви хочете побачити параметри в надісланих і отриманих пакетах, вкажіть --packet-trace. Для отримання додаткової інформації та прикладів використання IP-опцій з Nmap, дивіться [http://seclists.org/nmap-dev/2006/q3/52](http://seclists.org/nmap-dev/2006/q3/52).
**--ttl** _**<value>**_
**--randomize-hosts** Щоб зробити атаку менш очевидною
**--spoof-mac** _**<MAC address, prefix, or vendor name>**_ Щоб змінити MAC приклади: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, і Cisco
**--proxies** _**<Comma-separated list of proxy URLs>**_ Щоб використовувати проксі, іноді проксі не підтримує так багато відкритих з'єднань, як хоче Nmap, тому паралелізм потрібно буде змінити: --max-parallelism
**-sP** Щоб виявити хости в нашій мережі за допомогою ARP
Багато адміністраторів створюють правило брандмауера, яке дозволяє всім пакетам, що надходять з певного порту, проходити (як 20,53 і 67), ми можемо сказати Nmap надіслати наші пакети з цих портів: **nmap --source-port 53 IP**
**Виходи**
**-oN file** Звичайний вихід
**-oX file** XML вихід
**-oS file** Вихід скрипт-кідів
**-oG file** Вихід, що підлягає grep
**-oA file** Усе, крім -oS
**-v level** детальність
**-d level** налагодження
**--reason** Чому хоста та стан
**--stats-every time** Кожен цей час говорить нам, як це йде
**--packet-trace** Щоб побачити, які пакети виходять, можна вказати фільтри, такі як: --version-trace або --script-trace
**--open** показує відкриті, відкриті|фільтровані та нефільтровані
**--resume file** Виводить підсумок
**Різне**
**-6** Дозволяє IPv6
**-A** те саме, що -O -sV -sC --traceroute
**Час виконання**
Поки Nmap працює, ми можемо змінювати параметри:
v / V Збільшити / зменшити рівень детальності
d / D Збільшити / зменшити рівень налагодження
p / P Увімкнути / вимкнути трасування пакетів
? Друк екрану допомоги з взаємодії під час виконання
**Vulscan**
Скрипт Nmap, який переглядає версії служб, отриманих в офлайн базі даних (завантаженої з інших дуже важливих) і повертає можливі вразливості
Бази даних, які він використовує:
1. Scipvuldb.csv | [http://www.scip.ch/en/?vuldb](http://www.scip.ch/en/?vuldb)
2. Cve.csv | [http://cve.mitre.org](http://cve.mitre.org/)
3. Osvdb.csv | [http://www.osvdb.org](http://www.osvdb.org/)
4. Securityfocus.csv | [http://www.securityfocus.com/bid/](http://www.securityfocus.com/bid/)
5. Securitytracker.csv | [http://www.securitytracker.com](http://www.securitytracker.com/)
6. Xforce.csv | [http://xforce.iss.net](http://xforce.iss.net/)
7. Exploitdb.csv | [http://www.exploit-db.com](http://www.exploit-db.com/)
8. Openvas.csv | [http://www.openvas.org](http://www.openvas.org/)
Щоб завантажити та встановити в папку Nmap:
wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/
Вам також потрібно буде завантажити пакети БД та додати їх до /usr/share/nmap/scripts/vulscan/
Використання:
Щоб використовувати все: sudo nmap -sV --script=vulscan HOST_TO_SCAN
Щоб використовувати конкретну БД: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_TO_SCAN
## Прискорення сканування служби Nmap x16
Згідно [**з цього посту**](https://joshua.hu/nmap-speedup-service-scanning-16x), ви можете прискорити аналіз служби nmap, змінивши всі значення **`totalwaitms`** у **`/usr/share/nmap/nmap-service-probes`** на **300** і **`tcpwrappedms`** на **200**.
Більше того, запити, які не мають спеціально визначеного **`servicewaitms`**, використовують значення за замовчуванням **`5000`**. Тому ми можемо або додати значення до кожного з запитів, або ми можемо **скомпілювати nmap** самостійно та змінити значення за замовчуванням у [**service_scan.h**](https://github.com/nmap/nmap/blob/master/service_scan.h#L79).
Якщо ви не хочете змінювати значення **`totalwaitms`** і **`tcpwrappedms`** взагалі в файлі **`/usr/share/nmap/nmap-service-probes`**, ви можете редагувати [код парсингу](https://github.com/nmap/nmap/blob/master/service_scan.cc#L1358) так, щоб ці значення у файлі `nmap-service-probes` були повністю проігноровані.
{{#include ../../banners/hacktricks-training.md}}