国外某cms审计之文件删除漏洞
字数 997 2025-08-26 22:11:45

MyBB CMS 文件删除漏洞分析与利用教学文档

漏洞概述

本漏洞存在于MyBB内容管理系统的附件管理模块中,允许攻击者在特定条件下删除服务器上的任意文件(除install.lock外)。漏洞源于对用户输入验证不充分,结合上传路径配置修改功能,可实现目录穿越和文件删除。

漏洞位置

\admin\modules\forum\attachements.php 文件第242行的unlink函数调用处:

if(!@unlink(MYBB_ROOT.$mybb->settings['uploadspath']."/".$file))

漏洞分析

文件删除流程

  1. 输入来源

    • 通过POST请求接收orphaned_files数组参数
    • 在228行:$file = $mybb->get_input('orphaned_files', MyBB::INPUT_ARRAY);
  2. 过滤机制

    • 232行:使用str_replace过滤..字符,防止目录穿越
    • 234行:使用realpath函数验证目录有效性
    • 236行:使用strpos检查路径是否包含网站根目录,防止操作网站外文件
    • 特殊处理:对install.lock文件有专门保护
  3. 访问路径

    http://localhost/mybb/admin/index.php?module=forum-attachments&action=delete_orphan
    

上传路径配置控制

  1. 配置修改位置

    • \mybb\inc\settings.php 文件1101行:
      $db->update_query("settings", array('value' => $mybb->get_input($value)), "name='{$name}'");
      
    • uploadspath变量在1042行定义,通过POST请求的upsetting数组传入
  2. 配置修改接口

    http://localhost/mybb/admin/index.php?module=config-settings&action=change
    

漏洞利用步骤

准备工作

  1. 发表帖子并上传一个测试附件(如1111.txt)
  2. 修改uploadspath配置值为目标删除文件的目录

利用过程

  1. 访问论坛附件管理界面:

    http://localhost/mybb/admin/index.php?module=forum-attachments
    
  2. 进行正常附件删除操作并抓包

  3. 修改数据包:

    • 修改action参数为delete_orphans
    • 添加POST参数:orphaned_files[]=///config.php
    • 完整示例:
      action=delete_orphans&orphaned_files[]=///config1.php
      
  4. 发送修改后的请求

防护措施

  1. 输入验证

    • 严格限制文件路径,使用白名单机制
    • 对文件名进行更严格的过滤
  2. 权限控制

    • 限制配置修改权限
    • 对文件删除操作进行二次确认
  3. 文件保护

    • 对系统关键文件设置不可删除属性
    • 实施操作日志记录

总结

该漏洞展示了如何通过组合配置修改和文件删除功能实现任意文件删除。虽然系统已实施了一些防护措施(如目录穿越防护、根目录检查等),但仍存在绕过可能。特别值得注意的是系统对install.lock文件的特殊保护,这种白名单机制值得在其他关键文件保护中借鉴。

MyBB CMS 文件删除漏洞分析与利用教学文档 漏洞概述 本漏洞存在于MyBB内容管理系统的附件管理模块中,允许攻击者在特定条件下删除服务器上的任意文件(除install.lock外)。漏洞源于对用户输入验证不充分,结合上传路径配置修改功能,可实现目录穿越和文件删除。 漏洞位置 \admin\modules\forum\attachements.php 文件第242行的unlink函数调用处: 漏洞分析 文件删除流程 输入来源 : 通过POST请求接收 orphaned_files 数组参数 在228行: $file = $mybb->get_input('orphaned_files', MyBB::INPUT_ARRAY); 过滤机制 : 232行:使用 str_replace 过滤 .. 字符,防止目录穿越 234行:使用 realpath 函数验证目录有效性 236行:使用 strpos 检查路径是否包含网站根目录,防止操作网站外文件 特殊处理:对 install.lock 文件有专门保护 访问路径 : 上传路径配置控制 配置修改位置 : \mybb\inc\settings.php 文件1101行: uploadspath 变量在1042行定义,通过POST请求的 upsetting 数组传入 配置修改接口 : 漏洞利用步骤 准备工作 发表帖子并上传一个测试附件(如1111.txt) 修改 uploadspath 配置值为目标删除文件的目录 利用过程 访问论坛附件管理界面: 进行正常附件删除操作并抓包 修改数据包: 修改 action 参数为 delete_orphans 添加POST参数: orphaned_files[]=///config.php 完整示例: 发送修改后的请求 防护措施 输入验证 : 严格限制文件路径,使用白名单机制 对文件名进行更严格的过滤 权限控制 : 限制配置修改权限 对文件删除操作进行二次确认 文件保护 : 对系统关键文件设置不可删除属性 实施操作日志记录 总结 该漏洞展示了如何通过组合配置修改和文件删除功能实现任意文件删除。虽然系统已实施了一些防护措施(如目录穿越防护、根目录检查等),但仍存在绕过可能。特别值得注意的是系统对 install.lock 文件的特殊保护,这种白名单机制值得在其他关键文件保护中借鉴。