Пентест стенда через Nmap и Metasploit: где я терял находки и как это исправить

На третьей лабораторной я отсканировал Metasploitable 2, нашёл 23 открытых порта, эксплуатировал бэкдор в vsftpd — и через два дня не смог воспроизвести результат. Вывод Nmap не сохранил, название модуля Metasploit записал с ошибкой, а скриншот консоли перезаписался следующим заданием. Знакомо? Эта ситуация повторялась на занятиях настолько часто, что я начал отдельно фиксировать, в каких именно точках новички теряют данные. Статья — результат этих наблюдений: полный цикл пентеста виртуального стенда с разбором каждого шага и тех мест, где находки исчезают бесследно.
Виртуальная лаборатория для пентеста: что поднимаем
Стенд для пентеста — изолированная среда из двух виртуальных машин: одна атакует, другая — цель. Смысл простой: отработать приёмы тестирования на проникновение без юридических рисков и без последствий для реальной инфраструктуры.
Для этого разбора нужны:
- Kali Linux — дистрибутив с предустановленными инструментами для пентеста: Nmap, Metasploit Framework, sqlmap и ещё около 600 утилит. Атакующая машина.
- Metasploitable 2 — специально уязвимая версия Ubuntu Linux от Rapid7. По официальному руководству Rapid7 (Metasploitable 2 Exploitability Guide), образ содержит десятки намеренно оставленных уязвимостей: бэкдоры в FTP-сервере, неправильно настроенный NFS (Network File System — сетевая файловая система, позволяющая монтировать удалённые каталоги), открытые r-сервисы (rlogin, rsh) с доступом без пароля.
Что нужно для повторения: VirtualBox или VMware (минимум 8 ГБ RAM на хосте — 4 ГБ для Kali, 2 ГБ для Metasploitable), скачанные образы обеих систем. Обе машины — в одной виртуальной сети (Host-Only adapter), чтобы видели друг друга, но оставались изолированы от интернета и вашей домашней сети.
Почему Metasploitable 2, а не третья версия? Metasploitable 3 требует Vagrant и Packer для сборки, предполагает продвинутые навыки администрирования. Для первого прохода «сканирование → эксплуатация → документация» вторая версия проще в установке и достаточна по количеству уязвимостей.
Первое действие после запуска обеих машин: залогиньтесь в Metasploitable 2 (логин msfadmin, пароль msfadmin) и выполните ifconfig, чтобы увидеть IP-адрес цели. Запишите этот адрес — он понадобится для каждой последующей команды. На Host-Only адаптере VirtualBox адрес обычно начинается с 192.168.56.x.
Сканирование сети Nmap: от первого запуска до сохранённого отчёта
Nmap (Network Mapper) — сетевой сканер, который определяет доступные хосты, открытые порты, работающие сервисы и их версии. Если вы встречали аббревиатуру MITRE ATT&CK — это открытая база тактик и техник атак, где каждая техника имеет свой идентификатор (T-код). Сканирование Nmap относится сразу к двум техникам: Active Scanning (T1595, тактика Reconnaissance — разведка) и Network Service Discovery (T1046, тактика Discovery — обнаружение сервисов в уже доступной сети). Зачем это знать: профессиональные отчёты о пентесте привязывают каждое действие к конкретной технике ATT&CK, и привыкать к этому стоит с первого стенда.
Без результатов сканирования вы не знаете, что атаковать. Это первый этап любого пентеста — и именно здесь чаще всего теряются данные.
Определение сервисов и сохранение результатов
Запустите Kali и откройте терминал. Допустим, IP Metasploitable 2 — 192.168.56.101. Перед сканированием создайте рабочую директорию: mkdir -p ~/pentest/ms2/scans.
Команда для полного сканирования: nmap -sV -sC -p- 192.168.56.101 -oA ~/pentest/ms2/scans/full. Разберём каждый флаг:
-sV— определяет версии сервисов на открытых портах. Без него вы увидите «порт 21 открыт», с ним — «vsftpd 2.3.4». Разница критическая: номер версии определяет, какие эксплойты применимы.-sC— запускает набор стандартных NSE-скриптов (Nmap Scripting Engine — встроенный движок автоматизированных проверок). Скрипты собирают дополнительную информацию: баннеры сервисов, поддерживаемые методы аутентификации, доступные ресурсы.-p-— сканирует все 65535 TCP-портов. По умолчанию Nmap проверяет только топ-1000 самых популярных. На Metasploitable 2 это значит пропустить как минимум 5–7 портов с уязвимыми сервисами.-oA ~/pentest/ms2/scans/full— сохраняет результат в три формата одновременно:.nmap(текст для чтения),.xml(для импорта в Metasploit и другие инструменты),.gnmap(для поиска черезgrep).
Сканирование займёт 3–10 минут. По руководству Rapid7, Metasploitable 2 содержит около 30 открытых TCP-портов. Фрагмент вывода:
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
22/tcp open ssh OpenSSH 4.7p1
23/tcp open telnet Linux telnetd
80/tcp open http Apache httpd 2.2.8
445/tcp open netbios-ssn Samba smbd 3.X
6667/tcp open irc UnrealIRCd
Как убедиться, что данные сохранились: выполните ls ~/pentest/ms2/scans/. В папке должны появиться три файла: full.nmap, full.xml, full.gnmap. Если папка не существовала на момент запуска Nmap, сканер выдаст ошибку записи — и результат уйдёт только в терминал. А оттуда он исчезнет через десять минут прокрутки.
Первая точка потери данных. Запуск nmap 192.168.56.101 без флагов -oA и без -sV. Результат виден в терминале, но буфер прокручивается — и данные пропадают. Я попадал в эту ловушку минимум трижды: помнил, что порт 8180 был открыт, но какой сервис — уже нет.
NSE-скрипты для поиска уязвимостей на стенде
После общего сканирования полезно запустить скрипты из категории vuln. Они проверяют конкретные CVE (Common Vulnerabilities and Exposures — единый идентификатор уязвимости вроде CVE-2014-3704; по этому номеру можно найти описание, затронутые версии и доступные эксплойты) на найденных сервисах. В терминах MITRE ATT&CK это Vulnerability Scanning (T1595.002) — уже не просто обнаружение версий, а прицельный поиск слабых мест.
Команда: nmap --script vuln -p 21,80,445,6667 192.168.56.101 -oN ~/pentest/ms2/scans/vuln.txt
Флаг -p 21,80,445,6667 ограничивает скан четырьмя портами (а не всеми 65535), что экономит время. Флаг -oN сохраняет текстовый вывод.
Вторая точка потери данных. Запуск --script vuln на всех портах без ограничения. На Metasploitable 2 с 30 открытыми портами такое сканирование идёт 30–40 минут, часть скриптов может зависнуть — и новичок прерывает процесс, не дождавшись результата. Частичный вывод без флага -oN снова теряется в прокрутке терминала.
Эксплуатация уязвимостей Metasploit: пошаговый разбор
Metasploit Framework — фреймворк для поиска и запуска эксплойтов (программ, использующих конкретную уязвимость для получения доступа к системе). Основной интерфейс — msfconsole, консольная оболочка с командной строкой. В MITRE ATT&CK эксплуатация сервисов стенда попадает под технику Exploit Public-Facing Application (T1190, тактика Initial Access — первоначальный доступ): атакующий использует уязвимость в сетевом сервисе, доступном по сети.
Metasploit предустановлен в Kali Linux. Перед первым запуском инициализируйте базу данных командой sudo msfdb init — без этого Metasploit не сможет сохранять данные о хостах и сессиях. Проверить статус базы: msfdb status. Этот шаг часто пропускают, а потом удивляются, почему команда hosts в msfconsole ничего не показывает.
vsftpd 2.3.4 — бэкдор на порту 21
По руководству Rapid7, в исходный код vsftpd 2.3.4 кто-то внедрил бэкдор (скрытый вход). Механизм забавный: если имя пользователя FTP содержит последовательность :) (да, смайлик), сервер открывает shell на порту 6200. Бэкдор обнаружили и удалили из официальных репозиториев, но он успел попасть на множество серверов — и намеренно оставлен на Metasploitable 2 для обучения.
Пошаговая эксплуатация в msfconsole:
- Запустите
msfconsole(загрузка занимает 15–30 секунд, появится баннер с версией). - Найдите модуль: введите
search vsftpd. В выводе появится строкаexploit/unix/ftp/vsftpd_234_backdoor. - Выберите модуль:
use exploit/unix/ftp/vsftpd_234_backdoor. - Укажите цель:
set RHOSTS 192.168.56.101. - Проверьте настройки:
show options. Все поля с пометкойRequired: yesдолжны быть заполнены. - Запустите:
run.
Ожидаемый результат: строка Command shell session 1 opened (192.168.56.102:xxxxx -> 192.168.56.101:6200). Вы получили удалённый shell на целевой машине. Введите id — ответ uid=0(root) gid=0(root) означает полный доступ с правами суперпользователя. Root через смайлик в логине — звучит нелепо, но именно так выглядят реальные бэкдоры.
Если сессия не открылась: проверьте связь между машинами командой ping 192.168.56.101 из Kali. Пинг не проходит — проблема в настройках сети VirtualBox. Обе VM должны использовать один и тот же Host-Only адаптер.
Третья точка потери данных. После получения shell новичок вводит пару команд (id, whoami, cat /etc/shadow), радуется результату — и закрывает терминал. Сессия потеряна. Нет скриншота, нет записи, какой модуль использовался. В msfconsole есть команда sessions -l, показывающая все активные сессии — но только пока консоль открыта.
UnrealIRCd — бэкдор через IRC на порту 6667
Ещё один вектор из руководства Rapid7: IRC-демон (Internet Relay Chat — протокол текстового общения, предшественник современных мессенджеров) UnrealIRCd на Metasploitable 2 тоже содержит бэкдор. Если отправить серверу строку, начинающуюся с символов AB, за которой следует системная команда — сервер её выполнит. Бэкдор оставался незамеченным несколько месяцев в официальном исходном коде.
В MITRE ATT&CK это Exploitation of Remote Services (T1210, тактика Lateral Movement — перемещение по сети). Формально T1210 предполагает, что атакующий уже имеет точку присутствия в сети; на изолированном стенде мы фактически используем его как вектор первоначального доступа. При составлении отчёта для реальной инфраструктуры технику следует маппить по фактическому контексту атаки — запомните этот нюанс.
Последовательность в msfconsole: use exploit/unix/irc/unreal_ircd_3281_backdoor, затем set RHOSTS 192.168.56.101, затем run.
Результат: Command shell session 2 opened. Команда id снова покажет uid=0(root).
Два эксплойта — два root-shell’а за 10 минут. В реальном пентесте это два критических finding’а (находки) в отчёте. Но если вы не зафиксировали, какие модули сработали, с какими параметрами и какой вывод получили — при написании отчёта через неделю восстановить детали будет мучительно.
Ошибки при пентесте новичков: где теряются находки
За время проведения лабораторных занятий по обучению пентесту я собрал пять типичных точек, где теряются данные. Не «плохо сканируют» — а именно теряют уже найденное.
1. Nmap без флага сохранения. Повторю: это ошибка номер один по частоте. Каждый второй новичок на первом занятии запускает голый nmap <IP> без -oA или -oN. Потом пересканирует. Потом ещё раз.
2. Одна директория для всех проектов. Файлы scan.nmap, scan2.nmap, scan_new_final.nmap через неделю превращаются в кашу. Решение: структура каталогов по проекту — ~/pentest/<имя_цели>/<дата>/ с подпапками scans/, exploits/, notes/, evidence/.
3. Забытый LHOST в Metasploit. Для эксплойтов с reverse-shell (целевая машина подключается обратно к атакующей) нужен параметр LHOST — IP вашей Kali. Рассмотренные выше vsftpd_234_backdoor и unreal_ircd_3281_backdoor используют bind-shell payload (бэкдор сам открывает порт, Metasploit подключается к нему), поэтому LHOST для них не требуется. Но для многих других модулей (например, exploit/multi/samba/usermap_script с reverse-payload) LHOST обязателен. Типичная ситуация: LHOST не задан или задан неверно, эксплойт «запустился», но сессия не открылась. Причину новичок не понимает и переходит к другому модулю. Правило: выполнять show options перед каждым run.
4. Путаница между типами модулей. Metasploit разделяет модули на категории: exploit — для получения доступа через уязвимость, auxiliary — вспомогательные (сканеры, брутфорсеры, фаззеры). Новичок ищет «модуль для SMB», находит auxiliary/scanner/smb/smb_version, запускает — и удивляется отсутствию shell’а. Это сканер, не эксплойт: он возвращает версию Samba, а не открывает доступ. При поиске через search обращайте внимание на колонку Type в выводе.
5. Отсутствие записей о неудачных попытках. Самая неочевидная потеря. Вы попробовали пять модулей — два сработали, три нет. Через два дня повторяете все пять, потому что не записали результат. Отрицательный результат — тоже результат. В реальном пентесте заказчик ожидает информацию не только о том, что сломалось, но и о том, что проверено и устояло.
Методичка по пентесту: как фиксировать каждый шаг
Методичка — не формальность для сдачи курса. Это рабочий документ, который превращает хаотичное «потыкал — что-то получилось» в воспроизводимый процесс. Разберём, как проводить пентест пошагово и не потерять ни одной находки.
Шаг 1. Создать структуру проекта перед первым сканированием. Команда mkdir -p ~/pentest/ms2/{scans,exploits,notes,evidence} создаёт четыре папки. scans — для выводов Nmap. exploits — для скриптов и конфигураций. notes — для текстовых заметок. evidence — для скриншотов и логов сессий.
Шаг 2. Вести журнал в текстовом файле. Создайте файл ~/pentest/ms2/notes/journal.md и записывайте каждое действие:
## 2025-10-15 19:30 — Начальное сканирование
Цель: 192.168.56.101 (Metasploitable 2)
Команда: nmap -sV -sC -p- 192.168.56.101 -oA scans/full
Результат: 30 открытых TCP-портов
Интересное: vsftpd 2.3.4 (порт 21), UnrealIRCd (6667)
## 2025-10-15 20:00 — Эксплуатация vsftpd
Модуль: exploit/unix/ftp/vsftpd_234_backdoor
RHOSTS: 192.168.56.101 → shell (uid=0), session 1
Скриншот: evidence/vsftpd_shell.png
Каждая запись: дата, точная команда, результат, ссылка на файл с доказательством. Три минуты на запись экономят час на восстановление.
Шаг 3. Использовать script для записи сессии терминала. Перед началом работы выполните script ~/pentest/ms2/evidence/session_$(date +%F_%H%M).log. Утилита script (стандартная в Linux) записывает всё, что происходит в терминале — нажатия клавиш, вывод команд, ошибки. Для завершения записи — exit или Ctrl+D. Даже забытый вывод не потеряется.
Шаг 4. В msfconsole включить spool. Команда spool ~/pentest/ms2/evidence/msf_log.txt активирует логирование всех команд и их результатов внутри Metasploit. Аналог script, но работает только внутри msfconsole.
Шаг 5. Фиксировать отрицательные результаты. Модуль не сработал — записать название, ошибку и предполагаемую причину. «Модуль exploit/multi/samba/usermap_script, ошибка Connection refused, вероятно сервис перезапущен» — такая запись предотвращает повторный запуск заведомо неработающего варианта.
Как маппить находки на MITRE ATT&CK
Для учебного отчёта по результатам пентеста полезно привязывать каждое действие к технике из MITRE ATT&CK. Это не академическое упражнение — профессиональные пентестеры строят отчёты именно так, и привыкать к этому формату стоит с самого начала.
Пример маппинга для нашего стенда:
| Действие | Техника MITRE ATT&CK | Тактика |
|---|---|---|
Сканирование nmap -sV -sC -p- |
Network Service Discovery (T1046) | Discovery |
NSE-скрипты --script vuln |
Vulnerability Scanning (T1595.002) | Reconnaissance |
| Эксплуатация vsftpd backdoor | Exploit Public-Facing Application (T1190) | Initial Access |
| Эксплуатация UnrealIRCd backdoor | Exploitation of Remote Services (T1210) | Lateral Movement |
Таблица структурирует отчёт: что вы делали, зачем и как это соотносится с реальными TTP (Tactics, Techniques, Procedures — устоявшаяся аббревиатура для совокупности тактик, техник и процедур атакующих).
Шаблон описания уязвимости для отчёта
Каждая найденная уязвимость в итоговом документе должна выглядеть единообразно. Шаблон:
| Поле | Пример заполнения |
|---|---|
| Название | Бэкдор в vsftpd 2.3.4 |
| Критичность | Критическая (экспертная оценка: неаутентифицированный удалённый root-доступ; формальный CVE/CVSS для бэкдора vsftpd 2.3.4 в NVD не задокументирован) |
| Затронутый сервис | FTP (порт 21, vsftpd 2.3.4) |
| Описание | Версия FTP-сервера содержит бэкдор, открывающий root-shell на порту 6200 |
| Шаги воспроизведения | msfconsole → use exploit/unix/ftp/vsftpd_234_backdoor → set RHOSTS → run |
| Доказательство | evidence/vsftpd_shell.png |
| Рекомендация | Обновить vsftpd до актуальной версии; закрыть порт 21, если FTP не требуется |
| MITRE ATT&CK | T1190 — Exploit Public-Facing Application |
Этот же шаблон работает для SQL-инъекций (A03:2021 Injection по классификации OWASP Top 10 — перечень десяти наиболее критичных рисков веб-приложений), для проблем контроля доступа (A01:2021 Broken Access Control) и для любых других классов уязвимостей. Привыкнете к формату на стенде — в реальном проекте не придётся изобретать структуру с нуля.
Следующий шаг: веб-уязвимости и расширение инструментария
Metasploitable 2 содержит не только сетевые бэкдоры. На порту 80 работает Apache с несколькими уязвимыми веб-приложениями: DVWA (Damn Vulnerable Web Application — намеренно уязвимое веб-приложение для обучения) и Mutillidae. По данным Rapid7, эти приложения включают SQL injection, XSS, CSRF, command injection, file inclusion и другие классы уязвимостей.
Хороший пример того, почему версии и CVE-идентификаторы критичны: по данным NVD (National Vulnerability Database — национальная база уязвимостей США), функция expandArguments в Drupal core версий до 7.32 некорректно строила подготовленные SQL-запросы (CWE-89 — классификация уязвимости типа «внедрение SQL-кода»). В NVD для CVE-2014-3704 официальный CVSS-вектор не заполнен, но показатель EPSS (Exploit Prediction Scoring System — оценка вероятности от 0 до 1, что уязвимость начнут эксплуатировать в ближайшие 30 дней) составляет 0.9997 (percentile 0.9998, Top 1%) — экстремально высокая вероятность эксплуатации. На Exploit-DB доступен проверенный PoC (Proof of Concept — демонстрационный код, подтверждающий эксплуатируемость) — EDB-34992, позволяющий создать административного пользователя в Drupal через SQL-инъекцию.
Веб-уязвимости — логичный следующий этап после сетевых эксплойтов. Для них понадобятся другие инструменты: Burp Suite для перехвата HTTP-запросов, sqlmap для автоматизации SQL-инъекций. По данным Mandiant M-Trends 2025, эксплуатация уязвимостей — самый распространённый вектор первоначального доступа: 38% всех инцидентов. По данным Verizon DBIR 2025, веб-атаки составляют 26% подтверждённых нарушений. Метрики разные, но вывод один: навыки эксплуатации уязвимостей и анализа веб-приложений — не факультатив.
Отдельно про импорт данных Nmap в Metasploit — это убирает необходимость вручную сопоставлять порты и модули. Команда db_import ~/pentest/ms2/scans/full.xml в msfconsole загружает XML-вывод в базу данных. После этого hosts покажет все обнаруженные хосты, services — все сервисы с версиями. Команда vulns отобразит уязвимости, если вы использовали NSE-скрипты или запускали модули auxiliary/scanner. Работать с базой значительно быстрее, чем перечитывать текстовые файлы в поисках подходящего эксплойта.
На Reddit junior-специалист спрашивает: «Достаточно ли Nmap и Metasploit для полного пентеста?» Нет. Но начинать с двух инструментов и довести их до уверенного уровня — правильная стратегия. Гораздо продуктивнее знать Nmap и Metasploit глубоко (все ключевые флаги, типы модулей, работа с базой данных), чем поверхностно владеть десятком утилит.
Скажу прямо: разница между новичком, который «прошёл лабу», и тем, кто из неё вынес системное знание — в документации. Девять из десяти начинающих на практическом курсе по информационной безопасности запускают Metasploit и получают shell за 15 минут. Но когда через неделю я прошу воспроизвести атаку без подсказок — справляются двое. Остальные «помнят, что что-то запускали». Инструменты — Nmap, Metasploit, sqlmap — это входной барьер, который преодолевается за считанные часы. Реальная ценность — в привычке фиксировать каждый шаг так, чтобы через месяц можно было открыть журнал и точно восстановить цепочку действий от первого сканирования до полученного shell’а. На рынке достаточно людей, которые «умеют запускать msfconsole». Не хватает тех, кто превращает результат сканирования в читаемый отчёт с доказательствами и рекомендациями. Если основы информационной безопасности интересуют не как хобби, а как профессия — на IB Basics этот навык отрабатывается с нуля: не «что такое CIA-триада», а как формировать рабочие артефакты для первых задач.
Эту тему и смежные навыки разбирают на практике в курсе «Специалист по тестированию на проникновение» Codeby Academy.