03.04.2014 Views

Май - Xakep Online

Май - Xakep Online

Май - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

взлом<br />

Пример: «select"username"from"sys».«dba_use<br />

rs"where"username"='sys'»<br />

10. Кодирование в ASCII-символ происходит<br />

так же, как и в PostgreSQL, — с помощью функции<br />

chr().<br />

11. Для конкатенации используются пайпы<br />

(«||»).<br />

12. Сайты с бажными скриптами легко ищутся в<br />

поисковике: «ORA-00921: unexpected end of SQL<br />

command».<br />

На официальном сайте можно найти много полезной информации<br />

2. Supplied argument is not a valid PostgreSQL<br />

result<br />

3. Warning: pg_exec() [function.pg-exec]: Query<br />

failed<br />

Перечислять все коды ошибок здесь не имеет<br />

смысла. Полезнее обратиться к документации<br />

(www.postgresql.org/docs).<br />

Немного отойдя от темы, напомню, что поисковик<br />

Google является не только удобным<br />

средством для обнаружения потенциальной<br />

жертвы, но и «историей болезни» многих<br />

порталов, поскольку использует кэширование ;).<br />

Зачастую уязвимые скрипты, которые заменяются<br />

новыми, пропатченными, остаются на<br />

сервере. Найти их поможет веб-архив<br />

(www.web.archive.org). Заходим, вбиваем адрес<br />

нужного нам сайта, находим все доступные<br />

скрипты и по очереди выясняем их наличие<br />

на сервере. Если таковые обнаруживаются, то<br />

проверяем на уязвимости. Здесь мы выполняем<br />

простое сканирование. Да — примитивно,<br />

да — долго, но это последнее, на что следует<br />

идти, если другие решения не найдены.<br />

Явление Oracle<br />

Про Oracle есть несколько очень хороших<br />

статей, ссылки на которые ты найдешь далее,<br />

поэтому я упомяну лишь основные моменты:<br />

1. Идентификация СУБД аналогична определению<br />

PostgreSQL.<br />

xàêåð 05 /101/ 07<br />

/<br />

2. Возможно выполнение таких запросов, как<br />

INSERT, DELETE, UPDATE.<br />

3. Использовать limit, как ты это делал в MySQL,<br />

в Oracle не получится. Вместо этого используй<br />

in (1,2).<br />

4. Подстановка нулей (Null) не сработает для<br />

поля типа integer, используй ее только для строкового<br />

поля.<br />

5. Одной из самых серьезных ошибок при<br />

администрировании Oracle является использование<br />

пользователя с максимальными<br />

правами (DBSNMP), и естественно, возможный<br />

взломщик может внедрять свои запросы, имея<br />

максимальные права.<br />

6. Использование разделения выражений<br />

символом «;» невозможно.<br />

7. Узнать схему СУБД Oracle можно несколькими<br />

способами: «select user from dual», «select name<br />

from V$DATABASE», «select SCHEMANAME from<br />

v$session» или «select sys.login_user from sys.<br />

dual». Зашифрованный пароль (необратимый<br />

хэш, генерируемый из пары «юзер && пароль»)<br />

узнается запросом «select PASSWORD from<br />

dba_users или select PASSWORD from user_<br />

users». Версия — запросом «select VERSION<br />

from V$INSTANCE», аккаунты пользователей<br />

— «select * from sys.dba_users».<br />

8. Используются стандартные комментарии<br />

(«--»).<br />

9. Вместо пробелов можно использовать<br />

кавычки.<br />

А как же автоматизация?<br />

Пропарсив с десяток страниц поисковика, я нашел<br />

всего несколько специализированных утилит<br />

для атаки и аудита СУБД Oracle (всевозможные<br />

сканеры безопасности не в счет). Это программа<br />

NGSSQuirreL от компании Next Generation<br />

Security Software, тулза DB Audit от SoftTree и многим<br />

уже знакомая русскоязычная утилита Console<br />

Oracle Security Scanner от Limpid Byte. Первая<br />

и вторая программы подойдут для аудита собственного<br />

сервера на уязвимости, но никак не для<br />

удаленного анализа системы с целью последующего<br />

проникновения. Поэтому выбор очевиден<br />

— COSS. С помощью этой утилиты можно узнать<br />

версию Oracle и другую полезную информацию<br />

(SID, например), выполнять команды, брутить<br />

на стандартные аккаунты и т.д. Исходники, к сожалению,<br />

не прилагаются.<br />

Новости с фронта<br />

Во время написания этой статьи в багтраке появилась<br />

информация об уязвимостях, найденных<br />

в PostgreSQL (7.4) и Oracle (9i/10g). В обоих<br />

случаях — sql-injection.<br />

В случае с PostgreSQL уязвим модуль contrib/<br />

tsearch2 при объявлении некоторых функций. В<br />

Oracle же все намного серьезнее — 4 дыры и 4<br />

эксплойта (http://xakep.ru/post/36944/default.asp).<br />

Занавес<br />

Я описал лишь основы основ возможностей в<br />

Oracle и PostgreSQL. Есть гораздо более сложные<br />

структурные атаки, требующие глубоких<br />

знаний pgSQL/PL и всех тонкостей вышеназванных<br />

СУБД. И если ты имеешь соответствующую<br />

подготовку, то я советую тебе прочесть<br />

интересный доклад David'a Litchfield'a «Oracle<br />

PL/SQL Injection» и статью Chris'a Ahley’я<br />

«(More) Advanced SQL Injection», которые можно<br />

скачать с моей домашней страницы или взять<br />

на диске. z<br />

081

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!