ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Чужие Статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #3  
Старый 12.11.2007, 21:22
Robin_Hood
Участник форума
Регистрация: 30.10.2006
Сообщений: 238
Провел на форуме:
966901

Репутация: 444
Отправить сообщение для Robin_Hood с помощью ICQ
По умолчанию


Список всех дата файлов
Как уже обсуждалось, имена дата файлов, создаваемых SYSTEM,
SYSAUX, TEMP и UNDO могут быть получены из контрольных файлов. Следующий запрос может быть применен, если любого из них не хватает

SQL> SELECT T.NAME AS "TABLESPACE", D.NAME AS "FILNAME" FROM
V$DATAFILE D, TS$ T WHERE T.TS#=D.TS#;

Любой файл, выведенный как часть tablespaces должен быть скопирован на сервер.

Список всех директорий

Директории используются Oracle для внешнего доступа к файлам. Запрос, указанный ниже покажет путь к файлу в данных директориях:

SQL> SELECT U.NAME AS "OWNER", O.NAME AS "DIRECTORY", D.OS_PATH AS
"PATH" FROM SYS.OBJ$ O, SYS.USER$ U, SYS.DIR$ D WHERE
U.USER#=O.OWNER# AND O.OBJ#=D.OBJ#;

Все файлы с этой директории должны быть скопированы на сервер

Список внешних таблиц
Они также используют директории Oracle. Их содержание должно быть скопировано и исследовано.

SQL> SELECT O.NAME, D.DEFAULT_DIR FROM SYS.OBJ$ O, SYS.EXTERNAL_TAB$
D WHERE D.OBJ# = O.OBJ#;

Системный монитор (SMON) MON_MOD$ Table

Таблица SMON MON_MOD$ table содержит информацию о
The System Monitor (SMON) MON_MOD$ Table о том, какие Действия DML были выполнены в какой таблице.

SQL> SELECT U.NAME AS "OWNER", O.NAME AS "OBJECT", M.OBJ#, M.INSERTS,
M.UPDATES, M.DELETES, M.TIMESTAMP FROM SYS.MON_MODS$ M, SYS.USER$ U,
SYS.OBJ$ O WHERE O.OBJ#=M.OBJ# AND U.USER#=O.OWNER#;

Получение информации о триггерах

Триггеры могут быть используемые взломщиками по механизму бекдора или как логическая бомба, поэтому нуждаются в проверке, особенно те, которые выполняются при загрузке системы, выключении, входе в систему и т.д. Запрос ниже будет содержать список активных триггеров

SQL> SELECT U.NAME AS "OWNER", O.NAME AS "ENABLED_TRIGGER_NAME",
DECODE(T.TYPE#, 0, 'BEFORE',2, 'AFTER','NOTSET') AS "WHEN" FROM
SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND
O.OWNER# = U.USER# AND ENABLED=1;

Изменение “AND ENABLED=1” на “AND ENABLED=0” покажет не активные триггеры.

Поиск включенных триггеров, выполняющихся после запуска системы:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "ENABLED_TRIGGER_NAME" FROM
SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND
O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,1) = 1;

Поиск включенных триггеров, выполняющихся перед запуском системы:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "ENABLED_TRIGGER_NAME" FROM
SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND
O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,2) = 2;

Поиск включенных триггеров, выполняющихся после входа в систему:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "ENABLED_TRIGGER_NAME" FROM
SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND
O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,8) = 8;

Поиск включенных триггеров, перед выходом из системы:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "ENABLED_TRIGGER_NAME" FROM
SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND
O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,16) = 16;

Получить список всех триггеров
SQL> SET LONG 10000000
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "TRIGGER_NAME", T.ACTION# AS
"TEXT" FROM SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE
O.OBJ#=T.OBJ# AND O.OWNER# = U.USER#;

Получить сорс с помощью запроса в таблицу SOURCE$:


SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PROCEDURE", S.SOURCE FROM
SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=12;


Проверка контрольной суммы триггера

