★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
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,放在草稿箱很久了,下面放出来分享给大家。
官网通报如下:
补丁对比分析发现主要修改部分位于函数`course_get_recent_courses`:
定位`course_get_recent_courses`函数(位于`courselib.php`):
函数传入4个参数,重点关注参数`$sort`,首先判断其是否为空,不为空将进入`else`分支,代码中只是通过`,`符号分割`$sort`,并未对其进行检查,最后进入SQL查询语句:
存在SQL注入漏洞可能。分析函数`course_get_recent_courses`被调用情况:
调用的地方不多,我们重点关注一下函数`get_recent_courses`:
回顾前面文章中分析的API接口调用逻辑,可知`get_recent_courses`函数应该对应一个API函数接口,在数据库中查询接口与处理函数的映射关系:
对应的`wsfunction`为`core_course_get_recent_courses`,所以可以很容易构造如下请求:
/moodle/webservice/rest/server.php?wstoken=***&wsfunction=core_course_get_recent_courses&sort=123'...
发送请求,成功进入`get_recent_courses`函数下的断点:
最终完整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'
新版本的`course_get_recent_courses`函数限定了参数`$sort`的取值范围:
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全及文章作者不为此承担任何责任。
★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
原文始发于微信公众号(且听安全):CVE-2021-36397 Moodle REST Web服务接口SQL漏洞分析之二