schoolcms--upload getshell
字数 1567 2025-08-09 13:33:44

SchoolCMS 文件上传漏洞分析与利用教学文档

1. 漏洞概述

SchoolCMS 是一个已停止维护的建站系统,存在两处文件上传漏洞,可导致攻击者获取服务器权限。这两处漏洞分别位于:

  1. 主题管理模块的压缩包上传功能
  2. 站点设置模块的Logo上传功能

2. 环境搭建

2.1 所需环境

  • Windows 10
  • PHPStudy
  • SchoolCMS建站源码

2.2 搭建步骤

  1. 将源码放置到WWW目录下
  2. 修改PHP配置文件,去掉mysqli扩展前的注释符
  3. 访问站点,出现登录页面即搭建成功

3. 漏洞分析

3.1 主题管理模块文件上传漏洞

漏洞位置

Application/Admin/Controller/ThemeController.class.php#184

漏洞分析

  1. 上传流程:

    • 首先通过FileUploadError方法进行表单验证
    • 检查上传文件类型是否为zip或rar(白名单)
    • 对压缩包进行解压缩
    • 检查解压后的文件/目录名是否包含_Html_Static
    • 将文件写入到指定目录
  2. 关键代码逻辑:

    $this->html_path = 'Application' .DS. 'Home' .DS. 'View' .DS;
    $this->static_path = 'Public' .DS. 'Home' .DS;
    
  3. 漏洞利用点:

    • 虽然限制了上传文件类型为zip/rar,但未对解压后的文件内容进行过滤
    • 通过构造特定名称的目录(包含_Html_Static)可绕过路径检查

利用方法

  1. 创建一个包含PHP文件的压缩包
  2. 将目录名命名为xx_Htmlxx_Static
  3. 上传压缩包
  4. 访问shell路径:Application/Home/View/[上传的文件名]

3.2 站点设置模块Logo上传漏洞

漏洞位置

Application/Admin/Controller/SiteController.class.php#72

漏洞分析

  1. 上传流程:

    • 通过FileUploadError方法进行表单验证
    • 使用explode方法处理Content-Type,以/为分隔符
    • 根据Content-Type的后缀部分重命名文件
    • 使用move_uploaded_file移动文件
  2. 关键代码逻辑:

    $typeArr = explode('/', $_FILES['file']['type']);
    $type = $typeArr[0];
    $suffix = $typeArr[1];
    $filename = 'home_logo.'.$suffix;
    
  3. 漏洞利用点:

    • 文件名后缀直接从Content-Type中提取
    • 可通过修改Content-Typeimage/php等方式上传PHP文件

利用方法

  1. 准备一个包含恶意代码的图片文件
  2. 上传时修改Content-Typeimage/php
  3. 文件将被重命名为home_logo.php
  4. 访问shell路径:Public/Home/logo/home_logo.php

4. 漏洞复现

4.1 主题管理模块利用步骤

  1. 创建包含以下内容的目录结构:
    malicious_Html/
    ├── shell.php
    └── normal.jpg
    
  2. 将目录压缩为zip文件
  3. 登录后台,进入"网站管理->主题管理"
  4. 上传zip文件
  5. 访问shell:http://target/Application/Home/View/malicious_Html/shell.php

4.2 站点设置模块利用步骤

  1. 准备一个包含PHP代码的图片文件
  2. 使用Burp Suite拦截上传请求
  3. 修改Content-Typeimage/php
  4. 放行请求完成上传
  5. 访问shell:http://target/Public/Home/logo/home_logo.php

5. 防御建议

  1. 对所有上传文件进行严格的内容检查,而不仅是扩展名检查
  2. 对解压缩操作进行更严格的安全控制
  3. 不要直接从用户可控的输入(如Content-Type)中获取文件扩展名
  4. 对上传文件进行随机重命名
  5. 限制上传文件的执行权限

6. 总结

SchoolCMS由于停止维护,存在两处高危文件上传漏洞。攻击者可通过精心构造的压缩包或修改HTTP请求头的方式上传恶意PHP文件,从而获取服务器控制权限。建议仍在使用该系统的用户立即升级或更换其他CMS系统。

SchoolCMS 文件上传漏洞分析与利用教学文档 1. 漏洞概述 SchoolCMS 是一个已停止维护的建站系统,存在两处文件上传漏洞,可导致攻击者获取服务器权限。这两处漏洞分别位于: 主题管理模块的压缩包上传功能 站点设置模块的Logo上传功能 2. 环境搭建 2.1 所需环境 Windows 10 PHPStudy SchoolCMS建站源码 2.2 搭建步骤 将源码放置到WWW目录下 修改PHP配置文件,去掉 mysqli 扩展前的注释符 访问站点,出现登录页面即搭建成功 3. 漏洞分析 3.1 主题管理模块文件上传漏洞 漏洞位置 Application/Admin/Controller/ThemeController.class.php#184 漏洞分析 上传流程: 首先通过 FileUploadError 方法进行表单验证 检查上传文件类型是否为zip或rar(白名单) 对压缩包进行解压缩 检查解压后的文件/目录名是否包含 _Html 或 _Static 将文件写入到指定目录 关键代码逻辑: 漏洞利用点: 虽然限制了上传文件类型为zip/rar,但未对解压后的文件内容进行过滤 通过构造特定名称的目录(包含 _Html 或 _Static )可绕过路径检查 利用方法 创建一个包含PHP文件的压缩包 将目录名命名为 xx_Html 或 xx_Static 上传压缩包 访问shell路径: Application/Home/View/[上传的文件名] 3.2 站点设置模块Logo上传漏洞 漏洞位置 Application/Admin/Controller/SiteController.class.php#72 漏洞分析 上传流程: 通过 FileUploadError 方法进行表单验证 使用 explode 方法处理 Content-Type ,以 / 为分隔符 根据 Content-Type 的后缀部分重命名文件 使用 move_uploaded_file 移动文件 关键代码逻辑: 漏洞利用点: 文件名后缀直接从 Content-Type 中提取 可通过修改 Content-Type 为 image/php 等方式上传PHP文件 利用方法 准备一个包含恶意代码的图片文件 上传时修改 Content-Type 为 image/php 文件将被重命名为 home_logo.php 访问shell路径: Public/Home/logo/home_logo.php 4. 漏洞复现 4.1 主题管理模块利用步骤 创建包含以下内容的目录结构: 将目录压缩为zip文件 登录后台,进入"网站管理->主题管理" 上传zip文件 访问shell: http://target/Application/Home/View/malicious_Html/shell.php 4.2 站点设置模块利用步骤 准备一个包含PHP代码的图片文件 使用Burp Suite拦截上传请求 修改 Content-Type 为 image/php 放行请求完成上传 访问shell: http://target/Public/Home/logo/home_logo.php 5. 防御建议 对所有上传文件进行严格的内容检查,而不仅是扩展名检查 对解压缩操作进行更严格的安全控制 不要直接从用户可控的输入(如Content-Type)中获取文件扩展名 对上传文件进行随机重命名 限制上传文件的执行权限 6. 总结 SchoolCMS由于停止维护,存在两处高危文件上传漏洞。攻击者可通过精心构造的压缩包或修改HTTP请求头的方式上传恶意PHP文件,从而获取服务器控制权限。建议仍在使用该系统的用户立即升级或更换其他CMS系统。