當前位置:
首頁 > 最新 > FineCMS 漏洞不僅皮囊好看,靈魂更有趣

FineCMS 漏洞不僅皮囊好看,靈魂更有趣

0x00背景

最近在挖掘FineCMS源碼的漏洞,發現了一些有趣的洞,斗哥計劃先從配置文件寫入開始分析,然後再結合存儲XSS進行GetShell,本篇先分析配置文件寫入的問題,下周再分析存儲XSS的問題,最終通過這兩類洞的組合利用GetShell,大體思路流程很簡單,但是代碼分析中有蠻多技巧,期待與師傅們的交流討論。

0x01漏洞審計

1x00相關環境

1x01漏洞分析

在finecmsfinecmsdayruicontrollersInstall.php文件中的第127-131行發現如下代碼塊。

通過反向追溯在當前文件中的第75行中發現$data的創建位置。

跟入post方法,在finecmsfinecmssystemcoreInput.php文件中的第255行中發現發 post方法的代碼塊。

跟入_fetch_from_array方法,在finecmsfinecmssystemcoreInput.php文件中的第177-230行中發現該方法的代碼塊,代碼主要對傳入的數組進行簡單的數據判斷,代碼較多這裡列出重要的代碼,當$xss_clean為TRUE的時候會進行xss_clean操作。通過追溯$xss_clean變數,發現是從finecmsfinecmsdayruiconfigconfig.php配置文件中的$config["global_xss_filtering"]獲取的,但是默認情況下該變數的值為FALSE,不會進行任何的XSS過濾。

但是當$config["global_xss_filtering"]為TRUE會進入finecmsfinecmssystemcoreSecurity.php的xss_clean方法進行XSS過濾,但是不進行單引號的轉義,但是還過濾了PHP的標籤和一些關鍵函數,由於還過濾了尖括弧所以標籤沒想到繞過方法,但是可以使用類似system/*()*/("whoami")的方式繞過關鍵字的過濾規則進行代碼執行。

因此此處可以引入單引號,從而導致寫入php代碼進行GetShell。

1x02漏洞復現

在進行安裝的時候,如果$config["global_xss_filtering"]開啟了,即TRUE,可構造如下請求可以執行PHP代碼導致GetShell。

如果$config["global_xss_filtering"]未開啟即為FALSE,進行如下請求可以GetShell。

成功寫入文件並生成evil.php:

訪問evil.php成功GetShell:

2x00相關環境

2x01漏洞分析

在文件finecmsfinecmsdayruicontrollersadminSite.php的第46-67行中發現如下代碼塊,使用post接收data的數據,然後在檢測域名是否被使用,未被使用將更新資料庫中fn_site表中的domain的欄位。

跟入$this->site_model->cache(),在finecmsfinecmsdayruimodelsSite_model.php文件中的第323-368行中,發現cache()方法,重點看第325行和338行。

跟入$this->get_site_data()方法,在finecmsfinecmsdayruimodelsSite_model.php文件中的第285-300行發現代碼塊,分析代碼塊知道是進行如下的數據查詢,把前面存到資料庫中的配置,取出來然後賦給$data, 通過列印$data可以知道到的就是站點配置的信息。

跟進$t["domain"] && $domain[$t["domain"]] = $id;,$domain最終傳入了如下finecmsfinecmsdayruimodelsSite_model.php文件中的第363行代碼。

因此foreach ($data as $id => $t)後對$domain[$t["domain"]] = $id;進行賦值,其中為$domain變數傳入了鍵名$t["domain"],又因為to_require_one中不會對數組的鍵名進行安全處理,因此可以引入單引號,存在文件寫入的問題。

2x02漏洞復現

可以通過構造如下請求進行文件寫入,並執行代碼的操作:

0x02小結


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 漏斗社區 的精彩文章:

蛙啊!老母親給你整理了DEDECMS漏洞集合,快回家!

TAG:漏斗社區 |