实战:对科文教务系统进行拦截
科文学院教务系统内网地址:http://10.110.240.221/jsxsd/
进入官网后再打开拦截。
输入一个错误的账号密码进行试探。
点击登陆按钮,进行拦截,可以拦截到如下信息:
POST /jsxsd/xk/LoginToXk HTTP/1.1 Host: 10.110.240.221 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 80 Origin: http://10.110.240.221 DNT: 1 Connection: close Referer: http://10.110.240.221/jsxsd/ Cookie: bzb_jsxsd=253F34A9C34D3A2849F560D88B8EF476; SERVERID=121; bzb_njw=359C682BAE9C81FDC16D469CF9DFEAD5 Upgrade-Insecure-Requests: 1 loginMethod=LoginToXk&userAccount=123&userPassword=123&encoded=MTIz%25%25%25MTIz
从所获取的信息中可以得知,登录的接口是POST请求http://10.110.240.221/jsxsd/xk/LoginToXk,传输的数据有:
| 参数名 | 参数值 |
|---|---|
| loginMethod | LoginToXk |
| userAccount | 123 |
| userPassword | 123 |
| encoded | MTIz%25%25%25MTIz |
通过重复实验,发现loginMethod的参数值是固定的,同时userAccount和userPassword的值就是账号密码的明文,而encoded参数随着账号密码的变化而变化,而相同的账号密码的encoded值是相同的,因此判断encoded参数值通过对账号密码依据某种规则进行加密得来的,在前端加密,只有通过js的方式,因此只要获取到响应的js函数,即可破解密码,从而实现模拟登录。
使用Burp工具无法获得异步请求的静态文件。打开浏览器的控制台网络模块,刷新页面,得到如下:
其中js文件有jquery.min.js、jquery-1.11.1.min.js、bootstrap.min.js、conwork.js、layui.all.js,其中jquery、bootstrap、layui都是非常出名的非加密用途的js库,从而怀疑conwork.js。
获取此响应,得到:
eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c]);return p;}('b 9="o+/=";p q(a){b e="";b 8,5,7="";b f,g,c,1="";b i=0;m{8=a.h(i++);5=a.h(i++);7=a.h(i++);f=8>>2;g=((8&3)<<4)|(5>>4);c=((5&s)<<2)|(7>>6);1=7&t;k(j(5)){c=1=l}v k(j(7)){1=l}e=e+9.d(f)+9.d(g)+9.d(c)+9.d(1);8=5=7="";f=g=c=1=""}u(i
这是一个加密后的js文件,使用工具对其进行解密:
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function encodeInp(input) {
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64
} else if (isNaN(chr3)) {
enc4 = 64
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = ""
} while ( i < input . length );
return output
}
通过测试,确认该文件就是加密文件。
后通过python进行爬虫,成功使用requests模块实现模拟登录。
启示:
科文学院教务官网毫无安全性可言,很容易发生不可挽回的可怕后果,通过对bilibili、网易两大互联网公司的网站进行类似的模拟操作,明显可以发现科文学院教务官网的不足之处。
在上述两大互联网公司的网站中,常见的安全手段有:
- 通过放置大量的没有用的静态文件,加大破解者的工作量。
- 通过设置大量静态文件,每次访问时随机加载一定数量的静态文件,达到每次访问都会收到不同的静态文件的目的,来干扰破解者。
- 通过放置多个加密函数,而不是只传输一个加密函数,让破解者在寻找对应函数的时候耗费大量精力。
- 通过对加密函数的函数名非正常化,例如科文教务的加密函数叫encodeInp,可以重命名为login,以迷惑破解者,甚至可以让破解者直接忽略此函数。
- 通过设置图形验证码。
- 使用非对称加密。



