【PHP代码审计】Atutor2.2.4 CVE全复现
字数 2250 2025-08-18 17:33:42

ATutor 2.2.4 漏洞分析与复现指南

概述

ATutor 是一个开源基于 Web 的学习管理系统(LCMS),2.2.4 版本存在多个安全漏洞。本文档将详细分析这些漏洞的成因、利用条件和复现方法。

1. 任意文件上传漏洞(教师权限)

利用条件

  • 拥有教师权限的用户(可创建和管理课程)
  • 版本为 2.2.4

漏洞位置

mods/_core/file_manager/upload.php

漏洞分析

  1. 后端采用后缀名黑名单过滤机制,但过滤不严谨
  2. 黑名单检查使用 in_array 函数,仅对小写后缀名有效
  3. 可通过大小写转换(如 phP)或其他 PHP 可解析后缀绕过

可绕过黑名单的后缀

.php3, .php4, .php5, .php7, .php8, .pht, .phar, .phpt, .pgif, .phtml, .phtm

复现步骤

  1. 使用教师账户创建新课程
  2. 进入课程的文件管理界面
  3. 上传恶意文件(使用上述绕过后缀)
  4. 通过 Burp Suite 抓包,修改文件后缀
  5. 文件上传路径为:atutor/content/[course_id]/

