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


前言:

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


正文:

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

0x01:抓包

以南京林业大学为例:


image.png

请求参数如下:


青果教务管理网站登陆分析(一)_第1张图片
image.png

txt_asmcdefsddsd是学号,Sel_Type应该是类型,主要是两个参数: dsdsdsdsdxcxdfgfgfgfggfdgtyuuyyuuckjg,这两个应该都是加过密了。

image.png

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

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


青果教务管理网站登陆分析(一)_第2张图片
image.png

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


青果教务管理网站登陆分析(一)_第3张图片
image.png

密码框在失去焦点和按键弹起时都会触发chkpwd()函数。
青果教务管理网站登陆分析(一)_第4张图片
image.png

验证码框在点击和获得焦点时会触发showvc()函数,在失去焦点和按键弹起时会触发chkyzm()函数,showvc仅仅是展示验证码不管。

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

0x03:分析函数
将该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();
    }
}

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

你可能感兴趣的:(青果教务管理网站登陆分析(一))