Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/abraxas/moodle-enrol-database-sqli
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试数据库安全实验室与实践
GitHubabraxas/moodle-enrol-database-sqli

moodle-enrol-database-sqli

Moodle 5.2.3 - 高危 - 远程 - SQLi - enrol_database 将课程 idnumber 拼接进 SQL

查看仓库
94天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - moodle-enrol-database-sqli

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  moodle-enrol-database-sqli

moodle-enrol-database-sqli

Moodle LMS 5.2.3 - Moodle

类别: SQLi 可达性: 远程

enrol_database::db_get_sql 仍然使用斜杠转义并拼接。MSA-26-0005 / MDL-88138 将 auth_db 参数化为 Execute($sql, [$value])。此插件没有照搬该形式。设置中的默认值:dbsybasequoting=0、localcoursefield=idnumber。汇聚点是外部选课数据库。Moodle 核心 $DB 不在此路径上。

在启用了 enrol_database 的站点上,具有编辑权限的教师设置课程 idnumber。Cron 将其插值。额外的行从选课数据库返回。

ID暂无 CVE
CWECWE-89
CVSS高危:8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
产品Moodle
受影响版本5.2.3 标签 v5.2.3(344232c15336c71b80f9aca8359ce0e0a9f3d116)。插件 enrol_database 必须启用。
认证具有编辑权限的教师(课程 idnumber,默认本地映射)
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1

攻击者能做什么

在启用了 enrol_database 的站点上,具有编辑权限的教师通过设置课程 idnumber,在外部选课数据库上注入 SQL。随后 Cron sync_enrolments 会执行该 SQL。

权限方法 / 汇聚点侦察 / 完整性 / 可用性实验验证或推断
将 SQL 片段拼接进外部选课 SELECTCron sync_enrolments -> db_get_sql($table, array($coursefield=>$course->mapping), ...) -> $extdb->Execute($sql)查询字符串的完整性实验验证。拼接后的 SQL 为 WHERE courseid = 'LABCOURSE\'' OR 1=1 -- '
读取该外部数据库上其他课程的选课行字符串闭合后的同一 SELECT侦察实验验证。正常:1 行 teacher-local。注入:2 行,包括 MOODLE-ENROL-DATABASE-SQLI-WITNESS
插件关闭时跳过查询同一 gadget,plugin=off不适用实验验证已关闭。executed=false,SQL 为空,0 行
将同一载荷作为绑定参数MSA-26-0005 的 auth_db 遗留:Execute($sql, [$value])不适用实验验证已关闭。style=param 返回 0 行,SQL 包含 ?
对额外行中指定的 Moodle 用户进行选课 / 退课 / 角色分配Cron 应用 requestedenrols 之后选课记录的完整性推断。实验止步于选课数据库上的额外行
以选课数据库用户身份执行 FILE / INTO OUTFILE若该账户具有 FILE 权限,则同一汇聚点该数据库主机的完整性 / 可用性推断。未演示。非操作系统本地提权
学生可控路径仅当管理员映射 localuserfield=email(或类似字段)时不适用推断。默认路径为教师 idnumber

此遗留问题中已关闭的路径:Moodle 核心 $DB;插件禁用(无查询);未认证访问;操作系统 shell;堆叠查询(此 mysqli gadget 为单语句)。未启用 enrol_database 的默认 Moodle 不存在此漏洞。

同一版本遗留问题:Blackboard 图片文件读取、成绩反馈 IDOR、隐藏成绩项。

我是如何发现的

在 MSA-26-0042/0043 之后,我锁定了 moodle/moodle v5.2.3。MSA-26-0005 通过占位符关闭了 auth_db。我打开了 enrol_database,因为它与同类外部数据库通信,并且仍然存在 db_addslashes。

dbsybasequoting 默认为 0,因此只有 ' 会被双写。idnumber 中的反斜杠加引号会闭合 MySQL 字符串。

已记录的弯路:将 Moodle 核心 $DB 视为汇聚点(并非如此);因为 FILE 作为 MySQL 权限存在就称其为操作系统本地提权(未演示,非此遗留问题);将学生邮箱作为默认映射(管理员必须更改 localuserfield)。反弹 shell。作秀。

实验环境

忠实复现版本锁定构建者的 gadget,而非完整的 Moodle PHP 应用。php:8.3-cli 提供复制的 db_get_sql / db_addslashes / db_encode。mysql:8.0 保存两行选课记录。

python3 moodle-enrol-database-sqli-Abraxas-Labs.py

或

cd lab
./run.sh

仅针对 http://127.0.0.1:19570。Compose 项目 moodle-enrol-database-sqli。运行后栈会拆除。

SUCCESS moodle-enrol-database-sqli how=gadget plugin-off=no-query clean-rows=1 inject-rows=2 sql-concat=yes param-rows=0 extra=yes sink=enrol-db MOODLE-ENROL-DATABASE-SQLI-WITNESS

修复方案

照搬 auth_db 的参数化查询(MDL-88138)。将映射的课程 / 用户值作为 Execute($sql, [$value]) 传入。不要将 db_addslashes 拼接到 '$value' 中。添加测试,确保课程 idnumber 中的引号不会返回其他课程的行。

参考资料

  • github.com/moodle/moodle 标签 v5.2.3
  • lib.php(db_get_sql、db_addslashes、sync_enrolments)
  • 附近已修补(非此插件):MSA-26-0005 / MDL-88138 auth_db
  • 同一版本锁定:moodle-blackboard-img · moodle-grades-feedback-idor · moodle-grades-gradeitems
  • CWE-89

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无担保。

下载工具