夏天到了,小伙伴们多喝水哦~
文章声明
本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!
目标网站
aHR0cHM6Ly93d3cuaWVzZG91eWluLmNvbS9zaGFyZS91c2VyLzgxNDE0MTYyODc2P3NlY191aWQ9TVM0d0xqQUJBQUFBa01DSU11enlDVkxjOXBOZFRLN2tYa05SbDZhT281U0l0NndqeGI2Z2tLOA==抓包分析
开发者模式抓就行了,喜欢用charles的也可以使用charles 一张图看下来大佬们应该就知道是什么数据了 目标:通过sekiro框架实现数据远程获取参数分析
通过抓包可知,该请求为xhr请求,现在sources面板进行xhr断点,看下请求调用栈 下好断点,F5刷新页面,发现已经成功断点并获取到详细调用栈 将该文件内的js代码全部copy下来,放到webstorm中供后续sekiro调用,这里我将复制出来的代码保存的文件命名为sekiro_test.js,首先将sekiro框架的js文件配置文件配好:github地址:https://github.com/virjar/sekiro看到readme中的这一部分:浏览器打开红框中的js文件,并将返回的js代码及蓝框中的js代码内容复制到刚才的sekiro_test.js文件中,如下所示:
配置代码块完成之后,打开chrome的reres插件(reres插件可自行搜索下载),进行js文件替换:
配置完成后,取消xhr断点并刷新页面,控制台输出如下: 打开该链接,其中group即为上输蓝框中wss链接里的group参数,cation即为registerAction中的action接口clientTime,发现可以正常输出当前时间,接下来则开始调试sekiro_test.js文件根据刚才请求的调用栈,发现整个接口的发送逻辑是通过init(config)调用renderMain(config),然后再在renderMain中调用getWorkList(type),而后又通过getWorkList发送ajax请求实现的:
其中init方法参数config在控制台显示为一个object对象:
在sekiro_test.js文件中直接使用registerAction注册一个getaData接口,传递resolve和reject参数调用init方法,做如下配置:
提示代码错误,init方法未找到,因为该方法是在自执行函数中定义的,作用域不同,因此无法调用,此处可通过骚操作来调用,先在外部定义一个init_sekiro对象,然后在自执行函数内部定义init_sekiro = init即可在外部实现调用:
记得将
resolve和reject也作为参数传递给renderMain和getWorkList
renderMain(config, resolve, reject){...}
getWorkList(type, resolve, reject){...}
在getWorkList中返回数据的位置使用resolve接受数据:
配置完成后,启动reres插件替换js服务,关闭xhr断点,刷新页面:在console控制台查看输出
在getWorkList中添加两行,看下传递的参数:
输出结果:
因为我们还没有调用client服务,因此resolve为undefined,未避免这种情况,加一个判断即可:
再次刷新页面,发现没有再报错
使用postman远程调用试下:
可以正常请求到数据,此时console控制台输出:
到这里就已经实现xhr接口的远程调用了,但是现在看config参数好像不太美观,优化一下,将get请求的参数调整为sec_uid和uid: 也是可以返回数据的:python脚本也能正常返回数据:
当然,操作过程可能返回的数据是这样的:
有可能是接口后台没返回数据,多刷新几次就可以了,毕竟现在的web端手动查看有时候都不返回数据了。
至此则已实现sekiro框架的远程调用服务,关键点在于找到数据接受和发送的位置,同时修改代码时尽量不影响原网页的运行,如有报错则查看报错位置的传参和返回值,缺啥补啥即可,然后在那个地方实现远程调用,获取数据。
其中文中的group、client、clientId等都可到github上查看具体含义,在我的理解中,sekiro框架在js中的应用在某方面有点类似frida在安卓hook中的应用,都可以在不影响原网页或app运行的过程中,将结果hook下来并实现远程调用,期待后续在安卓群控场景中的应用。最后,欢迎大佬们指正和补充,感谢~ github地址: https://github.com/virjar/sekiro 仅为测试学习,请勿批量采集,如有商业需求可到github上联系原作者virjar。