禅道11.6 后台多个漏洞复现分析
原创 Arice
来源于公众号:雷神众测 昨天
来自专辑:禅道11.6后台漏洞复现分析
原文链接:https://mp.weixin.qq.com/s?__biz ... 8a1fcbc183d841c4#rd
声明 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 前言 根据前一篇关于的分析文章,我们可以知道数据流向以及传参结构。
No.1任意文件读取 http://***.*.*.*/zentaopms11.6/www/api-getModel-file-parseCSV-fileName=/etc/passwd
通过这个payload结合我们上一篇文章我们可以快速的知道
这是使用一个api模块,调用getModel方法,然后传了三个参数为file、parseCSV、fileName。并且加载file模块中的parseCSV的方法,传参fileName
相当于是方法调用方法。
接下来我们找到api模块的getModel方法,文件为/module/api/control.php
etModel方法传入三个参数,为模块名、方法名字、还有参数,分别payload中的对应file、parseCSV、fileName(原因在上一篇有提到)
通过第50行代码,以file为模块名、parseCSV为方法名去调用,文件名为/module/file/model.php
这里需要注意一个点就是如果读取的文件是.txt、.php这种带后缀的,会被/framework/base/router.class.php中的parsePathInfo方法过滤掉
可以成功读取文件,对文件内容进行了处理过滤部分参数。
No.2任意文件写入 http://***.*.*.*/zentaopms11.6/www//api-getModel-editor-save-filePath=/tmp/1234
POST:fileContent=<?php phpinfo();?> 同理,用api模块的getModel方法去调用editor模块的save方法,并传入filePath参数
通过第50行代码,调用editor模块的save方法并传入filePath参数,文件名为:/module/editor/model.php
第368行代码提示有一个fileContent以post形式进行传参
发现下述并未做有效过滤可以写入任意代码
然后构造参数进行传参
发现成功写入
No.3文件包含 http://***.***.**.***/zentaopms11.6/www/api-getModel-api-getMethod-filePath=/tmp/1/1 上述payload,用api模块的getModel方法去调用api模块的getMethod方法,并传入filePath参数,文件名为:/module/api/model.php
在第18行,进入到了另外一个方法中 if(!class_exists($className)) helper::import($fileName); 进入到/framework/base/helper.class.php中的import方法中,在第195行被include包含执行代码。
realpath函数是显示出该目录的绝对路径
例子:
<?phpecho realpath('/tmp/test');?>
输出结果:
/private/tmp/test
这里有一个点,按照上一步我们写入的/tmp/test 文件来看。我们这里包含/tmp/test就可以了。
但是实际上是报错的
读代码发现上述代码中 $fileName = dirname($filePath); dirname函数返回的是目录名称部分(不含文件名,默认最末级为文件名) 例子:
<?phpecho dirname("c:/testweb/home.php") . "\n";echo dirname("/testweb/home.php") . "\n";echo dirname("C:/test/home.php/"). "\n";echo dirname("C:/tttt/home.php/1234") . "\n";?>
输出的结果对应为:
c:/testweb/testwebC:/testC:/tttt/home.php
发现会把最后一级的内容删除掉。所以我们在包含的时候需要在后面加一级 http://***.***.**.***/zentaopms11.6/www/api-getModel-api-getMethod-filePath=/tmp/test/1234 最终执行结果为
参考链接:
|