高校教务系统协议分析

  

  这几天研究了一下我们学校的教务管理系统,本想看看它在前端是怎么加密密码的,但是没想到的是用Firbug工具一抓包,发现我们学校的教务系统的账号密码居然没有在前端进行加密传输。于是瞬间有了进一步研究的兴趣。



上图是登录时候的抓的包,POST过去的账号密码是明文。


  然后我想了一下发现应该不会那么简单就登录上去了,于是我清空了一下cookies ,重新抓了一次包

果然不出我所料,发现第一次登录POST过去数据后并没有返回什么东西,而是又GET到其他网页去了。

 




  于是我就查看了一下登录地址的后一条GET过去的地址,发现地址的后面有一串应该是加密过的字符串。

 


 

这一串字符串是哪里来的呢? 难道是JS加密出来的吗? 上一条POST过去的数据并没有返回什么啊。


 然后我又猜测会不是cookie?去查看了一下登录地址的cookies发现果然收到了这么一串字符串。




原来是收到的cookies,把收到的cookies中的其中一条cookies作为了地址的后缀,或者是身份验证。

于是这就好办了,我只要把收到的cookies取出来然后,再加到地址后面不久可以模拟登录和获取其他数据了吗?

说干就干,我用VS创建了一个winform窗体程序然后做了一个登录框,然后模拟网页POST数据过去发现果然登录成功了(此处应该有掌声) 。

 

POST函数如下:

publicstaticstringGetHtml(stringurl,stringpostData,boolisPost,CookieContainercookieContainer)
        {
            if(string.IsNullOrEmpty(postData))
            {
                returnGetHtml(url,cookieContainer);
            }
            Thread.Sleep(NetworkDelay);//等待
            currentTry++;
 
            HttpWebRequesthttpWebRequest=null;
            HttpWebResponsehttpWebResponse=null;
            try
            {
                byte[]byteRequest=Encoding.Default.GetBytes(postData);
 
                httpWebRequest=(HttpWebRequest)HttpWebRequest.Create(url);
                httpWebRequest.CookieContainer=cookieContainer;
                httpWebRequest.ContentType=contentType;
                httpWebRequest.ServicePoint.ConnectionLimit=maxTry;
                httpWebRequest.Referer=url;
                httpWebRequest.Accept=accept;
                httpWebRequest.UserAgent=userAgent;
                httpWebRequest.Method=isPost?"POST":"GET";
                httpWebRequest.ContentLength=byteRequest.Length;
 
                Streamstream=httpWebRequest.GetRequestStream();
                stream.Write(byteRequest,0,byteRequest.Length);
                stream.Close();
 
                httpWebResponse=(HttpWebResponse)httpWebRequest.GetResponse();
 
              
 
                StreamresponseStream=httpWebResponse.GetResponseStream();
                StreamReaderstreamReader=newStreamReader(responseStream,encoding);
                stringhtml=streamReader.ReadToEnd();
 
                cc.Add(httpWebResponse.Cookies);
 
                streamReader.Close();
                responseStream.Close();
                currentTry=0;
              
 
              
                httpWebRequest.Abort();
                httpWebResponse.Close();
                returnhtml;
            }
            catch
            {
                if(currentTry<=maxTry)
                {
                    GetHtml(url,postData,isPost,cookieContainer);
                }
                currentTry--;
                if(httpWebRequest!=null)
                {
                    httpWebRequest.Abort();
                }if(httpWebResponse!=null)
                {
                    httpWebResponse.Close();
                }
                returnstring.Empty;
            }

 然后登录成功后,我开始模拟获取课程表等数据信息,但是发现却不行。

 于是我不甘心,又重新抓了一次包,又看到了下面这些信息。


 

  原来在登录成功后,它后post了一条数据过去这条数据就是guid=”登录收的cookie”来检查guid,然后返回了一个消息,类似令牌的东西吧。然后查看了一下下面一条POST数据发现确实用到了这个返回消息里面的内容。


 

  是的,它把这条返回的内容作为了以guid命名的cookie里面了作为它的值,看了一下它的命名是ticket车票的意思,我想这个应该就是入场券了。哈哈(此处应该大笑三声)

  在拿到这些cookie之后一切的数据获取都是顺风顺水了。我就想既然我们学校的教务系统这么烂偶尔网站还访问不了,为什么不做个PC版的教务助手给学弟学妹们使用呢?

  然后我就用2天时间做出了如下工具(虽然界面还是一无既往的丑,但是程序员嘛不要在乎这些了):

  


  

  哈哈是不是很赞呢?  

  只要登录成功就可以查询全校学生的信息和成绩哦,不知道会不会被成绩差的人打 哈哈哈哈。

发布了22 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/a13677972680/article/details/51179097