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

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

M3lc1y

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

Итак, перейдя на интересующий меня ресурс meidcalc.ua, я обнаружил сайт, посвященный медицине. Особо ей не интересуясь и потому не отвлекаясь, я начал осматривать скрипты. Сначала я заглянул во что-то вроде гостевой книги /guestbook, но, несмотря на все свои усилия, ничего найти так и не смог, хотя был уверен, что активная XSS тут будет точно :). Но затем удача повернулась ко мне лицом, и уже через пару минут я нашел линк вида «index.php?id=37». По привычке я поставил в переменную id свою элитную кавычку и увидел очень интересную ошибку:

PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/medicalc/public_html/medical/index.php on line 416

Отлично! SQL-инъекция во всей ее красе!

Штурмуем инъекцию!

К сожалению, разработчики MySQL не предусмотрели в ней функций вроде UNION SELECT ALL_DATABASE_DUMP или UNION SELECT OTDAY_MNE_VSE_PAROLI :), поэтом оставалось только подобрать количество столбцов и узнать имена таблиц, что я принялся и делать. Как выяснилось, столбцов было всего 6 и запрос, который бы выполнялся без ошибок, выглядел так:

http://medicalc.ua/index.php?id=1+UNION+select+1,2,3,4,5,6/*

Сначала я собрал информацию о версии MySQL-базы и о том, с чем я вообще имею дело:

http://medicalc.ua/index.php?id=1+UNION+select+1,2,3,4,5,6,user()/*

http://medicalc.ua/index.php?id=1+UNION+select+1,2,3,4,5,6,database()/*

http://medicalc.ua/index.php?id=1+UNION+select+1,2,3,4,5,6,version()/*

Чтобы не быть голословным, поясню: с помощью первого запроса я узнал имя пользователя БД, которая могла быть доступна только с localhost; с помощью второй - имя базы medicalc, а посредством третьей - версию MySQL (так, на всякий случай).

Со столбцами дело не шло - названия угадать не удавалось никаким образом. И тут я подумал: а вдруг получится прочитать конфигурационный файл через MySQL-функцию LOADFILE()? Привилегий может и не хватить, но попытка не пытка :). Кроме того, абсолютный путь до сайта у меня есть. Скрестив пальцы, я выполнил следующий запрос:

http://medicalc.ua/index.php?id=1+UNION+select+1,2,3,4,5,6,LOADFILE('/home/medicalc/public_html/medical/index.php')/*

Я подпрыгнул от радости - на экране замелькали строчки кода из самого index.php! Отлично! Я быстро нашел в коде строку «include("dbconfig.php")» и интуитивно понял, что там хранятся логин и пароль к базе данных:

<?php

$CONFIG['database'] = 'medicalc';

$CONFIG['user'] = 'medicalc';

$CONFIG['passwd'] = 'AfLkYjii';

$CONFIG['host'] = 'localhost';

?>

Далее я, естественно, решил залогиниться в phpMyAdmin со связкой паролей: «medicalc:AfLkYjii». Стоит ли говорить, что пароли подошли и я уже вовсю пользовался прелестями phpMyAdmin. В базе данных ничего полезного я не нашел, спам-базы даже на $1 бы не хватило. И тут я задался вопросом: ну попал в я phpMyAdmin, что дальше? (ну пробил ты стенку головой, и что ты будешь делать в соседней камере? Примечание Forb’а). Пробую залогиниться на FTP – «login incorrect».

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