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
※深入分析一波,你們說的雲安全到底是什麼鬼?
※黑產大數據:手機黑卡調查
※挖洞經驗|雅虎小企業服務平台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 應用開發之文件上傳