Ãœðù - Xakep Online
Ãœðù - Xakep Online
Ãœðù - Xakep Online
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
взлом<br />
евгений «CoRWin» еРМАков<br />
/ http://c0rwin.net /<br />
© Тимур Ахметов<br />
Разрушая базы<br />
ПрОВеДеНие SQL-INJECTION В POSTGRESQL и ORACLE<br />
Всем наверняка знакомо сочетание «sql-injection». Не раз и не два мы вытягивали нужные<br />
сведения из таблиц баз данных. В то же время далеко не всегда удается провести<br />
успешную инъекцию из-за незнания особенностей той или иной базы данных. В общих<br />
чертах синтаксис ANSI SQL везде одинаков, но существуют подводные камни.<br />
Это тебе не «мускул»<br />
В большинстве случаев уязвимое приложение<br />
взаимодействует с MySQL, но, кроме «мускула»,<br />
довольно популярными являются серверы баз<br />
данных MSSQL, Oracle и PostgreSQL. Писать<br />
про все три мы не будем — информации по теме<br />
инъекций в серверы, использующие СУБД<br />
MSSQL, более чем достаточно. Сегодня мы на<br />
практических примерах рассмотрим некоторые<br />
тонкости при взломе PostgreSQL и Oracle. Учти,<br />
что никто не собирается обучать тебя языку<br />
структурированных запросов SQL.<br />
Десять «святых заповедей»<br />
PostgreSQL — достаточно мощная система, администрировать<br />
которую труднее, чем MySQL. Как<br />
правило, ее используют на крупных коммерческих<br />
проектах, требующих сложной иерархической<br />
/ 078<br />
структуры базы данных. Но в то же время PostgreSQL<br />
тяжелая и работает медленнее, чем тот же «мускул»,<br />
поэтому вряд ли кто-то будет использовать эту СУБД<br />
для домашней страницы (хотя в нашей жизни все<br />
возможно). Чтобы все твои инъекции были успешными,<br />
усвой десять простых правил. Но учти, что они<br />
характерны только для PostgreSQL.<br />
1. В отличие от MySQL, в базах данных<br />
PostgreSQL количество полей в select-запросах<br />
может не совпадать. Следовательно, здесь нам<br />
не нужно подбирать количество полей, как это<br />
бывает в MySQL.<br />
Пример: запрос «http://club.*****.ru/?part_<br />
id=10;select 1/**/» равнозначен «http://<br />
club.*****.ru/?part_id=10;select 1,2/**/».<br />
2. Таблицы Mytable и mytable не равнозначны.<br />
Всегда следует учитывать регистр букв.<br />
3. Нельзя оставлять открытый комментарий.<br />
Следовательно, отсечь ненужный нам sql-запрос<br />
просто так не получится. Но есть простой<br />
выход — использование null-байта «%00» (при<br />
отсутствии фильтрации).<br />
Запрос:<br />
http://club.*****.ru/?part_id=10-1/*<br />
Вывод:<br />
Fatal error: Call to undefined function: fetchrow()<br />
in /var/www/htdocs/veresk_club/classes/SQL.<br />
class.php on line 25<br />
Запрос:<br />
http://club.*****.ru/?part_id=10-1/**/<br />
Вывод:<br />
Страница сайта.<br />
xàêåð 05 /101/ 07