某网站登录协议分析

使用工具

# 浏览器 谷歌
# 抓包工具 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值就不用做处理,直接识别出来使用就行

posted @ 2023-12-25 18:34  郭楷丰  阅读(15)  评论(0编辑  收藏  举报
Live2D