Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #36, НОЯБРЬ 2003 г.

Найди и поимей!

Докучаев Дмитрий aka Forb

Спецвыпуск Xakep, номер #036, стр. 036-090-3


Для того чтобы прицепиться к mySQL (в наше время именно такие СУБД рулят на серваках), хакер достает логин и пароль пользователя, прописанные в таблице авторизации этой базы. Несмотря на кажущуюся сложность, данные можно добыть довольно быстро и просто. Они находятся в предустановках cgi/php скриптов, обслуживающих СУБД. Права nobody должны позволять читать эти скрипты, поэтому особых сложностей с получением аккаунта у взломщика не возникнет. Стоит только отметить, что в CGI-сценариях логин и пароль чаще всего указываются в начале файла, в переменных. В случае с PHP, данные хранятся в include-скриптах, которые затем подключаются в сценариях функцией include(). Такие файлы, как правило, имеют расширение .inc и находятся в папке include/. Найти их не составляет особого труда.

Если хакеру посчастливилось получить root-права, то не нужно вообще ничего искать. Достаточно убить процесс mysqld, затем запустить базу заново с параметром --skip-grant-tables. При этом демон не будет считывать таблицы авторизации. Теперь можно смело логиниться под рутом без пароля - взломщика пустят в базу данных. Он ни за что не забудет вернуть демон на место с обычными параметрами после дампа таблицы, иначе его пребывание заметят админы.

Теперь о сложностях - необходимо составить правильный запрос, чтобы получить верный ответ. Помни, что конечной целью хакера является обнаружение большой базы с рабочими кредитками =).

Входить в базу следует, учитывая интерактивность. Если шелл, который поимел нарушитель, открыт бэкдором (интерактивно) без поддержки псевдотерминала, то выполнять запросы sql следует через опцию -e клиента mysql. Об однострочных командах я расскажу чуть позже, просто имей это в виду.

Итак, вход в СУБД происходит с помощью клиента. Для этого ему задаются следующие параметры: логин, пароль, хост и база (необязательно). В нашем случае вполне подойдет следующая команда:

mysql -u carder -pcarderbaze.

Естественно, что cader:carderbase аккаунт, предварительно найденный в web-скриптах.

Если все верно, нарушитель получит стандартное приглашение клиента (mysql>). Далее необходимо сделать переход в нужную базу. Узнать ее можно командой show databases; Переход в БД выполняется двумя путями: либо сочетанием "\u name_db", либо командой use name_db (где name_db имя базы).

Хакер внутри нужной базы. Теперь он удостоверится, что это действительно то, что ему нужно. Взломщик напишет "show tables;" и найдет таблицу типа cards или payment (вообще-то, она указывается в .inc файлах). Затем он делает тестовый запрос:

select * from table_name limit 1;

Параметр limit означает, сколько строк из таблицы будет выводиться на экран. Учитывая, что хакеру совсем не нужно листать миллион записей, он указывает всего одну строку.

Нестандартные ситуации

Поговорим о нестандартных ситуациях, которые могут возникнуть. Я уже упоминал об интерактивном шелле. Дело в том, что без псевдотерминала невозможно корректно наблюдать за приглашениями клиента, соответственно, если зайти в базу как обычно, хакер будет тыкаться в консоли как слепой котенок. Для этого случая был придуман параметр -e, позволяющий выполнять команды SQL в одной строке. Итак, запрос:

Назад на стр. 036-090-2  Содержание  Вперед на стр. 036-090-4