Hongcms 3.0.0后台SQL注入漏洞分析
字数 1246 2025-08-18 11:37:27
HongCMS 3.0.0后台SQL注入漏洞分析教学文档
一、漏洞概述
HongCMS 3.0.0版本后台存在SQL注入漏洞,攻击者可通过构造恶意SQL语句绕过系统过滤机制,执行任意SQL命令。
二、受影响版本
HongCMS < 3.0.0
三、漏洞原理
漏洞位置
后台数据库维护功能中的"清空数据表"操作
漏洞成因
- 程序对用户输入的数据库表名过滤不严格
- 使用不安全的过滤函数组合(stripslashes/htmlspecialchars/addslashes等)
- 最终SQL语句拼接时未进行充分的参数化处理
四、漏洞分析
执行流程
- 后台请求路径:系统 → 数据库维护 → 清空数据表
- 关键函数调用链:
call_user_func → operate → ForceStringFrom → ForceString → EscapeSql → EmptyTable → exe
关键函数分析
-
ForceStringFrom函数:
- 通过
$_GET[$VariableName]获取tablename参数值 - 传递给ForceString函数处理
- 通过
-
ForceString函数:
- 检查输入是否为字符串
- 传递给EscapeSql进行安全过滤
-
EscapeSql函数:
- 检查gpc是否开启:
- 开启:使用stripslashes过滤
- 未开启:使用htmlspecialchars并替换\0和空格字符
- 检查mysql_real_escape_string/mysql_escape_string是否存在:
- 存在:调用相应函数编码
- 不存在:使用addslashes
- 检查gpc是否开启:
-
EmptyTable函数:
- 构造SQL语句:
TRUNCATE TABLE $tablename - 通过exe函数执行
- 构造SQL语句:
-
exe函数:
- 直接执行传入的SQL语句
- 返回执行结果
五、漏洞复现步骤
- 登录后台,访问:系统 → 数据库维护
- 选择任意数据表(如vvc表)点击"清空"按钮
- 使用Burp Suite拦截请求
- 修改tablename参数为恶意SQL语句:
` where vvcid=1 or updatexml(2,concat(0x7e,(version())),0) or ` - 发送修改后的请求
预期结果
- 系统返回当前数据库版本信息
- 执行的SQL语句为:
TRUNCATE TABLE ` where vvcid=1 or updatexml(2,concat(0x7e,(version())),0) or `
六、漏洞利用示例
获取数据库版本
` where vvcid=1 or updatexml(2,concat(0x7e,(version())),0) or `
获取当前用户
` where vvcid=1 or updatexml(2,concat(0x7e,(user())),0) or `
获取数据库名
` where vvcid=1 or updatexml(2,concat(0x7e,(database())),0) or `
七、防护措施
临时解决方案
- 安装WAF进行防护
- 限制后台访问IP
根本解决方案
- 使用参数化查询或预处理语句
- 实现严格的白名单验证机制
- 对数据库操作进行权限最小化控制
- 升级到修复版本(注:系统已停止维护)
八、技术要点总结
- 漏洞类型:后台SQL注入
- 危险等级:高危
- 利用条件:需要后台管理员权限
- 过滤绕过方式:通过特殊字符构造绕过addslashes等过滤函数
- 注入类型:基于错误的SQL注入
附录:相关函数说明
- addslashes:在预定义字符前添加反斜杠(单引号、双引号、反斜杠、NULL)
- stripslashes:删除由addslashes添加的反斜杠
- htmlspecialchars:将特殊字符转换为HTML实体
- mysql_real_escape_string:转义SQL语句中使用的字符串中的特殊字符
- updatexml:XML处理函数,可用于错误型SQL注入