使用rpc绕过咸鱼sign校验
案例网站是咸鱼
找到加密函数i(),发现参数是由token+时间戳+appkey+data构成的
js客户端服务
考虑到网站可能有判断时间戳长短而让请求包失效的可能,我们请求包就直接用它的方法生成
下面我们先把token和h置为键值对tjh123
再把方法i()设为全局变量my_encrypt
(用于客户端js获取值)
注:这里遇到了一个坑,就是js和python的键值对语法不一样,要注意区分
插入js脚本
在脚本中,获取tjh123键值对为对象e,再使用JSON.parse() 将json字符解析为相应的 JavaScript 对象,因为这样可以用字典的形式获取元素值
所以e.data是数据
js代码(JSON.stringify(result)
是 JavaScript 中的一个函数调用,它的主要作用是将一个 JavaScript 对象(result
)转换为一个 JSON 字符串。)
mitm服务
接下来我们开始python的编写
开始这两段是开启线程的,不用改(这段 Python 代码的主要目的是启动一个 WebSocket 服务,用于与浏览器进行 RPC(Remote Procedure Call)交互。它使用了 asyncio
和 websockets
库来实现异步的 WebSocket 通信,并将服务运行在一个单独的子线程中)
获取body的值(原本请求包的值是url编码的,但这里接收的是json格式的data,所以运行脚本后,要把请求包的data切换为json格式)
将data传入客户端js加密,之后等待相应。(json.dumps是把Python 对象 send_data
转换为 JSON 格式的字符串,这步好像有点多余,但要记住加密函数i()接收的data是json格式)
deal_result获取请求,用json.loads()把json字符串转化为python对象(一个字典形式的对象),用deal_result[]获取值,这和js不同,js获取对象元素是data.body这样,再往后就用正则的方式替换时间戳(j),sign,appkey(h)(威神说有更优雅的写法),之后使用bytes()用字节流的方式直接发出去
mitm是这样的,只要函数走完了就自动把包发出去,我们只要改包的内容就好
之后我们用bp设置上游代理进行连接
在脚本目录下编辑一个bat文件,这样就可以双击开始脚本了(服务在5555端口开启),pause是为了让命令行不关闭,方便我们查看报错信息
右键运行客户端js
注意的点:
1、要确保命令行没断点把js代码断住
2、确保定义的全局变量成功赋值,可以在控制台打出来看看
3、以下几个方法容易搞混
json转字典对象
Js : JSON.parse(e.data)
py : json.loads(deal_result)
字典对象转json
Js: JSON.stringify(result)
Py: json.dumps(send_data)
4、bp传给mitm服务的data是json格式的
5、js客户端传给mitm服务的结果也是json格式的
6、是i()的参数一整个字符串
最后贴一张结果图,这样就可以愉快的渗透啦
本文章仅供学习,请勿用于非法用途!!!!!!!!!!!!!!
原文地址:https://blog.csdn.net/npc88888/article/details/145192695
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!