Ну что, дамы и господа. Нашел я лазейку, через которую можно удалять .dat файлы на сервере
Дело обстоит в modules/gallery.php, откройте его. Затрагивает седьмую, восьмую версию, возможно и более рании тоже. Имеем такую вещь для удаления изображений.
Code
// Delete Image
if(isset($_POST['id_delete'])) {
$file_name = $_POST['id_delete'];
if(is_file($dir.$file_name.'.dat')) {
include($dir.$file_name.'.dat');
if($_SESSION['mmw_status'] >= $mmw[image_can_delete] || $_SESSION['char_set'] == $author) {
unlink($dir.$file_name.'.'.$format);
unlink($dir.$file_name.".dat");
echo $okey_start . mmw_lang_image_deleted . $okey_end;
writelog("gallery","Image <b>$file_name</b> Has Been <font color=#FF0000>Deleted</font>");
}
}
else {
echo $die_start . mmw_lang_left_blank . $die_end;
}
echo $rowbr;
}
Смотрим как происходит удаление изображения.
Проверка на существование POST запроса, затем проверка - существует ли файл .dat, который указан в ЗАПРОСЕ без изменений? Т.е. при проверке на существование POST запрос не фильтрируется на слеши и т.д. .
Если да, то подключается этот файл. Тут сразу же получается читалка - если внутри .dat нету php кода, то будет выдано его содержимое.
По идее, при подключении файла из него планировалось получить имя владельца файла, формат, но т.к. мы подключаем не .dat, который идет с изображением, а левый, то данные в переменные не заливаются.
Едем дальше.
Тут уже идет проверка - может ли пользователь удалить этот файл? И получаем:
$_SESSION['char_set'] == $author
А $author то мы не залили из .dat файла - как быть? Решение есть, расскажу позже.
Все, дальше идет удаление файла - то что нам и надо. Осталось понять с автором.
Как быть и что делать? Поднимемся по файлу выше. Там есть часть, отвечающая за заливку файла. Если файл успешно залить, то там остается нужная нам $author с нашем именем! Идея понятна?
Мы должны за один запрос залить файл и удалить нужный. Я проверил это - работает
Самый простой способ убрать уязвимость, хотя, неправильный, но он вас спасет.
В части, отвечающей за заливку файла находим строчку:
После нее добавим
Это должно спасти вас.
Удачи!