Wordpress file manager插件任意文件上传

admin 2020年9月7日13:48:08评论439 views字数 3378阅读11分15秒阅读模式

白斩鸡@卫兵实验室

近日,Wordpress 插件file manager被爆出严重0day漏洞,本着技术研究角度,和大家分享、探讨其漏洞原因。

该修复程序已在同一天发布,并且WP File Manager插件6.9版通过删除允许未经授权的文件上传访问的端点来解决当前问题。影响版本。

该安全漏洞存在于文件管理器版本,范围从6.0到6.8。WordPress的统计数据表明,目前约有52%的安装易受攻击。由于File Manager的700,000个站点中已安装的漏洞中有一半以上,因此损坏的可能性很高。运行任何这些版本的网站都应尽快更新到6.9

影响范围

file manager 6.0至6.8

漏洞报告

漏洞的文件为connector.minimal.php.
首先对
$opts进行了初始化,这里存储了后面上传文件存储路径root信息。
通过创建
elFinderConnector对象,进而调用$connector->run();

Wordpress file manager插件任意文件上传

elFinderConnector::run()

Wordpress file manager插件任意文件上传

方法限制了请求为POST。并且读取了所有的请求参数保存到$src中。其中$cmd为传递cmd变量

Wordpress file manager插件任意文件上传

随后对通过循环foreach ($this->elFinder->commandArgsList($cmd) as $name => $req)来对$src进行校验,需要符合请求方法的参数类型。

Wordpress file manager插件任意文件上传

通过elFinder::commandArgsList($cmd)中我们查看$this->commands发现了可以调用的方法(意味着我们可以直接调用以下列表的所有方法,例如创建文件、创建文件夹、删除文件等等)

Wordpress file manager插件任意文件上传

Wordpress file manager插件任意文件上传

完成变量校验后就进行一次input_filter(addslashes和去除0截断)随后进入$this->output($this->elFinder->exec($cmd, $args));执行真正调用的方法代码。


根据上面可用方法的array,我们控制$cmd=upload,即可调用upload方法。

具体exec方法如下介绍

Wordpress file manager插件任意文件上传

elFinder::exec($cmd, $args)

当我们控制$cmd=upload时,遇到第一个分支。意味着我们需要传入一个$target变量或$dst变量。

Wordpress file manager插件任意文件上传

进入$this->volume($dst)可以看到是对$this-volume进行了选择。

id分别为t1_l1_,我们将选择l1_,即传入的$target必定为l1_前缀。

之所以这么做的理由是由于l1_中的root=/Users/steven/Desktop/code/phpCode/wordpress/wp-content/plugins/wp-file-manager/lib/files,而t1_中为root=/Users/steven/Desktop/code/phpCode/wordpress/wp-content/plugins/wp-file-manager/lib/files/.trash

而这个$root将会成为后面文件上传路径的前缀。

Wordpress file manager插件任意文件上传

Wordpress file manager插件任意文件上传

Wordpress file manager插件任意文件上传

之后进入动态调用,通过$result = $this->$cmd($args);调用upload方法。

Wordpress file manager插件任意文件上传

elFinder::upload($args)

一开始初始化很多变量,但是我们不必要传入。并且也对volume进行了取值,后续还进行了校验。

Wordpress file manager插件任意文件上传


在3313行foreach ($files['name'] as $i => $name)通过foreach对每个上传的文件进行处理。

Wordpress file manager插件任意文件上传

许多分支并没有执行,直接来到以下代码if (!$_target || ($file = $volume->upload($fp, $_target, $name, $tmpname, ($_target === $target) ? $hashes : array())) === false),执行真正的upload函数。

Wordpress file manager插件任意文件上传

elFinderVolumeDriver::upload($fp, $dst, $name, $tmpname, $hashes = array())

在这个if判断中,需要关注dir($dst)

Wordpress file manager插件任意文件上传

跟进dir($dst)

Wordpress file manager插件任意文件上传

跟进file($hash)

Wordpress file manager插件任意文件上传

state($path)

Wordpress file manager插件任意文件上传

decode($hash)

Wordpress file manager插件任意文件上传


