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

Взлом СУБД

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

Спецвыпуск: Хакер, номер #052, стр. 052-090-2


Прицел на MySQL

Большинство ценных баз данных хранятся в СУБД под названием MySQL. По правилам безопасности этот демон должен быть установлен на *nix-like-системах на отдельно взятом сервере. Но часто происходит так, что все сервисы (включая mysqld) вертятся на одной машине, обычно ради экономии денег. Отсюда возможности взлома MySQL. Ниже приводим три примера из жизни, чтобы показать проблему наглядно.

Пример 1: Root - спаситель

Рассмотрим один из типичных случаев взлома БД. Однажды некий хакер нашел сервер, на котором крутился бажный mod_php. Через пару часов эксплойт 7350fun предоставил ему шелл-доступ к машине. Быстро залив хороший backdoor, хакер зашел по телнету на порт 31337 ;), затем добил сервер известным эксплойтом для ядерной баги ptrace (не стоит говорить про то, как администраторы патчат ядра) и получил рутовые права.

Помимо web-сервера, на машине располагался MySQL. По всем правилам порт 3306 был зафильтрован файрволом, на сервисе стоял сложный пароль и запрет на вход с посторонних машин. Однако mod_php и дырявое ядро создали все условия для хищения данных, лежащих в MySQL. Даже без знания заветного пароля хакер мог зайти в СУБД. Ему даже не пришлось копировать таблицы на свой винчестер и извращаться с заменой некоторых файлов. Он просто убил процесс mysqld, а затем запустил его с ключиком --skip-grant-tables. Оставалось лишь обратиться к БД под суперпользователем, и сервис впустил хакера без запроса пароля! Бережно скопировав нужные таблицы, хакер перезапустил демон в обычном режиме и удалился с сервера. Вся грязная работа была выполнена в кратчайшие сроки :). А в таблицах были пароли клиентов на раскрученный интернет-магазин...

Пример 2: Поиск пароля

Как-то раз в аську к некому хакеру постучался его друг и стал слезно умолять достать пароль одного недруга на форум, чтобы отправить несколько нецензурных сообщений от его имени. Работа была простая, взломщик даже нашел баг в www-скрипте, позволяющему выполнять команды на сервере. Хакер залил backdoor и забрался в консоль. К сожалению, на сервере стояла новенькая FreeBSD, для которой не существует хороших локальных эксплойтов. Следовательно, прием с перезапуском mysqld тут не прокатит. СУБД и web-сервер находились на одной машине, а хакер был наделен правами nobody. В таком положении ему требовалось найти конфиг от форума, что он успешно сделал с помощью команды "locate config.inc.php". В конфигурационном файле находилась учетная запись на сервис MySQL. Последняя команда "mysql –uuser –ppassword –e ‘select password from users where username=’user’’ forum" выдала хакеру зашифрованный пароль пользователя. Оставалось только расшифровать пароль с помощью Md5Inside (http://nsd.ru/soft/1/ano/md5inside.zip) или другого брутфорсера.

Здесь же уместен другой случай взлома MySQL. Однажды некому хакеру посчастливилось подобрать пароль одного пользователя на раскрученном хостинге. Его права были урезаны по самые уши, даже компилятор не запускался. Тогда хакеру пришло в голову выполнить команду "find / -name *history". И что ты думаешь? Он нашел целых пять читабельных файлов .mysql_history. В них, конечно же, была строчка с паролем доступа в незашифрованном виде. Таким вот образом хакер получил доступ к пяти таблицам MySQL. Правда, информация там не была особо ценной, в основном аккаунты к форуму или к free email-сервису...

Назад на стр. 052-090-1  Содержание  Вперед на стр. 052-090-3