4月30日ExploitBox发布推文,称@dawid_golunski发现了Wordpress远程代码执行漏洞,自己说可以控制1/3的互联网,给出了youtube的视频链接
https://www.youtube.com/watch?v=ZFt_S5pQPX0
在官网https://exploitbox.io/ 中他们给出了获取POC的方法:
留下你的邮箱,他们公布漏洞细节,会给你第一时间发送POC的
然后就在凌晨3点,他们发了这么一份邮件:
不管怎样,总算是拿到了POC和漏洞细节,
邮件中的链接分别是:
https://exploitbox.io/vuln/WordPress-Exploit-4-6-RCE-CODE-EXEC-CVE-2016-10033.html
https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html
https://exploitbox.io/vuln/WordPress-Exploit-4-7-Unauth-Password-Reset-0day-CVE-2017-8295.html
打开链接查看之后,文章对于漏洞的发现写得十分的详细,从发现到绕过以及每一步的绕过方法,都有描述,但原文是英文,个人还是比较吃力的,但慢慢读就会发现绕过的思路还是很巧妙的
核心点就是作者提供了可用的针对WordPress的利用方法,利用的攻击向量就是exim4 MTA.
主要是PHPMailer漏洞(CVE-2016-10033)在WordPress Core代码中的体现,该漏洞不需要任何的验证和插件,在默认的配置情况下就可以利用。
在这里有一篇讲host注入的文章:
http://blog.a-way-out.net/blog/2015/11/06/host-header-injection/
拿到POC的最一开始就是直接去zoomeye,google去找wordpress的站,结果发现,利用成功的,
可以说几乎少到发指,翻回头来读人家实验室的文章,再看看网上大牛的分析,才明白了原因所在,最后得出结论,这个作者说的1/3有标题党的嫌疑,实际中并没有那么厉害的的影响,但还是需要注意的:
1.sendmail需要安装exim4扩展,(centOS6.7,ubuntu>14.04没有默认安装,还有就是linux的发行版都没装sendmail),所以需要先安装这个扩展
2.高版本的apache中host不能带有特殊字符(漏洞作者使用的是默认的apache2配置)
3.nginx+fpm情况下,server_name是nginx指定的,不会从host中取
4.POC中使用的是admin,但不一定每一个都是设置的是admin,需要改为存在的用户名
5.line:161 -m少了一个空格
6.另外访问wp-json/wp/v2/users即可拿到用户名
至于漏洞分析过程,网上的文章已经分析的十分详尽,下面是搭建环境的过程:
系统:ubuntu14.04,wordpress4.6
安装exim4
通过apt-get install exim4直接安装,
安装完的效果如下:
在网上有些人说需要安装sendmail,apt-get安装完会在系统建立sendmail的软连接,这个软连接直接指向了exim4,当然也就不需要再安装sendmail了。安装完之后会在系统的25号端口建立监听。
安装mysql
apt-get install mysql-server
apt-get install mysql-client
apt-get install php5-mysqlnd-ms
新建数据库:
mysql> create database wp_myblog;
mysql> grant all privileges on wp_myblog.* to 'wordpress'@'localhost' identified by 'wordpress';
mysql>flush privileges;
配置apache:
解压WordPress的zip包到web目录,设置apache2配置文件。
apach2的简单配置如下,就是设置DocumentRoot指向刚才解压后WordPress的路径:
vim /etc/apache2/sites-enabled/000-default.conf 3536 # The ServerName directive sets the request scheme, hostname and port that
37 # the server uses to identify itself. This is used when creating
38 # redirection URLs. In the context of virtual hosts, the ServerName
39 # specifies what hostname must appear in the request's Host: header to
40 # match this virtual host. For the default virtual host (this file) this
41 # value is not decisive as it is used as a last resort host regardless.
42 # However, you must set it for any further virtual host explicitly.
43 #ServerName www.example.com
44 ServerName www.a.com
46 DocumentRoot /var/www/WordPress-4.6/
配置WordPress wp-config
编辑wp-config.php,首先sudo cp wp-config-sample.php wp-config.php,修改如下:
23 define('DB_NAME', 'wp_myblog');
24
25 /** MySQL database username */
26 define('DB_USER', 'wordpress');
27
28 /** MySQL database password */
29 define('DB_PASSWORD', 'wordpress');
重启进程
最后重启数据库,apache2
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/mysql start
重启完之后访问我们的设置的IP或者域名,按照提示一步步设置即可。不过得记住具体设置的用户名或者email地址。原poc的作者测试使用的是admin这个用户名,但是实际情况并不一定是这样的。
附docker环境链接:
https://github.com/phith0n/vulhub
参考来源廖新喜,qz,Tomato菜的要死,p师傅,感谢