Найди и поимей! Докучаев Дмитрий 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 в одной строке. Итак, запрос: |