112 lines
9.9 KiB
Markdown
112 lines
9.9 KiB
Markdown
Когда мы сканируем с помощью nmap, есть 3 базовых типа сканирования:
|
|
1. **TCP connect scans** `-sT`
|
|
2. **SYN Полуоткрытое сканирование** `-sS`
|
|
3. **UDP scans** `-sU`
|
|
|
|
Дополнительно есть несколько не так часто используемых, некоторые из них мы также рассмотрим (хотя и менее подробно). Это:
|
|
1. **TCP null scans** `-sN`
|
|
2. **TCP FIN scans** `-sF
|
|
3. **TCP Xmas Scans** `-sX`
|
|
|
|
Многие из них (за исключением UDP) мы используем в очень похожих целях, однако, способ их работы отличаются друг от друга. Это означет то, что один из базовой тройки вероятнее всего будет вашим выбором в большинстве ситуаций, но не стоит забывать о существовании других возможных типов сканирования.
|
|
|
|
## TCP connect scans `-sT`
|
|
Что бы понимать как работает этот вид сканирования, нужно понимать концепцию ***Трехстороннего TCP рукопожатия***. Давайте вспомним что это обозначает. ***RFC 9293***
|
|
|
|
***Трехстороннее TCP рукопожатие*** состоит из трёх (ну не четырех же =) ) стадий.
|
|
1. Клиент (в нашем случае атакующий) отсылает TCP запрос к целевой системе с флагом `SYN`.
|
|
2. Сервер признает этот TCP запрос, включающий в себя `SYN` флаг, отсылается ответ с флагами `SYN` и `ASK`.
|
|
3. Клиент получает ответ и отправляет подтверждение с флагом `ASK`
|
|
![[Pasted image 20250416202446.png]]![[Pasted image 20250416202511.png]]
|
|
Каким образом это связано с работой nmap? Очень просто. Чтобы понять, работает ли порт или нет, nmap пытается установить **TCP** соединение и отправить `SYN` флаг. Если nmap проучает `SYN\ASK` ответ, это значит что порт открыт. Nmap помечает его открытым и завершает рукопожатие отправкой `ASK` флага.
|
|
|
|
Если же nmap получает ответ с флагом `RST` (Reset), то это означает что порт закрыт.
|
|
|
|
![[Pasted image 20250416203106.png]]
|
|
Если же открыт фаервол, обычно он просто роняет подключение. Тоесть, **nmap** отправляет `ASK` флаг, но в ответ ничего не получает. В данном случае порт помечается как **filtered**.
|
|
|
|
## SYN scans `-sS`
|
|
|
|
Так же как и TCP сканирование, SYN использует подключение к TCP портам, но работает немного иначе. Этот вид сканирования часто называют скрытым.
|
|
|
|
Если TCP сканирование полностью следует ***Трехстороннему рукопожатию***, то **SYN** сканирование после ответа от сервера с флагами `SYN\ASK` отпрвляет флаг `RST` обрывая соединение.
|
|
![[Pasted image 20250417102631.png]]![[Pasted image 20250417102751.png]]
|
|
Данный вид сканирование имеет множество приемуществ для нас как для хакеров:
|
|
1. Он может использоваться для обхода старых систем обнаружения, которым необходимо ***полное трехстороннее рукопожатие***.
|
|
2. **SYN** сканирование не логируется приложениями, открытыми на портах (это является стандартной практикой логгировать соединение когда оно будет установленно)
|
|
3. **SYN** сканирование банально быстрее.
|
|
|
|
Конечно есть некоторое количество минусов:
|
|
1. Необходимо запускать с правами админа (sudo) что бы оно работало нормально на линуксе, так как SYN сканирование создает сырые пакеты, что является привелегией админа.
|
|
2. Нестабильные сервисы иногда падают в процессе сканирования, это может быть проблемой если тестируется прод.
|
|
|
|
Не считая способа поиска открытых портов, в основном работа **TCP** сканирования и **SYN** сканирования идентичны.
|
|
|
|
## UDP сканирование
|
|
|
|
В отличие от TCP, у UDP нет никакого подтверждения о получении пакета. Буквально отсылается пакет, с надеждой на то, что он был получен. Это делает его широкоиспользуемым там, где нужна скорость (например - видеотрансляции). Но отсутствие подтверждения получения пакета сильно услажняет возможность сканирования.
|
|
|
|
Когда пакет отсылается на открытый UDP порт, ответа не должно последовать. Если это так и есть, то **nmap** помечает порт как открытый или отфильтрованный.
|
|
|
|
Если же пакет был отправлен на закрытый UDP порт, то назад возвращается **ICMP (ping)** пакет, содержащий сообщение что порт не доступен. В этом случае nmap помечает порт как закрытый.
|
|
|
|
UDP сканирование достаточно медленное, поэтому рекомендуется ипользовать `--top-ports <number>` флаг при сканировании.
|
|
```bash
|
|
nmap -sU --top-ports 20 <target>
|
|
```
|
|
Данная команда будет сканировать топ 20 самых используемых UDP портов.
|
|
|
|
## NULL FIN Xmas TCP port scan
|
|
|
|
Данные типы сканирования используются гораздо реже чем те, которые мы рассмотрели ранее, и поэтому не будем сильно останавливаться на них.
|
|
|
|
***NULL Scans***
|
|
**NULL** сканирование, флаг `-sN`, отправляет TCP запрос без заданных флагов. Если порт закрыт, то вернется `RST`.
|
|
![[Pasted image 20250417111734.png]]
|
|
|
|
***FIN Scans***
|
|
**FIN** сканирование, флаг `-sF` отправляет TCP запрос с флагом завершения `FIN`. Если порт закрыт, то вернется `RST`.
|
|
![[Pasted image 20250417112443.png]]
|
|
|
|
***XMAS***
|
|
**Xmass** сканирование, флаг `-sX`, отсылает TCP пакет с флагами `PSH, URG, FIN` Если порт закрыт, то вернется `RST`.
|
|
![[Pasted image 20250417122554.png]]
|
|
|
|
Эти типы сканирования использются для обхода фаерволов, так как многие блокируют входящий TCP трафик, котрый содержит `SYN` флаг. Но не нужно думать что они 100% эффективны в современных системах защиты.
|
|
|
|
## ICMP Network scaning
|
|
|
|
Во время первого соединения с целью, наша первая цель - составление карты сети.
|
|
|
|
Единственная возможность сделать это используя nmap - подготовить "проверку пингом". Nmap отправляет **ICMP** пакет на каждый доступный IP address. Когда получен ответ - ip маркируется как живой.
|
|
|
|
Флаг для вызова `-sn`
|
|
|
|
## NSE (Nmap Scripting Engine)
|
|
|
|
Мощное рассширение, сильно расширяющее возможности nmap. NSE написаны на ***LUA***, и могут быть использованны для множества вещей, начиная с таких как сканирование на уязвимости, заканчивая эксплуатацией этих уязвимостей.
|
|
|
|
Доступно множество категорий, вот некоторые из них:
|
|
1. `safe` - не имеют эффекта на цели
|
|
2. `intrusive` - не безопасны, влияют на цель
|
|
3. `vuln` - поиск уязвимостей
|
|
4. `exploit` - эксплуатация уязвимостей
|
|
5. `auth` - Обход аутентификации (например: получение доступа к анонимному ftp серверу)
|
|
6. `brute` - Подбор паролей и логинов
|
|
7. `discovery` - попытка запроса запущенных сервисов
|
|
|
|
Более подробно можно узнать тут: https://nmap.org/book/nse-usage.html
|
|
|
|
Команда что бы запустить скрипт:
|
|
```bash
|
|
--script=<script-name>
|
|
```
|
|
Что бы передать какой-то аргумент:
|
|
```bash
|
|
--script-args
|
|
```
|
|
Что бы прочитать помощь:
|
|
```bash
|
|
nmap --srcipt-help <script-name>
|
|
```
|