PHPCMS V9 一些漏洞修复方案

某处逻辑问题导致GetShell

文件位置:/phpcms/libs/classes/attachment.class.php
解决办法(Line 144):

//在144行后添加一行
if($ext !== 'gif|jpg|jpeg|bmp|png'){
            if(!in_array(strtoupper($ext),array('JPG','GIF','BMP','PNG','JPEG'))) exit('附加扩展名必须为gif、jpg、jpeg、bmp、png');
        }
phpsso.php注入漏洞修复

文件位置:/phpcms/libs/classes/attachment.class.php
解决办法(Line 129):

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

替换为,二合一代码:

$phpssouid = intval($arr['uid']);
authkey生成算法问题导致authkey泄露

文件位置:caches/configs/system.php
解决办法:
1.在/caches/configs/system.php,增加第一个参数:

'alivulfix' => 'yes',

修改后,代码截图如下:

2.找到并修改auth_key,20位字符串;具体写什么,自定义即可。

'auth_key' => '2qKYgs0PgHWWtaFVb3KP', //密钥

3.找到并修改auth_key,32位字符串;具体写什么,自定义即可。

'phpsso_auth_key' => 'hjor66pewop_3qooeamtbiprooteqein', //加密密钥

注意:到了这一步,网站用户暂时都登录不了,接下来还有最重要的一步。

4、后台登录phpsso管理中心,在导航菜单phpsso ——> 应用管理 ——> 编辑中,编辑“通信密钥”为第3步设置的’phpsso_auth_key’ 的值,然后点击提交。

关键步骤截图如下:

提交之后,页面显示通信成功,如下图。

5.最后,额外去测试一下登录。

前台注入导致任意文件读取漏洞

文件位置:/phpcms/modules/content/down.php
解决方法:
1.找到对应文件down.php 的对应位置(第18、89行 附近),添加或替换相应的代码。
补丁代码片段如下:

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

修改后的补丁代码片段截图如下:
第一处修改,第18行附近:

第二处修改,第89行附近:

注意:第一处和第二处的补丁代码内容一样。
第三处修改,第120行附近:
补丁代码片段如下:

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

file_down($fileurl, $filename);

修改后的补丁代码片段截图如下:

PHPCMS V9宽字节注入问题

文件位置:/phpcms/modules/pay/respond.php
解决方法(Line 14):
找到 respond_get()替换成下面的代码,代码如下:

  public function respond_get() { 
     if ($_GET['code']){ 
          $code = mysql_real_escape_string($_GET['code']);//注意修改
          $payment = $this->get_by_code($code);//注意修改
          if(!$payment) showmessage(L('payment_failed')); 
          $cfg = unserialize_config($payment['config']); 
          $pay_name = ucwords($payment['pay_code']); 
          pc_base::load_app_class('pay_factory','',0); 
          $payment_handler = new pay_factory($pay_name, $cfg); 
          $return_data = $payment_handler->receive(); 
          if($return_data) { 
              if($return_data['order_status'] == 0) {              
                  $this->update_member_amount_by_sn($return_data['order_id']); 
              } 
              $this->update_recode_status_by_sn($return_data['order_id'],$return_data['order_status']); 
              showmessage(L('pay_success'),APP_PATH.'index.php?m=pay&c=deposit'); 
          } else { 
              showmessage(L('pay_failed'),APP_PATH.'index.php?m=pay&c=deposit'); 
          } 
      } else { 
          showmessage(L('pay_success')); 
      } 
  } 

添加后的代码,截图示例如下:

poster.php注入漏洞

文件位置:/phpcms/modules/poster/poster.php
解决方法(Line 221):

// 修改之前
...
if ($_GET['group']) {
    $group = " `".$_GET['group']."`";
    $fields = "*, COUNT(".$_GET['group'].") AS num";
    $order = " `num` DESC";
}
...

在代码if ($_GET['group']) {的后面,添加代码:

$ _GET['group'] = preg_replace('#`#', '', $_GET['group']);
// 修改之后  
...
if ($_GET['group']) {
    $_GET['group'] = preg_replace('#`#', '', $_GET['group']);
    $group = " `".$_GET['group']."`";
    $fields = "*, COUNT(".$_GET['group'].") AS num";
    $order = " `num` DESC";
}
...
index.php注入漏洞

文件位置:/phpcms/modules/member/index.php
解决方法(Line 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);
其他漏洞提示

请参考云栖社区文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353