[代码审计] 从入口到权限:Beecms 4.0 后台漏洞链深度剖析

张开发
2026/4/21 17:28:42 15 分钟阅读

分享文章

[代码审计] 从入口到权限:Beecms 4.0 后台漏洞链深度剖析
1. Beecms 4.0 漏洞链概述Beecms 4.0 作为一款老牌内容管理系统其安全漏洞组合堪称经典教学案例。我在实际渗透测试中多次遇到这个系统发现攻击者只需利用三个关键漏洞就能完成从外网渗透到服务器控制的完整攻击链首先是后台登录页面的SQL注入漏洞接着是后台文件上传功能缺陷最后配合任意文件删除漏洞实现权限升级。这种漏洞组合拳的杀伤力远超单个漏洞下面我就带大家完整走一遍攻击路径。这个CMS的漏洞链特别适合用来理解攻击面扩展的概念。很多新手容易陷入找到一个漏洞就结束测试的误区但实际上专业渗透测试的核心就在于如何将多个漏洞串联起来。比如我们先通过SQL注入伪造管理员身份进入后台这个后台本身可能没有直接执行系统命令的功能但结合文件上传和文件删除漏洞就能实现最终的getshell目标。2. 后台登录SQL注入漏洞剖析2.1 漏洞成因深度分析在admin/login.php文件中开发者犯了一个致命错误——没有包含init.php初始化文件。这个文件本应负责对所有用户输入进行安全过滤。我翻看代码时发现init.php中明明已经实现了完善的addsl()函数来防御SQL注入function addsl($value) { if (empty($value)) return $value; return is_array($value) ? array_map(addsl, $value) : addslashes($value); }但登录页面的处理逻辑却完全绕过了这个防护机制。更糟糕的是它自实现的过滤函数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); }这种简单的字符串替换可以通过双写轻松绕过。比如select被过滤时我们提交selselectect经过替换后就变成了select。我在测试时发现一个有趣的现象过滤列表中的 and 左右带有空格但union却没有这种不一致性进一步扩大了攻击面。2.2 实战注入过程演示使用报错注入获取数据库信息是最直观的方式。我常用的payload是这样的 anselectd extractvalue(1,concat(0x7e,(database()))) #这个payload有几个设计要点使用anselectd绕过对and的过滤extractvalue函数触发XML解析错误concat(0x7e,...)确保报错信息包含查询结果更危险的是这个注入点可以直接用于伪造管理员登录。由于查询语句同时返回用户名和密码字段$rel$GLOBALS[mysql]-fetch_asc(select id,admin_name,admin_password,... where admin_name.$user.);我们可以构造union查询返回自定义的管理员凭证user-1uniselectonselselectect1,admin,e10adc3949ba59abbe56e057f20f883e,0,0%23password123456这里md5(123456)正好就是e10adc3949ba59abbe56e057f20f883e成功登录后系统会完全认为我们就是管理员admin。3. 后台文件上传漏洞利用3.1 图片上传功能绕过进入后台后我首先寻找文件上传功能。在图片上传模块(admin/admin_pic_upload.php)中关键的过滤逻辑是这样的$file_type$file[type]; if(!in_array(strtolower($file_type),$type)){ msg(上传图片格式不正确); }这里仅检查了Content-Type头而众所周知这是可以被BurpSuite轻易修改的。我通常会上传一个jpg文件然后修改请求Content-Type: image/jpg → application/x-php更危险的是上传后的文件路径会直接显示在页面HTML中连猜解都不需要。这种设计简直是为攻击者提供便利。3.2 附件上传的致命配置缺陷在后台的系统设置→上传设置中我发现了一个令人震惊的功能——管理员可以自定义允许上传的文件扩展名。这意味着攻击者可以通过修改配置直接允许上传php文件在允许上传的附件类型中添加php|php3|phtml然后通过附件上传功能直接上传webshell这种将安全配置完全交给用户输入的做法在CMS设计中是绝对的大忌。我在审计其他系统时都会特别关注这类可配置的安全策略因为它们往往是突破防御的关键点。4. 任意文件删除与系统重装漏洞4.1 文件删除漏洞分析在admin/admin_ajax.php中文件删除功能没有任何安全校验elseif($actiondel_pic){ $fileCMS_PATH.upload/.$value; unlink($file); die(图片成功删除); }$value参数直接拼接进文件路径导致可以跨目录删除任意文件。我常用的测试payload是/admin/admin_ajax.php?value../config.phpactiondel_pic这个漏洞单独来看可能危害有限但结合系统重装功能就变得极其危险。很多站长不会删除install目录攻击者可以先删除install.lock文件然后重新执行安装程序。4.2 重装漏洞的局限性虽然重装功能看起来可以getshell但实际测试中发现配置写入使用了单引号//data/db.php $db_config[host] $_POST[db_host];这使得常见的PHP代码注入技巧无法使用。不过聪明的攻击者可能会尝试在这些情况下通过重装修改数据库配置实施二次SQL注入修改SMTP配置实施钓鱼攻击破坏现有配置导致系统瘫痪5. 漏洞防御方案建议针对这系列漏洞我建议开发人员采取以下防护措施统一输入过滤机制确保所有入口文件都包含init.php使用预处理语句替代SQL字符串拼接文件上传功能应检查文件内容而不仅是扩展名关键操作如文件删除需增加权限校验和路径白名单生产环境务必删除install目录对于系统管理员我的实战建议是修改后台默认路径定期更新和修补系统对上传目录设置严格的权限限制监控系统文件变更情况这套漏洞链给我最深的启示是安全是一个整体任何环节的疏忽都可能导致全线崩溃。我在内部培训时经常用Beecms作为案例它完美展示了从注入到提权的完整攻击链条。

更多文章