Анонимный блок PL/SQL захеширует текст каждого триггера, поэтому данные хеши могут быть сравнены с списком известных. Так можно быстро узнать, какие были изменены:

Код:
DECLARE 
TYPE C_TYPE IS REF CURSOR; 
CV C_TYPE; 
V_ONAME VARCHAR2(30); 
V_OWNER VARCHAR2(30); 
V_OBJID NUMBER:=52296; 
V_HASH NUMBER:=0; 
V_BUFFER LONG(32767); 
CUR NUMBER; 
RES NUMBER; 
POS NUMBER; 
LEN NUMBER; 
BEGIN 
DBMS_OUTPUT.ENABLE(1000000); 
OPEN CV FOR 'SELECT U.NAME,O.NAME,O.OBJ# FROM SYS.OBJ$ O, 
SYS.USER$ U WHERE U.USER# = O.OWNER# AND O.TYPE# = 12 ORDER BY 
U.NAME'; 
LOOP 
FETCH CV INTO V_OWNER,V_ONAME,V_OBJID; 
EXIT WHEN CV%NOTFOUND; 
CUR:=DBMS_SQL.OPEN_CURSOR; 
DBMS_SQL.PARSE(CUR,'SELECT T.ACTION# FROM SYS.TRIGGER$ T  
WHERE T.OBJ# = :1',DBMS_SQL.NATIVE); 
DBMS_SQL.BIND_VARIABLE(CUR, ':1', V_OBJID); 
DBMS_SQL.DEFINE_COLUMN_LONG (CUR, 1); 
RES := DBMS_SQL.EXECUTE_AND_FETCH (CUR); 
IF RES > 0 THEN 
POS:=0; 
V_HASH:=0; 
LOOP 
DBMS_SQL.COLUMN_VALUE_LONG( 
CUR,1,32767,POS,V_BUFFER,LEN); 
EXIT WHEN LEN = 0; 
V_HASH:= V_HASH + SYS.DBMS_UTILITY.GET_HASH_VALUE  
(V_BUFFER,1,1073741824); 
POS := POS + LEN; 
END LOOP; 
DBMS_SQL.CLOSE_CURSOR (CUR); 
END IF; 
DBMS_OUTPUT.PUT_LINE(V_OWNER||'.'||V_ONAME||':'||V_HASH); 
V_BUFFER:=NULL; 
END LOOP; 
CLOSE CV; 

END; 
/

Получится что-то вроде




SYS.OLAPISTARTUPTRIGGER:443575894
SYS.OLAPISHUTDOWNTRIGGER:473426999
SYS.PREVENT_DDL:283296376
SYS.VANISH:797468158
SYSMAN.MGMT_METRIC_COLL_DEL:731772430
SYSMAN.MGMT_SQL_METRIC_TR:91156933




Получение информации о просмотрах Views

Views могут быть использованы атакующим для скрытия информации. Поэтому, текст всех
Views должен быть получен. Особое внимание стоит уделить начинающимся на DBA, особенно
DBA_VIEWS, DBA_USERS, DBA_ROLE_PRIVS, DBA_TAB_PRIVS и DBA_JOBS.

SQL> SET LONG 100000000
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "VIEW", V.TEXT FROM
SYS.VIEW$ V, SYS.OBJ$ O, SYS.USER$ U WHERE O.OBJ#=V.OBJ# AND
O.OWNER#=U.USER# ORDER BY U.NAME;

Проверка контрольной суммы view text
Анонимный блок PL/SQL хеширует view text поэтому, как и в предыдущем случае, хеши могут быть сравнены с списком известных. Таким образом, модифицированные будут определены

Код:
DECLARE 
TYPE C_TYPE IS REF CURSOR; 
CV C_TYPE; 
V_ONAME VARCHAR2(30); 
V_OWNER VARCHAR2(30); 
V_OBJID NUMBER:=52296; 
V_HASH NUMBER:=0; 
V_BUFFER LONG(32767); 
CUR NUMBER; 
RES NUMBER; 
POS NUMBER; 
LEN NUMBER; 
BEGIN 
DBMS_OUTPUT.ENABLE(1000000); 
OPEN CV FOR 'SELECT U.NAME,O.NAME,O.OBJ# FROM SYS.OBJ$ O, 
SYS.USER$ U WHERE U.USER# = O.OWNER# AND O.TYPE# = 4 ORDER BY U.NAME, 
O.NAME'; 
LOOP 
FETCH CV INTO V_OWNER,V_ONAME,V_OBJID; 
EXIT WHEN CV%NOTFOUND; 
CUR:=DBMS_SQL.OPEN_CURSOR; 
 



DBMS_SQL.PARSE(CUR,'SELECT V.TEXT FROM SYS.VIEW$ V WHERE 
V.OBJ# = :1',DBMS_SQL.NATIVE); 
DBMS_SQL.BIND_VARIABLE(CUR, ':1', V_OBJID); 
DBMS_SQL.DEFINE_COLUMN_LONG (CUR, 1); 
RES := DBMS_SQL.EXECUTE_AND_FETCH (CUR); 
IF RES > 0 THEN 
POS:=0; 
V_HASH:=0; 
LOOP 
DBMS_SQL.COLUMN_VALUE_LONG( 
CUR,1,32767,POS,V_BUFFER,LEN); 
EXIT WHEN LEN = 0; 
V_HASH:= V_HASH + SYS.DBMS_UTILITY.GET_HASH_VALUE  
(V_BUFFER,1,1073741824); 
POS := POS + LEN; 
END LOOP; 
DBMS_SQL.CLOSE_CURSOR (CUR); 
END IF; 
DBMS_OUTPUT.PUT_LINE(V_OWNER||'.'||V_ONAME||':'||V_HASH); 
V_BUFFER:=NULL; 
END LOOP; 
CLOSE CV; 
END; 
/

Результат будет похожим на



SYS.DBA_UNUSED_COL_TABS:215069642
SYS.DBA_UPDATABLE_COLUMNS:377298913
SYS.DBA_USERS:958803668
SYS.DBA_USTATS:203495787
SYS.DBA_VARRAYS:670521746
SYS.DBA_VIEWS:49730132



Получение информации обо всех библиотеках[/B]

Библиотеки могут быть использованы как механизм запуска произвольного кода, поэтому нуждаются в исследовании.

SQL> SELECT U.NAME AS "OWNER", O.NAME AS "LIBRARY", L.FILESPEC AS
"PATH" FROM SYS.LIBRARY$ L, SYS.USER$ U, SYS.OBJ$ O WHERE
O.OBJ#=L.OBJ# AND O.OWNER#=U.USER#;

Все DLL, не являющиеся стандартными должны быть скопированы на сервер для исследования


Получение информации о database links


database links могут быть созданы взломщиком для соединения с другим сервером Oracle, Колонка CTIME обозначен когда он был создан


SQL> SELECT U.NAME AS "OWNER", L.NAME AS "LINK", L.HOST, L.USERID,
L.PASSWORDX, L.CTIME FROM SYS.LINK$ L, SYS.USER$ U WHERE
L.OWNER#=U.USER#;


Если хозяин обозначен как “PUBLIC”, link тоже является публичным и может быть использован кем угодно. .





Информация о synonyms.


Они могут быть использованы для влияния на выполнение PL/SQL и скрытия информации. Полный список может быть выведен таким образом:

SQL> SELECT U.NAME AS "OWNER", S.OWNER AS "REAL-OWNER", S.NAME AS
"OBJECT", O.NAME AS "SYNONYM" FROM SYS.USER$ U, SYS.OBJ$ O, SYS.SYN$
S WHERE S.OBJ#=O.OBJ# AND O.OWNER#=U.USER#;



Получение информации о database jobs

Они могут быть использованы для изменений в настройке времени и даты – даже когда атакующий на входил в систему. Также, был опубликован rootkits от Cesar Cerrudo, работающий по данному принципу.

SQL> SELECT JOB, LOWNER, POWNER, COWNER, LAST_DATE, NEXT_DATE, WHAT
FROM SYS.JOB$;


Oracle 10g выпустил the Job Scheduler, и база данных должна использовать ее функционал – информация о заданиях хранится в разных таблицах. Получение списка используемых заданий будет следующим:

SQL> SELECT U.NAME AS "OWNER", O.NAME AS "JOBNAME", J.PROGRAM_ACTION
FROM SYS.USER$ U, SYS.OBJ$ O, SYS.SCHEDULER$_JOB J WHERE
J.OBJ#=O.OBJ# AND O.OWNER#=U.USER#;

Даже если задание было удалено, информация о нем находится в логах, получить можно используя следующий запрос:

SQL> SELECT LOG_ID, LOG_DATE, NAME, OWNER, STATUS FROM
SYS.SCHEDULER$_EVENT_LOG ORDER BY LOG_ID;

Для списка программ(исполняемых, блока PL/SQL, сохраняемые процедуры) ассоциируемых с job scheduler выполняется следующий запрос:

Исполняемые:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PROGRAM-EXECUTABLE",
P.ACTION FROM SYS.USER$ U, SYS.OBJ$ O, SYS.SCHEDULER$_PROGRAM P WHERE
O.OBJ#=P.OBJ# AND U.USER#=O.OWNER# AND BITAND(P.FLAGS,32)=32;

Stored Procedure: сохраняемые процедуры
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PROGRAM-STORED-PROCEDURE",
P.ACTION FROM SYS.USER$ U, SYS.OBJ$ O, SYS.SCHEDULER$_PROGRAM P WHERE
O.OBJ#=P.OBJ# AND U.USER#=O.OWNER# AND BITAND(P.FLAGS,4)=4;

Блок PL/SQL
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PROGRAM-PLSQL-BLOCK",
P.ACTION FROM SYS.USER$ U, SYS.OBJ$ O, SYS.SCHEDULER$_PROGRAM P WHERE
O.OBJ#=P.OBJ# AND U.USER#=O.OWNER# AND BITAND(P.FLAGS,2)=2;

Получения информации об объектах PL/SQL


Процедуры:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PROCEDURE", S.SOURCE FROM
SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=7;

Функции:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PROCEDURE", S.SOURCE FROM
SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=8;

Сборки:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PACKAGE", S.SOURCE FROM
SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=9;

Package bodies:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "PACKAGE-BODY", S.SOURCE
FROM SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=11;

Триггеры:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "TRIGGER", S.SOURCE FROM
SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=12;

Типы:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "TYPE", S.SOURCE FROM
SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=13;

Type bodies:
SQL> SELECT U.NAME AS "OWNER", O.NAME AS "TYPE-BODY", S.SOURCE FROM
SYS.USER$ U, SYS.OBJ$ O, SYS.SOURCE$ S WHERE O.OBJ#=S.OBJ# AND
O.OWNER#=U.USER# AND O.TYPE#=14;

Получение информации о Java objects

Java код может быть загружен в класс как файл класса class file (bytecode), или как Java код, который может быть скопилирован. Код загружается в таблицу JOXFS, а bytecode – в IDL_UB1$.

Получение Java кода

SQL> SELECT U.NAME, O.NAME, S.JOXFTSRC FROM SYS.USER$ U, SYS.OBJ$ O,
X$JOXFS S WHERE O.OBJ# = S.JOXFTOBN AND O.OWNER# = U.USER#;

Контрольная сумма байткода
Атакующий может получить модификацию байткода. Чтобы получить контрольную сумму и сравнить со списком известных можно использовать следующий код:

Код:
DECLARE 
TYPE C_TYPE IS REF CURSOR; 
CV C_TYPE; 
V_ONAME VARCHAR2(30); 
V_OWNER VARCHAR2(30); 
V_OBJID NUMBER:=52296; 
V_HASH NUMBER:=0; 
V_BUFFER RAW(32767); 
CUR NUMBER; 
RES NUMBER; 
POS NUMBER; 
LEN NUMBER; 
BEGIN 
DBMS_OUTPUT.ENABLE(1000000); 
OPEN CV FOR 'SELECT U.NAME,O.NAME,O.OBJ# FROM SYS.OBJ$ O, 
SYS.USER$ U WHERE U.USER# = O.OWNER# AND O.TYPE# = 29 ORDER BY 
U.NAME'; 
LOOP 
FETCH CV INTO V_OWNER,V_ONAME,V_OBJID; 
EXIT WHEN CV%NOTFOUND; 
CUR:=DBMS_SQL.OPEN_CURSOR; 
DBMS_SQL.PARSE(CUR,'SELECT S.PIECE FROM SYS.IDL_UB1$ S 
WHERE S.OBJ# = :1',DBMS_SQL.NATIVE); 
DBMS_SQL.BIND_VARIABLE(CUR, ':1', V_OBJID); 
DBMS_SQL.DEFINE_COLUMN_RAW (CUR, 1, V_BUFFER, 32767); 
RES := DBMS_SQL.EXECUTE_AND_FETCH (CUR); 
IF RES > 0 THEN 
POS:=0; 
V_HASH:=0; 
DBMS_SQL.COLUMN_VALUE_RAW(CUR,1,V_BUFFER); 
V_HASH:= V_HASH + SYS.DBMS_UTILITY.GET_HASH_VALUE 
(V_BUFFER,1,1073741824); 
DBMS_SQL.CLOSE_CURSOR (CUR); 
END IF; 
DBMS_OUTPUT.PUT_LINE(V_OWNER||'.'||V_ONAME||':'||V_HASH); 
V_BUFFER:=NULL; 
END LOOP; 
CLOSE CV; 
END; 
/

Результат будет таков:



SYS./bf8c3870_ConnectionStructHelp:52013415
SYS./f7546018_DatabaseInterface:766489862
SYS./ad32ba4d_DatabaseInterfaceHel:974677841
SYS./f0cd62e8_DatabaseInterfaceStu:202096582
SYS./d100f507_PropertySequenceHelp:222649136
SYS./809cbfa9_PropertyStruct:904769799
SYS./91352016_RemoteAuthentication:905079855




Также можно использовать этот запрос для того чтобы хешировать код других PL/SQL обьектов, также найденных в таблице IDL_UB1$.

Когда все запросы были выполнены, spool файл может быть закрыт, также как и sqlplus.

SQL> SPOOL OFF
SQL> QUIT
Disconnected from Oracle Database 10g Enterprise Edition Release
10.2.0.2.0 – Production With the Partitioning, OLAP and Data Mining
options

C:\oracle\product\10.2.0\db_1\BIN>

После отключения от сервера, нужно получить контрольную сумму md5 из spool file и записать её в присутствии свидетеля.

Заключение
После получения и сохранения всех данных Живого ответа, возможны несколько вариантов действий. Первое – отключить систему от сети и перейти к доказательства, конечно, если предполагается привлекать взломщика к юридической ответственности. Итак, аудитор системы должен найти, как взломщик пробрался в систему и дать рекомендации по безопасности.


Thanks to Neminem for help=)
Оригинал статьи: http://milw0rm.org/papers/158 (pdf)
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод: Анатомия Oracle Часть5: О нахождении свидетельств кражи данных Дрэгги Чужие Статьи 0 10.11.2007 20:26
[Перевод] Анатомия Oracle. Часть 1: Анализируем Redo-логи NeMiNeM Чужие Статьи 1 28.10.2007 18:17
Обнаружение Sql инъекций в Oracle, часть первая k00p3r Чужие Статьи 1 12.07.2005 08:51
SQL инъекция и Oracle, часть 2 k00p3r Чужие Статьи 0 13.06.2005 11:24
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23



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


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




ANTICHAT.XYZ