03.04.2014 Views

Май - Xakep Online

Май - Xakep Online

Май - Xakep Online

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!