Sine安全-网络安全背后的巨人,提供服务器安全_服务器维护_网站安全解决方案

CLTPHP 网站漏洞修复建议



         CLTPHP一套基于PHP开发,mysql数据库架构的网站内容管理系统,基础代码是用

thinkphp5的代码开发完成,不管是PC端还是手机端都采用layui自适应的框架
来供用户访问网

站,该系统包含许多第三方的模块,数据库在线管理,会员管理,
微信接口管理,模板管理,

正因为CLTPHP的多功能,简洁,方便,大气,利于开发
,深受各大网站建设公司的喜欢,好

的一面也有不足的一面,SINE安全对其网站进
行安全检测的同时,发现该CLTPHP网站存在高

危漏洞,对于漏洞的详情与漏洞修复
我们来慢慢剖析。
 
 
我们在对其进行网站安全检测中,发现了一处文件任意上传漏洞,不需要任何用户的权限,普

通的访问用户就可以上传任意文件到CLTPHP网站根目录下,导致可上传
网站木马文件,包括

php木马,php一句话木马都可以上传。Sine安全公司是一家专
注于:网站安全、服务器安全、

网站安全检测、网站漏洞修复,渗透测试,安全服务
于一体的网络安全服务提供商。
 
 
网站漏洞文件位置存在于:app目录下的user文件夹里的UpFiles.php文件
 
<?php
namespace app\user\controller;
class UpFiles extends Common
{
  
  public function upload(){
        // 获取上传文件表单字段名
        
 
$fileKey = array_keys(request()->file());
        // 获取表单上传文件
     
 
   $file = request()->file($fileKey['0']);
        // 移动到框架应用根目
 
录/public/uploads/ 目录下
        $info = $file->move(ROOT_PATH . 
 
'public' . DS . 'uploads');
        if($info){
            $result['code'] 
 
= 1;
            $result['info'] = '图片上传成功!';
            
 
$path=str_replace('\\','/',$info->getSaveName());
            $result
 
['url'] = '/uploads/'. $path;
            return $result;
        }else{
   
 
         // 上传失败获取错误信息
            $result['code'] =0;
          
 
  $result['info'] = '图片上传失败!';
            $result['url'] = '';
     
 
       return $result;
        }
    }
}
 
在上面的这段网站代码里,没有对用户的权限进行判断导致普通的用户都可以访问该表单里

的内容,并直接绕过上传任意文件进去,我们来继续看下这段代码里的
move函数,锁定到

think目录下的library文件里的file.php代码:
 
 /* 移动文件 */
        if ($this->isTest) {
            rename($this-
 
>filename, $filename);
        } elseif (!move_uploaded_file($this-
 
>filename, $filename)) {
            $this->error = '文件上传保存错误!';
 
 
           return false;
        }
        // 返回 File对象实例
        
 
$file = new self($filename);
        $file->setSaveName($saveName);
       
 
 $file->setUploadInfo($this->info);
        return $file;
    }
 
    /**
     
 
* 获取保存文件名
     * @param  string|bool   $savename    保存的文件名 
 
默认自动生成
     * @return string
     */
    protected function 
 
buildSaveName($savename)
    {
        if (true === $savename) {
           
 
 // 自动生成文件名
            if ($this->rule instanceof \Closure) {
 
我们可以看到该代码会自动生成文件名,如果我们伪造上传文件的格式,并绕过上传代码

里的文件格式判断就会导致生成我们指定的任意文件。在这个文件中里的
validate是默认的

值,当在挑用thinkphp基础代码里的上传功能是,我们看到
CLTPHP的配置不当在check函

数判断,没有有效对文件的格式进行检测,可以上传
网站脚本木马,并控制整个网站,甚

至是服务器的管理员权限。Sine安全公司是一
家专注于:网站安全、服务器安全、网站安全

检测、网站漏洞修复,渗透测试,安全
服务于一体的网络安全服务提供商。
 
网站漏洞的修复
 
对上传页面进行安全验证,对用户的权限进行判断,对上传文件的格式进行黑名单限制,

或者是白名单安全限制,对上传的文件目录设置无脚本执行权限。
分享: