Без крови и оружия 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». |