https://xz.aliyun.com/news/19045
最近整理了几个edu系统的漏洞案例,也不能说有意思吧,反正都是大部分会遇到的类型,edu系统一直是个很好的练手场景,系统多、类型丰富,也经常能碰到一些意想不到的安全问题,其中有两个就是证书站的洞
分享出来主要是想和师傅们交流一下思路,牛子师傅可以忽略,毕竟edu系统的安全问题往往具有共性,掌握了基本套路在实际测试中经常能举一反三。漏洞挖掘很多时候就是这样,看似简单的问题组合起来威力就很大,关键还是要把信息收集做细!
测试目标:某某学院一站式服务大厅

这一步要干什么: 登录成功后,先不要着急点各种功能,花几分钟时间仔细观察这个门户的设计和信息暴露情况
重点观察的地方:
可能存在的漏洞点:
技巧思路: edu系统这种"大而全"的门户设计,为了用户体验会把很多信息直接展示出来。多系统集成意味着数据要在不同模块间流转,权限控制容易出现边界模糊的问题

这一步要干什么: 开启Burp Suite代理,正常点击系统的各个功能模块,观察后台的API调用情况。不要用任何扫描器,就是正常用户操作
重点观察的地方:
可能存在的漏洞点:
技巧思路: edu系统很多都是前后端分离设计,这给我们提供了很好的测试机会。前端需要什么数据,后端API就会返回什么,而且往往为了开发方便,会返回比前端实际需要更多的字段。重点关注那些看起来像是查询用户信息的接口,这类接口最容易出现越权问题

这一步要干什么: 从众多API调用中筛选出最有价值的接口进行深入分析。重点关注那些明显是查询用户信息的接口
重点观察的地方:
发现的问题:
技巧思路: 这种getUserInfo类型的接口在edu系统中非常常见,而且经常存在IDOR问题。关键是要判断这个userid参数是否可以修改,以及系统是否会验证当前登录用户和要查询的userid是否匹配

这一步要干什么: 验证之前发现的可疑接口是否真的存在越权。尝试修改userid参数,看能否获取其他用户的信息
测试方法:
重点观察的地方:
测试结果: 系统直接返回了指定userid用户的完整信息,包括身份证号码!说明:
技巧思路: edu系统的越权漏洞比较常见,因为开发者往往认为"登录用户都是可信的",忽略了用户间的权限隔离


这一步要干什么: 继续探索系统的其他功能模块,寻找更多有价值的信息。重点关注那些可能暴露用户列表或ID信息的页面
重点观察的地方:
意外发现: 在学校的在线课程/直播选课页面,系统直接展示了所有教师的详细信息:
可能存在的漏洞点:
技巧思路: 信息收集是漏洞挖掘中极其重要的一环。很多时候单个漏洞的威力有限,但结合充分的信息收集,就能实现批量利用。edu系统经常会在各种功能页面无意中暴露用户ID信息,这些信息与越权漏洞结合,威力会成倍放大

这一步要干什么: 记录关键的proof-of-concept
验证目的:
手工测试:
同上接口进行测试,就能泄露敏感数据
这个问题的根本在于接口缺乏权限验证。简单来说,系统应该检查当前用户是否有权限查看指定用户的信息,而不是来者不拒
# 有问题的写法
def get_user_info(userid):
return database.query(f"SELECT * FROM users WHERE id={userid}")
# 应该这样写
def get_user_info(userid, current_user):
if not can_access_user_info(current_user, userid):
raise PermissionDenied("无权访问该用户信息")
user_data = database.query(f"SELECT name,department FROM users WHERE id={userid}")
return user_dataAPI响应里包含身份证号这种敏感信息,在大多数场景下都是不必要的。前端通常只需要脱敏后的部分信息,或者根本不需要。系统设计时应该按照"最小必要"原则,只返回业务真正需要的字段
这个攻击过程其实很简单,没用什么高深技术。关键在于两个点:一是发现了不做权限检查的API接口,二是找到了大量目标用户ID。两个信息一结合,就变成了批量敏感数据泄露
edu系统经常会出现这种问题,开发者更关注功能实现,权限控制往往比较粗糙。再加上这种"一站式"门户需要整合各种子系统,为了数据共享方便,API设计上经常会比较"开放"
对防守方来说,重点要关注几个地方:接口权限控制要做到对象级别,不能只是角色级别;敏感数据的返回要按需提供,不能图省事全部返回;各个子系统之间的安全标准要统一,不能各搞各的
这个案例展示了在某大学学生就业综合管理服务平台中发现SQL注入漏洞,并成功获取交互式SQL shell

这一步要干什么: 成功登录后进入个人中心,观察系统显示的数据内容和功能模块,寻找可能存在安全问题的功能点
内容:
重点观察的地方:
可能存在的漏洞点:
技巧思路: 就业系统的统计功能通常比较复杂,需要根据不同条件进行数据筛选和汇总。开发者为了实现灵活的查询,可能会动态构造SQL语句,这就为SQL注入创造了条件

这一步要干什么: 在测试系统功能时发现了页面跳转异常
重点观察的地方:
技巧思路: 当页面出现异常或错误提示时,往往意味着后台处理出现了问题。这种情况下要及时进行抓包分析,查看具体的HTTP请求参数,很可能就能发现SQL注入点。特别是统计类功能,经常需要根据用户输入构造复杂的SQL查询

