Joomla 3.4.4-3.6.3 Account Creation &Privilege Escalation测试记录
0x00 简介
涉及漏洞:
- CVE-2016-8869
- CVE-2016-8870
利用上述漏洞,攻击者可以注册特权用户
POC:
https://github.com/XiphosResearch/exploits/tree/master/Joomraa
https://www.exploit-db.com/exploits/40637/?rss
分析文章:
http://paper.seebug.org/88/
http://paper.seebug.org/86/
注:
0x01和0x02内容节选自分析文章
http://paper.seebug.org/88/
http://paper.seebug.org/86/
0x01 CVE-2016-8870
漏洞影响
网站关闭注册的情况下仍可创建用户
影响版本
3.4.4 to 3.6.3
漏洞原理
存在两个用于用户注册的方法:
位于components/com_users/controllers/registration.php中的UsersControllerRegistration::register()
位于components/com_users/controllers/user.php中的UsersControllerUser::register()
相对于UsersControllerRegistration::register(),UsersControllerUser::register()的实现中并没有这几行代码:
// If registration is disabled - Redirect to login page.
if (JComponentHelper::getParams('com_users')->get('allowUserRegistration') == 0)
{
$this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false));
return false;
}
这几行代码是检查是否允许注册,也就是说如果我们可以用UsersControllerUser::register()这个方法来进行注册就可以绕过这个检测
补丁分析
官方删除了UsersControllerUser::register()方法
注:
以上引用自http://paper.seebug.org/86/
0x02 CVE-2016-8869
漏洞影响
网站关闭注册的情况下仍可创建特权用户
影响版本
3.4.4 to 3.6.3
漏洞原理
构造特殊的请求包实现对用来表示权限的groups进行赋值
补丁分析
官方删除了UsersControllerUser::register()方法
注:
以上引用自http://paper.seebug.org/88/
0x03 实际测试
测试系统:
Win8.1 x86
1、搭建php环境
下载安装phpStudy
安装后如图
配置目录为:C:\WWW
2、配置Joomla环境
下载3.6.3版本的Joomla,地址如下:
https://github.com/joomla/joomla-cms/releases/download/3.6.3/Joomla_3.6.3-Stable-Full_Package.tar.gz
解压后将文件放于C:\WWW下
访问http://localhost进入安装页面
如图
数据库类型选择MySQL,如图
登陆数据库,默认密码为root
如图
等待安装完成
3、网页登陆,测试
环境配置成功,如图
4、poc测试
poc地址:
https://github.com/XiphosResearch/exploits/tree/master/Joomraa
参数如下:
joomraa.py -u hacker -p password -e hacker@example.com http://192.168.1.111
如下图,提示需要登陆邮箱查看激活邮件,所以邮箱参数需要填写真实的邮箱地址
此时查看Joomla后台,发现用户添加成功,但是状态为未激活,如图
5、设置Joomla,开启发送激活邮件的功能
选择Global Configuration-Global-Server
如图
设置邮箱参数
注: 邮箱账户需要开启SMTP功能
选择Send Test Mail
验证邮箱,如图
如图,验证邮件接收成功
6、再次测试POC
成功收到激活邮件,如图
点开链接后报错,如图
查看Joomla源码,位置如下:
https://github.com/joomla/joomla-cms/blob/staging/components/com_users/controllers/registration.php
找到问题原因: If user registration or account activation is disabled, throw a 403.
如下图
7、开启用户注册功能
选择Global Configuration-Users-User Options,点击允许用户注册,如图
注:
自Joomla3.4以后,用户注册功能默认关闭
8、最后测试
开启用户注册功能后,再次点击激活邮件,成功激活账户
如图
后台显示用户激活,如图
9、得出最终结论
利用该漏洞可在网站后台关闭用户注册的情况下创建特权用户,但是状态为未激活
只有网站后台开启发送邮件的功能后,攻击者邮箱才能收到激活邮件
只有网站后台开启用户注册功能,激活码才能生效,使得用户被激活
未激活的用户无法用于登录
高于3.4版本的Joomla,用户注册功能默认关闭
Joomla升级到3.6.4后,测试poc显示攻击成功,然而网站后台并没有添加用户,也不会发送激活邮件,防御成功
综上,攻击者想要获得网站后台管理员权限,需要同时满足以下条件:
- Joomla版本为3.4.4-3.6.3
- 网站后台开启发送邮件功能
- 网站后台开启用户注册功能
0x04 备注
感谢DM的帮助
本文仅为测试记录
根据POC开发了一个检查网站是否开放注册功能的python脚本,地址如下:
https://github.com/3gstudent/Test-Exploit-for-Joomla-3.4.4-3.6.4
可用来简单判断网站是否支持用户注册
在此提醒网站管理员,尽快升级Joomla,如果Joomla版本过低,并且开启发送邮件和用户注册功能,那么很容易遭到攻击。