當前位置:
首頁 > 新聞 > Wolf CMS 新舊兩個版本中的文件上傳漏洞分析

Wolf CMS 新舊兩個版本中的文件上傳漏洞分析

一、Wolfcms簡介


Wolf CMS是一款內容管理系統(CMS),是在GNUGeneral Public License v3下發布的免費軟體。Wolf CMS是由PHP語言編寫,是Frog CMS的一個分支。在2010年Packet Publishing開源項目評獎的「Most Promising Open Source Project」分類中殺進了決賽。


軟體的官網為:https://www.wolfcms.org/


二、Wolfcms 0.8.2中存在任意文件上傳漏洞

2.1 Wolf CMS 0.8.2版本中漏洞概述


早在2015年4月,Wolf CMS就被發現其後台存在任意文件上傳漏洞,攻擊者可以利用這個漏洞上傳惡意的PHP文件,最終的結果是系統被攻擊者控制,可以執行任意的指令。此漏洞具體是出現在文件管理功能中,這個功能原本是提供一個介面讓管理員管理文件。


在此版本的代碼中,對於允許上傳的文件類型沒有做任何的限制。因此攻擊者可以上傳一個PHP shell文件,文件中的代碼是惡意的,導致系統被完全控制。


2.2 Wolf CMS 0.8.2版本漏洞利用過程


在本地搭建了網站環境,復現了攻擊過程,如下:


在「Files」選項卡中點擊右下角的「Upload file」選項可以執行上傳操作



選擇要上傳的一句話木馬文件,本例中它的名字是「ma2.php」


可以看到這個webshell文件被成功地上傳到了網站中。



系統還提供了編輯文件的功能,在這裡我們可以查看一下剛才所上傳webshell的代碼。


通過一句話木馬客戶端去連接這個木馬,發現可以執行,因此證明此漏洞可以被攻擊者所利用來完全控制網站。



2.3 漏洞源碼分析


漏洞點出現在:/wolf/plugins/file_manager/FileManagerController.php


從第302行到339行是實現上傳功能的函數upload()。


我們來逐條解讀一下代碼的功能,首先