从上面的代码看来就是把$target的值截取前面volume的id,剩下的做一个base64解码,之后与volume['root']进行拼接,如果解码之后的值为\则直接设volume['root']为上传路径,如果不是则需要cache索引。如果直接$target解码为../../css等则会校验不通过,直接报错。
最终调用到
if (($path = $this->saveCE($fp, $dstpath, $name, $stat)) == false)实现了文件的上传。上传路径为wp-content/plugins/wp-file-manager/lib/files/bzj.php

Wordpress file manager插件任意文件上传

补丁修复方式

  1. 删除了connector.maximal.php-distconnector.maximal.php两个文件

  2. 增加了.htaccess


Wordpress file manager插件任意文件上传


关于我们

Wordpress file manager插件任意文件上传

人才招聘

二进制安全研究员(Windows内核方向)

工作地点:

1.杭州;


岗位职责:

1、负责研究Window内核相关漏洞利用技术;

2、负责分析Window内核漏洞的原理及缓解措施;


任职要求:

12年以上windows逆向工作经验。

2、熟悉windows底层架构、运行机制,熟悉汇编语言 C/C++语言,熟悉win32/64开发,并有相关开发经验;

3、熟悉windows驱动开发、熟悉windows平台内核架构;能熟练运用Windows平台下的软件调试方法。

4、熟练使用idawindbg等调试软件工具调试分析漏洞。

5、有CVE编号、内核研究成果者优先;

6、具备良好的团队沟通、协作能力、良好的职业道德。


二进制安全研究员(Linux内核方向)

工作地点:

1.杭州;


岗位职责:

1、负责研究Linux内核相关漏洞利用技术;

2、负责分析Linux内核漏洞的原理及缓解措施;


任职要求:

12年以上Linux逆向工作经验。

2、熟悉Linux底层架构、运行机制,熟悉汇编语言 C/C++语言,熟悉x86/64开发,并有相关开发经验;

3、熟悉Linux驱动开发、熟悉Linux平台内核架构;能熟练运用Linux平台下的软件调试方法。

4、熟练使用idagdblldb等调试软件工具调试分析漏洞。

5、有CVE编号、内核研究成果者优先;

6、具备良好的团队沟通、协作能力、良好的职业道德。


二进制安全研究员(系统应用方向)

工作地点:

1.杭州;


岗位职责:

1、负责安全技术研究,跟踪国内外最新的安全技术以及安全漏洞的追踪;

2、负责进行二进制漏洞挖掘,包括不限于浏览器、chakara引擎、js引擎、officepdf等等各种二进制类应用;


任职要求:

1、能主动关注国内外最新安全攻防技术,并在自己擅长和兴趣的领域能够进行深入的学习、研究;

2、熟练掌握windbgidagdb等调试工具;

3、熟悉各类二进制安全漏洞原理(堆溢出、栈溢出、整数溢出、类型混淆等等)以及各种利用技术;

4、能够无障碍阅读英文技术文档;

5、具备良好的团队沟通、协作能力、良好的职业道德。


Web安全研究员

工作地点:

1.杭州;


岗位职责:

1、安全攻防技术研究,最新web应用及中间件(tomcatjettyjboss等等)、框架(strutsspringguiceshiro等等组件(freemarkersitemesh等等)漏洞挖掘研究;

2、跟踪分析国内外的安全动态,对重大安全事件进行快速响应;


任职要求:

1、了解常见的网络协议(TCP/IP,HTTP,FTP)

2、熟练使用Wireshark等抓包工具,熟悉正则表达式;

3、掌握常见漏洞原理,有一定的漏洞分析能力;

4、具备phppythonjava或其他相关语言编码能力;

5、对常见waf绕过有一定的基础经验;

6、具备一定的文档编写能力,具备良好的团队共同能力;

7、对安全有浓厚的兴趣,工作细致耐心。


感兴趣的小伙伴请联系Nike,或将简历投送至下方邮箱。(请注明来源“研究院公众号”,并附带求职岗位名称)

联系人:Nike
邮箱:[email protected]


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年9月7日13:48:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Wordpress file manager插件任意文件上传https://cn-sec.com/archives/121694.html

发表评论

匿名网友 填写信息