Joomla 3.2 到 3.4.4 注入漏洞分析

CVE-ID: CVE-2015-7297

披露时间: 2015-10-15

漏洞等级: 高危

漏洞作者: Asaf Orpani

影响范围: Joomla (3.2.0<=version<=3.4.4)

joomla-website-security.png

漏洞概述

近日,Trustwave SpiderLabs 研究员Asaf Orpani 发现知名CMS Joomla 3.2—3.4.4版本中存在SQL注入漏洞,Joomla 3.2.0 - 3.4.4 /administrator/components/com_contenthistory/models/history.php 文件存在未过滤的问题,导致出现SQL注入,可用于获取管理员密码.

漏洞分析

据 Asaf Orpani 分析得出,该SQL注入漏洞存在于

/administrator /components /com_contenthistory/ models/history.php 处getListQuery()函数

6a0133f264aa62970b01bb08850b60970d-800wi.png

通过SQL及报错信息,可以知道我们的注入payload被插入到了红色框部分内。跟进getState()函数,位于ibraries/legacy/model/legacy.php文件内,代码如下:

6a0133f264aa62970b01bb08850bd7970d-800wi.png

从函数参数和官方注释,可以知道,getState()函数功能是获取一个model的属性及属性对应的值,getState()函数在model的属性未设置时,会执行$this->populateState()来对model的一些属性进行赋值操作。

我们跟进populateState()函数看下做了什么操作,代码位于:/administrator/components/com_contenthistory/models/history.php 内: 

6a0133f264aa62970b01bb08850be2970d-800wi.png

该函数从用户输入中取出item_id,type_id,type_alias,等几个变量,对当前model的属性进行赋值,可控变量均强制为integer类型,无法利用。顺着最后一行代码:parent::populateState('h.save_date', 'DESC'),继续跟到父类中看父类populateState()函数的定义,代码位于:libraries/legacy/model/list.php,482行附近:

6a0133f264aa62970b01b7c7e1357d970b-800wi.png

你会看到getuserstatefromrequest()函数,其返回值$list的变量。代码对取到的list[]数组进行了遍历,并做相应的过滤、拆分,可以看到list[select]没有处理逻辑,会进入default的case,后续$this->setState('list.' . $name, $value)代码执行后,导致请求中list[select]变量没有任何变量被直接赋值给Model属性,继续回头看文章最开始的注入位置,此时我们可以控制$this->getState('list.select')的返回值,构造SQL注入。

测试payload为:

6a0133f264aa62970b01bb08850b6c970d-800wi.png

利用该payload进行注入可获取用户session:

6a0133f264aa62970b01bb08850b77970d-800wi.png

经测试可用如下payload直接获取管理员密码:

1445653065207194.png

以上payload不能爆session_id,经过我们实验室修改后下面这段可以完美爆session_id 。

 /index.php?option=com_contenthistory&view=history&list[ordering]=&item_id=75&type_id=1&list[select]= (select 1=updatexml(1,concat(0x5e24,(select session_id from jml_session limit 0,1),0x5e24),1)) 

如果得到的是管理员的session ID ,则可以通过修改当前浏览器的cookies里的session ID ,然后访问/administrator/就可以登陆后台了。

6a0133f264aa62970b01b8d16b1110970c-800wi.png

修复方案

目前Joomla官方已经更新3.4.5版本,用户可登陆后台进行更新。

或下载官方升级包升级,下载地址:

https://github.com/joomla/joomla-cms/releases

参考链接

https://www.trustwave.com/Resources/SpiderLabs-Blog/Joomla-SQL-Injection-Vulnerability-Exploit-Results-in-Full-Administrative-Access/

http://weibo.com/p/1001603901212800985350


发表评论

(必填)

(必填)

(以便回访)