chrome 插件 抓取网页qq聊天记录( 面向官方编程开发的系统越权问题及解决办法 )
优采云 发布时间: 2022-02-14 03:14chrome 插件 抓取网页qq聊天记录(
面向官方编程开发的系统越权问题及解决办法
)
前言
因为公司业务中越界的问题太多了,通常会消耗我们安保部门大量的人力物力,所以我们平时做的大部分工作都是重复性的,毫无意义的。基于以上问题,我打算开发一个系统进行未经授权的检测,用自动化来代替大部分重复性的工作。在决定自己开发之前,我也尝试过教公司的学生使用burpsuite,但是成本太高,几乎需要一个一个来教。所以这次开发的系统一定要简单、好用、易扩展、高效!
技术栈
SpringbootMybatisMySQLChrome插件开发
整个想法
我的总体思路是:通过Chrome插件将测试同学的流量镜像到非法检测服务器,然后服务器重新向目标站点发送三个请求,请求1是原创请求,请求2是cookie不同权限的请求,请求3是一个不携带任何身份字段的请求!然后越权检测系统会比较三个请求的状态码、响应内容的相似度、响应的长度,判断是否存在未授权访问,并直接将结果展示给普通用户。具体思路如下图所示。
Crome插件技术实现部分
1.开始
我最初的想法是模仿burpsuite,以颁发证书的形式来代理Chrome的流量,但是找不到合适的方式,感觉实现起来有点复杂。拿Chrome流量的接口来说,这些底层接口可以忽略https加密,相当于在加密前直接抓取HTTP请求的明文!这个很方便,而且我们不用考虑加解密的问题,很方便,所以通常开发前还是要多看文档,不然发现官方会很伤心界面已在最后提供!
2.官方文档编程
首先,我们需要明确我们在请求目标站点并将其传递给后端时需要抓取哪些关键信息。我们要得到的其实是三部分 1.Requested URL 2.为身份验证的请求头,如 Cookie、SSO_TOKEN 等字段 3 请求参数。明确了这一点后,我们开始从文档中查找,看看官方是否提供了相应的接口。
Chrome开发文档中关于爬取流量的重点,我们来看看文档中是如何描述这个特性的:
Use the chrome.webRequest API to observe and analyze traffic and to intercept, block, or modify requests in-flight
大概意思是可以通过chrome.webRequest接口来获取和截断分析数据包。官方文件,
阅读文档很头疼,对吧?让我们直奔主题吧!OnBeforeRequest、onBeforeSendHeaders、onSendHeaders、onAuthRequired、onBeforeRedirect、onResponseStarted、onCompleted、onErrorOccurred等8个函数在一个请求的整个生命周期中扮演着不同的角色。这8个函数函数的工作生命周期如下图所示:
文档很枯燥,大家都喜欢例子,那我就用一个demo来讲解一下这些函数的作用吧!
3.一个Chrome插件的基本结构
这些接口是谷歌为 Chrome 开发的插件接口。如果要运行这些代码来看看效果,首先要运行一个简单的Chrome插件。为了大家方便,我把文章中用到的代码直接上传到了Github上,读者可以直接下载习题。
正常的 Chrome 插件文件结构如下所示:
background.js 的作用和它的名字一样。只要Chrome插件运行,background.js就可以工作,也就是说我们在使用Chrome插件时遇到的所有数据包等数据都可以通过这个文件来处理。回到文章开头,我们最开始想要的就是通过Chrome插件的接口直接把流量镜像到我们的后台服务器,所以我们现在要做的就是使用background.js中的接口查看效果。
4.实战
我们以 onBeforeRequest 为例,因为其余的用法类似,
chrome.webRequest.onBeforeRequest.addListener(details => { console.log(dateTime+ "打印一下onBeforeRequest的detail:"); console.log(details);}, {urls: [""]}, ["requestBody"]);
看起来很简单,但是注意两点 1.detail 是函数捕获的信息,2.{urls: [""]}, ["requestBody"]) 是配置信息,总之,这些配置信息决定了onBeforeRequest会捕获哪些信息,如何找到配置参数以及如何配置如下图,官方文档地址
上面例子中代码的作用是拦截所有的URL请求并获取HTTP请求体,那么我们如何查看拦截效果呢?废话不多说,上图,你可以在这里看到background.js打印的所有信息:
让我们直接看一下细节。如下图所示,红框是detail中的所有信息。
根据文档中的介绍,我们发现onBeforeRequest只能获取我们需要的请求参数,而且我们还需要获取请求中的请求头。查看官方文档发现onBeforeSendHeaders可以获取我们需要的请求头。代码看起来像这样
chrome.webRequest.onSendHeaders.addListener(details => {console.log("打印一下onSendHeaders的detail:");console.log(details);}, {urls: [""]}, ["requestHeaders","extraHeaders"]);
我们直接看下效果,发现可以得到我们需要的请求头如下图
至此,我们已经获得了我们需要的请求参数和请求头,请求的URL,我们将这些参数组合起来,发送给未授权检测服务器。
后记
本文使用的代码我直接上传到了Github,需要学习和实践的同学可以直接下载使用!
<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;font-size: 16px;letter-spacing: 0.544px;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;">- End -<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
精彩推荐
【技术分享】从浅入深 Javascript 原型链与原型链污染<br />
【技术分享】任意RAT改加载器Bypass<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
戳“阅读原文”查看更多内容</p>