某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格式的响应

验证方法

  1. 尝试上传PHP文件
  2. 通过文件监控确认上传成功
  3. 虽然图片管理界面只显示图片文件(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

验证方法

  1. 拦截删除请求
  2. 修改文件路径参数为系统关键文件(如logo或install.lock)
  3. 发送请求确认删除成功

风险

  • 删除install.lock可能导致系统重装
  • 在重装过程中可能引入更多漏洞(如写入Webshell)

5. 系统设置SQL注入/代码注入漏洞

漏洞位置application/admin/controller/Set.php

漏洞分析

  1. 系统设置功能将POST数据写入config/readfile下的system.php
  2. 写入流程:
    • updatesystem()setupdatesystem()
  3. 使用json_encode($array, 1)处理输入:
    • 双引号(")会被转义为\"
    • 但单引号(')不会被转义
  4. 系统加载时会include生成的system.php文件
  5. 注入单引号会导致PHP解析错误

潜在风险

  • 可能通过精心构造的输入实现代码注入
  • 目前尝试闭合单引号未成功,因return语句会终止后续执行

三、审计技巧总结

  1. 文件上传功能审计要点

    • 检查文件类型验证机制
    • 对比前后台验证差异
    • 检查不同模块(如API接口)的验证机制
  2. 文件删除功能审计要点

    • 检查路径拼接是否安全
    • 验证是否有权限控制
    • 检查是否可删除系统关键文件
  3. 系统配置功能审计要点

    • 检查配置写入流程
    • 验证输入过滤机制
    • 检查特殊字符处理方式
  4. 其他技巧

    • 使用文件监控工具验证上传结果
    • 对比不同用户角色的功能实现差异
    • 检查安装/重装机制的安全性

四、修复建议

  1. 文件上传漏洞

    • 严格限制允许的文件类型
    • 使用白名单机制
    • 对上传文件进行重命名
    • 设置适当的文件权限
  2. 文件删除漏洞

    • 实现权限验证
    • 限制可删除的文件范围
    • 对用户输入进行严格过滤
  3. 系统设置漏洞

    • 对单引号等特殊字符进行转义
    • 考虑使用更安全的配置存储方式
    • 实现输入验证机制
  4. 通用建议

    • 对所有用户输入进行过滤和验证
    • 实现严格的权限控制
    • 定期进行安全审计和代码审查
PHP商城系统安全审计教学文档 一、系统概述 本次审计的PHP商城系统结构如下: 二、发现的安全漏洞 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 模块)使用了验证规则: 相比后台,用户端有严格的文件扩展名限制 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接口)的验证机制 文件删除功能审计要点 : 检查路径拼接是否安全 验证是否有权限控制 检查是否可删除系统关键文件 系统配置功能审计要点 : 检查配置写入流程 验证输入过滤机制 检查特殊字符处理方式 其他技巧 : 使用文件监控工具验证上传结果 对比不同用户角色的功能实现差异 检查安装/重装机制的安全性 四、修复建议 文件上传漏洞 : 严格限制允许的文件类型 使用白名单机制 对上传文件进行重命名 设置适当的文件权限 文件删除漏洞 : 实现权限验证 限制可删除的文件范围 对用户输入进行严格过滤 系统设置漏洞 : 对单引号等特殊字符进行转义 考虑使用更安全的配置存储方式 实现输入验证机制 通用建议 : 对所有用户输入进行过滤和验证 实现严格的权限控制 定期进行安全审计和代码审查