千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,SQL注入导致RCE漏洞CVE-2021-27890的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。0x00 前
千家信息网最后更新 2026年11月01日SQL注入导致RCE漏洞CVE-2021-27890的示例分析

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被请求。相应的,主题内容的值如下

{$mybb->user['username']}

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

$modcplink = "
{$mybb->user['username']}
";

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

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

$modcplink = "
${arbitrary_function()}
";

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

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

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

                       

当一个管理员导入这样一个主题,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:

     ') AND 1=0 UNION SELECT title, '${passthru(\'ls\')}' from mybb_templates --    

最终的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代码,然后拿下服务器

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

主题 代码 属性 模板 攻击 管理 漏洞 管理员 攻击者 字符 字符串 数据 数据库 内容 引号 论坛 存储 控制 查询 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 深圳市人人互联网科技有限公司 西安互联网科技 华中科技大学互联网 北京禾田雨橡互联网科技 大白互联网科技 汽车互联网创新科技园 岳阳华臻互联网科技有限公司 荆州市昕露互联网络科技有限公司 深圳市优智互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 互联网科技大赛获奖感言 互联网时代的科技公司 南通创西澳互联网科技有限公司 互联网科技融合创新 下一代互联网重大应用科技园 艺电能源互联网科技有限公司招聘 平安好医生打造互联网科技医疗 互联网大会出现的黑科技 广州全民伙伴互联网科技有限公司 新华互联网科技学校 互联网是不是新科技 互联网科技网站 人人互联网科技是培训 互联网公司黑科技创始人 山东有哪些互联网科技公司 张召忠谈中国互联网科技 信承诺互联网科技有限公司 互联网科技大会大佬 山东亿川互联网科技有限责任公司
0