Ãœðù - 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 />
i<br />
Пользуясь случаем,<br />
выражаю огромную<br />
благодарность<br />
_1nf3ct0r_ за помощь<br />
во взломе и написании<br />
этой статьи :).<br />
Эту статью стоит<br />
рассматривать<br />
исключительно как<br />
материал для ознакомления.<br />
Ни автор,<br />
ни редакция не несут<br />
ответственности за<br />
применение ее в противозаконных<br />
целях.<br />
Следует помнить, что<br />
если ты вдруг, начитавшись,<br />
взломаешь<br />
что-нибудь чужое, то<br />
отвечать за все будешь<br />
только ты один.<br />
Мы тебя ни к чему<br />
такому криминальному<br />
не призываем,<br />
наоборот, всячески<br />
уговариваем не нарушать<br />
законов.<br />
http://<br />
На нашем сайте<br />
hellknights.void.ru ты<br />
найдешь весь софт,<br />
который помог мне<br />
осуществить этот<br />
нелегкий взлом.<br />
http://medicalc.ua/index.<br />
php?id=1+UNION+select+1,2<br />
,3,4,5,6,user()/*<br />
http://medicalc.ua/index.<br />
php?id=1+UNION+select+1,2<br />
,3,4,5,6,database()/*<br />
http://medicalc.ua/index.<br />
php?id=1+UNION+select+1,2<br />
,3,4,5,6,version()/*<br />
Чтобы не быть голословным, поясню: с<br />
помощью первого запроса я узнал имя<br />
пользователя БД, которая могла быть<br />
доступна только с localhost; с помощью<br />
второй — имя базы medicalc, а посредством<br />
третьей — версию MySQL (так, на<br />
всякий случай).<br />
Со столбцами дело не шло — названия<br />
угадать не удавалось никаким образом.<br />
И тут я подумал: а вдруг получится прочитать<br />
конфигурационный файл через<br />
MySQL-функцию LOADFILE()? Привилегий<br />
может и не хватить, но попытка не<br />
пытка :). Кроме того, абсолютный путь<br />
до сайта у меня есть. Скрестив пальцы,<br />
я выполнил следующий запрос:<br />
http://medicalc.ua/index.<br />
php?id=1+UNION+select+1,2<br />
,3,4,5,6,LOADFILE('/home/<br />
medicalc/public_html/<br />
medical/index.php')/*<br />
Я подпрыгнул от радости — на экране<br />
замелькали строчки кода из самого<br />
index.php! Отлично! Я быстро нашел в<br />
коде строку «include(«dbconfig.php»)»<br />
и интуитивно понял, что там хранятся<br />
логин и пароль к базе данных:<br />
<br />
Далее я, естественно, решил залогиниться<br />
в phpMyAdmin со связкой паролей:<br />
«medicalc:AfLkYjii». Стоит ли говорить,<br />
что пароли подошли и я уже вовсю<br />
пользовался прелестями phpMyAdmin.<br />
В базе данных ничего полезного я не<br />
нашел, спам-базы даже на $1 бы не<br />
хватило. И тут я задался вопросом: ну<br />
попал в я phpMyAdmin, что дальше?<br />
(ну пробил ты стенку головой, и что ты<br />
будешь делать в соседней камере?<br />
Примечание Forb’а). Пробую залогиниться<br />
на FTP — «login incorrect».<br />
Есть еще один способ выхода из этой<br />
ситуации — получение шелла через<br />
SQL-запросы типа «INTO OUTFILE».<br />
Идея такова: сначала мы пишем в какуюнибудь<br />
колонку таблицы нечто вроде «» или что-то<br />
подобное. Например, «».<br />
Единственный минус этого инклуда<br />
— невозможность работы с GET-запросами.<br />
Ну и ладно! Такие шеллы, как r57shell<br />
от небезызвестной rst.void.ru, работают<br />
исключительно с POST-запросами,<br />
кроме того, известно, что POST сорит<br />
в логах веб-сервера намного меньше,<br />
чем GET, что является его неоспоримым<br />
преимуществом для хакеров.<br />
Что-то мы отвлеклись :). Итак, записываем<br />
наш PHP-код, например, в таблицу<br />
med_users, в колонку password с id,<br />
равным 20. В итоге при запросе типа<br />
«SELECT password FROM med_users<br />
WHERE id=20» на экране должен появиться<br />
тот самый PHP-код, который мы и<br />
вбивали в БД. В MySQL есть флаг запроса<br />
«INTO OUTFILE», который позволяет<br />
вывести его результат в текстовый файл.<br />
Я клоню к тому, что если выводить ответ<br />
от SQL так: «SELECT password FROM<br />
med_users WHERE id=20 INTO OUTFILE<br />
'/home/medicalc/public_html/medical/<br />
temp.php'», то можно без проблем залить<br />
полноценный веб-шелл. Но и тут есть<br />
свои подводные камни. Во-первых,<br />
хватает ли у тебя привилегий SQL-юзера,<br />
чтобы работать с INTO? И, во-вторых, не<br />
забывай про права на запись в файлах и<br />
папках. Но и тут мне повезло :). Правда,<br />
не с первого раза. В корневую веб-директорию<br />
залить ничего не получилось.<br />
Но я не сдался и начал подбирать другие<br />
папки, возможно, доступные для записи.<br />
Такой папкой была /home/medicalc/<br />
public_html/medical/guestbook.<br />
Я выполнил запрос так:<br />
SELECT password FROM<br />
med_users WHERE id=20 INTO<br />
OUTFILE '/home/medicalc/<br />
public_html/medical/<br />
guestbook/temp.php'<br />
Перешел по адресу http://medicalc.<br />
ua/guestbook/temp.php и увидел<br />
веб-шелл! Моей радости снова не было<br />
предела! Что касается операционки,<br />
то это была FreeBSD 6.0. Поднимать<br />
привилегии не имело смысла — как я и<br />
предполагал, прав на чтение директории<br />
самого обменника вполне хватало!<br />
Я поспешил сделать дамп БД обменника<br />
и всех скриптов этого сайта, но<br />
тут был облом :). Поскольку на сервере<br />
стоял Safe Mode, упаковать файлы в<br />
tar-архив не получалось, так как было<br />
невозможно выполнять команды (на то<br />
это и Safe Mode).<br />
Копипастить архивы было занятием для<br />
мазохистов, кроме того, я боялся, что<br />
в папке guestbook перезапишу старые<br />
скрипты.<br />
Тут на помощь пришел один из сценариев<br />
DxGotoFTP, который ты можешь<br />
найти на нашем сайте. Он занимается<br />
тем, что заливает любые файлы из<br />
заданной директории на удаленный<br />
FTP-сервер, тоже в нужную тебе папку.<br />
Скрипт удачно выполнил свою работу,<br />
несмотря на ограничения подлого PHP.<br />
Кстати говоря, сначала я хотел залить<br />
perl'овый веб-шелл в папку /cgi-bin,<br />
но, к сожалению, мои привилегии были<br />
минимальны (nobody). Зайдя на свой<br />
FTP, я сжал все скрипты в один архив и<br />
слил себе на комп, нашел в сценариях<br />
конфиг базы данных и быстренько<br />
сотворил дамп MySQL обменника.<br />
К слову сказать, система работала<br />
практически на одних скриптах от<br />
WebMoney. Почитать об этом можно в<br />
сентябрьском «Хакере» за 2005 год в<br />
статье nikitozz'a «Механика WM-процессинга»,<br />
а мы сейчас опустим этот<br />
момент.<br />
Люди в сером<br />
Короче, после того как я достал все, что<br />
мне было нужно, я задумался над тем, а<br />
стоило ли это делать. Ведь из-за какихто<br />
жалких 500 WMZ (ну или больше,<br />
рисковать — лезть в чужой кошелек — я<br />
не стал) можно сесть за решетку, так<br />
как это уже далеко не дефейс, а чистой<br />
воды криминал. Я связался с администратором<br />
и вместе с килограммами мата<br />
в мою аську получил презент — энную<br />
сумму денег в качестве благодарности.<br />
Я с недоверием принял подарок и до<br />
сих пор жду стука в дверь добродушных<br />
ребят в сером. Смастерил убийцу<br />
жестких дисков по инструкциям летнего<br />
номера «X» и теперь, как говорится,<br />
всегда готов :). z<br />
/ 060<br />
xàêåð 05 /101/ 07