天天看點

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

## 前言

這是我在此發表的第一篇代碼審計的文章,僅供學習參考!首發于哈拉少安全小隊微信公衆号

一、Cms初識:

FengCms——由地方網絡工作室基于PHP+MYSQL開發。是一款開源的網站内容管理系統。系統支援自由訂制模型,你完全可以用FengCms打造一個你想要的任意展示模型。模版和程式分離、自由标簽系統,讓FengCms靈活無比。擁有FengCms,你可以完成國内95%的網站制作需要!

-目錄結構:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

二、漏洞描述:

在fengcms的安裝程式中,由于安裝檢測判斷代碼無效和寫入檔案時代碼過濾不嚴,添加資料到配置檔案的時候,可以插入任意惡意payload,達到實作閉合原本的代碼,使插入的webshell存留在了配置檔案中,進而getshell。

三、漏洞分析過程:

--首先分析一下/install/index.php:

在install目錄下的index.php檔案中的第25行代碼,可以看到這裡進行了是否安裝過的檢測,判斷了install目錄是否存在,然後輸出前端js代碼對使用者進行提示:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

但是注意:判斷完之後,程式是沒有立刻停止執行的,導緻後續的安裝步驟代碼仍然都會繼續往下執行,這也是導緻漏洞産生危害的原因之一:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

安裝過程就是通過判斷GET方式傳入的step參數,控制安裝流程:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:
[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

剩下的步驟代碼類似,具體就是以下檔案:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

--接下來分析一下/install/install.php檔案:

這裡擷取到表單中POST傳過來的資料,進行資料庫連接配接:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

表單内容:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

可以看到這裡以寫入的方式打開了$files,然後将$config作為内容直接寫入進去,但是可以看到這裡是沒有進行任何過濾的,同時這個$config的内容是我們可控的(看後面的代碼截圖):

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

$file在/install/install.php的第8行定義了,是配置檔案的路徑:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

$config是在/install/data.php中定義,用file_get_contents讀取了配置檔案的内容:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

$config_file是在/install/index.php中定義了,讀取原配置檔案,然後對原檔案進行了内容替換,并且替換的内容就是通過GET方式傳過來的,并且是我們可控的(在step3.php中擷取我們了輸入的内容,然後直接進行了替換),沒有進行任何的過濾:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

step3.php:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

看一下/config.php中的配置内容:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

是以我們隻需要在表字首處插入惡意payload即可,最終效果如下:圈住的地方就是我們傳入的惡意payload,')閉合了前面的代碼,//注釋後面的代碼,成功将payload留在了config.php中:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

執行流程:

入口檔案/index.php,這裡包含了/system/app.php檔案:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

跟進/system/app.php檔案:在這裡會包含引入配置檔案,是以當我們通路index.php入口檔案的時候,會執行config.php檔案中插入的惡意payload,進而getshell:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

四、漏洞利用:

1、通路安裝頁面

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

按照步驟執行:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

step3時,在表字首處插入惡意payload:

f_');eval($_POST['xx']);//
           
[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

安裝完成:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

再次檢視config.php,已經成功被插入webshell:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

直接通路入口檔案index.php,可以成功執行:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

蟻劍連接配接:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

虛拟終端執行指令:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

根據前面代碼分析到,雖然已經安裝過了,但是再次通路安裝程式,還是能正常執行的:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

五、漏洞修複:

1、在判斷已經安裝過之後,立即讓程式停止執行,添加exit()代碼即可:

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複:

2、添加在寫入檔案前添加過濾機制

有需要源碼的關注公衆号:哈拉少安全小隊,背景留言:fengcms1.32,即可擷取!

[代碼審計] fengcms1.32從詳細漏洞分析到漏洞利用一、Cms初識:二、漏洞描述:三、漏洞分析過程:四、漏洞利用:五、漏洞修複: