阿里云后臺(tái)提示織夢(mèng)dedesql.class.php文件變量覆蓋漏洞會(huì)導(dǎo)致SQL注入,可被攻擊者構(gòu)造惡意SQL語句,重置管理員密碼,寫入webshell等,進(jìn)而獲取服務(wù)器權(quán)限。下面告訴大家怎么修復(fù)這個(gè)漏洞:
首先說一下dedecms不安全的參數(shù)處理機(jī)制,這里我們看一下/include/common.inc.php代碼的第106行:
萬惡之源其實(shí)就在這里,基本上目前dede被發(fā)現(xiàn)的漏洞全都死在這里。我們可以看到,程序從GPC數(shù)組中取出名值對(duì)后,只是對(duì)$_v做了簡單的addslashes處理,就直接賦給了${$_k},實(shí)現(xiàn)了類似全局變量覆蓋的機(jī)制,設(shè)計(jì)的初衷是為了開發(fā)方便,但卻存在著嚴(yán)重的安全問題。PHP在經(jīng)歷了這么多年的更新?lián)Q代終于修補(bǔ)了register_globals問題,但是dede的這段代碼使php付出的努力全部白費(fèi)。
下面我們回歸漏洞。首先是/include/dedesql.class.php的第595-607行,
在執(zhí)行這段代碼之前,程序未初始化$arrs1和$arrs2這兩個(gè)數(shù)組。結(jié)合前面提到的dede不安全的參數(shù)處理機(jī)制,利用這段代碼我們可以覆蓋任意全局變量。例如在這個(gè)漏洞中,我們可以控制$GLOBALS['cfg_dbprefix']的值。
解決方案:
修改/include/dedesql.class.php頁面第595行,新增代碼如下
$arrs1 = array();
$arrs2 = array();
//特殊操作
$arrs1 = array(); $arrs2 = array(); if (isset($global['arrs1']))
{
$v1 = $v2 = '';
for ($i=0;isset($arrs1[$i]);$i++)
{
$v1 .= chr($arrs1[$i]);
}
$v1 = $v2 = '';
for ($i=0;isset($arrs2[$i]);$i++)
{
$v2 .= chr($arrs2[$i]);
}
$global[$v1] . = $v2;
}
版權(quán)聲明: 本站資源均來自互聯(lián)網(wǎng)或會(huì)員發(fā)布,如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除!謝謝!
轉(zhuǎn)載請(qǐng)注明: 織夢(mèng)dedesql.class.php文件漏洞解決方法