通过疫情打卡系统自动获取学生基础信息

通过疫情打卡系统自动获取学生基础信息

实现背景

由于本学校的疫情打卡系统的密码为初始密码且无法更改,登陆后页面显示的信息包括且不限于:学生的姓名,学号,手机号,家庭住址。同时,学校的云考试系统存在一个不被大多数人发现的测试版,且学生的登录密码为初始密码(已知),登录后可以获取学生的身份证号。

为了保护学生的个人隐私,下文所涉及的相关网址均已加密处理。

抓包

python的selenium模块实现了自动化操作网页的功能,但是其效率并不乐观。于是我们想抓取并分析服务器在登陆后返回的响应包中的数据.所以我们必须首先找到服务器获取并处理登录信息的接口。我们采用Charles抓包工具。关于Charles的下载和简单配置,请点击此处

(请注意,不要在使用Charles的时候用python的requests发送请求,Charles的正常使用需要配置到本机的代理服务,而此项服务会破坏requests的正常使用)

首先在浏览器打开疫情打卡系统

1.png

登录,在Charles中找到登录的接口

2.png

观察请求包和响应包的内容,很显然这就是我们需要的接口:

https://#####.cn/mobile/rpc?p=/v2/login/login&t=1590390945864

但是,多次尝试后发现,此接口所需要的t参数为动态参数。我猜测t参数记录了请求发出的时间(时间戳),并且不是标准的UNIX时间戳,因此无法通过计算得出。但是,我预计此处传递时间参数的目的仅仅是为了服务器统计学生的登录时间(或者打卡时间),因此可以忽略此参数的传递,事实也确实如此:

image.png

忽略时间参数成功获取响应包。

信息处理

接下来就是使用python进行批量操作。由于学生的学号何其入学时间相关,打卡系统的密码也由学号确定,因此只需遍历学号就可批量获取学生信息。

但是我们还需要从响应的json中提取有用信息,在python中的操作也是非常简单。

1
2
3
4
5
6
name = r_json.get('result').get('display_name')
sex = r_json.get('result').get('sex').get('display_name')
stuNum = r_json.get('result').get('account')
mobile = r_json.get('result').get('mobile')
cla=r_json.get('result').get('department').get('display_name')
print(name,sex,'学号:'+ stuNum,'手机:'+ mobile,'班级:'+ cla)

r_json是响应包的json形式。

还需注意一点,学生的学号并不是严格连续的,而我们枚举学号的时候,是连续的枚举,可能其中有些学号并不存在而导致程序出错并中止。

观察发现,输入错误的学号(或者密码)会产生一个包含error键值的json,因此我们只需判断响应包中是否存在error的键即可。

1
2
if ('error' in r_json):
continue

最终效果

7.png

获取身份证号

前面提到,可以通过学校云考试的测试版获取学生的身份证号。

首先照常抓包,登录http://ks.###.com:80##/##_ks/#/student/login

观察抓到的包,我们找到此项:

image.png

接口:http://60.###.##.53:80##/##_servers/user/login/loginByNameAndKsno

大功告成:)

所有人的密码都是四位初始密码,学号和姓名在之前的抓包中可以获得,而响应包中的idCard项目正是我们想要的身份证号。

我们将两个操作同时完成,就可以抓取几乎完整的学生基础信息。

最终效果

image.png

值得注意的地方

  • 打卡系统的密码不可修改,网页POST传递途中不加密
  • 云考试系统学生的密码可修改,只能改为4位纯数字密码,POST传递不加密
  • 云考试系统老师的密码可修改,只能改为6位纯数字密码,POST传递使用md5简单加密
  • 两个网站(在目前看来)没有任何带宽限制和并发请求限制,没有防爆破措施
  • 2、3点说明普通人即可使用暴力破解的办法对老师或者学生修改后的密码进行破解,并且时间不会很长
  • 打卡系统中可以获得学生的现在所处的位置

源代码

请移步Github:https://github.com/TheCoderAlex/getStudentBasicInfo


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×