- A+
好久之前就已经把模拟登录学校统一认证系统的代码写了一遍了,今天突然想到分享一下分析流程。
一般我都会先定位下 html 中表单的位置,看看参数
然后随便输入个账号,在切换到密码框时可以看到它请求了 checkNeedCaptcha 这个接口
很显然这就是判断是否需要验证码的接口,某一账号只有密码输错三次以上才会需要验证码
随便输入密码后登录,返回 401,即验证失败
查看参数,红框这四个显然是固定的,execution 在前面表单中有,可以直接获取,captcha 验证码可以先不管
那么就只剩下了 password 这一加密参数
之前的表单中有 pwdEncryptSalt 这一盐值,显然与其有关
查看 login.js
使用 pwdEncryptSalt 通过 encryptPassword 函数将密码框值加密,并置于 saltPassword 栏
saltPassword 栏位置
定位 encryptPassword 函数 在 encrypt.js 中,这里加密流程很直观 先在密码前拼接 64 位随机字符,然后使用 pwdEncryptSalt 作为 aesKey,以及随机 16 位字符作为 iv,使用 AES-128-CBC 标准进行加密,得到加密后密码
这样我们就得到所有需要的参数了,然后就可以着手写代码了
首先访问登录页面,并从 header 中提取出 cookie 并从 html 中解析出所需参数,然后打包
判断是否需要验证码,并将数据发送到登录页面 根据返回的头信息的 Location 判断是否登录成功,并提取 cookie
函数注明:
self::get_url($path) // 得到 authserver 服务器url + $path 的地址
self::get_cookie($header) // 从 $header 头信息中提取 cookie
self::encrypt($pass, $salt) // 进行 AES 加密
self::request(string $url, array $param = [], array $headers = [], string $cookie = '') // 自己写的 curl 请求函数
本文只做思路分享,白嫖代码什么的别想了,还是得自己研究研究哦
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