gRPC-Web介绍
gRPC-Web提供了一种在浏览器中使用gRPC的方式,它通过在浏览器和gRPC服务之间添加一个代理来实现。这个代理将gRPC-Web请求转换为适用于浏览器的HTTP/1.1 请求,并将gRPC响应转换回gRPC-Web 格式
gRPC-Web识别
Content-Type:gRPC-Web 使用 application/grpc-web 作为请求的内容类型。可以查看 HTTP 请求的头部信息,特别是 Content-Type 字段,以确定是否为 gRPC-Web 请求。如果看到 application/grpc-web,那么很可能是使用了 gRPC-Web
这是base64解码后的一个示例有效载荷:
有效载荷的十六进制输出
在Burp Suite里:
Burp Suite中的Base64解码有效载荷
很明显,你不能轻易地操作有效负载中的二进制数据,只是再次将其编码为base64,因为它使用协议缓冲区,它使用一种序列化,当你想对具有多个参数的有效负载进行更改时,像编辑JSON这样手动操作是不可能的。
这是来自真实目标的另一个有效载荷:
来自真实目标的有效载荷
有一些工具可以发送gRPC或gRPC-Web请求,但有一个问题!您需要. proto文件!如果您正在进行黑盒测试,自然您没有.proto文件,唯一拥有的是有效负载和浏览器用于发送gRPC-Web请求的Web打包JavaScript文件。最后,我将展示一些关于.proto文件的白盒测试。
解释Base64解码有效载荷
在解码base64编码有效负载并将输出管道传输到xxd命令后,我们可以看到十六进制数据。有效负载的前5个字节是十六进制的整个消息长度,在本例中为(16*1+16*6=22),这意味着整个有效负载有22个字节长。
有效载荷的十六进制输出
删除长度前缀后,我们可以通过管道将有效负载传输到Prot镜工具,它会输出一个人类可读的有效负载版本,该版本可编辑,类似于JSON格式,但不完全JSON。消息字段用字段号而不是字段名分隔,因为协议缓冲区使用字段号,字段名在. proto文件和存根文件中指定。
现在让我们更轻松地破解gRPC-Web…
gRPC渗透测试套件
gRPC渗透测试套件有2个工具+1个用于黑客gRPC-Web的Burp套件扩展:
1. gRPC编码器
此工具有助于操作有效负载,删除长度前缀,并且对于检查来自服务器的响应或执行响应操作也很有用。您还需要安装保护镜工具以使gRPC渗透测试套件完整且可用。
gRPC编码器Burp扩展
此扩展有助于更快地使用gRPC Coder工具,只需单击一下即可解码和编码有效负载
2. gRPC扫描
这个工具扫描JavaScript Webpack的gRPC-Web相关文件,并输出gRPC端点、服务、方法、消息、字段和字段类型。它有助于找到隐藏的参数或隐藏的端点,在某些情况下,您还可以使用这个工具的输出制作. proto文件。
gRPC编码器使用
首先,您必须将有效负载传递给gRPC Coder with-decode标志的标准输入。然后将工具的输出传递给Prot镜并将输出保存到文件中进行编辑。
SQL |
SQL |
编辑文件 out.txt:
SQL |
然后使用Protoscope 并将其输出传递给gRPC Coder工具-编码标志:
SQL |
之后,我们可以使用Burp Suite发送有效载荷:
SQL |
我相信你发现这是一个耗时的过程,为了操纵每个请求,你必须花费大量的时间来做到这一点。这就是为什么我进行了扩展。
gRPC Coder Burp Suite扩展用法
我制作了一个使用此扩展的视频,在视频中我利用了具有客户端XSS保护的实验室示例:
gRPC Coder Burp Suite扩展使用
您可以使用扩展轻松编码和解码有效负载。请参阅gRPC渗透测试套件以在Burp中安装扩展。
gRPC扫描用法
当您使用使用gRPC-Web的Web应用程序时,您可能会看到一个main. js或某个Randon.js文件,其中包含与gRPC-Web相关的文件。
注意:要找到包含gRPC-Web数据的正确JS文件,您可以在所有Burp响应中搜索一个gRPC-Web路由,例如搜索:
hidden. sqli.Searcher像这样:
用于查找gRPC-Web JavaScript文件的Logger++过滤器
找到正确的JS文件后,下载该文件并使用gRPC扫描进行扫描。
Web打包client. js文件后Hidden-SQLigRPC实验室的示例如下:
gRPC-Web网络打包JavaScript文件
它是一个缩小的JavaScript文件,其中包含有关gRPC后端端点和服务的良好信息。gRPC扫描工具使分析此文件变得更加容易:
SQL |
输出:
gRPC扫描工具输出
在输出中,我们可以看到2个端点,我们可以在其中向它们发送请求。
还有3条消息,每个都有一些字段,每个字段都有一个字段编号和字段类型。请注意,当我们操作有效负载时,gRPC扫描输出中的字段名称并不重要,因为Pro buf使用字段编号。字段名称只是帮助我们了解一些参数及其用法的小线索。
请注意,有时应用程序不会使用所有端点或所有消息字段,它们可能是可选的。您必须模糊它们以发现可能的漏洞。
首先,我解码有效负载:
gRPC扫描解码过程
结果是这样的:
解码有效载荷
然后更改路由并将SQLi有效负载放入其中:
编辑有效负载并在其中添加SQLi有效负载
对有效负载进行所有更改后,我对其进行编码并将其发送到服务器:
gRPC Coder扩展有效载荷编码过程
发送新的编码有效负载
当我用gRPC编码扩展解码响应时,我们看到没有发布的帖子, /Search2路由没有受到SQLi漏洞的保护,我们看到标志:)
使用. proto文件进行测试
如果你有. proto文件,你可以使用grpcui工具,但你必须制作.prooset文件,然后使用它来发送gRPC-Web请求:
SQL |
然后运行grpcui:
SQL |
打开grpcui生成的URL并发送您想要的请求:
grpcui命令
原文始发于微信公众号(暴暴的皮卡丘):gRPC-Web 渗透Tip
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论