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

安装后如图

Alt text

配置目录为: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进入安装页面

如图

Alt text

数据库类型选择MySQL,如图

Alt text

登陆数据库,默认密码为root

如图

Alt text

等待安装完成

3、网页登陆,测试

环境配置成功,如图

Alt text

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

如下图,提示需要登陆邮箱查看激活邮件,所以邮箱参数需要填写真实的邮箱地址

Alt text

此时查看Joomla后台,发现用户添加成功,但是状态为未激活,如图

Alt text

5、设置Joomla,开启发送激活邮件的功能

选择Global Configuration-Global-Server

如图

Alt text

设置邮箱参数

注: 邮箱账户需要开启SMTP功能

选择Send Test Mail验证邮箱,如图

Alt text

如图,验证邮件接收成功

Alt text

6、再次测试POC

成功收到激活邮件,如图

Alt text

点开链接后报错,如图

Alt text

查看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.

如下图

Alt text

7、开启用户注册功能

选择Global Configuration-Users-User Options,点击允许用户注册,如图 Alt text

注:

自Joomla3.4以后,用户注册功能默认关闭

8、最后测试

开启用户注册功能后,再次点击激活邮件,成功激活账户

如图

Alt text

后台显示用户激活,如图

Alt text

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版本过低,并且开启发送邮件和用户注册功能,那么很容易遭到攻击。


LEAVE A REPLY

Written on October 31, 2016