BEEScms代码审计漏洞分析
字数 1215 2025-08-03 10:57:13
BEEScms代码审计漏洞分析报告
一、环境搭建
- 访问install目录,按照安装步骤搭建BEEScms系统
二、后台文件上传漏洞分析
漏洞位置
admin/upload.php文件中的文件上传功能
关键函数
up_img()函数(位于fun.php中)
漏洞原理
-
关键变量:
$file:上传的文件$type:允许上传的文件类型
-
校验流程:
- 将上传文件的文件类型赋值给变量
$file_type并转换为小写 - 使用
in_array()判断$file_type是否存在于$type中 - 仅校验了
content-type字段,未对文件内容进行严格校验
- 将上传文件的文件类型赋值给变量
漏洞利用
通过修改HTTP请求中的content-type字段,可以绕过上传校验,上传任意文件(如webshell)
上传成功后的路径
http://[目标地址]/BEES_V4.0/upload/img/[上传时间].php
三、后台SQL注入漏洞(admin_book.php)
漏洞位置
admin/admin_book.php文件
漏洞原理
- 通过GET方式获取可控参数
id id参数未经过任何过滤直接拼接到SQL语句中
漏洞利用示例
GET /BEES_V4.0/admin/admin_book.php?action=del&id=1* HTTP/1.1
Host: [目标地址]
[其他HTTP头...]
四、后台SQL注入漏洞(admin_catagory.php)
漏洞位置
admin/admin_catagory.php文件
漏洞原理
- 变量
$parent直接拼接到SQL语句中 $parent参数未经过任何过滤
参数传递方式
通过GET请求传递parent参数
漏洞利用示例
GET /BEES_V4.0/admin/admin_catagory.php?action=child&channel_id=1&parent=1+union+select+database() HTTP/1.1
Host: [目标地址]
[其他HTTP头...]
五、任意用户登录漏洞(将后台文件上传变为前台上传)
漏洞位置
admin/upload.php中的身份验证机制
身份验证机制分析
- 包含
init.php文件 init.php中引用了is_login()函数(位于fun.php)- 身份验证仅校验:
$_SESSION['login_in']$_SESSION['admin']time()-$_SESSION[login_time]是否小于3600
关键点
- 程序未校验实际的
username和password - 只要设置正确的session标识位即可绕过身份验证
漏洞利用条件
必须在session_start()之后覆盖$_SESSION变量
利用方法
构造payload覆盖session变量:
_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=999999999
漏洞修复建议
-
文件上传漏洞:
- 增加文件内容校验而不仅依赖content-type
- 限制上传文件扩展名
- 对上传文件进行重命名
-
SQL注入漏洞:
- 对所有用户输入参数进行严格过滤
- 使用预处理语句(PDO或mysqli)
- 实现参数化查询
-
身份验证漏洞:
- 增加实际的用户名密码校验
- 使用更安全的session管理机制
- 实现CSRF防护
-
其他建议:
- 对后台功能增加严格的权限控制
- 实现输入输出过滤的统一机制
- 定期进行安全审计和代码审查