正方教务系统分析——后续实现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
正方教务系统分析——后续实现winform版
文章图片


项目基本功能都差不多了
今天又获得了一些新思路:
先 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的其他功能


    推荐阅读