本文所述漏洞挖掘活动均在获得明确授权的前提下进行,所有发现的问题在文章发布前均已修复。本文旨在分享安全测试思路与技术细节,提升安全意识。
1. 敏感信息泄露
在对校园官方APP进行测试时,在首页刷新并拦截网络请求,发现一个返回用户信息的接口。关键之处在于,接口通过userId参数标识不同用户,且未对访问范围进行有效鉴权。
通过遍历userId参数(例如从1开始递增),可以批量获取其他学生和老师的个人信息。成功泄露的信息包括学号、所属院系、宿舍楼栋及房间号、人脸照片的Base64编码等。经粗略统计,可遍历获取的数据条目高达19000条左右。这些泄露的敏感信息为进一步的渗透测试提供了数据基础。


2. 水平越权
水平越权(亦称平行越权)漏洞允许用户访问或操作同级别其他用户的资源。测试中,在首页刷新请求中找到了当前登录用户的userid。
通过修改请求包中的userid值为其他用户的ID(测试发现1-14590为学生,14590-15000左右为教师),然后放行请求。随后在APP界面点击“我的”等相关功能模块,即可成功进入并查看目标用户的全部信息,包括详细的通行记录、人脸信息、宿舍、班级、姓名等。该漏洞属于典型的因服务端未校验请求者身份与目标资源归属关系而导致的水平越权问题。


3. 垂直越权
垂直越权指低权限用户获得了高权限用户的功能。利用之前信息收集阶段获取的管理员账号ID,在请求中修改userid及persontype参数。
修改后,APP首页出现了原本对普通用户不可见的“考勤改签”管理接口入口。通过此入口,能够越权访问后台管理系统的部分功能,实现了从普通学生权限到管理员权限的垂直越权。

4. 越权修改他人人脸照片
此漏洞是水平越权的严重后果案例。测试过程如下:
- 登录账号A,抓取一个修改或涉及用户信息的POST请求包。
- 通过遍历得知账号B的
userId=6299,personId=6297。
- 保留账号A请求包中的
Authorization认证头(以通过合法性校验),但将请求体中的userid修改为账号B的ID(6299),同时将人脸照片的Base64数据替换为攻击者准备的图片数据。
- 发送修改后的请求包。
发包成功后,登录账号B验证,发现其人脸照片已被篡改为账号A所上传的图片,证明存在严重的越权修改漏洞。


5. 存储型XSS
在APP的“宿舍考勤记录 -> 申请改签”功能中,存在一个图片上传点。选择图片后会自动上传,无需点击提交。
测试步骤:
- 拦截图片上传请求。
- 将上传文件的文件名(
filename)修改为.svg后缀。
- 将文件内容(
Content-Type为image/svg+xml)替换为包含恶意JavaScript代码的SVG向量图片内容,例如:<svg><script>alert(document.domain)</script></svg>。
- 放行数据包,服务器返回了文件访问路径。
由于仅在APP内难以触发该XSS,但通过分析上传请求的Host头,发现了对应的Web管理后台。使用APP账号密码可登录该Web系统。在Web后台的个人头像等处,发现图片的完整URL引用格式。将URL中的文件路径部分替换为之前上传的SVG文件路径,访问后成功弹窗,证明了存储型XSS漏洞的存在。



总结:本次测试揭示了该校园APP在身份认证、权限校验、输入输出过滤等多个关键安全环节存在缺失。开发者在设计类似系统时,必须贯彻最小权限原则,并在服务端对每一次请求进行严格的权限验证。
文章作者:先知社区
参考来源:https://xz.aliyun.com/news/90858
|