与网上大多数关于这套教务管理系统的登录一样,通过查看网页的源文件可以发现在点击登录按钮的时候会分别对验证码和密码各进行一次加密
其加密函数为:
function chkpwd(obj)
{
if(schoolcode != \"10203\")
{if (obj.value != '')
{var s = md5(document.getElementById(\"txt_asmcdefsddsd\").value +md5(obj.value).substring(0, 30).toUpperCase() + schoolcode).substring(0,30).toUpperCase();document.getElementById(\"dsdsdsdsdxcxdfgfg\").value = s;
}else { document.getElementById(\"dsdsdsdsdxcxdfgfg\").value =obj.value; }
}
else
{
document.all.dsdsdsdsdxcxdfgfg.value= obj.value;
}
}
主要流程
1.对obj的值计算md5取前30位全部转换为大写
2. txt_asmcdefsddsd(学号)的值加上上一步的值加上schoolcode再次计算md5
3.取前30位并全部转换为大写
4.赋值给dsdsdsdsdxcxdfgfg
和
function chkyzm(obj)
{ showvc(); if (schoolcode !=\"10203\")
if(obj.value != '')
{var s = md5(md5(obj.value.toUpperCase()).substring(0, 30).toUpperCase() +schoolcode).substring(0, 30).toUpperCase();document.getElementById(\"fgfggfdgtyuuyyuuckjg\").value = s; }
else
{ document.getElementById(\"fgfggfdgtyuuyyuuckjg\").value =obj.value.toUpperCase();
}
}
else
{document.all.fgfggfdgtyuuyyuuckjg.value = obj.value.toUpperCase();
}
主要流程:
1,把obj的值全部变为大写并计算md5,取前30位
2,再次全部转换为大写并加上schoolcode再次计算md5并取前30位
3,最后再次全部转换为大写
4.赋值给fgfggfdgtyuuyyuuckjg
其中的schoolcode为学校代码
但是在搞定这两个加密以后我却发现了一点不一样的东西
登录后直接get访问地址即可获得成绩图片
http://jwc.xxxxx.cn/xscj/Stu_MyScore_Drawimg.aspx?x=1&h=2&w=930&xnxq=20181&xn=2018&xq=1&rpt=0&rad=2&zfx=0
地址中的x参数和h参数更改以后并不会改变结果,其中rpt为0时表示原始成绩,为1时表示有效成绩
但是在实际进行post登录的时候
需附加协议头及cookies,其中cookies为了传递ASP.NET_SessionId,若SessionId错误,则会返回权限错误,重新登陆
登录时post的表单中的dsdsdsdsdxcxdfgfg和fgfggfdgtyuuyyuuckjg分别为密码及验证码的加密值
这个并不是绝对的,不同的学校不同的网站设置的可能都不一样,这里你要根据自己的网站的源文件进行具体的判断
验证码以及密码经加密后结果均正确,但是未发现其他疑似作为已登录证据的值
并且,不同的浏览器获取到的SessionID值不同,目前怀疑为已登录的SessionID作为cookie即可正常获取数据(经登录后的SessionID可以直接通过get获取成绩图片)
实验表明登录成功的SessionID才可以进行获取成绩等下一步操作
最后的最后,明明已经进行了各种加密以及函数传递但是却不知道为什么post登录却还是失败了,同样的环境和同样的SessionID在浏览器中点击登录和自己手动post的返回结果却不一样
最后经过数次试验证明SessionID的确是识别用户的凭证,且是唯一凭证.而关于登录失败的问题也并非是编码原因而是验证码错误.具体的登录后续请看下文