0x00 背景
接到妹纸电话,问我会不会使用按键精灵,帮她到一个网站上刷题。
我会!!!
妹纸提供的方案是用按键精灵实现每个题都选C,然后提交,但在实际使用过程中出现了以下问题:
(1)有些题并没有C选项
(2)选择答案按钮,提交按钮和下一题按钮的位置随题干和解析的长度变换,位置不固定
(3)该做题系统应该是部署在内网的,妹纸给的外网地址访问奇慢无比,经常掉线
由于以上原因,我认为无法通过按键精灵的方法达到500分(回答正确一题得0.2分),所有决定采取其他的方法。
0x01 发现漏洞
首先想到的是在点击提交按钮时抓包,是否能够直接暴力遍历提交。利用Burpsuite抓包,发现了一个惊人的事实,在我拦截了提交答案的post包的情况下,网页依然对我提交的答案进行了判断,而放行post包后的返回包中只包含题目解析,没有答题是否正确的信息。由此判断题目答案已经保存在网页中,不需要再与服务器进行交互。按F12,果然找到了所有题目的答案,如下图:
再观察提交按钮的post包,如下图:
根据post包的payload信息,只要找到了答案tmAnswer与treeId、treeRoad、tmId的对应关系,就能提供正确答案遍历试题。全程抓包,在点击开始做题时,向服务器请求题目(GetPracticeList)在返回包中包含了tmAnswer、treeId、treeRoad、tmId,post包和返回包如下图所示,根据返回结果,pageSize参数为请求的题目数量,默认为50题,返回包中的TotalCount为剩余的最大题目数。
0x02 利用漏洞刷题
在获取上述信息之后,就可以利用Burpsuite的Intruder功能刷分了。首先在点击按时做题时抓包,修改pageSize参数为上个返回包中的最大题目数,截取返回包,提取json(其中包含了tmAnswer、treeId、treeRoad、tmId信息),将其保存到txt文件中。利用python解析json,提取tmAnswer、treeId、treeRoad、tmId信息,分别保存在tmAnswer.txt、treeId.txt、treeRoad.txt、tmId.txt中,代码如下:
在测试过程中,发现返回的json中的TmAnswer有个别出现了格式错误,加入error存储错误的下标,将错误的情况剔除。修改后的代码如下:
利用Burpsuite中的Intruder功能,选择Pitchfork模式,载入tmAnswer.txt、treeId.txt、treeRoad.txt、tmId.txt,实现遍历答题。
0x03
妹纸说分不要弄太高,不要太高调!!!