phpcms v9 各種注入漏洞補丁


用阿里雲ECS服務器,上傳了用phpcms v9做的項目,沒想到還能幫我查漏洞,於是各種百度,下面記錄下百度到的答案。

 

1、寬字節注入漏洞

/phpcms/modules/pay/respond.php 位置約16行

原來代碼

$payment = $this->get_by_code($_GET['code']);

 

替換為

$payment = $this->get_by_code(mysql_real_escape_string($_GET['code']));

 

 

2、phpcms注入漏洞

/phpcms/modules/poster/poster.php 位置約221行

if ($_GET['group']) {

 

 

之后加上

 

 

$_GET['group'] = preg_replace('#`#', '', $_GET['group']);

 

3、phpcms前台注入導致任意文件讀取漏洞補丁

/phpcms/modules/content/down.php

(1)位置約17行

parse_str($a_k);

 

替換為

$a_k = safe_replace($a_k); parse_str($a_k);

 

(2)位置約89行

parse_str($a_k);

 

替換為

$a_k = safe_replace($a_k); parse_str($a_k);

 

(3)位置約120行

$filename = date('Ymd_his').random(3).'.'.$ext;

 

之后加上

$fileurl = str_replace(array('<','>'), '',$fileurl);

 

 

 

4、phpcms注入漏洞 

/phpcms/modules/member/index.php 位置約615行

原來代碼:

 

 

$password = isset($_POST['password']) && trim($_POST['password']) ? trim($_POST['password']) : showmessage(L('password_empty'),HTTP_REFERER);

 

替換為:

$password = isset($_POST['password']) && trim($_POST['password']) ? addslashes(urldecode(trim($_POST['password']))) : showmessage(L('password_empty'), HTTP_REFERER);

 

5、phpcms某處邏輯問題導致getshell

1.根據漏洞描述,找到對應文件attachment.class.php的對應位置(第144行附近),並添加補丁代碼。

  1.  
    //補丁代碼如下
  2.  
    if($ext !== 'gif|jpg|jpeg|bmp|png'){
  3.  
    if(!in_array(strtoupper($ext),array('JPG','GIF','BMP','PNG','JPEG'))) exit('附加擴展名必須為gif、jpg、jpeg、bmp、png');
  4.  
    }

添加后的代碼,截圖如下:

 

這樣,加入一個判斷,如果允許的文件格式是'gif','jpg','jpeg','bmp','png'這些,就繼續,不然就跳出,當然這里的格式可以根據需要增多幾個。

 

6、phpcms注入漏洞

/api/phpsso.php 位置約128行

原來代碼

  1.  
    $arr[ 'uid'] = intval($arr['uid']);
  2.  
    $phpssouid = $arr[ 'uid'];

 

替換為,二合一代碼

$phpssouid = intval($arr['uid']);

 

7、phpcms authkey生成算法問題導致authkey泄露

/caches/configs/system.php,增加第一個參數:

'alivulfix' => 'yes',

照着下面的函數重新生成一下key值,然后找caches/configs/system.php 里面把兩個參數替換一下就ok了

  1.  
    <?php
  2.  
    function random($length, $chars = '0123456789') {
  3.  
     
  4.  
    $hash = '';
  5.  
    $max = strlen($chars) - 1;
  6.  
    for($i = 0; $i < $length; $i++) {
  7.  
    $hash .= $chars[mt_rand( 0, $max)];
  8.  
    }
  9.  
    return $hash;
  10.  
    }
  1.  
     
  2.  
    echo random(20, 'authkey').' <br/>';
  3.  
    echo random(32, 'phpssoauthkey');exit;
  4.  
     
  5.  
    ?>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM