使用工具
# 浏览器 谷歌
# 抓包工具 Fiddler
# 语言 python与js
流程分析
# 登录包为 http post请求 提交参数(json)如下
{
"callbackVOList": [{
"callback": {
"loginName": "91XXXXXXXXXXXXXX", # 账号
"moduleName": "PasswordModule",
"prompt": "用户名",
"step": 1,
"subjectNeedFill": true
},
"callbackType": "cn.org.bjca.am.authframework.callback.LoginNameCallback",
"order": 0
}, {
"callback": {
"encoding": false,
"moduleName": "PasswordModule",
"password": "3F647993D5419FFD275CB405A319F5CE644C0549", # 加密后的密码
"prompt": "密码",
"step": 1,
"subjectNeedFill": true
},
"callbackType": "cn.org.bjca.am.authframework.callback.PasswordCallback",
"order": 1
}, {
"callback": {
"choices": {
"1": "个人用户",
"2": "单位用户",
"3": "代办人"
},
"defaultChoice": "",
"moduleName": "PasswordModule",
"multipleSelectionsAllowed": false,
"prompt": "111",
"selectedKey": "1",
"step": 1,
"subjectNeedFill": true
},
"callbackType": "cn.org.bjca.am.authframework.callback.ChoiceCallback",
"order": 2
}, {
"callback": {
"moduleName": "PasswordModule",
"prompt": "验证码",
"step": 1,
"subjectNeedFill": true,
"validateCode": ""
},
"callbackType": "cn.org.bjca.am.authframework.callback.ValidateCodeCallback",
"order": 3
}, {
"callback": {
"moduleName": "PasswordModule",
"step": 1,
"subjectNeedFill": true,
"type": ""
},
"callbackType": "cn.org.bjca.am.authframework.callback.AppTypeCallback",
"order": 4
}],
"indexName": "initService",
"indexType": "service",
"moduleName": "PasswordModule",
"step": 1
}
需要处理的点
1.密码被加密了
2.存在一个登录验证码
strEnc(e.legelPwd, t.randomCode, "", "") -> 'A6C9AF79F04BEA097DBDAB8B968AECBB'
strEnc函数传入4个参数,返回了加密后的密码
参数1 e.legelPwd就是我们输入的密码
参数2 t.randomCode -> "Ljg0MDAwNzk3Mw==" 是一个字符串
strEnc(输入密码, 响应的值, "", "") -> 就能拿到加密后密码
检查这两个请求发现,提交验证码的token也没再登录请求携带,过验证码成功也没有响应cookie,这个验证码可能可以直接绕过(相当于只做了页面的验证码,通过协议模拟可以绕过这个步骤?),直接不请求验证码,模拟登录请求验证一下猜想
模拟浏览器请求
# 测试发现返回验证码错误,看来还是要过这个验证码估计是这个cookie在后台做了过验证码记录
# 那就继续把验证码过了
# 找一下这个clientUid值怎么来的
使用文心一言生成个uuid的代码拿来用一下
# 猜想x 应该是距离 y 为高度
# 验证后发现 x = 310 * 滑动距离 / 400 y = 5 固定值
# 发现保存到本地的图片是310长度,那x值就不用做处理,直接识别出来使用就行