WordPress的FileManager插件任意文件上传漏洞分析与利用及exp漏洞利用工具

黑夜   ·   发表于 2020-09-14 22:36:32   ·   代码审计

0x01 个人说明

这是我第一份做安全相关的工作,公司让我去分析最近新报出来的wordPress的FileManager插件漏洞,所以就抱着试试的态度去分析并写了几个简单的exp利用工具,技术菜请勿喷。
这里我就先简单的介绍一下wordpress和fileManager,wordpress其实就是一个建站框架,它可以让你快速的建一个属于你自己的个人博客或者论坛web系统;而fileManager其实就是它的一个插件而已,有了它管理员就方便管理服务器上的文件,你就把它看成是wordpress的文件管理器就行了。据目前统计正在使用wordpress和fileManager的站点有很多哦,而且这个漏洞刚出来没多久哦

0x02 环境搭建

框架:WordPress5.4.2
插件:fileManager6.0
环境系统:win10
服务器环境:phpstudy
开发语言:php7.3.4

0x03 漏洞重现

该漏洞的影响范围fileManager6.0-6.8

  1. 如下图是我提前搭建好的wordpress环境我们可以利用fileManager插件来管理我们的文件
  2. 利用抓包工具就可以向该目录上传任意文件,重点就是在这里了没有权限也可以上传如下图1;再利用抓包工具向创建的heiye.php文件中插入我们想插入的数据如下图

  3. 从上面两图的操作便知我们可以上传一个php文件,而且我们可以向php文件中任意插入数据,所以想想也开心,如果插入一句话木马呢哈哈哈哈。

0x04 漏洞分析

  1. 造成该漏洞的主要原因是外界可以无权限限制去访问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()方法
  2. 跟进elFiderConnector中的run()方法如下图1第一个红框把接收到的数据都存储到$src中;再把cmd参数的数据赋值给$cmd;(其实cmd中的参数就是指定要去调用的方法名);同时我们可以通过commandExists中的commands[$cmd]知道该$cmd方法需要那些参数如下图2

  3. 接着往下看如下图commandArgsList()方法可以获取到$cmd对应的命令参数列表;最后带上需要执行的方法名($cmd)和该方法所需要的参数($args)去调用elFinder连接器的exec()方法进行文件上传操作

0x05 漏洞利用

  1. 进过上面的分析我们知道当我们去访问connector.minimal.php时它回去创建一个elFinder连接器该连接器会去执行内部的exec方法去创建我们指定的文件,而且最重要的是我们可以无权限去访问到connector.minimal.php所以我们可以利用抓包工具来构造一个请求让框架帮我们创建一个我们指定的文件heiye.php;我们先构造一个能够调用fileManager插件底层创建文件的方法如下图请求成功后fileManager就会在/wordpress/wp-content/plugins/wp-file-manager/lib/files目录下创建一个heiye.php文件
  2. 现在我们再利用burp发包,构造一个能够调用fileManager插件底层能向指定文件插入数据的方法如下图这样我们就可以把这个一句话木马插入到我们刚刚创建的heiye.php文件中(target中的aGVpeWUucGhw其实经过base64解码后就是heiye.php)
  3. 一切准备就绪,现在我们去请求我们的一句话木马如下图

0x06 修复方案

  1. 更新fileManager版本到最新版本

    0x07 工具利用

    该工具使用python2.7开发的
  2. 使用命令python WPFileMangerTool.py -u http://127.0.0.1/ —fileName heiye.php —content “<?php eval($_REQUEST[1]) ?>”如下图
  3. 访问我们用工具上传成功的一句话木马如下图

    我觉得这个工具很简单所以就不上传了,大佬们肯定很容易就能写一个比我这个牛逼100倍的工具
用户名金币积分时间理由
和谐文明 5.00 0 2020-09-20 14:02:46 一个受益终生的帖子~~
Track-聂风 100.00 0 2020-09-18 18:06:57 一个受益终生的帖子~~

打赏我,让我更有动力~

1 Reply   |  Until 2020-9-20 | 1158 View

jasonjhu
发表于 2020-9-20

学到了,谢谢:),请教一下POST参数中target=l1_是作为保留字么?

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.