某商城代码审计
字数 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.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语句:
INSERT INTO table_name VALUES (...恶意内容...);
3. 攻击步骤
- 上传恶意SQL备份文件
- 执行恢复操作
- 导出为
.php后缀的文件 - 直接访问导出的PHP文件执行恶意代码
防御建议
-
输入验证:
- 加强对表名参数的验证,使用白名单机制
- 限制备份文件扩展名,禁止.php等可执行文件
-
输出处理:
- 对备份文件内容进行严格过滤
- 禁止用户控制备份文件扩展名
-
权限控制:
- 限制备份/恢复功能的使用权限
- 对备份目录设置不可执行权限
-
日志监控:
- 记录所有备份/恢复操作
- 监控异常备份文件创建行为
技术要点总结
-
文件操作安全:
- 文件路径拼接需防止目录穿越
- 文件扩展名需严格限制
-
SQL注入防护:
- 虽然使用了参数化查询,但备份功能本身处理不当仍可能导致问题
-
二次漏洞利用:
- 通过备份恢复功能实现文件写入
- 利用文件扩展名控制实现代码执行
-
过滤绕过:
- 虽然前端有
htmlspecialchars过滤,但备份文件处理流程存在缺陷 - 通过控制备份内容实现存储型攻击
- 虽然前端有
此漏洞展示了即使有基本的安全防护措施,如果功能逻辑设计不当,仍然可能被攻击者利用实现代码执行。