手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中

Magento 2.3.1:从未授权存储型XSS到RCE

来源:本站整理 作者:佚名 时间:2019-07-06 TAG: 我要投稿

本文介绍了如何在非常流行的电子商务(eCommerce)解决方案Magento中(版本
 
0x01 漏?#20174;?#21709;
成功利用漏洞后,未授权攻击者可以将一个JavaScript payload永久性植入Magento平台的管理后端。这个JavaScript payload在触发时,可以以受害者身份在浏览器中自动化执行漏洞利用步骤。我们在这个视频中演示了基于JavaScript RIPS shell的攻击过程。
当Magento平台的某个员工登录管理页面时,被注入的JavaScript payload就会运行,劫持该员工的管理员会话。随后攻击者可以利用未授权RCE(远程代码执行)漏洞,完全控制整个平台。攻击者可以对运行该平台的企业造成经济损失。比如,攻击者可以将所有付款操作重定向至自己的银行账户,或者直接窃取信用卡信息。
如果Magento平台使用的是内置的Authorize.Net支付模块(这?#31363;?#35768;使用信用卡支付的一种Visa解决方案),那么就受该漏?#20174;?#21709;。需要注意的是,Authorize.Net本身并不存在漏洞,漏洞存在于Magento的自身实现中。由于Authorize.Net是比较流行的一?#20013;?#29992;卡支?#27934;?#29702;服务,因此这条漏洞利用链会影响许多Magento平台。鉴于探测目标平台是否使用Authorize.Net模块是非常简单的一个任务,并且可以自动化实现,因此攻击者可能大规模利用该漏洞。
由于攻击者不需要了解目标平台任何背景信息,也不需要访问Magento平台,不需要使用社会工程学技巧,因此我们将这个漏洞利用链的严重等级标记为高(high)。考虑到所有Magento平台每年的交易额超过1550亿美元,攻击者有充足的动机实施行动。
 
0x02 受影响版本
该漏洞能够影响启用Authorize.Net模块并且版本在一定范围内的所有Magento平台,具体受影响版本如下:
分支
漏洞修复版本
存在漏洞版本
2.3
2.3.2
2.2
2.2.9
2.1
2.1.18
 
0x03 技术分析
在下文中,我们来分析能够组合使用的两个不同的安全漏洞。由于这些问题比较严重,我们特意忽略了某些漏洞利用细节。
未授权存储型XSS
针对不同场景,Magento提供了多种数据清理过滤方法。这里我们详细分析下如何绕过escapeHtmlWithLinks()过滤方法,以及如何在取消新产品订单的注记(note)中利用这种绕过方法实现未授权存储型XSS漏洞。
在讨论这个方法前,我们先来了解一下Magento的数据清理原理以及主要的清理方法:escapeHTML()。
vendor/magento/framework/Escaper.php:
/*** Escape string for HTML context.** AllowedTags will not be escaped, except the following: script, img, embed,* iframe, video, source, object, audio** @param string|array $data* @param array|null $allowedTags* @return string|array*/public function escapeHtml($data, $allowedTags = null)
需要知道的是,escapeHTML()会解析用户的输入($data),删除没有在第二个?#38382;?#20013;($allowedTags)?#20184;?#30340;所有HTML标签。如果没有设置第二个?#38382;?#37027;么就会简单转义处理整个用户输入字符串。该方法还支持在允许的标签中设置若干个HTML属性,包括id、class、href、style以及其他属性。
我们无法绕过escapeHTML(),因此我们搜索能够处理被escapeHTML()过滤后的用户数据的代码,因为对清理过的数据再次修改可能会出现一些问题。我们找到了一个方法:escapeHtmlWithLinks()。在下文中我们会解释该方法的工作原理、其中存在的一个逻辑缺陷以及如何利用该缺陷触发XSS漏洞。
escapeHtmlWithLinks()的目的是在用户输入字符串中,删除除白名单标签之外的所有HTML标签。与escapeHTML()不同的是,这个函数还会删除用户输入字符串标签中除href属性之外的所有属性,以确保链接更加安全。
如下代码片段所示,escapeHtmlWithLinks()会在函数开头处将用户输入字符串中的所有标签解析到一个数组中($matches)。
vendor/magento/module-sales/Helper/Admin.php:
public function escapeHtmlWithLinks($data, $allowedTags = null){⋮$data = str_replace(‘%’, ‘%%’, $data);$regexp = “#(?J).”(?:(?:\s+(?:(?:href\s*=\s*([‘\”])(?.*?)\\1\s*)|(?:\S+\s*=\s*([‘\”])(.*?)\\3)\s*)*)|>)”.”>?(?:(?:(?.*?)(?:?|(?=.*)))#si”;while (preg_match($regexp, $data, $matches)) {⋮
下一步是清理href属性中包含的链接以及URL文本,代码会重新创建一个简约标签(如下代码片段164-169行所示)来完成该操作。
清理后的链接会存储到$links数组中,以便后续使用。escapeHtmlWithLinks()随后会替换刚被清理的原始标签,将其替换为用户输入字符串中的%$is,这里$i就是被替换的标签的编号。
⋮while (preg_match($regexp, $data, $matches)) {$text = ”;if (!empty($matches[‘text’])) {$text = str_replace(‘%%’, ‘%’, $matches[‘text’]);}$url = $this->filterUrl($matches[‘link’] ?? ”);//Recreate a minimalistic secure a tag$links[] = sprintf(                                     // line 164‘%s’,htmlspecialchars($url, ENT_QUOTES, ‘UTF-8’, false),$this->escaper->escapeHtml($text));$data = str_replace($matches[0], ‘%’ . $i . ‘$s’, $data);    // line 169++$i;}
为了?#20040;?#23478;有个直观的理解,这里我们举个例子,以如下用户输入数据为例:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.rliwo.live)登载此文出于传递更多信息之目的,并不代表本站赞同其观点?#25237;?#20854;真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱[email protected],我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类?#35753;?/li>
        • 最近下载
        购买彩票权威网址
        手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中
        澳洲幸运5开奖专用网站 巨人财富怎么玩 拳皇命运攻略 奇才vs76人前瞻 阿基里斯电子游戏 南粤36选7开奖走势图 剑网3指尖江湖新手七秀弟子怎么玩 掘金vs勇士 勒沃库森门兴格拉德巴赫 世俱杯阿尔艾因河床