Главная | Топ серверов | Скины | Регистрация | Вход | English Version Приветствую Вас Гость | Показать правый блок
[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[bugs] Удаление .dat файлов
YuraДата: Суббота, 11.09.2010, 10:16 | Сообщение # 1
Генерал-майор
Группа: Проверенные
Сообщений: 176
Репутация: 52
Статус: Оффлайн
Ну что, дамы и господа. Нашел я лазейку, через которую можно удалять .dat файлы на сервере smile
Дело обстоит в 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 с нашем именем! Идея понятна?

Мы должны за один запрос залить файл и удалить нужный. Я проверил это - работает smile

Самый простой способ убрать уязвимость, хотя, неправильный, но он вас спасет.

В части, отвечающей за заливку файла находим строчку:

Code
$data = "<?PHP....";

После нее добавим

Code
unset($author);

Это должно спасти вас.

Удачи!
Реклама


////
 
VaflanДата: Суббота, 11.09.2010, 14:51 | Сообщение # 2
Генералиссимус
Группа: Администратор
Сообщений: 477
Репутация: 225
Статус: Оффлайн
Сам попробуй что либо сделать, в 0.8 это уже не возможно.
В 0.8 идёт php_flag register_globals off в .htaccess
То есть, создать переменную через ?author=Vaflan не как...




 
  • Страница 1 из 1
  • 1
Поиск:

This page is designed to be viewed best with Chrome. Home Page MyMuWeb By Vaflan. Хостинг от uCoz.