正方教务系统分析——后续实现winform版
【正方教务系统分析——后续实现winform版】通过抓包发现登陆接口:http://202.200.206.54/(xxxx)/Default2.aspx 其中xxx中为随机字符串(安全码),每次访问都会出现xxx不同的字符串
分析发现并没有Cookie的影子。
验证码的接口:http://202.200.206.54/(xxx)/CheckCode.aspx?
由于没有Cookie Session所以通过C#模拟登陆后无法保持会话持续,经过了多次尝试
我猜想安全码 一致应该是作为登陆和保持会话持续的突破口。
经过验证 猜想正确
在访问时写死安全码 在请求头中也写死
调用其他成绩查询页面也继续按照格式写死
最后成功模拟登陆并调用返回课表
总结:目前本校所采用的正方系统通过随机生成的字符串来作为验证,并没有加入Cookie验证之类的机制。
后续完善Winform项目贴出代码
2018-8.16
今天完善了课表界面 并重新审视正方系统 发现3点
1.系统存在bug 通过带有安全码的地址模拟登陆后 复制其回传ref在另一台设备 get方法(xh=xx学号)可以绕过登陆
2.课表的接口 ViewState为必须提交参数 否则不返回课表内容,接下来将ViewState作为突破口 实现多账号查询课表功能
3.课表查询api :
http://202.200.206.54/ (安全码)/xskbcx.aspxxh=学号&xm=%D5%C5%C5%F4%B7%C9&gnmkdm=N121603
(经GB2312 URL解码后发现其中xm=表示姓名居然是拼音缩写- -)
2018-8.16 22:55
实现抓取课表内容:
经过了一天的研究发现Viewstate每个账号是不一样的 写死之后没办法实现其他账号登陆 ,Viewstate内容经过base64编码的 解码后可以看到包括了网页的一些信息,除非拼接不变的字段并编码 为每次登陆构造不同的Viewstate 暂时放弃这样的作法
ViewSate转码后
t<-323048297;
t<;
l;
>;
l;
i<2>;
i<4>;
i<7>;
i<9>;
i<11>;
i<13>;
i<15>;
i<22>;
i<26>;
i<28>;
i<30>;
i<34>;
i<36>;
i<40>;
>;
l;
l<12018-20191;
>>;
>;
;
>;
t;
l>;
>;
t;
@<2017-2018;
2016-2017;
2015-2016;
>;
@<2017-2018;
2016-2017;
2015-2016;
>>;
l;
>>;
;
>;
t;
>>;
;
>;
t;
l<学号:31512xxxx;
>>;
>;
;
>;
t;
l<姓名:xx;
>>;
>;
;
>;
t;
l<学院:x院;
>>;
>;
;
>;
t;
l<专业:计算机x院);
>>;
>;
;
>;
t;
l<行政班:计算x术(应院)x级x班;
>>;
>;
;
>;
t<;
l;
i<3>;
>;
l;
>;
l;
>;
l;
;
>;
>>;
>>;
t<;
l;
>;
l;
>;
l;
;
>;
>>;
>>;
>>;
t<;
l;
>;
l;
;
>;
>>;
t;
l;
>>;
l;
>;
l;
;
>;
>>;
t<@0;
l;
i<0>;
i<0>;
l<>;
>>;
>;
;
;
;
;
;
;
;
;
;
>;
;
>;
t<;
l;
>;
l;
>;
l;
l;
i<2>;
i<2>;
l<>;
>>;
>;
;
;
;
;
;
;
;
;
;
>;
l;
>;
l;
i<2>;
>;
l;
i<1>;
i<2>;
i<3>;
i<4>;
i<5>;
i<6>;
>;
l;
l<毕业设计;
>>;
>;
;
>;
t;
l<张x滨;
>>;
>;
;
>;
t;
l<14.0;
>>;
>;
;
>;
t;
l<03-15;
>>;
>;
;
>;
t;
l< \;
;
>>;
>;
;
>;
t;
l< \;
;
>>;
>;
;
>;
t;
l<全体教师;
>>;
>;
;
>;
>>;
t<;
l;
i<1>;
i<2>;
i<3>;
i<4>;
i<5>;
i<6>;
>;
l;
l<毕业实践;
>>;
>;
;
>;
t;
l<张x滨;
>>;
>;
;
>;
t;
l<2.0;
>>;
>;
;
>;
t;
l<01-02;
>>;
>;
;
>;
t;
l< \;
;
>>;
>;
;
>;
t;
l< \;
;
>>;
>;
;
>;
t;
l<全体教师;
>>;
>;
;
>;
>>;
>>;
>>;
>>;
>>;
t<@0;
l;
i<0>;
i<0>;
l<>;
>>;
>;
;
;
;
;
;
;
;
;
;
>;
;
>;
t<;
l;
>;
l;
>;
l;
l;
i<2>;
i<2>;
l<>;
>>;
>;
;
;
;
;
;
;
;
;
;
>;
l;
>;
l;
i<2>;
>;
l;
i<1>;
i<2>;
i<3>;
i<4>;
>;
l;
l<2017-2018;
>>;
>;
;
>;
t;
l<2;
>>;
>;
;
>;
t;
l<毕业设计;
>>;
>;
;
>;
t;
l<张滨;
>>;
>;
;
>;
t;
l<14.0;
>>;
>;
;
>;
>>;
t<;
l;
i<1>;
i<2>;
i<3>;
i<4>;
>;
l;
l<2017-2018;
>>;
>;
;
>;
t;
l<2;
>>;
>;
;
>;
t;
l<毕业实践;
>>;
>;
;
>;
t;
l<张滨;
>>;
>;
;
>;
t;
l<2.0;
>>;
>;
;
>;
>>;
>>;
>>;
>>;
>>;
>>;
>>;
> DWǚ?T?j}
解决思路:
通过抓包分析 有一个GET方法( 默认获取本学期课表) api:http://202.200.206.54/(0hihwxiaj00gttv355z11o55)/xskbcx.aspx?xh="+act+"&xm="+xm+"&gnmkdm=N121603 xh=学号,xm=学年
只能曲线救国 放弃Posft查询的接口 (不能自由查询了),通过此get 方式的api直接获取本学期的课表
-若本版本的系统有Cookie 就好解决了
2018-8.18
文章图片
项目基本功能都差不多了
今天又获得了一些新思路:
先 GET 关键api发现源码里有Viewstate这个是服务器响应的值发现这个值和下一次POST的ViewState值一样
所以有了新的思路,每次Post前 先Get 获取源码之后解析HTML内容 抓出Viewstate 之后再Post出去,这样就解决了自由查询的问题,目前工作转为C#下解析HTML。
2018.8.18
通过昨晚的分析 今天对返回的Html下手 本来想用Nuget的三方开源的库 经过尝试报错:提示字符存在非法路径,所以最后无奈还是使用了头疼的“正则表达式”dDw([\S\\+]*)=
来获取课程表api的 Viewstate
获取后 进行二次编码 (调用System.Net.WebUtility.UrlEncode(); 方法实现) 转码后拼接在 data中 Post出去
接下来继续完善Winform的其他功能
推荐阅读
- 2018学年第二学期教务教科块工作计划
- 【思维导图实战派】刻意练习计划“遇见……”|【思维导图实战派】刻意练习计划“遇见……” 1/300 人教版数学五下第三单元《正方体和长方体的认识》
- 系统分析与设计学习笔记8
- 求正方形、长方形、三角形、平行四边形、梯形的面积
- 四边形,长方形,正方形,梯形,平行四边形。他们的关系。
- php练习——用for循环打印半金字塔、金字塔、正方形、倒金字塔、菱形、空心图形等
- python实现空心正方形
- OpenGL|OpenGL初探Demo—绘制正方形
- [BZOJ]1047: [HAOI2007]理想的正方形
- linux系统分析工具之Blktrace(十)