某商城代码审计
字数 1050 2025-08-09 18:44:06

某商城备份功能代码审计与漏洞利用分析

审计工具

  • PhpStorm
  • Seay源代码审计系统

漏洞发现过程

1. 关键点定位

在商城后台的备份功能中发现潜在漏洞点,位于备份功能代码的183行处:

// 打开storage/backup目录下的文件,追加内容后关闭
fopen('storage/backup/' . $filename, 'a');
// 写入内容
fwrite($handle, $output);
// 关闭文件
fclose($handle);

2. 请求处理机制分析

请求处理由system/library/request.php处理:

  • 构造参数通过clean方法进行循环处理
  • 第46行使用htmlspecialchars进行实体化编码,防止XSS攻击

3. 备份功能核心逻辑

backup.phpbackup方法中:

  • 第124行:对$table参数进行判断,必须为有效表名才能继续执行
  • getTables方法位于admin/model/tool/backup.php
  • 第160行:将指定表名和内容进行拼接操作,fields参数指定表的所有字段内容

4. 潜在利用思路

虽然想到可以通过存储型XSS写入shell,但存在以下限制:

  • 所有请求都经过request.phpclean方法处理
  • clean方法会对所有数组键值循环使用htmlspecialchars过滤

漏洞利用方法

1. 备份文件分析

  1. 首先备份一份数据,观察内容格式:
    • 默认备份文件名为日期时间格式,后缀为.sql
    • 文件内容为指定表的所有字段参数,使用INSERT语法

2. 构造恶意SQL文件

修改备份文件内容,插入恶意SQL语句:

INSERT INTO table_name VALUES (...恶意内容...);

3. 攻击步骤

  1. 上传恶意SQL备份文件
  2. 执行恢复操作
  3. 导出为.php后缀的文件
  4. 直接访问导出的PHP文件执行恶意代码

防御建议

  1. 输入验证

    • 加强对表名参数的验证,使用白名单机制
    • 限制备份文件扩展名,禁止.php等可执行文件
  2. 输出处理

    • 对备份文件内容进行严格过滤
    • 禁止用户控制备份文件扩展名
  3. 权限控制

    • 限制备份/恢复功能的使用权限
    • 对备份目录设置不可执行权限
  4. 日志监控

    • 记录所有备份/恢复操作
    • 监控异常备份文件创建行为

技术要点总结

  1. 文件操作安全

    • 文件路径拼接需防止目录穿越
    • 文件扩展名需严格限制
  2. SQL注入防护

    • 虽然使用了参数化查询,但备份功能本身处理不当仍可能导致问题
  3. 二次漏洞利用

    • 通过备份恢复功能实现文件写入
    • 利用文件扩展名控制实现代码执行
  4. 过滤绕过

    • 虽然前端有htmlspecialchars过滤,但备份文件处理流程存在缺陷
    • 通过控制备份内容实现存储型攻击

此漏洞展示了即使有基本的安全防护措施,如果功能逻辑设计不当,仍然可能被攻击者利用实现代码执行。

某商城备份功能代码审计与漏洞利用分析 审计工具 PhpStorm Seay源代码审计系统 漏洞发现过程 1. 关键点定位 在商城后台的备份功能中发现潜在漏洞点,位于备份功能代码的183行处: 2. 请求处理机制分析 请求处理由 system/library/request.php 处理: 构造参数通过 clean 方法进行循环处理 第46行使用 htmlspecialchars 进行实体化编码,防止XSS攻击 3. 备份功能核心逻辑 在 backup.php 的 backup 方法中: 第124行:对 $table 参数进行判断,必须为有效表名才能继续执行 getTables 方法位于 admin/model/tool/backup.php 第160行:将指定表名和内容进行拼接操作, fields 参数指定表的所有字段内容 4. 潜在利用思路 虽然想到可以通过存储型XSS写入shell,但存在以下限制: 所有请求都经过 request.php 的 clean 方法处理 clean 方法会对所有数组键值循环使用 htmlspecialchars 过滤 漏洞利用方法 1. 备份文件分析 首先备份一份数据,观察内容格式: 默认备份文件名为日期时间格式,后缀为 .sql 文件内容为指定表的所有字段参数,使用INSERT语法 2. 构造恶意SQL文件 修改备份文件内容,插入恶意SQL语句: 3. 攻击步骤 上传恶意SQL备份文件 执行恢复操作 导出为 .php 后缀的文件 直接访问导出的PHP文件执行恶意代码 防御建议 输入验证 : 加强对表名参数的验证,使用白名单机制 限制备份文件扩展名,禁止.php等可执行文件 输出处理 : 对备份文件内容进行严格过滤 禁止用户控制备份文件扩展名 权限控制 : 限制备份/恢复功能的使用权限 对备份目录设置不可执行权限 日志监控 : 记录所有备份/恢复操作 监控异常备份文件创建行为 技术要点总结 文件操作安全 : 文件路径拼接需防止目录穿越 文件扩展名需严格限制 SQL注入防护 : 虽然使用了参数化查询,但备份功能本身处理不当仍可能导致问题 二次漏洞利用 : 通过备份恢复功能实现文件写入 利用文件扩展名控制实现代码执行 过滤绕过 : 虽然前端有 htmlspecialchars 过滤,但备份文件处理流程存在缺陷 通过控制备份内容实现存储型攻击 此漏洞展示了即使有基本的安全防护措施,如果功能逻辑设计不当,仍然可能被攻击者利用实现代码执行。