禅道二次SQL注入到RCE漏洞分析
type
status
date
slug
summary
tags
category
icon
password
AI summary
漏洞简介
禅道是一款由青岛易软天创网络科技有限公司开发的国产开源项目管理软件,旨在帮助团队高效管理项目、任务分配和团队协作。
在preference函数中会把键值对插入数据库配置,然后在router::setControlFile中,会从数据库中读取配置信息,如果修改edition和vision参数,将恶意SQL语句注入到数据库配置中。当访问特定URL触发router::setControlFile时就会触发SQL,造成二次注入。
影响版本
漏洞分析
注入点
在
zentao/framework/router.class.php#setControlFile()中,当满足以下两个条件时,存在拼接SQL注入:$this->config->vision$this->config->edition不为open
moduleName在WORKFLOW表中存在
version的值有两个来源:- 配置文件:来自
config.php中的设置
- 数据库:存储在
zt_config表中
配置文件加载过程
在访问index.php的时候会创建应用实例,并根据配置文件初始化:
这里调用了
$this->loadMainConfig();来加载配置文件从数据库加载用户配置
在创建实例后,开始运行实例,在这个时候还从数据库中加载了配置
插入SQL语句至数据库
在
module/my/control.php#preference()中,系统直接将 POST 请求中的所有参数写入数据库配置,没有进行任何验证或过滤:使用如下PoC即可将SQL语句插入
zt_config
触发SQL注入
app实例跑起来之后,下面是路由解析的流程
这里以
-为分隔符,分割module和method
继续跟进
setControlFile(),由于app创建时传入的className为router所以这里会进入到子类
/framework/router.class.php的重载方法,也就来到了注入点。此时只需要寻找一个在WORKFLOW中存在的模块访问即可

命令执行
拿到后台账户权限后,可以添加定时任务。当任务类型为system时,将会调用系统命令


然后把执行结果存入日志了
这里的$task任务来源于
zt_queue
漏洞复现
Loading...