if (!AuthUser::hasPermission("file_manager_upload")) {
Flash::set("error", __("You do not have sufficient permissions to upload a file."));
redirect(get_url(http://img.ifuun.com/getimg.php?url="plugin/file_manager/browse/"));
}

是驗證用戶是否擁有上傳文件的許可權,如果沒有的話列印警告信息,並且將瀏覽器重定向到

『plugin/file_manager/browse/『

位置。


隨後是檢查CSRF的token,通過標籤的方式防止CSRF攻擊的發生。

if (isset($_POST["csrf_token"]))
{
$csrf_token = $_POST["csrf_token"];
if (!SecureToken::validateToken($csrf_token, BASE_URL."plugin/file_manager/upload")) {
Flash::set("error", __("Invalid CSRF token found!"));
redirect(get_url(http://img.ifuun.com/getimg.php?url="plugin/file_manager/browse/"));
}
}
else {
Flash::set("error", __("No CSRF token found!"));
redirect(get_url(http://img.ifuun.com/getimg.php?url="plugin/file_manager/browse/"));
}

這段代碼首先檢查csrf_token這個變數是否在POST請求中被設置,如果被設置的話,那麼將這個值賦值給$csrf_token,隨後通過SecureToken::validateToken函數驗證token的有效性,如果未通過驗證,則列印警告信息,並且將瀏覽器重定向到

『plugin/file_manager/browse/『


如果POST請求中沒有token被傳遞過來,則也執行類似的操作。接下來的操作是關鍵:

$data = $_POST["upload"];
$path = str_replace("..", "", $data["path"]);
$overwrite = isset($data["overwrite"]) ? true : false;

這裡面首先刪除了路徑中的切換字元「..」

$filename = preg_replace("/ /", "_", $_FILES["upload_file"]["name"]);
$filename = preg_replace("/[^a-z0-9_-.]/i", "", $filename);

隨後刪除了文件名中的空格,並且只保留小寫字母從a~z,數字0~9,下劃線,短橫線以及點號,剩下的字元一律刪除。

if (isset($_FILES)) {
$file = $this->_upload_file($filename, FILES_DIR . "/" . $path . "/", $_FILES["upload_file"]["tmp_name"], $overwrite);
if ($file === false)
Flash::set("error", __("File has not been uploaded!"));
}

最後執行upload_file函數將文件上傳到系統中,縱觀整個過程,並沒有對上傳的文件類型進行安全檢查,導致了攻擊者可以上傳webshell。


三、Wolfcms 0.8.3.1中存在任意文件上傳漏洞


3.1 Wolf CMS 0.8.3.1版本中漏洞概述


最近由於工作原因,我需要挖一些Web漏洞。於是想起了Wolf CMS 0.8.2中的文件上傳漏洞,也就是本文的第二部分介紹的。查看目前Wolf CMS的版本,已經發布了0.8.3.1版本。出於好奇,我查看了一下此文件上傳漏洞是否已經被修補,結果是:系統對上傳的文件後綴名做了黑名單檢查,但是眾所周知,這也並不安全,可被繞過。


3.2 Wolf CMS 0.8.2版本漏洞利用過程


在本地搭建了網站環境,復現了攻擊過程,如下:


仍舊是在「Files」標籤下的右下角「Upload file」處觸發上傳文件操作。



這次我們的客戶端環境是在ubuntu下,因為我們在這裡可以命名webshell文件名為「ma2.php.」(注意文件名最終是以點號結束),在windows系統下則不允許這樣命名。



由於伺服器端是搭建在windows操作系統中,上傳這個文件後,webshell文件名最後的點號會被自動刪除。



查看此文件的源碼,可見我們上傳的確實是一句話木馬。



仍舊利用一句話木馬客戶端去連接,結果表明連接成功。證明新版本雖然做了一些安全措施但是可被繞過。



2.3 漏洞源碼分析


漏洞點出現在:/wolf/plugins/file_manager/FileManagerController.php


從第

310

行到

354

行是實現上傳功能的函數

upload()



我們可以看到大部分的代碼與之前的0.8.2版本是一致的,不同之處在第340至345行。

$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$ext_arr = array("php", "php3", "php4", "inc");
if (in_array($ext, $ext_arr)) {
Flash::set("error", __("Not allowed to upload files with extension :ext", $ext));
redirect(get_url(http://img.ifuun.com/getimg.php?url="plugin/file_manager/browse/"));
}

這部分代碼首先取出用戶所上傳文件後綴名並且轉換為小寫。

隨後定義了一個數組,數組中定義了不允許上傳的後綴名。


檢查用戶上傳文件的後綴名是否在數組中,如果在的話則列印報警信息,並且將瀏覽器重定向到路徑

『plugin/file_manager/browse/『

下。


我們上傳的文件名為「ma2.php.」後綴名不在黑名單數組中,因此允許上傳,由於服務端安裝在windows系統上,因此會自動刪除最後那個點號,因此這個一句話木馬文件成為了可執行的文件。攻擊成功。


四、總結


通過上述內容再次證實了那個眾所周知的道理:利用文件後綴名黑名單的方法是無法有效地修補文件上傳漏洞。一般來講,有效的防禦方法有:



1.將文件上傳的目錄設置成不可執行;


2.通過白名單而非黑名單的方法決定哪些類型的文件是允許被上傳的;


3.使用隨機數改寫文件名或者文件路徑。


4.如果上傳的是圖片文件,則可以進行二次渲染。


*本文作者:navyofficer,轉載請註明FreeBuf.COM




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

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


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

深入分析一波,你們說的雲安全到底是什麼鬼?
黑產大數據:手機黑卡調查
挖洞經驗|雅虎小企業服務平台Luminate身份認證漏洞

TAG:FreeBuf |

您可能感興趣

SpringMVC國際化與文件上傳
ASP.NET Web Forms XML 文件
FCC文件曝光iPhone X或有金色新配色
Transcodium區塊鏈上第一個去中心化的文件轉碼和分發平台
FCC 文件證實 iPhone X 存在金色版本
Spring Boot 文件上傳
微軟OneDrive iOS版重大更新:全新流暢設計、近期文件、PDF編輯
IPFS+Filecoin+More?迅雷發布區塊鏈文件系統TCFS
詳細全面的 SpringBoot 文件上傳
內部文件:第三方無法維修iMac Pro/新MBP
頭條:惡意Word文件中再現Adobe Flash漏洞
FCC文件實錘三星Galaxy Watch有兩種尺寸
MyBatis中Dao層、Service層以及xml文件的CRUD模板
Python用於NLP :處理文本和PDF文件
JSP 文件上傳
滲透技巧——Windows下NTFS文件的USN Journal
Ubuntu 下面 MySQL 的參數文件 my.cnf 淺析
如何在 Linux 中從一個 PDF 文件中移除密碼
第三方Windows 10 UWP文件管理器來了
SpringBoot | 第十七章:web 應用開發之文件上傳