这一步要干什么: 使用Burp Suite抓包放包发现一个包里有注入点
重点观察的地方:
分析要点:
技巧思路: 复杂的POST请求往往包含多个参数,不是每个参数都存在注入。要根据参数名称和功能推测其用途,优先测试那些明显用于数据查询的参数,如id、name、type等

这一步要干什么: 直接sqlmap一把梭拿了交互式的SQL shell
内容:
重点观察的地方:
利用成果:
这个案例展示了edu系统中常见的逻辑验证缺陷,通过简单的参数修改就能绕过权限检查,进而发现更多高危漏洞。


这一步要干什么: 通过测试发现,修改URL中的参数从-1改为1,可以绕过某些权限验证直接进入后台系统
重点观察的地方:
技巧思路: 这种简单的参数修改绕过验证在edu系统中很常见。开发者可能使用简单的数字标识来区分不同的权限级别,但没有在服务端进行严格的权限校验。测试时要多尝试修改各种参数值,特别是那些看起来像是权限标识的参数


这一步要干什么: 但该站点对身份校验严格,还是被踢出登录,但得到了账号管理的路径/admin/xxxxx.html
重点观察的地方:
技巧思路: 即使被系统踢出,但获得的路径信息仍然有价值。这些路径可以用于进一步的测试,比如尝试直接访问、参数修改、或者寻找相似的功能模块。edu系统的开发者往往会使用相似的命名规则,一个路径的发现可能导致更多路径的发现

上传失败,网络异常。
这一步要干什么: 发现并使用专家通道登录后台,看看专家通道有什么可以利用的点
重点观察的地方:
技巧思路: edu系统经常会设置多个访问入口,比如学生入口、教师入口、管理员入口、专家入口等。不同入口的安全检测可能不一致,某些"特殊"入口可能存在验证缺陷。在测试时要尝试发现和利用这些不同的访问通道

上传失败,网络异常。
这一步要干什么: 将之前得到的账号管理路径拼接到当前URL下,成功发现了可以越权访问的账号管理功能
重点观察的地方:
技巧思路: 路径拼接是一种常用的越权测试方法。当发现某个功能路径后,可以尝试将其与不同的base URL组合,看是否能绕过权限检查。edu系统中这种方法经常有效,因为开发者可能只在某些入口设置了权限验证,而忽略了其他访问路径


这一步要干什么: 利用越权访问的账号管理功能,成功添加了一个具有管理员权限的用户账号
重点观察的地方:

上传失败,网络异常。
重试

这一步要干什么: 在测试管理功能时发现,可以编辑最初管理员的账号密码,都没有什么身份校验的限制,获得完整管理员权限
重点观察的地方:
技巧思路: 获得完整管理员权限后,可以进行更深入的安全测试,比如寻找文件上传漏洞、任意文件下载、数据导出等高危功能。但要注意控制测试范围,避免对系统造成实际损害

这一步要干什么: 在大数据管理模块中发现了一个下载模板功能,准备对其进行抓包测试,寻找可能的任意文件下载漏洞
重点观察的地方:
技巧思路: 文件下载功能经常存在任意文件下载漏洞,特别是当下载路径可以由用户控制时。在edu系统中,这类功能往往缺乏足够的路径验证,可能允许下载系统的敏感文件

上传失败,网络异常。
这一步要干什么: 使用Burp Suite抓取下载模板的HTTP请求,分析其中的参数结构,返回文件不存在,下载失败
重点观察的地方:
技巧思路: 通过分析正常的下载请求,可以了解系统如何处理文件下载参数。这为构造恶意的下载请求提供了基础,比如尝试修改路径参数来下载系统的敏感文件
上传失败,网络异常。

这一步要干什么: 通过修改下载请求中的参数,成功实现了任意文件下载,可以下载系统中的敏感配置文件
重点观察的地方:
技巧思路:
对比这两张图可以看出参数修改的关键:
原始参数(修改前):
{"excel":"xxxxDataTemplate","id":"正常的模板文件名"}修改后的参数:
{"excel":"xxxxDataTemplate","id":"../web.config"}关键就是把id参数从正常的模板文件名改成了../web.config,利用目录遍历符号../跳出当前目录,直接访问上级目录的web.config配置文件
成功下载web.config文件,右侧显示了下载到的完整配置文件内容,包含了系统的各种配置信息
这个案例最重要的经验是如何发现和利用逻辑验证缺陷。通过简单的参数修改(-1改成1)就能绕过权限验证,说明开发者在设计权限控制时缺乏安全意识。这类问题在edu系统中也是很常见
edu系统经常会设置多个访问入口(学生、教师、管理员、专家等),不同入口的安全检测标准可能不一致。测试时要尝试发现和利用这些不同的访问通道,往往能发现意想不到的安全问题
三个案例都是常见的一些漏洞,可以说edu系统的漏洞挖掘是一个很好的练手场景,系统多、漏洞类型丰富,而且通常有些高校不会有太复杂的WAF。希望师傅们能从这三个案例中获得一些启发,在实际测试中发现更多有价值的安全问题!
*本文所涉及的漏洞均为已修复漏洞,分享仅用于安全研究和学习交流,请勿用于非法用途。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。