禅道 11.6版本 后台漏洞 复现和审计

本文揭示了禅道11.6版本中的SQL注入漏洞和任意文件读写漏洞,从参数传递追踪到核心代码漏洞细节,同时讨论了RCE的实现路径,包括文件写入、包含漏洞的结合利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


禅道 11.6版本下载地址
本次复现环境windows


先搞清楚禅道参数的传递方式,进入index.php慢慢看
先发现了这个语句:
在这里插入图片描述

这个导致禅道的查看版本信息的漏洞 跟进看一下

查看版本漏洞

复现payload:http://ip/zentao/index.php?mode=getconfig
在这里插入图片描述

在这里插入图片描述
跟进exportConfig()
文件位置:zentao\framework\router.class.php
在这里插入图片描述
调用父类的exportConfig() 跟进发现信息泄露的根源。
zentao\framework\base\router.class.php

在这里插入图片描述


传参方式:
在index.php中发现app对象的创建跟进
在这里插入图片描述
根据$app找到了config中的解析配置
zentao\config\config.php
有三种请求类型 PATH-INFO类型模式的分割符为‘-’

在这里插入图片描述
根据index.php中的parserequest()找到将url分割为参数的方法。找到parserequest()方法
在这里插入图片描述

zentao\framework\base\router.class.php 跟进setRouteBypathinfo()
在这里插入图片描述

在这里插入图片描述

发现分割方式为:将url分割为 模块名 : 方法名
参数传递过程 在index.php中总体流程就是依次调用如下这些
在这里插入图片描述
最后关键点在于调用getModel()方法
zentao\module\api\control.php
在这里插入图片描述

例如这个pauload:http://ip/www/api-getModel-api-sql-sql=select+account,password+from+zt_user
根据getModel方法中的第50行 参数调用大致流程如下:
调用方式为 先调用api模块中的getModel方法然后getModel方法再调用api模块中的sql方法 查询参数为sql=select+account,password+from+zt_user

sql注入

接着上面的 跟进api模块sql方法
zentao\module\api\model.php
在这里插入图片描述

sql方法判断查询语句中以select开头则执行查询。
并未做任何安全过滤。导致sql注入
http://ip/www/api-getModel-api-sql-sql=select+account,password+from+zt_user
在这里插入图片描述


任意文件读取

本地在xampp\zentao\module\api目录下创建文件123内容为123
复现:http://127.0.0.1/zentao/api-getModel-file-parseCSV-fileName=123
在这里插入图片描述
调用流程为:
api模块getModel方法调用file模块parseCSV方法并传入参数fileName=123
直接找到parseCSV方法:

在这里插入图片描述

直接将内容写入$content并整理输出。
linux可直接读取/etc/passwd,windows为什么不能读取带有后缀的文件呢?比如:C:/windows/win.ini
因为下面的parsePathInfo()函数将路径处理了:
在这里插入图片描述


rce

复现:
先将phphinfo写入文件bote
http://ip/zentao/api-getModel-editor-save-filePath=bote
在这里插入图片描述

然后利用文件包含导致命令代码执行。
http://ip//zentao/api-getModel-api-getMethod-filePath=bote/1

在这里插入图片描述
这次rce由下面两种漏洞组合造成:
1、任意文件写入
根据payload:api-getModel-editor-save-filePath=bote
调用editor模块将filePath=bote 传入save方法
直接找到save方法 ,解释写在图片注释中
zentao\module\editor\model.php
在这里插入图片描述

2、文件包含
根据payload:api-getModel-api-getMethod-filePath=bote/1
调用api模块getMethod方法。
在这里插入图片描述

注意:$fileName = dirname($filePath); 是返回目录路径 例:/tmp/bote/1.txt 返回:/tmp/bote
所以payload需要再包一层目录。
然后进入zentao\framework\base\helper.class.php , import方法 进行文件包含
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值