abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · moodle-blackboard-img
Moodle LMS 5.2.3 - Moodle
类别: 文件读取 可达性: 远程
qformat_blackboard_six_base::text_field 将 img src 拼接到 $this->filebase 上,且未使用 PARAM_PATH。随后 store_file_for_text_field 将该路径复制到用户草稿文件区。同族的 get_filecontent 已经使用 clean_param($path, PARAM_PATH) 进行了限制。MSA-26-0012 使用 PARAM_FILE 限制了数据库活动导入。Blackboard 的 img src 不在该集合中。
能够导入 Blackboard zip 的教师可以植入 <img src="https://raw.githubusercontent.com/html/config.php">。草稿中的“图片”即为 config.php。学生无法导入。
| ID | 暂无 CVE |
| CWE | CWE-22 / CWE-73 |
| CVSS | 中危:6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| 产品 | Moodle |
| 受影响版本 | 5.2.3 标签 v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116) |
| 认证 | 教师(题库 / 课程 Blackboard 导入) |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
写入者:能够将 Blackboard zip 导入题库(或课程)的教师。典型目标是获取 config.php(数据库密码),以 PHP 用户身份读取。除非串联第二个遗留漏洞,否则并非 RCE。并非 LPE。
| 权限 | 方法 / 汇聚点 | 侦察 / 完整性 / 可用性 | 实验验证或推断 |
|---|---|---|---|
通过 img src 中的 ../ 读取 PHP 用户可打开的文件 | text_field 拼接 $this->filebase . '/' . $path;store_file_for_text_field 复制到草稿区 | 侦察(文件字节) | 实验验证。草稿字节与 /var/www/html/config.php 匹配,并包含 MOODLE-BLACKBOARD-IMG-WITNESS |
| 将该草稿作为“图片”下载 | 草稿 itemid + 重写后的 @@PLUGINFILE@@ 文件名 | 侦察 | 实验验证。GET /draft 返回 298 字节,sha256 与 config.php 相同 |
| 之后任何能打开所导入题目的人 | 同一草稿 / pluginfile | 侦察 | 推断。实验止步于教师草稿匹配 |
| 学生导入 | 同一 zip,role=student | 不适用 | 实验验证 已关闭。HTTP 403 teacher-only |
通过 clean_param($path, PARAM_PATH) 的同一路径 | gadget jail=1 | 不适用 | 实验验证 已关闭。无匹配、无见证,路径保持在 filebase 之下 |
| PHP RCE / 操作系统 LPE | 不适用 | 不适用 | 已关闭。此遗留漏洞将文件字节复制到草稿中。它不会执行这些字节 |
未启用 Blackboard 导入的默认 Moodle 不存在此漏洞。MSA-22-0016 仅清理了 baseurl。
同一版本遗留漏洞:enrol_database SQLi、grades feedback IDOR、hidden grade items。
在 MSA-26-0042/0043 之后,我锁定了 moodle/moodle v5.2.3。MSA-26-0012 限制了数据库活动导入。我接下来关注 Blackboard,因为 get_filecontent() 已经知道 PARAM_PATH,而 text_field() 仍然进行原始拼接。
已记录的弯路:将学生导入视为泄露点(实际为 403);因为复制的文件是 PHP 就称其为 RCE(草稿存储字节,并不会 include 它们);假设 MSA-22-0016 已完成工作(仅 baseurl)。一个反弹 shell。作秀。
针对该版本 text_field / store_file_for_text_field 的忠实 gadget,并非完整的 Moodle PHP 应用。how=gadget。
python3 moodle-blackboard-img-Abraxas-Labs.py
或
cd lab
./run.sh
目标 仅限 http://127.0.0.1:19560。Compose 项目 moodle-blackboard-img。运行后栈会拆除。
SUCCESS moodle-blackboard-img how=gadget pin=v5.2.3 teacher-import=yes draft-match-config=yes student=403 param-path-jail=yes MOODLE-BLACKBOARD-IMG-WITNESS
对 img src 使用 clean_param($path, PARAM_PATH),然后 realpath 必须保持在 realpath($this->filebase) 之下。与 get_filecontent() 形式相同。
formatbase.php(text_field、store_file_for_text_field)format.php(get_filecontent 已使用 PARAM_PATH)GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无担保。