RPC概述
- 什么是RPC?
全称 Remote Procedure Call——远程过程调用。
- 在js加密中JsRPC有什么作用?
比如在访问网站时,我们想直接替换参数,查看有无sql注入或者想枚举密码、挖掘逻辑漏洞替换参数。但是发现参数值是加密的。此时,阅读js代码、补环境很费时费力。上手难度较大。
这时候就可以使用JsRPC。
- RPC的优点:
免去抠代码补环境。
基本流程
- 用户找到加密函数的位置【最重要】
- 在浏览器的console中输入env.js(包中自带的)
- cmd中运行jsrpc程序
jsRPC
- 下载地址
https://github.com/jxhczhl/JsRpc
- 操作流程
阅读readme.md
- 使用流程
找到网站js中的加密处
插入Jsenv.js到console
将加密函数赋值给全局变量,和RPC建立关系
运行网站功能,用burp拦截请求包防止页面跳转
携带参数访问指定url拿到加密后的参数
案例
登陆demo 登陆密码进行加密
通过分析JS代码,发现调用了 desEncrypt 进行加密
控制台中执行,注入Client
https://github.com/jxhczhl/JsRpc/blob/main/resouces/JsEnv_Dev.js
var
demo = new Hlclient("ws://127.0.0.1:12080/ws?group=eip&name=eip"); demo.regAction("desEncrypt", function (resolve,param) {
//这样添加了一个param参数,http接口带上它,这里就能获得
var
out = desEncrypt(param)
resolve(out);
})
group是组别,name是此次的名称,目的是区分每一个rpc,不过在安全测试当中没什么用处,保持固定就行了。
desEncrypt是方法名,param是传入的参数,resolve将需要的内容返回。param只能传入一个参数,类型应该是字符串。如果需要传递多个参数,需要对字符串进行截取处理。
可以直接往我们自己创建的WEB服务器发送数据, 对字符串aaa 进行加密
思考
对于前端加密这个场景JS RPC的思路可以大大节省时间,提高效率的。
不过对于漏洞挖掘,碰到有加密的场景,加密请求构造只是第一步。
后续请求Payload 怎么方便的修改并发送出去就是各位大哥的事情了。
原文始发于微信公众号(多才多艺的老王):JsRPC:通过无缝的JavaScript远程过程调用提升前端渗透测试效率
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论