记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二

2022-07-03 13:34

★且听安全-点关注,不迷路!



CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二

★漏洞空间站-优质漏洞资源和小伙伴聚集地!



Moodle(Modular Object-Oriented Dynamic Learning Environment)是一个用于制作网络课程或网站的软件包。


接前文:


CVE-2022-0332 Moodle REST Web接口审计与H5P插件SQL注入漏洞分析

QCyber,公众号:且听安全【最新漏洞预警】CVE-2022-0332 Moodle REST Web接口审计与H5P插件SQL注入漏洞分析


上面已经对Moodle REST Web接口处理机制进行了深入分析,之前还调试了 REST Web 接口的另一个 SQL 注入漏洞 CVE-2021-36397,放在草稿箱很久了,下面放出来分享给大家。

漏洞信息


官网通报如下:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


漏洞分析


补丁对比分析发现主要修改部分位于函数`course_get_recent_courses`:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


定位`course_get_recent_courses`函数(位于`courselib.php`):


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


函数传入4个参数,重点关注参数`$sort`,首先判断其是否为空,不为空将进入`else`分支,代码中只是通过`,`符号分割`$sort`,并未对其进行检查,最后进入SQL查询语句:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


存在SQL注入漏洞可能。分析函数`course_get_recent_courses`被调用情况:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


调用的地方不多,我们重点关注一下函数`get_recent_courses`:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


回顾前面文章中分析的API接口调用逻辑,可知`get_recent_courses`函数应该对应一个API函数接口,在数据库中查询接口与处理函数的映射关系:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


对应的`wsfunction`为`core_course_get_recent_courses`,所以可以很容易构造如下请求:


/moodle/webservice/rest/server.php?wstoken=***&wsfunction=core_course_get_recent_courses&sort=123'...


发送请求,成功进入`get_recent_courses`函数下的断点:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


最终完整SQL查询语句如下:


SELECT c.id,idnumber,summary,summaryformat,startdate,enddate,category,shortname,fullname,timeaccess,component,visible,showactivitydates,showcompletionconditions, ctx.id AS ctxid, ctx.path AS ctxpath, ctx.depth AS ctxdepth, ctx.contextlevel AS ctxlevel, ctx.instanceid AS ctxinstance, ctx.locked AS ctxlocked              FROM {course} c              JOIN {context} ctx                   ON ctx.contextlevel = :contextlevel                   AND ctx.instanceid = c.id              JOIN {user_lastaccess} ul                   ON ul.courseid = c.id             LEFT JOIN {favourite} fav                        ON fav.component = :favouritecomponent                       AND fav.itemtype = :favouriteitemtype                       AND fav.userid = 2                       AND fav.itemid = ul.courseid          LEFT JOIN {enrol} eg ON eg.courseid = c.id AND eg.status = :statusenrolg AND eg.enrol = :guestenrol             WHERE ul.userid = :userid               AND c.visible = :visible               AND (eg.id IS NOT NULL                    OR EXISTS (SELECT e.id                             FROM {enrol} e                             JOIN {user_enrolments} ue ON ue.enrolid = e.id                            WHERE e.courseid = c.id                              AND e.status = :statusenrol                              AND ue.status = :status                              AND ue.userid = :userid2                              AND ue.timestart < :now1                              AND (ue.timeend = 0 OR ue.timeend > :now2)                          ))            ORDER BY 123'


修复方式


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


新版本的`course_get_recent_courses`函数限定了参数`$sort`的取值范围:


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二


CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二



由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全及文章作者不为此承担任何责任。



★且听安全-点关注,不迷路!

CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二



★漏洞空间站-优质漏洞资源和小伙伴聚集地!

CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二



知识来源: www.ctfiot.com/47038.html

阅读:90319 | 评论:0 | 标签:漏洞 CVE SQL 分析

想收藏或者和大家分享这篇好文章→复制链接地址

“CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

黑帝公告 📢

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

标签云 ☁