2018-05-20

【CMS注入】CVE-2015-7297 Joomla 前台注入

1.1 访问 http://192.168.1.3

1.2 访问 http://192.168.1.3/index.php?option=com_contenthistory&view=history&item_id=1&type_id=1&list[select]=(select 1 from (select count(*),concat((select user()),floor (rand(0)*2)) from information_schema.tables group by 2)x ,利用报错注入可以获取到当前的用户信息,可以看到构造的sql语句已经成功的执行了。

1.3 Joomla中有一个查看历史编辑版本的组件,该功能本应该只有管理员才能访问,但是该功能访问并不需要相应的权限。通过访问 http://192.168.1.3/index.php?option=com_contenthistory 可以使得服务端加载历史版本处理组件。打开【C:\phpStudy\WWW\components\com_contenthistory】下的【contenthistory.php】中,可以看到并没有进行相关权限的监测。

1.4 在目标机中可以看到文件包含【C:\phpStudy\WWW\administrator\components\com_contenthistory】下的【contenthistory.php】

1.5 程序初始化基于contenthistory组件的控制类JControllerLegacy,然后直接调用控制类的execute()方法,在execute()方法中,会调用其控制类中的display()。打开【C:\phpStudy\WWW\libraries\legacy\controller】下的【legacy.php】,处理程序从传递的参数中获取view和layout的参数值进行初始化试图,并且调用$model=$this->getModel($viewName)加载对应数据模块,最终会调用$view->display()函数进行试图处理。

1.6 Sql注入漏洞涉及的是历史查看操作,也就是view=history的时候程序处理会导致注入。在程序进行数据提取时,会进入【C:\phpStudy\WWW\administrator\components\com_contenthistory\models\history.php】文件中的getListQuery()函数。

1.7 看其中的Sql语句构造,getState函数用于获取模型的属性和其对应的值,函数定义位于【C:\phpStudy\WWW\libraries\legacy\model】下的【legacy.php】中。

1.8 打开【C:\phpStudy\WWW\libraries\legacy\model\list.php】,解析请求中传递的list[]参数,解析并过滤预设键的值,但是忽略了list[select],而传递list[select]参数值最终会被解析到处理sql语句构建中的list.select里,从而导致了注入。

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据