gRPC-Web 渗透Tip

admin 2023年11月14日11:03:42评论77 views字数 3237阅读10分47秒阅读模式
最近看到gRPC的资料,对其简单探索了下,主要讲一讲在实际工作中遇到后如何通过bp扩展工具来进行挖掘

          

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解码后的一个示例有效载荷:

gRPC-Web 渗透Tip

有效载荷的十六进制输出

在Burp Suite里:

gRPC-Web 渗透Tip

Burp Suite中的Base64解码有效载荷

很明显,你不能轻易地操作有效负载中的二进制数据,只是再次将其编码为base64,因为它使用协议缓冲区,它使用一种序列化,当你想对具有多个参数的有效负载进行更改时,像编辑JSON这样手动操作是不可能的。    

这是来自真实目标的另一个有效载荷:

gRPC-Web 渗透Tip

来自真实目标的有效载荷

有一些工具可以发送gRPC或gRPC-Web请求,但有一个问题!您需要. proto文件!如果您正在进行黑盒测试,自然您没有.proto文件,唯一拥有的是有效负载和浏览器用于发送gRPC-Web请求的Web打包JavaScript文件。最后,我将展示一些关于.proto文件的白盒测试。

解释Base64解码有效载荷

在解码base64编码有效负载并将输出管道传输到xxd命令后,我们可以看到十六进制数据。有效负载的前5个字节是十六进制的整个消息长度,在本例中为(16*1+16*6=22),这意味着整个有效负载有22个字节长。

gRPC-Web 渗透Tip

有效载荷的十六进制输出

删除长度前缀后,我们可以通过管道将有效负载传输到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                  
echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode | protoscope > out.txt

          

SQL                  
cat out.txt                  
2: {"Amin Nasiri"}                  
3: 54                  
7: {"Xenon"}

编辑文件 out.txt:

SQL                  
cat out.txt                  
2: {"Amin Nasiri Xenon GRPC"}                  
3: 54                  
7: {"         <>          alert(origin)         "}

然后使用Protoscope 并将其输出传递给gRPC Coder工具-编码标志:    

SQL                  
protoscope -s out.txt | python3 grpc-coder.py --encode

之后,我们可以使用Burp Suite发送有效载荷:

SQL                  
AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+

          

我相信你发现这是一个耗时的过程,为了操纵每个请求,你必须花费大量的时间来做到这一点。这就是为什么我进行了扩展。

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 渗透Tip

用于查找gRPC-Web JavaScript文件的Logger++过滤器    

找到正确的JS文件后,下载该文件并使用gRPC扫描进行扫描。

Web打包client. js文件后Hidden-SQLigRPC实验室的示例如下:

gRPC-Web 渗透Tip

gRPC-Web网络打包JavaScript文件

它是一个缩小的JavaScript文件,其中包含有关gRPC后端端点和服务的良好信息。gRPC扫描工具使分析此文件变得更加容易:

SQL                  
python3 grpc-scan.py --file main.js

输出:    

gRPC-Web 渗透Tip

gRPC扫描工具输出

在输出中,我们可以看到2个端点,我们可以在其中向它们发送请求。

还有3条消息,每个都有一些字段,每个字段都有一个字段编号和字段类型。请注意,当我们操作有效负载时,gRPC扫描输出中的字段名称并不重要,因为Pro buf使用字段编号。字段名称只是帮助我们了解一些参数及其用法的小线索。

请注意,有时应用程序不会使用所有端点或所有消息字段,它们可能是可选的。您必须模糊它们以发现可能的漏洞。

首先,我解码有效负载:    

gRPC-Web 渗透Tip

gRPC扫描解码过程

结果是这样的:

gRPC-Web 渗透Tip

解码有效载荷

然后更改路由并将SQLi有效负载放入其中:    

gRPC-Web 渗透Tip

编辑有效负载并在其中添加SQLi有效负载

对有效负载进行所有更改后,我对其进行编码并将其发送到服务器:

gRPC-Web 渗透Tip

gRPC Coder扩展有效载荷编码过程    

gRPC-Web 渗透Tip

发送新的编码有效负载

当我用gRPC编码扩展解码响应时,我们看到没有发布的帖子, /Search2路由没有受到SQLi漏洞的保护,我们看到标志:)

gRPC-Web 渗透Tip

          

使用. proto文件进行测试

如果你有. proto文件,你可以使用grpcui工具,但你必须制作.prooset文件,然后使用它来发送gRPC-Web请求:

SQL                  
protoc --proto_path=. --descriptor_set_out=NAME.protoset --include_imports ./NAME.proto

然后运行grpcui:

SQL                  
grpcui -protoset NAME.protoset -plaintext localhost:8080

              

打开grpcui生成的URL并发送您想要的请求:

gRPC-Web 渗透Tip

grpcui命令

gRPC-Web 渗透Tip

              

原文始发于微信公众号(暴暴的皮卡丘):gRPC-Web 渗透Tip

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月14日11:03:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   gRPC-Web 渗透Tiphttp://cn-sec.com/archives/2203253.html

发表评论

匿名网友 填写信息