ODAT
ODAT (Oracle Database Attacking Tool) — это инструмент с открытым исходным кодом для тестирования на проникновение, который проверяет безопасность баз данных Oracle удаленно.
Примеры использования ODAT:
- У вас есть прослушивающий удалённо экземпляр Oracle, и вы хотите найти действительные SID и учётные данные для подключения к базе данных
- У вас есть действительная учётная запись Oracle в базе данных, и вы хотите повысить свои привилегии до DBA или SYSDBA
- У вас есть учётная запись Oracle, и вы хотите выполнить системные команды (например, обратную оболочку) для продвижения по операционной системе, на которой размещена база данных
Протестировано на Oracle Database 10g, 11g, 12c, 18c и 19c.
Автономная версия ODAT для Linux доступна на 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):
- Новая опция в модуле all: --nmap-file для загрузки всех баз данных Oracle из выходного файла nmap в формате XML
- Новая опция в модуле all: -l для загрузки всех целей из текстового файла (ip:port или ip на каждой строке)
- В модуле all теперь перед запуском тестов ODAT проверяется TCP-соединение с каждой целью. Для управления тайм-аутом можно использовать --timeout-tcp-check.
- В модуле all теперь для каждой цели выполняется проверка корректной настройки TNS-прослушивателя. Эта проверка выполняется после проверки TCP-соединения.
- Новая глобальная опция: --client-driver. Позволяет задать имя клиента для подключения к базе данных (client_driver из V$SESSION_CONNECT_INFO).
Полезно для приложений, конечные пользователи которых не знают об использовании cx_Oracle. По умолчанию теперь 'sql*plus'.
- ODAT теперь принимает файл sqlnet.ora. Файл по умолчанию находится в conf/. Тайм-аут TCP и OUTBOUND (TNS) соединения теперь по умолчанию установлен на 60 секунд.
- Версия 5.0 (08/02/2021):
- Важный новый модуль: Service Name Guesser, для поиска действительных Service Name. Специализированный модуль с именем snguesser и также интегрирован в модуль all. По умолчанию модуль all теперь после поиска SID ищет все действительные Service Name. SID могут совпадать с Service Name. Если Service Name найден, но SID нет, Service Name может использоваться как SID для подключения.
- Опция --basic-info в модуле search для получения основной технической информации о базе данных/экземпляре. Она получает Service Name, SID, базы данных, статус Oracle Database Vault, статус Java, имя хоста, IP-адрес сервера, политику паролей, текущие системные привилегии, текущие роли, патчи (если >= 12c и пользователь привилегирован) и т.д. Требуются высокие привилегии для получения очень интересной информации (например, политика паролей и статус блокировки).
Возможности
Благодаря ODAT вы можете:
- искать действительный SID на удалённом прослушивателе Oracle Database с помощью:
- атаки по словарю
- атаки перебором
- ALIAS прослушивателя
- искать учётные записи Oracle с использованием:
- атаки по словарю
- каждого пользователя Oracle в качестве пароля (требуется учётная запись перед использованием этой атаки)
- выполнять системные команды на сервере базы данных с помощью:
- DBMS_SCHEDULER
- JAVA
- внешних таблиц
- oradbg
- загружать файлы, хранящиеся на сервере базы данных, с помощью:
- UTL_FILE
- DBMS_XSLPROCESSOR
- внешних таблиц
- CTXSYS
- DBMS_LOB
- загружать файлы на сервер базы данных с помощью:
- UTL_FILE
- DBMS_XSLPROCESSOR
- DBMS_ADVISOR
- удалять файлы с помощью:
- получать привилегированный доступ, используя следующие комбинации системных привилегий (см. справку по командам модуля privesc):
- CREATE ANY PROCEDURE
- CREATE PROCEDURE и EXECUTE ANY PROCEDURE
- CREATE ANY TRIGGER (и CREATE PROCEDURE)
- ANALYZE ANY (и CREATE PROCEDURE)
- CREATE ANY INDEX (и CREATE PROCEDURE)
- отправлять/получать HTTP-запросы с сервера базы данных с помощью:
- сканировать порты локального или удалённого сервера с помощью:
- UTL_HTTP
- HttpUriType
- UTL_TCP
- захватывать аутентификацию SMB через:
- индекс для запуска SMB-соединения
- эксплуатировать некоторые CVE:
- CVE-2012-3137
- получение ключа сеанса и соли для произвольных пользователей
- атака по словарю на сеансы
- CVE-2012-????: аутентифицированный пользователь может изменять все таблицы, которые он может выбирать, даже если обычно он не может их изменять (нет привилегии ALTER).
Этот список не является исчерпывающим.
Ментальная карта – ODAT и пентесты Oracle Database

Поддерживаемые платформы и зависимости
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
- Обновите wiki-страницы в этом репозитории для получения локальной документации ODAT:
cd odat/
git submodule init
git submodule update
-
Загрузите instant client basic, sdk (devel) и sqlplus с веб-сайта Oracle:
-
На данный момент (03/2021) версия 11.2 Instant Client Oracle является наилучшей, если вы хотите сгенерировать автономную версию ODAT с помощью pyinstaller.
Для использования версии разработки 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 для определения переменных env 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
/usr/lib/oracle/19.3/client64/lib/
- Обновите ldpath с помощью:
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
- или установите через pip:
Отлично, если ошибок нет :)
Документация и примеры
Документация и примеры находятся на WIKI.
Пожертвования
Если вы хотите поддержать мою работу пожертвованием, я буду очень признателен:
- Через BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf