BEEScms代码审计漏洞分析
字数 1215 2025-08-03 10:57:13

BEEScms代码审计漏洞分析报告

一、环境搭建

  1. 访问install目录,按照安装步骤搭建BEEScms系统

二、后台文件上传漏洞分析

漏洞位置

admin/upload.php文件中的文件上传功能

关键函数

up_img()函数(位于fun.php中)

漏洞原理

  1. 关键变量:

    • $file:上传的文件
    • $type:允许上传的文件类型
  2. 校验流程:

    • 将上传文件的文件类型赋值给变量$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文件

漏洞原理

  1. 通过GET方式获取可控参数id
  2. 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文件

漏洞原理

  1. 变量$parent直接拼接到SQL语句中
  2. $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中的身份验证机制

身份验证机制分析

  1. 包含init.php文件
  2. init.php中引用了is_login()函数(位于fun.php
  3. 身份验证仅校验:
    • $_SESSION['login_in']
    • $_SESSION['admin']
    • time()-$_SESSION[login_time]是否小于3600

关键点

  1. 程序未校验实际的usernamepassword
  2. 只要设置正确的session标识位即可绕过身份验证

漏洞利用条件

必须在session_start()之后覆盖$_SESSION变量

利用方法

构造payload覆盖session变量:

_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=999999999

漏洞修复建议

  1. 文件上传漏洞:

    • 增加文件内容校验而不仅依赖content-type
    • 限制上传文件扩展名
    • 对上传文件进行重命名
  2. SQL注入漏洞:

    • 对所有用户输入参数进行严格过滤
    • 使用预处理语句(PDO或mysqli)
    • 实现参数化查询
  3. 身份验证漏洞:

    • 增加实际的用户名密码校验
    • 使用更安全的session管理机制
    • 实现CSRF防护
  4. 其他建议:

    • 对后台功能增加严格的权限控制
    • 实现输入输出过滤的统一机制
    • 定期进行安全审计和代码审查
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语句中 漏洞利用示例 四、后台SQL注入漏洞(admin_ catagory.php) 漏洞位置 admin/admin_catagory.php 文件 漏洞原理 变量 $parent 直接拼接到SQL语句中 $parent 参数未经过任何过滤 参数传递方式 通过GET请求传递 parent 参数 漏洞利用示例 五、任意用户登录漏洞(将后台文件上传变为前台上传) 漏洞位置 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变量: 漏洞修复建议 文件上传漏洞: 增加文件内容校验而不仅依赖content-type 限制上传文件扩展名 对上传文件进行重命名 SQL注入漏洞: 对所有用户输入参数进行严格过滤 使用预处理语句(PDO或mysqli) 实现参数化查询 身份验证漏洞: 增加实际的用户名密码校验 使用更安全的session管理机制 实现CSRF防护 其他建议: 对后台功能增加严格的权限控制 实现输入输出过滤的统一机制 定期进行安全审计和代码审查