1. 程式人生 > >【程式碼審計】大米CMS_V5.5.3 任意檔案刪除及程式碼執行漏洞分析

【程式碼審計】大米CMS_V5.5.3 任意檔案刪除及程式碼執行漏洞分析

 

0x00 環境準備

大米CMS官網:http://www.damicms.com

網站原始碼版本:大米CMS_V5.5.3試用版(更新時間:2017-04-15)

程式原始碼下載:http://www.damicms.com/downes/dami.rar

測試網站首頁:

 

0x01 程式碼分析

1、漏洞檔案位置1:/Admin/Lib/Action/TplAction.class.php  第118-135行中:

  1. public function del()  
  2.   
  3. $id = dami_url_repalce(str_replace('*','.',trim($_GET['id'])));  
  4. if (!substr(sprintf("%o",fileperms($id)),-3))  
  5. {  
  6.     $this->error('無刪除許可權!');  
  7. }  
  8. @unlink($id);  
  9. if (!empty($_SESSION['tpl_jumpurl']))  

10. {  

  1. 11.     $this
    ->assign("jumpUrl",$_SESSION['tpl_jumpurl']);  

12. }  

13. else  

14. {  

  1. 15.     $this->assign("jumpUrl",'?s=Tpl/index');  

16. }  

17. $this->success('刪除檔案成功!');  

  1. 18.   }  

這段刪除模板的函式中,首先對獲取的引數進行替換,然後判斷檔案是否有刪除許可權,接著帶入unlink函式中進行刪除操作,可以看到引數並未進行任何過濾或處理,導致程式在實現上存在任意檔案刪除漏洞,攻擊者可通過該漏洞刪除任意檔案,如刪除install.lck進行CMS重灌,劫持網站資料庫。

2、漏洞檔案位置2:/install/index.php 第102-112行:

  1. $fp = fopen($source_file,"r");  
  2. $configStr = fread($fp,filesize($source_file));  
  3. fclose($fp);  
  4. $configStr = str_replace('localhost',$dbhost,$configStr);  
  5. $configStr = str_replace('damidb',$dbname,$configStr);  
  6. $configStr = str_replace("'DB_USER'=>'admin'","'DB_USER'=>'{$dbuser}'",$configStr);  
  7. $configStr = str_replace("'DB_PWD'=>'admin'","'DB_PWD'=>'{$dbpwd}'",$configStr);  
  8.             if($dbport!='3306'){$configStr = str_replace("'DB_PORT'=>'3306'","'DB_PORT'=>'{$dbport}'",$configStr);}                     
  9. $fp = fopen($target_file,"w") or die("<script>alert('寫入配置失敗,請檢查$target_file是否可寫入!');history.go(-1);</script>");  

10. fwrite($fp,$configStr);  

11. fclose($fp);  

這段函式中,首先讀取配置檔案,然後通過正則匹配字串,最後寫入配置中。

引數未經任何過濾,直接寫入配置檔案。攻擊者可以構造指令碼程式碼寫入配置檔案,從而導致程式在實現上存在程式碼執行漏洞。

0x02 漏洞利用

1、在網站根目錄新建test.txt作為任意檔案刪除漏洞測試檔案:

 

2、登入後臺,構造UTL連結:http://127.0.0.1/admin.php?s=Tpl/Del/id/.|test.txt

可成功刪除根目錄下的text.txt檔案:

 

3、如何進一步利用呢?

刪除根目錄下install.lck進行CMS重灌,劫持網站資料庫

http://127.0.0.1/admin.php?s=Tpl/Del/id/.|install.lck

 

4、結合/install/index.php下過濾不當,可以將指令碼程式碼寫入配置檔案,從而進一步觸發程式碼執行漏洞。

 

5、進一步觸發程式碼執行漏洞,獲取網站伺服器控制權限。

 

0x03 修復建議

1、對於要刪除的檔案,通過正則判斷使用者輸入的引數的格式,看輸入的格式是否合法。

2、寫入配置檔案前,對特殊字元(如<、>等)進行htmlencode處理;全域性配置可考慮寫入資料庫進行調

最後

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