Ãœðù - 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 />
Ценная инфа, выводимая Apache<br />
Техническая информация о сервере<br />
Зато меня порадовали директории. Сначала<br />
я заглянул в папку /icons, даже и не надеясь<br />
найти там что-то интересное :). Далее выяснилось,<br />
что на сервере стоит phpMyAdmin в одноименной<br />
папке. А это уже интересно. Затем<br />
админка, которая находилась в /config. При ее<br />
осмотре на наличие SQL-инъекции, с помощью<br />
которой можно было бы войти в админку<br />
по запросу типа «' or '1' = '1'», я снова ничего<br />
не нашел. Я подождал еще немного, и сканер<br />
скинул мне линки на /webmail (с нее тоже было<br />
нечего взять) и на Error_Log, в котором мне<br />
посчастливилось обнаружить лог ошибок в<br />
PHP-скриптах:<br />
[20‐Dec-2005 23:56:19] PHP<br />
Warning: file(news.xml): failed<br />
to open stream: No such file or<br />
directory in /home/medicalc/<br />
public_html/money/xml.php on<br />
line 14<br />
[20‐Dec-2005 23:56:19] PHP<br />
Warning: join(): Bad arguments.<br />
in /home/medicalc/public_html/<br />
money/xml.php on line 14<br />
[20‐Dec-2005 23:56:19] PHP Fatal<br />
error: Call to a member function<br />
on a non-object in /home/<br />
medicalc/public_html/money/xml.<br />
php on line 26<br />
[20‐Dec-2005 23:59:03] PHP Fatal<br />
error: Call to a member function<br />
on a non-object in /home/<br />
medicalc/public_html/money/xml.<br />
php on line 26<br />
[21‐Dec-2005 00:03:49] PHP<br />
Warning: fopen(rss.xml): failed<br />
to open stream: Permission denied<br />
in /home/medicalc/public_html/<br />
money/rss.php on line 57<br />
[09‐Jan-2006 17:42:28] PHP<br />
Warning: mysql_connect(): Can't<br />
connect to local MySQL server<br />
through socket '/var/tmp/mysql.<br />
sock' (2) in /home/medicalc/<br />
public_html/money/index.php on<br />
line 5<br />
Естественно, из ошибок вытянуть чего-нибудь<br />
занятное не получилось, но это только на<br />
первый взгляд. Теперь совершенно очевидно,<br />
что скрипты работают с MySQL и полный путь к<br />
сайту у нас таков: /home/medicalc/public_html/<br />
emoney.<br />
Ты думаешь, на этом мое исследование<br />
закончилось и я решил забить на обменник и<br />
пойти болтать в IRC? Нет. Самое главное, что<br />
нашел сканер, — это /server-status. Теперь уже<br />
интересно…<br />
Существенная зацепка<br />
Что же это за загадочная дира — /server-status?<br />
Это даже не просто директория и не скрипт, а<br />
исключительно Apache'вская примочка. Она<br />
отображает всю информацию о веб-сервере:<br />
версию Apache, модули и т.д., текущее время,<br />
аптайм сервера, нагрузку CPU. Кроме того, из<br />
нее можно выудить просто море информации<br />
о том, какие сайты хостятся на всем сервере. В<br />
общем, выглядит это так, как на картинке.<br />
Я собрал список сайтов и принялся их изучать.<br />
К слову сказать, их оказалось всего 5-6. Но и<br />
тут было, где разгуляться. Для тех, кто в танке,<br />
поясню, чему я так радуюсь: я ищу на одном из<br />
этих двух сайтов баг и получаю шелл на сервере<br />
обменника. Далее если администратор сервера<br />
— идиот и неправильно выставил chmod'ы, то<br />
я постараюсь забраться на обменник, в ином<br />
случае — просто подниму свои привилегии<br />
локально :).<br />
Итак, я выбрал сайт medicalc.ua. Почему? Да<br />
потому, что мне сразу понравилось, что этот<br />
сайт оказался в Error_Log'e моего обменника с<br />
ошибками PHP-скрипта:<br />
[09‐Jan-2006 17:42:28] PHP<br />
Warning: mysql_connect(): Can't<br />
connect to local MySQL server<br />
through socket '/var/tmp/mysql.<br />
sock' (2) in /home/medicalc/<br />
public_html/money/index.php on<br />
line 5<br />
Это можно увидеть из директории, в которой<br />
находится сайт. Согласись, логично думать, что<br />
этот сайт и мой обменник очень тесно связаны<br />
друг с другом, ведь не просто так в логах<br />
хранятся его ошибки. Да, кстати, тоже самое (я<br />
о том, как узнать, какие сайты хостятся на сервере)<br />
тебе может предложить и метод Reverse<br />
IP LookUp, о котором NSD писал в мартовском<br />
номере за 2005 год в статье «Удар по WEB’у». Но,<br />
к сожалению, сервис domainsdb.org накрылся,<br />
поэтому я предлагаю тебе альтернативный<br />
сервис www.domaintools.com.<br />
Итак, перейдя на интересующий меня ресурс<br />
meidcalc.ua, я обнаружил сайт, посвященный<br />
медицине. Особо ей не интересуясь и потому не<br />
отвлекаясь, я начал осматривать скрипты. Сначала<br />
я заглянул во что-то вроде гостевой книги<br />
/guestbook, но, несмотря на все свои усилия,<br />
ничего найти так и не смог, хотя был уверен, что<br />
активная XSS тут будет точно :). Но затем удача<br />
повернулась ко мне лицом, и уже через пару<br />
минут я нашел линк вида «index.php?id=37». По<br />
привычке я поставил в переменную id свою элитную<br />
кавычку и увидел очень интересную ошибку:<br />
PHP Warning: mysql_fetch_<br />
array(): supplied argument is<br />
not a valid MySQL result resource<br />
in /home/medicalc/public_html/<br />
medical/index.php on line 416<br />
Отлично! SQL-инъекция во всей ее красе!<br />
Штурмуем инъекцию!<br />
К сожалению, разработчики MySQL не предусмотрели<br />
в ней функций вроде UNION SELECT<br />
ALL_DATABASE_DUMP или UNION SELECT<br />
OTDAY_MNE_VSE_PAROLI :), поэтом оставалось<br />
только подобрать количество столбцов и<br />
узнать имена таблиц, что я и принялся делать.<br />
Как выяснилось, столбцов было всего 6 и<br />
запрос, который бы выполнялся без ошибок,<br />
выглядел так:<br />
http://medicalc.ua/index.php?id=<br />
1+UNION+select+1,2,3,4,5,6/*<br />
Сначала я собрал информацию о версии<br />
MySQL-базы и о том, с чем я вообще имею дело:<br />
xàêåð 05 /101/ 07<br />
/<br />
059