ODAT

Exploitation v5.1.1 · 27.04.2022 не обновлялся >2 лет

Oracle Database Attacking Tool — специализированный инструмент пентеста Oracle DB. Функции: перебор SID и учётных данных, выполнение OS-команд через Java/DBMS_SCHEDULER/extproc, чтение/запись файлов через UTL_FILE, повышение привилегий, извлечение хешей паролей.

v5.1.1
27.04.2022 current
Добавлен 13.07.2026 · Обновлён 13.07.2026 · Exploitation
Установка
git clone https://github.com/quentinhardy/odat
cd odat && pip install -r requirements.txt
# Требует Oracle Instant Client
python3 odat.py all -s 192.168.1.10 -p 1521 -d ORCL
переведено ИИ
Квентин ХАРДИ
quentin.hardy@protonmail.com
quentin.hardy@bt.com

ODAT

ODAT (Oracle Database Attacking Tool) — это инструмент для пентестинга с открытым исходным кодом, который тестирует безопасность Oracle баз данных удалённо.

Примеры использования ODAT: * У вас есть Oracle база данных, доступная по сети, и вы хотите найти валидные SID и учётные данные для подключения к ней. * У вас есть действующая учётная запись Oracle в базе данных, и вы хотите повысить свои привилегии, став DBA или SYSDBA. * У вас есть учётная запись Oracle, и вы хотите выполнить системные команды (например, обратный shell), чтобы продвинуться дальше в операционной системе, на которой размещена база данных.

Протестировано на Oracle Database 10g, 11g, 12c, 18c и 19c.

Версия ODAT linux standalone доступна по адресу https://github.com/quentinhardy/odat/releases/. Обратите внимание, что рекомендуется использовать версию для разработки (git clone), ветку master-python3 (версия для Python 3).

