phpcms attachment.class.php,PHPCMS V9 一些漏洞修复方案 - Late Winter

某处逻辑问题导致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',

修改后,代码截图如下:

dbb603a1ba321da270af7724a01f0111.png

2.找到并修改auth_key,20位字符串;具体写什么,自定义即可。'auth_key' => '2qKYgs0PgHWWtaFVb3KP', //密钥

3.找到并修改auth_key,32位字符串;具体写什么,自定义即可。'phpsso_auth_key' => 'hjor66pewop_3qooeamtbiprooteqein', //加密密钥

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

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

关键步骤截图如下:

41347e1494fddcc94faa37f77855b939.png

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

c9b9338b368e3ad33400d374e383ce02.png

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

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

文件位置:/phpcms/modules/content/down.php

解决方法:

1.找到对应文件down.php 的对应位置(第18、89行 附近),添加或替换相应的代码。

补丁代码片段如下:$a_k = safe_replace($a_k);

parse_str($a_k);

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

第一处修改,第18行附近:

2fc77c42dbfb5a435b7c095bb8f4d5a0.png

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

f7c15f9081211eff9f1d268d48fbdb1c.png

注意:第一处和第二处的补丁代码内容一样。

第三处修改,第120行附近:

补丁代码片段如下:$fileurl = str_replace(array(''), '',$fileurl);

file_down($fileurl, $filename);

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

75aa25710aa4df89c3f37171c2a524bd.png

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'));

}

}

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

425b953619520016d40a853fa955ffdc.png

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);

其他漏洞提示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值