PHPCMS漏洞分析合集(上)
字数 2220 2025-08-27 12:33:37
PHPCMS漏洞分析与利用技术详解
一、PHPCMS v9.6.0任意文件上传漏洞
漏洞原理分析
该漏洞存在于用户注册功能中,通过精心构造的POST数据可实现远程文件上传并执行任意代码。
漏洞链分析:
- 用户注册时,
$_POST['info']参数传入member_input类的get方法 get方法允许调用member_input类的所有方法- 通过调用
editor方法触发文件下载功能 editor方法调用attachment类的download方法download方法存在正则绕过和URL处理缺陷
关键代码点:
- 漏洞入口:
phpcms/modules/member/index.php中的用户注册处理 - 方法调用链:
member_input->get()->editor()->attachment->download() - 正则绕过技巧:使用
http://xxxx/1.php?a.jpg或http://xxxx/1.php#a.jpg格式绕过.gif|jpg|jpeg|bmp|png限制
文件上传流程:
fillurl方法去除#号后内容,将http://xxxx/1.php#a.jpg处理为http://xxxx/1.php- 使用
copy函数将远程文件复制到本地 - 上传路径格式:
uploadfile/date('Y/md/')/date('Ymdhis').rand(100, 999).'.'.$fileext
漏洞修复分析
官方在v9.6.1中增加了黑名单校验:
- 使用
fileext($file)获取文件后缀 - 检查后缀是否在黑名单中
- 修复缺陷:仍可上传图片马,若存在文件包含或文件名修改漏洞仍可getshell
潜在绕过尝试
尝试使用.php%7f绕过(Windows会将非法字符替换为空),但由于后续处理限制未能成功
二、PHPCMS v9.6.0 SQL注入漏洞
漏洞原理分析
该漏洞源于对解密数据未进行充分过滤,结合变量覆盖问题导致SQL注入。
漏洞链分析:
phpcms/modules/content/down.php的init方法获取a_k参数- 使用
sys_auth解密a_k值 parse_str处理解密数据导致变量覆盖- 未过滤的
$id直接拼接到SQL查询
关键代码点:
- 加密机制:默认使用
pc_base::load_config('system','auth_key')作为密钥 - 注入点:
get_one方法直接拼接未过滤数据到SQL语句 - 数据加密入口:
phpcms/modules/wap/index.php的$_GET['siteid']phpcms/modules/mood/index.php的post方法
利用条件:
- 获取有效的加密payload
- 绕过登录验证
- 构造注入语句
漏洞利用链详解
第一步:获取加密数据
- 通过
wap/index.php或mood/index.php获取加密数据 - 即使WAP模块禁用,仍可通过
mood/index.php获取
第二步:绕过登录验证
- 使用
attachments.php的swfupload_json方法 $_GET['src']仅经过safe_replace过滤- 登录验证绕过:
$_POST['userid_flash']使用第一步获取的加密数据- 解密后非空即可通过验证
第三步:完成注入
- 通过
parse_str变量覆盖 - 构造恶意SQL语句
管理员会话劫持技术
- 通过注入获取管理员
PHPSESSID(存储在数据库) - 需要额外获取
$userid字段值(从响应包Set-Cookie获取) - 限制条件:管理员必须保持登录状态
漏洞修复分析
官方在v9.6.1中增加了:
safe_replace过滤intval过滤
三、漏洞利用实战技巧
任意文件上传利用要点
- 构造恶意注册请求,包含特殊格式的图片URL
- 使用
#或?绕过文件类型检查 - 预测上传路径和时间格式
SQL注入利用要点
- 寻找可获取加密数据的入口点
- 构造双重请求:先获取加密数据,再用于注入
- 注意WAP模块状态对利用的影响
权限提升技巧
- 通过注入获取管理员cookie
- 伪造完整会话需要:
PHPSESSIDuserid字段
- 检查
$_SESSION['roleid']和$userid匹配
四、防御建议
针对文件上传漏洞
- 实施严格的文件类型白名单
- 检查文件内容而不仅是扩展名
- 对远程文件下载实施内容校验
针对SQL注入漏洞
- 对所有解密数据进行严格过滤
- 使用参数化查询
- 避免直接拼接用户输入到SQL语句
通用安全建议
- 及时更新到最新版本
- 实施最小权限原则
- 对会话管理加强保护,特别是管理员会话
五、扩展思考
漏洞链挖掘方法论
- 从漏洞点反向追踪触发路径
- 寻找多个可能的漏洞入口
- 分析补丁的完整性和潜在绕过
代码审计技巧
- 关注加密解密函数的使用
- 追踪用户输入的数据流
- 特别注意变量覆盖场景
本教学文档详细分析了PHPCMS两个高危漏洞的技术细节和利用方法,涵盖了从漏洞原理到实际利用的全过程,并提供了针对性的防御建议。这些分析不仅适用于PHPCMS,其中的技术思路和方法论也可应用于其他CMS系统的安全审计。