禅道二次 sql 注入分析
字数 1078 2025-08-22 12:23:19
禅道二次SQL注入漏洞分析与复现
漏洞概述
禅道项目管理软件存在二次SQL注入漏洞,攻击者可以通过精心构造的请求将恶意SQL语句存入数据库,然后在后续操作中触发执行,导致数据库信息泄露或更严重的后果。
环境要求
- 禅道版本:特定受影响版本(需满足漏洞条件)
- 环境搭建参考:禅道官方安装指南
漏洞分析
注入点分析
-
初始注入点:
- 文件路径:
app/zentao/module/my/control.php - 关键方法:对POST传入参数未做任何处理,直接传入
setItem方法
- 文件路径:
-
setItem方法分析:
- 文件路径:
app/zentao/module/setting/model.php - 对value的处理:仅进行
strval转换 - 对key的处理:通过
parseItemPath方法解析配置项路径
- 文件路径:
-
parseItemPath方法:
- 创建一个stdClass对象
- 解析owner、module、section、key等信息作为对象属性
- 攻击者可控制key和value
-
SQL执行流程:
- 处理后的结果传递给data方法
- 使用quote方法转义单引号
- 最终通过exec方法直接执行SQL语句,存入zt_config表
触发点分析
-
二次注入原理:
- 代码从zt_config表获取数据
- 数据被拼接到其他表的where条件中
- 关键点:不能经过链式操作函数(这些函数会转义数据)
-
查找方法:
- 搜索
select[^\r\n]+_config正则表达式 - 结合zt_config表字段和注入点条件:
- owner、section、vision为空
- module为common
- key和value可控
- 搜索
-
关键调用链:
- 使用
getSysAndPersonalConfig方法 - $account为空时调用
mergeConfig方法 mergeConfig将数据库配置项($dbConfig)合并到现有config对象
- 使用
漏洞复现步骤
-
存储恶意SQL语句:
- 构造特殊请求将恶意SQL语句存入数据库
-
触发执行:
- 访问product页面或其他触发点
- 恶意SQL语句被执行
-
验证方式:
- 直接查看数据库验证
- 通过登录等操作观察效果
防御建议
- 对所有用户输入进行严格的过滤和转义
- 使用参数化查询或预处理语句
- 实施最小权限原则,限制数据库账户权限
- 及时更新到官方修复版本
总结
该漏洞展示了二次SQL注入的典型特征:攻击者首先将恶意代码存入数据库,然后在后续操作中触发执行。这种漏洞往往难以通过常规的代码审计发现,需要深入理解应用程序的数据流和控制流。