文件路径确定方法

  1. 路径由 $path.$_FILES['uploadedfile']['name'] 组成
  2. $path 由三部分组成:
    • AT_CONTENT_DIR(固定为 atutor/content
    • $_SESSION['course_id'](通过创建课程时的响应获取)
    • $_POST['pathext'](通常为空)

2. 任意文件上传漏洞(管理员权限)

利用条件

  • 拥有管理员权限的用户
  • 版本为 2.2.4

漏洞位置

mods/_core/languages/language_import.php

漏洞分析

  1. 上传点仅限管理员访问
  2. 使用 PclZip 类处理上传的压缩包
  3. 压缩包内容会被解压到 atutor/content/import/ 目录
  4. 无有效过滤机制

复现步骤

  1. 将恶意脚本(如 poc.php)压缩为 ZIP 文件
  2. 使用管理员账户访问语言导入功能
  3. 上传恶意 ZIP 文件
  4. 访问解压后的文件:atutor/content/import/poc.php

3. 访问控制缺陷(任意用户密码修改)

利用条件

  • 版本为 2.2.4

漏洞位置

password_reminder.php

漏洞分析

  1. 密码重置链接包含三个关键参数:
    • id:用户 ID
    • g:密码找回链接生成时间(天数)
    • hsha1(id + g + 用户密码MD5前几位) 的子串(第5位开始取15位)
  2. 时间验证不严格,可通过暴力破解 h 参数
  3. PHP 的弱类型比较导致 id + g + 密码MD5 计算异常

复现步骤

  1. 确定目标用户 ID(如 id=1
  2. 计算当前时间值:intval(((time()/60)/60)/24)(约19524)
  3. 设置 g=19524
  4. 生成可能的 h 值字典(基于 sha1(id + g + 密码MD5前几位) 的子串)
  5. 使用 Burp Suite Intruder 模块爆破 h 参数
  6. 同时设置 form_changeform_password_hidden 参数
  7. 成功后会返回302状态码

4. 反射型XSS

利用条件

  • 版本为 2.2.4

漏洞位置

themes/default/include/header.tmpl.php

触发页面

about.php

漏洞分析

  1. header.tmpl.php 通过 about.php 包含
  2. about.php 定义了 AT_INCLUDE_PATH 常量
  3. $_GET['fb'] 参数未经充分过滤直接输出
  4. 输出函数调用链:printNoLookupFeedback()$msg->addFeedback()$this->savant->display()

复现步骤

  1. 访问 about.php?fb=<script>alert(1)</script>
  2. XSS payload 会被执行

5. 存储型XSS(管理员权限)

利用条件

  • 拥有管理员权限的用户
  • 版本为 2.2.4

漏洞位置

mods/_core/users/admins/my_edit.php

漏洞分析

  1. real_name 字段仅使用 mysql_real_escape_string 过滤
  2. 过滤不处理 HTML 标签和 JavaScript
  3. 恶意输入会被存储并在管理员页面显示

复现步骤

  1. 使用管理员账户访问 my_edit.php
  2. real_name 字段提交 XSS payload
  3. 保存后访问 index.php,payload 会执行

6. 变量覆盖漏洞(安装配置)

漏洞分析

  1. 安装过程中跳过步骤5(数据库配置)后,安装页面仍可访问
  2. 允许二次安装,可能篡改数据库配置

防御建议

  1. 对所有上传文件实施严格的白名单验证
  2. 对用户输入实施全面的过滤和转义
  3. 修复密码重置逻辑中的弱类型比较问题
  4. 限制管理员功能的访问权限
  5. 升级到最新版本或应用官方补丁
  6. 安装完成后删除或禁用安装脚本

总结

ATutor 2.2.4 版本存在多个高危漏洞,包括文件上传、权限绕过、XSS 等。这些漏洞的组合可能允许攻击者完全控制系统。建议用户立即升级或采取适当的缓解措施。

ATutor 2.2.4 漏洞分析与复现指南 概述 ATutor 是一个开源基于 Web 的学习管理系统(LCMS),2.2.4 版本存在多个安全漏洞。本文档将详细分析这些漏洞的成因、利用条件和复现方法。 1. 任意文件上传漏洞(教师权限) 利用条件 拥有教师权限的用户(可创建和管理课程) 版本为 2.2.4 漏洞位置 mods/_core/file_manager/upload.php 漏洞分析 后端采用后缀名黑名单过滤机制,但过滤不严谨 黑名单检查使用 in_array 函数,仅对小写后缀名有效 可通过大小写转换(如 phP )或其他 PHP 可解析后缀绕过 可绕过黑名单的后缀 .php3 , .php4 , .php5 , .php7 , .php8 , .pht , .phar , .phpt , .pgif , .phtml , .phtm 复现步骤 使用教师账户创建新课程 进入课程的文件管理界面 上传恶意文件(使用上述绕过后缀) 通过 Burp Suite 抓包,修改文件后缀 文件上传路径为: atutor/content/[course_id]/ 文件路径确定方法 路径由 $path.$_FILES['uploadedfile']['name'] 组成 $path 由三部分组成: AT_CONTENT_DIR (固定为 atutor/content ) $_SESSION['course_id'] (通过创建课程时的响应获取) $_POST['pathext'] (通常为空) 2. 任意文件上传漏洞(管理员权限) 利用条件 拥有管理员权限的用户 版本为 2.2.4 漏洞位置 mods/_core/languages/language_import.php 漏洞分析 上传点仅限管理员访问 使用 PclZip 类处理上传的压缩包 压缩包内容会被解压到 atutor/content/import/ 目录 无有效过滤机制 复现步骤 将恶意脚本(如 poc.php )压缩为 ZIP 文件 使用管理员账户访问语言导入功能 上传恶意 ZIP 文件 访问解压后的文件: atutor/content/import/poc.php 3. 访问控制缺陷(任意用户密码修改) 利用条件 版本为 2.2.4 漏洞位置 password_reminder.php 漏洞分析 密码重置链接包含三个关键参数: id :用户 ID g :密码找回链接生成时间(天数) h : sha1(id + g + 用户密码MD5前几位) 的子串(第5位开始取15位) 时间验证不严格,可通过暴力破解 h 参数 PHP 的弱类型比较导致 id + g + 密码MD5 计算异常 复现步骤 确定目标用户 ID(如 id=1 ) 计算当前时间值: intval(((time()/60)/60)/24) (约19524) 设置 g=19524 生成可能的 h 值字典(基于 sha1(id + g + 密码MD5前几位) 的子串) 使用 Burp Suite Intruder 模块爆破 h 参数 同时设置 form_change 和 form_password_hidden 参数 成功后会返回302状态码 4. 反射型XSS 利用条件 版本为 2.2.4 漏洞位置 themes/default/include/header.tmpl.php 触发页面 about.php 漏洞分析 header.tmpl.php 通过 about.php 包含 about.php 定义了 AT_INCLUDE_PATH 常量 $_GET['fb'] 参数未经充分过滤直接输出 输出函数调用链: printNoLookupFeedback() → $msg->addFeedback() → $this->savant->display() 复现步骤 访问 about.php?fb=<script>alert(1)</script> XSS payload 会被执行 5. 存储型XSS(管理员权限) 利用条件 拥有管理员权限的用户 版本为 2.2.4 漏洞位置 mods/_core/users/admins/my_edit.php 漏洞分析 real_name 字段仅使用 mysql_real_escape_string 过滤 过滤不处理 HTML 标签和 JavaScript 恶意输入会被存储并在管理员页面显示 复现步骤 使用管理员账户访问 my_edit.php 在 real_name 字段提交 XSS payload 保存后访问 index.php ,payload 会执行 6. 变量覆盖漏洞(安装配置) 漏洞分析 安装过程中跳过步骤5(数据库配置)后,安装页面仍可访问 允许二次安装,可能篡改数据库配置 防御建议 对所有上传文件实施严格的白名单验证 对用户输入实施全面的过滤和转义 修复密码重置逻辑中的弱类型比较问题 限制管理员功能的访问权限 升级到最新版本或应用官方补丁 安装完成后删除或禁用安装脚本 总结 ATutor 2.2.4 版本存在多个高危漏洞,包括文件上传、权限绕过、XSS 等。这些漏洞的组合可能允许攻击者完全控制系统。建议用户立即升级或采取适当的缓解措施。