金山终端安全系统V9.0 SQL注入漏洞
字数 1348 2025-08-06 08:35:11

金山终端安全系统V9.0 SQL注入漏洞分析与复现

一、漏洞概述

金山终端安全系统(原金山安全)V9.0版本存在一处SQL注入漏洞,该漏洞位于update_software_info_v2.php文件中,由于对用户输入参数过滤不严,导致攻击者可以构造恶意SQL语句进行注入攻击。

二、漏洞影响版本

  • 受影响版本:V9.SP1.E1001及之前版本
  • 已修复版本:官方发布的最新修复版本

三、漏洞环境搭建

1. 环境要求

  • 操作系统:Windows Server(测试使用Windows Server 2012)
  • 软件包:SecManage.iso(可从官方下载:http://duba-011.duba.net/netversion/Package/SecManage.iso)

2. 安装步骤

  1. 解压SecManage.iso安装包
  2. 运行SecManage.exe进行管理中心安装
  3. 默认安装路径:C:\SecManage
  4. 安装完成后,系统会监听6868端口

四、漏洞定位与分析

1. 漏洞文件位置

C:\SecManage\Console\inter\update_software_info_v2.php

2. 漏洞代码分析

// 问题代码段
if ($postdata['type'] != null && $postdata['type'] != "") {
    $id = $postdata['type'];
    $where .= " and type=$id"; // 直接拼接用户输入到SQL语句中
}

// SQL语句构建
$sql = "SELECT * FROM table_name WHERE 1=1 $where";

3. 安全检测机制分析

系统在C:\SecManage\Console\inter\common\checksql.php中实现了参数检查:

function checkParam($postData, $keyData) {
    // 检查参数完整性
    if (!checkParamFull($postData, $keyData)) {
        return array("nResult" => 1); // 参数不完整
    }
    
    // SQL注入检查
    if (checksql($postData)) {
        return array("nResult" => 25); // 检测到SQL注入
    }
    
    return true;
}

function checksql($param) {
    // 递归检查数组或对象
    if (is_array($param) || is_object($param)) {
        foreach ($param as $value) {
            if (checksql($value)) {
                return true;
            }
        }
        return false;
    }
    
    // 白名单检查
    if (file_exists("checkWhiteList.php")) {
        require_once("checkWhiteList.php");
        if (in_array($param, $checkWhiteList)) {
            // 执行一些安全处理
            $param = addslashes($param);
            $param = str_replace("%", "\%", $param);
            $param = str_replace("_", "\_", $param);
            $param = nl2br($param);
            $param = htmlspecialchars($param);
            return false;
        }
    }
    
    // SQL注入正则检测
    $pattern = "/(select|insert|update|delete|union|into|load_file|outfile|substr|ascii|declare|exec|count|master|drop|execute|truncate|char|or|and)/i";
    if (preg_match($pattern, $param)) {
        return true;
    }
    
    return false;
}

五、漏洞复现

1. 原始POC获取

通过抓包工具(如Burp Suite)捕获xpc扫描器的请求流量,可以获取漏洞验证的原始POC。

2. 漏洞验证步骤

  1. 访问系统管理界面(默认端口6868)
  2. 拦截update_software_info_v2.php的请求
  3. 构造恶意type参数,如:type=1 AND 1=CONVERT(int, (SELECT table_name FROM information_schema.tables))
  4. 观察系统响应

3. 绕过安全检测的方法

在受影响版本中,可以尝试以下方法绕过检测:

  • 使用注释分割关键字:/**/
  • 使用URL编码
  • 使用大小写变异
  • 使用等价函数替换

六、漏洞修复方案

1. 官方修复方案

升级到官方发布的最新版本,修复方案包括:

  • 加强输入参数过滤
  • 使用参数化查询替代字符串拼接
  • 完善SQL注入检测规则

2. 临时防护措施

如果无法立即升级,可采取以下措施:

  1. 修改update_software_info_v2.php文件,对type参数进行强制类型转换:
$id = intval($postdata['type']);
  1. 加强WAF规则,拦截可疑的SQL注入尝试
  2. 限制访问IP,只允许可信网络访问管理系统

七、漏洞利用限制

  1. 需要有效的用户凭证(在某些配置下可能不需要)
  2. 受checksql.php检测机制限制(在受影响版本中检测可能不完善)
  3. 注入结果需要通过系统响应体现,可能存在信息回显限制

八、参考链接

  1. 长亭科技漏洞分析文章
  2. CSDN技术分析文章

九、学习要点总结

  1. SQL注入漏洞通常源于未过滤的用户输入直接拼接到SQL语句中
  2. 安全检测机制可能存在绕过可能,需要多层防御
  3. 漏洞复现需要搭建真实环境,注意版本匹配
  4. 参数化查询是预防SQL注入的最有效方法之一
  5. 正则表达式检测是常见的SQL注入防御手段,但需要不断更新规则
金山终端安全系统V9.0 SQL注入漏洞分析与复现 一、漏洞概述 金山终端安全系统(原金山安全)V9.0版本存在一处SQL注入漏洞,该漏洞位于 update_software_info_v2.php 文件中,由于对用户输入参数过滤不严,导致攻击者可以构造恶意SQL语句进行注入攻击。 二、漏洞影响版本 受影响版本:V9.SP1.E1001及之前版本 已修复版本:官方发布的最新修复版本 三、漏洞环境搭建 1. 环境要求 操作系统:Windows Server(测试使用Windows Server 2012) 软件包:SecManage.iso(可从官方下载:http://duba-011.duba.net/netversion/Package/SecManage.iso) 2. 安装步骤 解压SecManage.iso安装包 运行SecManage.exe进行管理中心安装 默认安装路径: C:\SecManage 安装完成后,系统会监听6868端口 四、漏洞定位与分析 1. 漏洞文件位置 C:\SecManage\Console\inter\update_software_info_v2.php 2. 漏洞代码分析 3. 安全检测机制分析 系统在 C:\SecManage\Console\inter\common\checksql.php 中实现了参数检查: 五、漏洞复现 1. 原始POC获取 通过抓包工具(如Burp Suite)捕获xpc扫描器的请求流量,可以获取漏洞验证的原始POC。 2. 漏洞验证步骤 访问系统管理界面(默认端口6868) 拦截 update_software_info_v2.php 的请求 构造恶意type参数,如: type=1 AND 1=CONVERT(int, (SELECT table_name FROM information_schema.tables)) 观察系统响应 3. 绕过安全检测的方法 在受影响版本中,可以尝试以下方法绕过检测: 使用注释分割关键字: /**/ 使用URL编码 使用大小写变异 使用等价函数替换 六、漏洞修复方案 1. 官方修复方案 升级到官方发布的最新版本,修复方案包括: 加强输入参数过滤 使用参数化查询替代字符串拼接 完善SQL注入检测规则 2. 临时防护措施 如果无法立即升级,可采取以下措施: 修改 update_software_info_v2.php 文件,对type参数进行强制类型转换: 加强WAF规则,拦截可疑的SQL注入尝试 限制访问IP,只允许可信网络访问管理系统 七、漏洞利用限制 需要有效的用户凭证(在某些配置下可能不需要) 受checksql.php检测机制限制(在受影响版本中检测可能不完善) 注入结果需要通过系统响应体现,可能存在信息回显限制 八、参考链接 长亭科技漏洞分析文章 CSDN技术分析文章 九、学习要点总结 SQL注入漏洞通常源于未过滤的用户输入直接拼接到SQL语句中 安全检测机制可能存在绕过可能,需要多层防御 漏洞复现需要搭建真实环境,注意版本匹配 参数化查询是预防SQL注入的最有效方法之一 正则表达式检测是常见的SQL注入防御手段,但需要不断更新规则