美文网首页
青果教务管理网站登陆分析(一)

青果教务管理网站登陆分析(一)

作者: 乘风破浪emo | 来源:发表于2016-12-30 10:55 被阅读0次

前言:

最近群里有同学问怎么模拟教务网登陆,想起我一开始做的时候的迷茫,故将此分析写下,供各位同学参考。(文章已同步到我的个人博客


正文:

首先准备必要的工具:fiddler、firefox。

<b>0x01:抓包</b>

以南京林业大学为例:


image.png

请求参数如下:


image.png

<code>txt_asmcdefsddsd</code>是学号,<code>Sel_Type</code>应该是类型,主要是两个参数:<code> dsdsdsdsdxcxdfgfg</code>,<code>fgfggfdgtyuuyyuuckjg</code>,这两个应该都是加过密了。

image.png

这两个请求是请求验证码的。
下一步开始分析

<b>0x02:找加密函数</b>
重新打开到登陆页面


image.png

F12,定位到该form,我们发现:


image.png
密码框在失去焦点和按键弹起时都会触发<code>chkpwd()</code>函数。
image.png
验证码框在点击和获得焦点时会触发<code>showvc()</code>函数,在失去焦点和按键弹起时会触发<code>chkyzm()</code>函数,<code>showvc</code>仅仅是展示验证码不管。

在form标签下有一个onsubmit触发的函数<code>ChkValue()</code>,但是发现这个函数并不涉及加密,不用管。

<b>0x03:分析函数</b>
将该form的对应的js函数复制出来。

function chkpwd(obj) {  if(obj.value!='')  {    var s=md5(document.all.txt_asmcdefsddsd.value+md5(obj.value).substring(0,30).toUpperCase()+'10298').substring(0,30).toUpperCase();   document.all.dsdsdsdsdxcxdfgfg.value=s;} else { document.all.dsdsdsdsdxcxdfgfg.value=obj.value;} }  

function chkyzm(obj) {  if(obj.value!='') {   var s=md5(md5(obj.value.toUpperCase()).substring(0,30).toUpperCase()+'10298').substring(0,30).toUpperCase();   document.all.fgfggfdgtyuuyyuuckjg.value=s;} else {    document.all.fgfggfdgtyuuyyuuckjg.value=obj.value.toUpperCase();}}

略乱,美化一下:

function chkpwd(obj) {
    if (obj.value != '') {
        var s = md5(document.all.txt_asmcdefsddsd.value + md5(obj.value).substring(0, 30).toUpperCase() + '10298').substring(0, 30).toUpperCase();
        document.all.dsdsdsdsdxcxdfgfg.value = s;
    } else {
        document.all.dsdsdsdsdxcxdfgfg.value = obj.value;
    }
}

function chkyzm(obj) {
    if (obj.value != '') {
        var s = md5(md5(obj.value.toUpperCase()).substring(0, 30).toUpperCase() + '10298').substring(0, 30).toUpperCase();
        document.all.fgfggfdgtyuuyyuuckjg.value = s;
    } else {
        document.all.fgfggfdgtyuuyyuuckjg.value = obj.value.toUpperCase();
    }
}

先看<code>chkpwd()</code>:
比较简单, 主要流程如下:
1.对于obj的值md5计算,然后取前30位,转换成大写。
2.txt_asmcdefsddsd的值(也就是学号)与计算的结果拼接字符串,尾部加上学校代码,作为新的字符串。
3.最后再计算md5,取前30位转大写
<code>chkyzm()</code>也是类似的,不再赘述。
这里<code>md5()</code>函数来源于引用的md5.js,看了一下,并没有什么坑。
<b>0x04:python实现</b>
知道加密流程之后就可以利用python重写。
计算md5可以使用 hashlib 库。
简单实现如下:

def md5sum(obj):
     md5=hashlib.md5(obj.encode('gb2312')).hexdigest()
     return md5

实现 chkpwd():

def chkpwd(pwd,stu):
    s = md5sum(stu + md5sum(pwd)[:30].upper() + '10298')[:30].upper()
    dsdsdsdsdxcxdfgfg = s 
    return dsdsdsdsdxcxdfgfg 

实现 chkyzm():

def chkyzm(yzm):
    s = md5sum(md5sum(yzm.upper())[:30].upper() + '10298')[:30].upper()
    fgfggfdgtyuuyyuuckjg = s
    return fgfggfdgtyuuyyuuckjg

最后构造一个相应的登陆请求即可。

具体实现可以参考我的GitHub上的代码青果教务系统选课助手

推荐一个小工具 将fiddler 和 firefox上的header转成json

相关文章

网友评论

      本文标题:青果教务管理网站登陆分析(一)

      本文链接:https://www.haomeiwen.com/subject/btcmvttx.html