Подключение к СУБД. Получение SID базы данных

В предыдущей главе мы рассмотрели уязвимости службы Листенера. Некоторые из них позволяют получить удаленный доступ к серверу и выполнять произвольные команды в СУБД, другие дают нам дополнительную информацию, полезную для проведения атаки. Как бы то ни было, главной целью является подключение к СУБД, и если в службе Листенера нет перечисленных в главе 2 уязвимостей, позволяющих получить контроль над СУБД или над сервером, то нам ничего не остается, кроме как попытаться подключиться к самой СУБД. Для подключения к СУБД Oracle необходимо знание пяти параметров:

  • ? IP-адрес сервера;
  • ? порт службы TNS Listener;
  • ? системный идентификатор (System Identifier [SID]) или имя сервиса (Service Name);
  • ? имя пользователя;
  • ? пароль.

SID

Каждый экземпляр базы данных идентифицируется с помощью SID (System IDentifier - системный идентификатор). Экземпляр - это понятие, логически включающее все те компоненты, которые необходимы для доступа к информации в БД. SID состоит из алфавитно-цифровых символов, хранится в переменной среды ORACLE_SID и используется утилитами и сетевыми компонентами для доступа к СУБД.

SERVICE NAME

Имя сервиса - это сравнительно новое понятие, введенное начиная с СУБД Oracle 8i. SERVICE_NAMES определяют одно или ряд имен для подключения к одному экземпляру базы данных, то есть можно указать несколько имен сервиса, ссылающихся на один экземпляр, с различными настройками.

Знание того и другого значения поможет нам подключиться к СУБД.

SID и SERVICE_NAME

Получение IP-адреса и порта не вызывают каких-либо затруднений. Что касается SID базы данных или SERVICE_NAME, то в старых версиях их можно получить при помощи утилиты lsnrctl. Для этого достаточно воспользоваться командой services;

LSNRCTL> services

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))

Services Summary...

Service "PLSExtProc" has 1 instance(s).

Instance "PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service...

Service "orcl" has 1 instance(s).

Instance "orcl", status READY, has 1 handler(s) for this service...

The command completed successfully LSNRCTL>

В выводе команды мы можем видеть имя сервиса (Service «orcl») и экземпляр базы данных, он же - SID (Instance «orcl»). В нашем случае они совпадают, но это бывает не всегда.

Для того чтобы подключиться к СУБД, зная имя сервиса, а также имя пользователя и пароль можно воспользоваться утилитой sqlplus, пример запуска которой приведен ниже.

С: >sqlplus system/ Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script /orcl

SQL*Plus: Release 10.1.0.5.0 - Production on Tue Aug 26 17:18:23 2008

Copyright (с) 1982, 2005, Oracle. All rights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

В случае если SID и SERVICE NAME не совпадают и мы знаем только SID, то для того, чтобы подключиться к СУБД, следует в первую очередь прописать данные, необходимые для подключения (connection descriptor) в конфигурационном файле tnsnames.ora.

ORCL_192.168.40.33 =

  • (DESCRIPTION =
  • (ADDRESS_LIST =
  • (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.40.33)(PORT = 1521))) (CONNECT_DATA =
  • (SID = ORCL)
  • (SERVER = DEDICATED) )

)

В результате чего у нас будет создан алиас (orcl_192.168.40.33) для подключения к СУБД, который мы сможем использовать для подключения при помощи утилиты sqlplus (при условии что нам известно имя пользователя и пароль):

С: >sqlplus system/sh2kerr@orcl_192.168.40.33

SQL*Plus: Release 10.1.0.5.0 - Production on Tue Aug 26 17:18:23 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

Таким образом, нашей первостепенной целью является получение SID или SERVICE NAME базы данных.

Получение SID базы данных

Как уже было сказано выше, получить SID можно при помощи утилиты Isnrctl, точнее, можно было в старых версиях СУБД. В случае если мы имеем дело с версией СУБД Oracle 10g R1 и выше, то в ней по умолчанию включена опция LOCALOSAUTHENTICATION, и командой services или status получить SID не удастся (рис. 3-1), тем самым доступ к СУБД будет осложнен.

Попытка выполнить команду status в версии Oracle 10д

Рис. 3-1. Попытка выполнить команду status в версии Oracle 10д

Аналогичная ситуация произойдет в случае установки пароля на Листенер версии 10g R2 и выше, там команды services или status также не выдают SID (точнее, эти команды запрещены вообще). Но даже в случае защиты службы Листе- нера в новых версиях существует множество способов получения имени базы данных.

Вопрос альтернативных подходов к определению SID базы данных является весьма актуальным и может стать первым шагом на пути к получению административного доступа ко всей СУБД. В связи с этим, автором были проведены исследования в этой области в результате чего были изучены существующие методы и найдено несколько новых, которые будут представлены в этой главе. Рассмотрим, какие способы получения SID существуют на данный момент и насколько вероятно использование этих способов на практике. Все существующие способы можно разбить на три группы:

  • ? подбор SID;
  • ? утечки информации из сторонних приложений;
  • ? комбинированные методы с использованием Data Mining.
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >