linux调用ocx插件_Wordpress file manager插件任意文件上传

白斩鸡@卫兵实验室

近日,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();

437f841460a943cb7a47213b49aaf661.png

elFinderConnector::run()

dcd3411ffa1f848102ecbc8185d96c22.png

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

ceae550dd50857f9de9b3f42a4d84821.png

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

d1a43c4746357836a3a12e464ec54f33.png

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

138795273f9186bea049ca1f9769ab73.png

4f5919f3ccc4c7c455369a0fe51c1fb2.png

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

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

具体exec方法如下介绍

a46acbcd724b64c5a7192c10c71e511b.png

elFinder::exec(\$cmd, \$args)

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

644d84695ce9c260c8fa9f9738ea41b7.png

进入$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将会成为后面文件上传路径的前缀。

53483eb63a5805471eaf9e4672668c10.png

4e53b55d07aeac96c52e7e2d2adaf22a.png

37037299ee1eaf78d4ee1d69fdb0d34a.png

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

f2be7398f8f45cc963ac64e8c0e6164f.png

elFinder::upload(\$args)

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

0b1043150b9adc562a38038ff2cba162.png

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

207afcf714dbb83bd090ee274112e22a.png

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

b84f2a6c4539abe86b20e4b7187f2aab.png

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

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

ee995d84d56407b45be31bcbc07f7ac5.png

跟进dir($dst)

d2991c00664afc2f493d666cc75f8f1b.png

跟进file($hash)

d64d0550c03f302873829064bf72b14e.png

state(\$path)

f04a2d26f279b99d9f0cb0e2d7d5e90d.png

decode(\$hash)

9bbb00c3977dd57c6282aa7a5fc84b4d.png

从上面的代码看来就是把$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

b2540854e756f20e323eab9bac2e96c5.png

补丁修复方式

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

  2. 增加了.htaccess

cfce9c0b3463cb0b8cebe97ee8115070.png

关于我们

bd9a3b92168457db7d15dece9adbd0d3.png

人才招聘

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

工作地点:

1.杭州;

岗位职责:

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

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

任职要求:

1、2年以上windows逆向工作经验。

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

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

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

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

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

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

工作地点:

1.杭州;

岗位职责:

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

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

任职要求:

1、2年以上Linux逆向工作经验。

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

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

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

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

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

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

工作地点:

1.杭州;

岗位职责:

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

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

任职要求:

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

2、熟练掌握windbg、ida、gdb等调试工具;

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

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

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

Web安全研究员

工作地点:

1.杭州;

岗位职责:

1、安全攻防技术研究,最新web应用及中间件(tomcat、jetty、jboss等等)、框架(struts、spring、guice、shiro等等) 组件(freemarker、sitemesh等等)漏洞挖掘研究;

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

任职要求:

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

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

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

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

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

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

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

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

联系人:Nike
邮箱:nike.zheng@dbappsecurity.com.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派安装mysql5.6_Linux上安装MySQL5.6

OS & MySQL的版本号和配置:MySQL Version: 5.6.19Linux Version: Linux boston.oracle.com 2.6.18-164.el5 #1 SMP Thu Sep 3 02:16:47 EDT 2009 i686 i686 i386 GNU/Linux一。下载MySQL安装软件。请到www.oracle.com去找DATABASE DOWNLOAD。下载MySQL须要注冊一…

java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略

一、性能测试Ⅰ.测试方法微基准性能测试可以精准定位到某个模块或者某个方法的性能问题,例如对比一个方法使用同步实现和非同步实现的性能差异宏基准性能测试宏基准性能测试是一个综合测试,需要考虑到测试环境、测试场景和测试目标测试环境:模…

java在线编辑器_微软开源在线代码编辑器——Monaco Editor

介绍Monaco Editor是为VS Code提供支持的代码编辑器,运行在浏览器环境中。编辑器提供代码提示,智能建议等功能。供开发人员远程更方便的编写代码。移动浏览器或移动Web框架不支持Monaco编辑器。简单的理解就是VSCode中的代码编辑器和Monaco Editor使用的…

java的核心类库_Java核心类库,集合框架

Java集合框架的由来:Java最初版本只为最常用的数据结构提供了很少的一组类:比如Vector、Stack、Hashtable、BitSet、Enumerrationr接品,其中Enumerrationr接口提供了一种用于访问任意容器中各个元素的抽象机制。这是一种很明智的选择&#xf…

js splice方法_我用JS刷LeetCode | Day 8

如有兴趣,微信搜索「九零后重庆崽儿」,我们一起学前端。删除排序数组中的重复项:说明:现阶段的解题暂未考虑复杂度问题首发地址:我用JS刷LeetCode | Day 8​www.brandhuang.comQuestion:Given an array nums and a val…

js 根据掩码位计算可用ip地址_变长子网掩码:轻松分配IP地址(下)

Hello,World.如约而至土土来更文咯[吐舌]图1首先先揭晓一下上一篇文章的答案那就是192.168.1.0/24与192.168.2.0/24不能ping通192.168.1.0/16与192.168.2.0/16能ping通图2还记得土土的提示吗?网络号相同则能够ping通那么根据/24可以看出这两个IP地址有24个网络号,即…

java break递归_【Java】递归总结

摘要:大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。对一些简单的递归问题,我们总是惊叹于递归描述问…

[翻译] RDVTabBarController

RDVTabBarController https://github.com/robbdimitrov/RDVTabBarController 效果: Supports iPad and iPhone 支持iPad与iPhoneSupports landscape and portrait orientations 支持横竖屏切换动画Can be used inside UINavigationController 可以用在UINavigationC…

内存位置访问无效 midas.dll_java并发之内存模型

作者:killianxu来源:https://www.cnblogs.com/killianxu/p/11665903.htmljava内存模型知识导图一 并发问题及含义并发编程存在原子性、可见性、有序性问题。原子性即一系列操作要么都执行,要么都不执行。 可见性,一个线程对共享变量的修改&am…

程序一旦发觉写得不理想,那就得重构它

早上有写一篇《设计模式--建造者(Builder)模式》http://www.cnblogs.com/insus/p/4179620.html。是在ASP.NET环境中,应用与演示设计模式(Builder)。现在Insus.NET从博文中最后的下载链接下载取源程序,它是有写得不够理想,现在重构它。问题点&…

template标签_C++核心准则T.65:使用标签分发提供函数的不同实现

T.65: Use tag dispatch to provide alternative implementations of a functionT.65:使用标签分发提供函数的不同实现Reason(原因)A template defines a general interface.模板定义普遍接口。Tag dispatch allows us to select implementations based on specific properties…

Windows服务器学习篇:服务器连接与退出

此文是我早期在公司内部发布的一篇给予新入职程序员基础技术培训的文章,非常基础简单,现拿出来给大家分享。当然,已工作人士可直接忽略... 一、Windows服务器连接 1. 在桌面菜单中的“运行”里,输入mstsc命令,然后回车…

nginx动静分离配置_Nginx动静分离

动静分离动静分离,就是将JSP、Servlet等动态资源交由Tomcat或其他Web服务器处理,将CSS、js、image等静态资源交由Nginx或其他Http服务器处理,充分发挥各自的优势,减轻其他服务器的压力,搭建更为高效的系统架构。Nginx动…

java thread 名称_Thread类常用方法之设置线程名称

package com.itheima.demo02.setName;/*设置线程的名称:(了解)1.使用Thread类中的方法setName(名字)void setName(String name) 改变线程名称,使之与参数 name 相同。2.创建一个带参数的构造方法,参数传递线程的名称;调用父类的带参构造方法,把线程名称传递给父类,让…

成员变量和局部变量的区别_Java 变量类型

点击上方“蓝字”带你去看小星星今天主要学习Java变量类型,主要是局部变量、实例变量和类变量(静态变量)。Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:type identifier [ value][, identifier [ value] ...] ;格式说明…

【云图】如何制作附近实体店的地图?-微信微博支付宝

【云图】如何制作附近实体店的地图?-微信微博支付宝 原文:【云图】如何制作附近实体店的地图?-微信微博支付宝 摘要: 附近连锁店地图与全国连锁店地图,最大的区别就是: 1、附近连锁店地图需要先定位,然后搜…

php curl跨域cookie_PHP curl模拟文件上传(接口请求实现跨域文件中转)

3e2f08c0c11a8416dd107bbfc9159718.jpg客户端代码请求参数参数类型参数说明$urlstringpost提交的服务器url路径$data数组表单数据$files数组表单文件public function curl_custon_postfields($url, array $data array(), array $files array()){$curlfiles array();foreach …

oracle 分页_80分页查询,不止写法

据孔老先生说,茴香豆的茴字有四种写法,那oracle的分页查询又有多少种写法呢?分页查询,其实本质上就是topN查询的变种, 如果把topN的一部分结果集去掉,就变成了分页.topN的基本写法,两层select,第一层先order by,第二层再用rownum:select owner,object_name,object_id,rownum a…

GitHub上创建组织

4.3. 组织和团队 GitHub 在早期没有专门为组织提供账号,很多企业用户或大型开源组织只好使用普通用户账号作为组织的共享账号来使用。后来,GitHub推出了组织这一新的账号管理模式,满足大型开发团队的需要。 组织账号是不能用来登录的&#xf…

Hypothesis, 一个很少人会用的Python测试库

在软件开发中,测试是保证代码质量和功能正确性的重要环节。为了提高测试的覆盖率和效率,开发者们创造了许多测试框架和工具。其中 Hypothesis 是一个强大且受欢迎的 Python 测试库,它利用属性基测试的思想,可以自动生成测试数据并…