探索
- 首先探测 https://webvpn.scuec.edu.cn/users/sign_in
burp 抓包
对参数 url 解码
NAME | VALUE |
---|---|
authenticity_token | YfVXnZvUQQ5tSly8sK0TlxMdC0AMPaJeytcoJyq6CPEgnqbVU9DRXPlCxCn5IK9/U95t0kP9YCGCRVDGvofkIw== |
user[login] | 202021091205 |
user[password] | 123456 |
user[dymatice_code] | unknown |
user[otp_with_capcha] | false |
_rucaptcha | bysn |
commit | 登录 + Login |
-
repeat
发现一个包不行,必须连发三个包
退而求其次 -
进入另外一个登录界面
https://id.scuec.edu.cn/authserver/login?service=https%3A%2F%2Fehall.scuec.edu.cn%2Flogin%3Fservice%3Dhttps%3A%2F%2Fehall.scuec.edu.cn%2Fnew%2Findex.html%3Fbrowser%3Dno
抓包发现最后一个包会有回显,且会有正确与错误两种不同的回显
尝试爆破?对于运气问题我们不能左右,但是对于技术问题却是可以专注的!
爆破
- password
- 通过分析 js 代码
1 | $("#saltPassword").val(encryptPassword($(LOGIN_PASSWORD_ID).val(),$("#pwdEncryptSalt").val())); |
将 pwdEncryptSalt(id) 作为 encryptPassword 函数的参数还有输入的 LOGIN_PASSWORD_ID,一起带入加密
2. 获取 pwdEncryptSalt(id)
分析前端 html 代码可知,pwdEncryptSalt 的 value 每次都不同,而且是从后端获取的,那么我们可以利用 python 发请求,正则表达式得到其值
3. encryptPassword 函数
前端可以直接获取加密的 js 包
直接写个 button (测试) 得到加密后的 saltPassword,貌似是 AES 加密
4. 对 password 和 excution 进行 url 编码后再放进去
放包看结果!
5. 貌似失败了捏
原因分析:
(1)操作超时?(脚本可以解决)
显然不是,我抓包等了 15 分钟,放包依然成功登录
(2)还有其他限制?
1 | <input type="hidden" id="pwdEncryptSalt" value="qZb7cLORB1US5u0s" /><input type="hidden" id="execution" name="execution" value="65f5498c-3c66-4390-90f4-9d4084dc2f12_ZXlKaGJHY2lPaUpJVXpVeE1pSjkuMWlYR3RubWZKU1NoK0xUTGtnaC90aDAx……“/> |
把 python 请求的这部分替换到前端直接登录,发现登录认证失败,问题应该就是出在这里。