История изменений

  • Версия 5.1.1 (27/04/2022):
  • вывод предупреждения при возникновении ошибки "ORA-12519 - TNS:no appropriate service handler found". Эта ошибка может быть вызвана сервером базы данных (прослушивателем), когда установлено слишком много соединений (например, при переборе учётных данных). В этом случае следует использовать параметр --sleep (например, --sleep 0.2).
  • Версия 5.1 (12/03/2021):
  • новый параметр во всех модулях: --nmap-file для загрузки всех Oracle баз данных из XML-файла вывода nmap.
  • новый параметр во всех модулях: -l для загрузки всех целей из текстового файла (ip:port или ip по строке).
  • во всех модулях теперь перед запуском тестов ODAT проверяется TCP-соединение с каждой целью. Для управления значением тайм-аута можно использовать --timeout-tcp-check.
  • во всех модулях теперь выполняется проверка каждой цели на корректную конфигурацию TNS-прослушивателя. Эта проверка выполняется после проверки TCP-соединения.
  • новый глобальный параметр: --client-driver. Позволяет задать имя клиента для подключения к базе данных (client_driver из V$SESSION_CONNECT_INFO). Полезен для приложений, конечные пользователи которых не знают, что используется cx_Oracle. По умолчанию теперь 'sql*plus'.
  • ODAT теперь принимает файл sqlnet.ora. Файл по умолчанию находится в conf/. Теперь тайм-аут для TCP-подключения и исходящего (TNS) подключения по умолчанию установлен на 60 секунд.
  • Версия 5.0 (08/02/2021):
  • Важный новый модуль: Service Name Guesser, для поиска валидных имён сервисов. Конкретный модуль называется snguesser и также интегрирован в модуль all. Теперь модуль all по умолчанию ищет все валидные имена сервисов после поиска SID. SID может совпадать с именем сервиса. Когда найдено имя сервиса, но не SID, имя сервиса может использоваться как SID для подключения.
  • параметр --basic-info в модуле search для получения основной технической информации о базе данных/экземпляре. Он получает имя сервиса, SID, базы данных, статус Oracle Database Vault, статус Java, имя хоста, IP-адрес сервера, политику паролей, текущие системные привилегии, текущие роли, патчи (когда версия >= 12c и пользователь имеет привилегии) и т.д. Для получения очень интересной информации (например, политики паролей и статуса блокировки) требуются высокие привилегии.
  • Обратный shell реализован в модуле DbmsScheduler, когда цель — Windows. Запускает минимальный HTTP-сервер, заставляет Oracle базу данных загрузить код PowerShell и выполнить его удалённо. Пользователь получает интерактивную оболочку PS. Загруженный файл удаляется автоматически.
  • параметр --make-download реализован в DbmsScheduler, чтобы загрузить на цель Windows скрипт/бинарный файл.
  • исправлена ошибка в выводе модуля DbmsScheduler (printOSCmdOutput()).
  • улучшены пояснения в модуле DbmsScheduler (параметры).
  • Версия 4.3 (28/06/2020):
  • новый параметр: --both-ul. Пробовать каждый пароль в нижнем и верхнем регистре, если это не сделано в файле(ах) учётных данных.
  • новый параметр: --random-order. Тестировать учётные записи в случайном порядке. По умолчанию используется порядок из текстового файла.
  • теперь все пароли по умолчанию тестируются в нижнем регистре (файлы учётных записей изменены с верхнего на нижний регистр).
  • добавлены некоторые новые учётные записи.
  • Версия 4.2 (04/02/2020):
  • минимальная интерактивная SQL-оболочка в модуле search.
  • новая возможность для загрузки файлов с помощью DBMS_XSLPROCESSOR.read2clob в модуле DbmsXslprocessor.
  • улучшение для получения удалённой ОС после аутентификации.
  • исправление ошибок (например, размер терминала).
  • Версия 4.1 (01/15/2020):
  • Параметр для подключения с SERVICE NAME вместо SID.
  • Кодировка по умолчанию установлена на UTF-8 для некоторых операций (например, NVARCHAR2 и NCLOB, VARCHAR2 и CLOB).
  • Несколько исправлений ошибок (проблемы с кодировкой).
  • Версия 4.0 (08/10/2019):
  • Odat для python 3, стабильная версия.
  • Версия 3.0 (01/09/2019):
  • Совместимость с Oracle Database 18c.
  • Новый параметр в Java-модуле для указания пути к оболочке (например, /usr/bin/sh в CentOS).
  • Версия 2.3.2 (16/07/2019):
  • Исправление ошибок:
    • внешняя таблица и ложноположительные результаты.
  • Версия 2.3.1 (10/08/2018):
  • Новый параметр в Java-модуле для эксплуатации CVE-2018-3004: позволяет аутентифицированному пользователю произвольно записывать файлы в ОС (Повышение привилегий с обходом встроенной безопасности Oracle JVM). Подробности: http://obtruse.syfrtext.com/2018/07/oracle-privilege-escalation-via.html.
  • Версия 2.3 (06/03/2018):
  • Исправление ошибок:
    • Некоторые учетные данные базы данных не могли быть обнаружены в модуле passwordguesser (когда он сначала пытался подключиться как SYSDBA/SYSOPER). Важное исправление!
    • Отсутствовал вывод PPoutput в модуле smb (спасибо dirkjanm).
    • Ложноположительные результаты в модуле tnspoison.
    • Иногда не удавалось получить версию из VSNNUM.
  • Улучшения:
    • Улучшение производительности при переборе учётных записей.
    • Параметр для подключения с помощью TNS Connection String.
    • Новые простые учетные данные в файле accounts.
    • Улучшенный метод чтения файлов в модуле dbmsLob (спасибо omair2084).
  • Версия 2.2.1 (12/04/2017):
  • Исправление ошибок:
    • Версия в tnscmd (инфо).
    • Внешний модуль (Перехват ошибки Oracle).
    • Перехват ошибки при "не удалось подключиться к серверу".
    • Tnscmd: "Для сервера SID необходимо указать параметр '-d SID'".
    • Исправление ошибки TypeError в модуле tnspoison.
    • Модуль TNS poisoning, когда порт!=1521 (ошибка целочисленного типа).
  • Улучшения:
    • Новые SID.
  • Версия 2.2 (25/03/2016):
  • Новый модуль (tnspoison) для эксплуатации атаки отравления TNS-прослушивателя (CVE-2012-1675). Огромное спасибо Joxean Koret и donctl.
  • Некоторые исправления ошибок.
  • Улучшенное меню справки.
  • Страницы WIKI в репозитории ODAT.
  • Версия 2.1 (04/03/2016) :
  • Новый модуль (cve) для эксплуатации некоторых CVE (Common Vulnerabilities and Exposures). На данный момент реализована CVE-2012-3137 (возможно, это число, я не уверен...): Аутентифицированный пользователь может изменять все таблицы, которые он может выбирать (SELECT), даже если обычно он не может их изменять (нет привилегии ALTER).
  • новый параметр (--accounts-files) для атаки удалённой аутентификации, который использует 2 отдельных файла: список логинов и список паролей.
  • Вывод паролей в формате 10g для совместимости с oclHashcat.
  • исправление ошибок (прослушивание с помощью nc).
  • Версия 2.0 (21/02/2016) :
  • Новый модуль (privesc) для использования системных привилегий пользователя Oracle (например, CREATE ANY PROCEDURE) для получения привилегированного доступа (т.е. DBA). Системные привилегии, которые может использовать ODAT в этой версии:
    • CREATE ANY PROCEDURE: выполнение произвольных запросов с привилегиями APEX_040200 (например, изменение паролей пользователей Oracle).
    • CREATE PROCEDURE и EXECUTE ANY PROCEDURE: выполнение произвольных запросов от имени SYS (например, предоставление роли DBA пользователю).
    • CREATE ANY TRIGER (и CREATE PROCEDURE): выполнение произвольных запросов от имени SYS (например, предоставление роли DBA пользователю).
    • ANALYZE ANY (и CREATE PROCEDURE): выполнение произвольных запросов от имени SYS (например, предоставление роли DBA пользователю).
    • CREATE ANY INDEX (и CREATE PROCEDURE): выполнение произвольных запросов от имени SYS (например, предоставление роли DBA пользователю).
  • Модуль privesc может быть использован для получения всех предоставленных системных привилегий и ролей. Он показывает системные привилегии, которые можно использовать для получения привилегированного доступа.
  • новый параметр (-vvv) для отображения SQL-запросов, отправляемых ODAT, в отладке.
  • автономная версия перенесена в releases (https://github.com/quentinhardy/odat/releases/).
  • Версия 1.6 (14/07/2015) :
  • новая возможность для определения уязвимости цели к отравлению TNS (CVE-2012-1675).
  • новый модуль с именем unwrapper для распаковки обёрнутого исходного кода PL/SQL из файла или удалённой базы данных.
  • выполнены некоторые улучшения.
  • Версия 1.5 (17/03/2015) :
  • новый модуль с именем search для поиска по именам столбцов
  • внесены некоторые улучшения (например, вывод таблиц)
  • новый параметр: кодировка вывода
  • Версия 1.4 (07.12.2014) :
  • исправлены некоторые ложные срабатывания
  • улучшен модуль CVE-2012-3137: проверка возможности эксплуатации уязвимости стала проще
  • Версия 1.3 (07.10.2014) :
  • добавлен параметр -C в модуль all. Этот модуль можно использовать для работы с файлом, содержащим учетные данные (отключает параметры -U и -P)
  • добавлен модуль tnscmd для получения алиаса TNS, версии базы данных (благодаря VSNNUM) и статуса TNS
  • исправление ошибки: для параметра -s теперь можно указывать имя сервера
  • Версия 1.2 (08.08.2014) :
  • добавлен модуль SMB для перехвата аутентификации SMB
  • добавлен параметр (SHOW_SQL_REQUESTS_IN_VERBOSE_MODE) в файле Constants.py для отображения SQL-запросов, отправляемых на сервер базы данных
  • Версия 1.1 (28.07.2014) :
  • добавлен модуль DBMS_LOB, полезный для загрузки файлов, хранящихся на удаленном сервере, через Oracle Database.
  • исправление ошибки: исходный код Java: "getenv больше не поддерживается, используйте properties и -D вместо этого"
  • Версия 1.0 (26.06.2014) :
  • первая версия ODAT.

Возможности

Благодаря ODAT вы можете:

  • искать валидный SID на удалённом прослушивателе Oracle Database с помощью:
  • атаки по словарю
  • атаки методом полного перебора
  • АЛИАСА прослушивателя
  • искать учетные записи Oracle с помощью:
  • атаки по словарю
  • использования каждого пользователя Oracle в качестве пароля (перед этой атакой необходима учетная запись)
  • выполнять системные команды на сервере базы данных с помощью:
  • DBMS_SCHEDULER
  • JAVA
  • внешних таблиц
  • oradbg
  • загружать файлы, хранящиеся на сервере базы данных, с помощью:
  • UTL_FILE
  • DBMS_XSLPROCESSOR
  • внешних таблиц
  • CTXSYS
  • DBMS_LOB
  • выгружать файлы на сервер базы данных с помощью:
  • UTL_FILE
  • DBMS_XSLPROCESSOR
  • DBMS_ADVISOR
  • удалять файлы с помощью:
  • UTL_FILE
  • получать привилегированный доступ, используя следующие комбинации системных привилегий (смотрите справку по командам модуля privesc):
  • CREATE ANY PROCEDURE
  • CREATE PROCEDURE и EXECUTE ANY PROCEDURE
  • CREATE ANY TRIGER (и CREATE PROCEDURE)
  • ANALYZE ANY (и CREATE PROCEDURE)
  • CREATE ANY INDEX (и CREATE PROCEDURE)
  • отправлять/получать HTTP-запросы с сервера базы данных с помощью:
  • UTL_HTTP
  • HttpUriType
  • сканировать порты локального или удалённого сервера с помощью:
  • UTL_HTTP
  • HttpUriType
  • UTL_TCP
  • перехватывать аутентификацию SMB через:
  • индекс для вызова SMB-соединения
  • эксплуатировать некоторые CVE:
  • CVE-2012-3137
    • получение ключа сессии и соли для произвольных пользователей
    • атака по словарю на сессии
  • CVE-2012-????: Аутентифицированный пользователь может изменять все таблицы, которые он может выбирать, даже если он обычно не может их изменять (без привилегии ALTER).
  • CVE-2012-1675 (известная как атрава отравления TNS)
  • искать по именам столбцов с помощью модуля search:
  • поиск шаблона (например, password) в именах столбцов
  • распаковывать исходный код PL/SQL (10g/11g и 12c)
  • получать системные привилегии и предоставленные роли. Также можно получить привилегии и роли предоставляемых ролей
  • выполнять произвольные SELECT-запросы (так называемая минимальная SQL-оболочка)

Этот список не является исчерпывающим.

Карта ума - ODAT и пентесты Oracle Database

Alt text

Поддерживаемые платформы и зависимости

ODAT совместим только с Linux.

Существует автономная версия, чтобы не устанавливать зависимости (см. https://github.com/quentinhardy/odat/releases/). Автономная версия ODAT была создана с помощью pyinstaller.

Если вы хотите установить на свой компьютер версию для разработки, необходимы следующие инструменты и зависимости: * Язык: Python 3 * Зависимости Oracle: * Instant Oracle basic * Instant Oracle sdk * Библиотеки Python: * cx_Oracle * passlib * pycrypto * python-scapy * python-libnmap (новая с python 5.1)
* colorlog (рекомендуется) * termcolor (рекомендуется) * argcomplete (рекомендуется) * pyinstaller (рекомендуется)

Установка (опционально, для версии для разработки)

Этот раздел описывает, как установить instantclient, CX_Oracle и некоторые другие библиотеки Python в Ubuntu для использования версии ODAT для разработки. Не забывайте, что существует автономная версия ODAT по адресу https://github.com/quentinhardy/odat/releases/: Для использования автономной версии установка чего-либо не требуется

  • Клонируйте репозиторий для получения исходного кода ODAT:
git clone https://github.com/quentinhardy/odat.git
  • Обновите страницы вики в этом репозитории, чтобы получить документацию ODAT локально:
cd odat/
git submodule init
git submodule update
  • Загрузите instant client basic, sdk (devel) и sqlplus с веб-сайта Oracle:
  • X64: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
  • X86: http://www.oracle.com/technetwork/topics/linuxsoft-082809.html

  • В настоящее время (03/2021) для генерации автономной версии ODAT с помощью pyinstaller лучше всего подходит версия Oracle Database instant client 11.2. Для использования версии ODAT для разработки можно использовать последнюю версию клиента Oracle (например, версию 19).

  • Установите пакеты python3-dev, alien и libaio1 (для sqlplus):

sudo apt-get install libaio1 python3-dev alien python3-pip
  • Сгенерируйте DEB-файлы из RPM-файлов с помощью:
sudo alien --to-deb oracle-instantclient19.3-basic-???.x???.rpm
sudo alien --to-deb oracle-instantclient19.3-devel-???.x???.rpm
  • Установите instant client basic, sdk и sqlplus:
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
  • Вставьте эти строки в файл /etc/profile для определения переменных окружения Oracle:
export ORACLE_HOME=/usr/lib/oracle/19.3/client64/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=${ORACLE_HOME}bin:$PATH
  • Перезапустите сеанс (для применения переменных окружения)

  • Создайте файл /etc/ld.so.conf.d/oracle.conf и добавьте путь к домашней директории Oracle:

/usr/lib/oracle/19.3/client64/lib/
  • Обновите ldpath с помощью:
sudo ldconfig
  • Установите CX_Oracle
sudo -s
source /etc/profile
pip3 install cx_Oracle
  • Проверьте, что все в порядке:
python3 -c 'import cx_Oracle' 

Эта команда должна просто завершиться без ошибок.

  • Установите некоторые библиотеки Python:
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
  • Скачайте и установите разрабатываемую версию pyinstaller (http://www.pyinstaller.org/) для python 3.
python setup.py install
  • или установите через pip:
pip3 install pyinstaller
  • Запустите ODAT:
./odat.py -h

Хорошая работа, если у вас нет ошибок:)

Документация и примеры

Документация и примеры находятся в WIKI

Пожертвования

Если вы хотите поддержать мою работу, сделав пожертвование, я буду очень признателен:

  • Через BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf
Комментарии
Войдите, чтобы оставить комментарий