某php商城系统简单的审计
字数 1461 2025-08-29 08:31:35
PHP商城系统安全审计教学文档
一、系统概述
本次审计的PHP商城系统结构如下:
application/
├── admin/ # 后台管理模块
├── index/ # 首页模块
├── api/ # 用户后台模块
└── wxapi/ # 微信小程序用户后台模块
二、发现的安全漏洞
1. 后台任意文件上传漏洞
漏洞位置:application/admin/controller/File.php
漏洞分析:
- 后台图片上传功能未对上传文件类型进行有效过滤
- 虽然前端显示只允许图片格式(jpg,jpeg,png,gif等),但实际可以上传任意文件类型
- 文件上传成功后,系统会返回JSON格式的响应
验证方法:
- 尝试上传PHP文件
- 通过文件监控确认上传成功
- 虽然图片管理界面只显示图片文件(
glob($folder.'*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}', GLOB_BRACE)),但PHP文件已实际存在于服务器
风险:攻击者可上传Webshell获取服务器控制权限
2. 用户端文件上传限制绕过
对比分析:
- 用户端上传功能(
api模块)使用了验证规则:$rules = ['ext' => 'jpeg,jpg,png', 'size' => 1024 * 1024 * 4] $file->validate($this->rules) - 相比后台,用户端有严格的文件扩展名限制
3. 微信接口(Wxapi)未授权文件上传
漏洞分析:
- 微信小程序接口模块(
wxapi)中的文件上传功能未进行任何验证 - 普通用户可通过此接口上传任意文件
- 本地复现未成功,可能存在环境依赖问题
4. 任意文件删除漏洞
漏洞位置:文件删除功能
漏洞分析:
- 删除操作直接拼接用户输入的文件路径
- 无任何过滤或验证
- 可删除系统关键文件如
install.lock
验证方法:
- 拦截删除请求
- 修改文件路径参数为系统关键文件(如logo或install.lock)
- 发送请求确认删除成功
风险:
- 删除
install.lock可能导致系统重装 - 在重装过程中可能引入更多漏洞(如写入Webshell)
5. 系统设置SQL注入/代码注入漏洞
漏洞位置:application/admin/controller/Set.php
漏洞分析:
- 系统设置功能将POST数据写入
config/readfile下的system.php - 写入流程:
updatesystem()→setupdatesystem()
- 使用
json_encode($array, 1)处理输入:- 双引号(
")会被转义为\" - 但单引号(
')不会被转义
- 双引号(
- 系统加载时会
include生成的system.php文件 - 注入单引号会导致PHP解析错误
潜在风险:
- 可能通过精心构造的输入实现代码注入
- 目前尝试闭合单引号未成功,因
return语句会终止后续执行
三、审计技巧总结
-
文件上传功能审计要点:
- 检查文件类型验证机制
- 对比前后台验证差异
- 检查不同模块(如API接口)的验证机制
-
文件删除功能审计要点:
- 检查路径拼接是否安全
- 验证是否有权限控制
- 检查是否可删除系统关键文件
-
系统配置功能审计要点:
- 检查配置写入流程
- 验证输入过滤机制
- 检查特殊字符处理方式
-
其他技巧:
- 使用文件监控工具验证上传结果
- 对比不同用户角色的功能实现差异
- 检查安装/重装机制的安全性
四、修复建议
-
文件上传漏洞:
- 严格限制允许的文件类型
- 使用白名单机制
- 对上传文件进行重命名
- 设置适当的文件权限
-
文件删除漏洞:
- 实现权限验证
- 限制可删除的文件范围
- 对用户输入进行严格过滤
-
系统设置漏洞:
- 对单引号等特殊字符进行转义
- 考虑使用更安全的配置存储方式
- 实现输入验证机制
-
通用建议:
- 对所有用户输入进行过滤和验证
- 实现严格的权限控制
- 定期进行安全审计和代码审查