dedeCMS V5.7 SP2后台代碼執行漏洞復現(CNVD-2018-01221)
一、漏洞描述
織夢內容管理系統(Dedecms)是一款PHP開源網站管理系統。Dedecms V5.7 SP2版本中的tpl.php中存在代碼執行漏洞,可以通過該漏洞在增加新標簽中上傳木馬,獲取webshell。該漏洞利用需要登錄后台,並且后台的賬戶權限是管理員權限。
二、漏洞環境搭建
1、官方下載DeDeCMS V5.7 SP2(UTF-8),下載地址: http://www.dedecms.com/products/dedecms/downloads/
2、使用phpstudy搭建web環境
3、把下載好的源碼放到網站根目錄下(www),然后開啟phpstudy, 瀏覽器訪問http://192.168.10.171/dedecms/uploads/install/index.php
4、點擊我已閱讀並繼續。然后是環境檢測,保存默認即可
5、接下來是參數配置,需要設置的只有數據庫密碼,把自己的密碼填上去就行了
6、然后就把環境搭好了
三、漏洞復現
1、由於此漏洞是屬於后台漏洞,需要先登錄到后台,后台默認的賬戶和密碼都是admin。Dedecms默認后台路徑是/uploads/dede。
2、分析tpl.php里面的代碼
a.此處定義了一個savetagfile的函數,首先做一個判斷,參數”action”是否等於savetagfile,如更等於就進行下一步
b.這里有一個csrf檢驗函數,需要加上token來繞過限制
c.正則表達式匹配,這里的意思是判斷filename參數是否匹配正則表達式的條件,不匹配就不允許修改操作的進行。
d.把$content里面的內容寫入到相對用的路徑里,由於這一部分代碼除了對寫入的文件名字做了簡單的過濾和一個csrf防護之外,其他並沒有什么安全措施,導致我們可以任意寫入代碼。
3、通過上面的代碼,有csrf檢測防御,需要獲得token來進行繞過。再次瀏覽tpl.php代碼,發現action的參數有很多,比如del,edit,upload等等,但只有傳入upload的時候頁面才會獲取token,而其他的都沒有獲取token,所以只能通過action=upload來獲取token。
4、我們再去tpl.php里看一下,發現action的參數有很多,只有通過action=upload來獲取token,瀏覽器訪問http://192.168.10.171/dedecms/uploads/dede/tpl.php?action=upload
5、然后查看頁面源碼,發現token
6、通過瀏覽tpl.php代碼,發現要上傳的參數有:action,token,filename,content,構造payload
a.由於dedecms全局變量注冊的特性,所以這里的content變量和filename變量可控。
b.可以把content內容直接寫到以.lib.php結尾的文件中。
Payload: http://192.168.10.171/dedecms/uploads/dede/tpl.php?action=savetagfile&token=d751030d70c713c3687a33b77b92e046&filename=abc.lib.php&content=<?php phpinfo();?>
7、瀏覽器訪問構造的payload,下圖發現成功寫入
8、根據代碼可以看到寫入到taglib目錄,瀏覽器訪問 http://192.168.10.171/dedecms/uploads/include/taglib/abc.lib.php
9.gethsell寫入一句話木馬
10.菜刀鏈接,成功getshell
四、漏洞防御
1.禁止此處寫入文件。
2.過濾惡意標簽