![c96ab789a8d8963d1c622d63e7b66ed4.png](https://i-blog.csdnimg.cn/blog_migrate/ea69082b11475a5acbab828e72577c51.jpeg)
一、漏洞介绍
软件及漏洞简介:wordpress File Manager插件 是最强悍和便利的WordPress文件管理插件,可以直接在WordPress后台管理你网站的所有文件,可以完全替代FTP,甚至功能要比FTP还要丰富,可以在线上传、下载、压缩、解压、查看、编辑文件等。WordPress插件WPFileManager中存在一个严重的0day安全漏洞,攻击者可以在安装了此插件的任何WordPress网站上任意上传文件并远程执行代码。
漏洞成因:由于没有任何的访问限制,导致库文件lib/php/connector.minimal.php可以被直接访问。这个文件调用了并初始化了elFinder类,导致任意用户可以直接调用elFinder类中的文件等操作命令,包括文件上传等,可以造成任意代码执行。
漏洞原理:当去访问connector.minimal.php时它会去创建一个elFinder连接器该连接器会去执行内部的exec方法去创建我们指定的文件,而且最重要的是我们可以无权限去访问到connector.minimal.php所以我们可以利用抓包工具来构造一个请求让框架帮我们创建一个我们指定的后门文件。
受影响版本:File Manager 6.0-6.8
二、环境搭建
1. 安装wordpress
![bfa3a9e74d5cb4f9b44e380e280a1068.png](https://i-blog.csdnimg.cn/blog_migrate/0b393d31cded57c567b137745f34cf53.jpeg)
2. File manager插件安装
![4620e11718c7cfc9ca961e36c46463fd.png](https://i-blog.csdnimg.cn/blog_migrate/1ddb0bbed3ce5b0756968a10fbb5b1ef.png)
3. 插件安装成功
![c2fc03ee1181ffe82c252560d89741ad.png](https://i-blog.csdnimg.cn/blog_migrate/73396a9814149e60e51b40fe6a2787f6.png)
三、漏洞复现
1、首先访问导致该项漏洞函数地址,返回特征显示存在该漏洞。
![2800bd7ae2a4df2d324edb48fd4f00d1.png](https://i-blog.csdnimg.cn/blog_migrate/a3940ac3aeec8c88a727a08447f1855f.png)
2、使用漏洞利用程序对地址进行测试,可执行当前用户命令。
![4401ab63fc11cb9069680e1dc6311b99.png](https://i-blog.csdnimg.cn/blog_migrate/12796acf280f863baf9b78dc77351a84.jpeg)
3、由于该漏洞主要表现为外界可以无权限限制去访问FileManger插件下的connector.minimal.php文件;所以该漏洞不是word press框架造成的而是由它的file Manager插件造成的,漏洞点位于file Manager的connector.minimal.php文件,具体wordpress/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php。
我们现在对connector.minimal.php这个文件的主要代码逻辑进行分析,看看它是如何帮助我们实现任意文件上传的。如下图在connector.minimal.php的最后实例化了一个elFinder连接器在执行run()方法。
![c5c53cb8732ee7cf910846c5d17a01fc.png](https://i-blog.csdnimg.cn/blog_migrate/c1cfba89ef5d5c364e854e142e06f21f.jpeg)
4、跟进elFiderConnector中的run()方法如下图1第一个红框把接收到的数据都存储到$src中;再把cmd参数的数据赋值给$cmd;(其实cmd中的参数就是指定要去调用的方法名);同时我们可以通过commandExists中的commands[$cmd]知道该$cmd方法需要那些参数。
![4622ddff992bee5b58a1036490836b35.png](https://i-blog.csdnimg.cn/blog_migrate/9d4669108ed0cdb7ec71b4097036b718.jpeg)
![1b6d7cec116447d304b861fa6730fc2b.png](https://i-blog.csdnimg.cn/blog_migrate/0bb470c8b0a39c1094e1dcb7be5676d7.jpeg)
![83ac887d77173c5c4d2cce8a05af38e2.png](https://i-blog.csdnimg.cn/blog_migrate/01577b7837c2d586f9140a42b7b4ec00.jpeg)
5、接着往下看如下图commandArgsList()方法可以获取到$cmd对应的命令参数列表;最后带上需要执行的方法名($cmd)和该方法所需要的参数($args)去调用elFinder连接器的exec()方法进行文件上传操作。
![a06c4f7f5fdc892e52af0b4000c58dde.png](https://i-blog.csdnimg.cn/blog_migrate/0fd4ebc0b7c5f1660a6552dceefda5e5.jpeg)
原文链接