phpcmsV9官方源码漏洞

本文针对PHPCMS V9中的多个安全漏洞进行了详细的分析与修复,包括附件处理逻辑漏洞、海报模块注入漏洞、支付响应宽字节注入及同步登录注入问题。通过对关键代码段的修改,有效提升了系统的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)、phpcms的/phpcms/libs/classes/attachment.class.php中,对输入参数$ext未进行类型限制,导致逻辑漏洞的产生。

解决方法:修改/phpcms/libs/classes/attachment.class.php文件143行左右的download方法,在方法开始位置加入:

function download($field, $value,$watermark = '0',$ext = 'gif|jpg|jpeg|bmp|png', $absurl = '', $basehref = '')
	{	
      	$extarr = explode('|',strtolower($ext));
        $allow_extarr = array('gif','jpg','jpeg','bmp','png');
        foreach ($extarr as $theext) {
          if(!in_array(strtolower($theext),$allow_extarr)){
            exit('the file ext is not allowed');
            exit(0);
          }
        }
		global $image_d;

        ......

(2)、PHPCMS V9 phpcms/modules/poster/poster.php phpcms注入漏洞
文件路径:/phpcms/modules/poster/poster.php
漏洞描述:
phpcms的/phpcms/modules/poster/poster.php 文件中,未对输入参数$_GET['group']进行严格过滤。导致注入漏洞。【注意:该补丁为云盾自研代码修复方案,云盾会根据您当前代码是否符合云盾自研的修复模式进行检测,如果您自行采取了底层/框架统一修复、或者使用了其他的修复方案,可能会导致您虽然已经修复了改漏洞,云盾依然报告存在漏洞,遇到该情况可选择忽略该漏洞提示】

当前修复代码的演示版本为 Phpcms V9.6.0 Release 20151225,修复区域,所在位置约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']);
    $group = " `".$_GET['group']."`";
    $fields = "*, COUNT(".$_GET['group'].") AS num";
    $order = " `num` DESC";
}

(3)、PHPCMS V9 /phpcms/modules/pay/respond.php phpcmsv9宽字节注入修复补丁

漏洞名称phpcmsv9宽字节注入

文件路径:/phpcms/modules/pay/respond.php

修复方法来源于阿里云(安骑士)

源代码
/**
* return_url get形式响应
*/
public function respond_get() {
if ($_GET['code']){
$payment = $this->get_by_code($_GET['code']);
if(!$payment) showmessage(L('payment_failed'));
$cfg = unserialize_config($payment['config']);

补丁代码
/**
* return_url get形式响应
*/
public function respond_get() {
if ($_GET['code']){
$payment = $this->get_by_code(mysql_real_escape_string($_GET['code']));  //补丁替换代码
if(!$payment) showmessage(L('payment_failed'));
$cfg = unserialize_config($payment['config']);

(4)、漏洞名称:phpcms注入漏洞
补丁编号:5454247
补丁文件:/api/phpsso.php
补丁来源:云盾自研
漏洞描述:phpcms注入漏洞。
打开文件 /api/phpsso.php 找到125行if ($action == 'synlogin')

原代码:

/**
*同步登陆
*/
if ($action == 'synlogin') { 
if(!isset($arr['uid'])) exit('0'); 
$arr['uid'] = intval($arr['uid']); 
$phpssouid = $arr['uid']; 
$userinfo = $db->get_one(array('phpssouid'=>$phpssouid)); 

补丁代码: 

/**
*同步登陆
*/
if ($action == 'synlogin') { 
if(!isset($arr['uid'])) exit('0'); 
$phpssouid = intval($arr['uid']);  /** 补丁[合二为一] */ 
$userinfo = $db->get_one(array('phpssouid'=>$phpssouid)); 

 

### PHPCMS V9 安全漏洞详情 #### SQL 注射漏洞 PHPCMS V9 存在一个SQL注入漏洞,该漏洞允许攻击者通过特定参数执行任意SQL命令。此漏洞存在于`/phpsso_server/phpcms/libs/classes/param.class.php`文件中的大约第108行附近[^5]。 ```sql SELECT * FROM phpcms WHERE id = '$_GET[id]' ``` 上述代码未对输入进行充分过滤,使得恶意用户能够构造特殊请求来操纵查询语句并获取敏感信息或控制数据库操作。 #### 后台 GetShell 漏洞 对于 PHPCMS 9.6.3 版本存在后台 getshell 的情况,在某些配置下,攻击者可能利用上传功能绕过验证机制实现远程代码执行。具体来说,当管理员登录后访问特定页面时,如果服务器端未能严格校验文件类型,则可能导致非法脚本被成功上载至服务器目录中[^1]。 #### PHP 文件包含漏洞 另一个值得注意的是本地文件包含(LFI)问题,它使外部实体得以读取甚至修改内部资源。例如,在`/phpcms/modules/block/block_admin.php`中有涉及向 `v9_block` 数据表插入记录的功能模块;然而由于缺乏必要的权限检查措施,这成为了一种潜在风险点,可用来实施进一步攻击行为如获得web shell等[^3]。 ### 修复建议 针对以上提到的各种安全隐患,官方已经发布补丁程序用于解决这些问题: - **更新版本**:最直接有效的方法就是尽快升级到最新稳定版软件包,因为开发者通常会在新发行的产品里修补已知缺陷。 - **加强输入验证**:确保所有来自客户端的数据都经过严格的净化处理再参与后续逻辑运算过程之中,特别是涉及到动态构建SQL指令的地方更应该谨慎对待每一个变量值。 - **限制文件上传路径与格式**:明确规定哪些类型的文档才允许提交上来,并指定专门存储区域防止越权访问现象发生的同时也便于日后维护管理。 - **定期审查源码质量**:建立完善的测试流程体系,邀请第三方机构协助开展全面审计工作,及时发现隐藏较深的技术性错误从而减少因疏忽大意造成的损失可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值