SuperAPI AI 工具集

attacking-grpc-protobuf

安全与审计

查看项目

更新于 10-16 02:30

技能介绍

用途:当流量使用 HTTP/2 且 content-type 为 application/grpc、请求或响应体为不透明二进制、客户端通过 protobuf 与后端通信,或代码库中出现 .proto、_pb2.py、.pb.go、grpc-web 时,用本技能对 gRPC 服务做安全测试。不适用于纯 REST 或 GraphQL、非 protobuf 二进制协议;若客户端无法被代理看到流量,可结合绕过移动端证书固定;若已有源码,应直接审计代码并阅读 .proto。

主要能力: 一是恢复 schema。优先尝试服务端反射(grpcurl -plaintext target:50051 list / describe);若反射关闭,可从客户端二进制中提取内嵌的 FileDescriptorProto(protod target_binary -o ./protos),或从仓库、Swagger 网关配置、生成的桩代码中获取;都不可用时用 protoc --decode_raw < message.bin 或 protobuf-inspector 做字段级推断,仅丢失字段名但保留字段编号与线格式。 二是调用方法。可用 grpcurl -d 调用,或指定 -import-path 与 -proto 使用本地定义;grpcui -plaintext target:50051 提供交互式浏览器界面;通过 -H 传递授权头;流式方法可用换行分隔 JSON 输入、逐条输出。 三是拦截流量。mitmproxy 支持 HTTP/2 并可结合 schema 解码 gRPC;Burp 需开启 HTTP/2 并配合 protobuf 解码扩展;gRPC-Web 走 HTTP/1.1 更易被普通代理观察。gRPC 帧结构为 1 字节压缩标志 + 4 字节大端长度 + protobuf 字节,解码无输出时可先剥掉前 5 字节再交给 protoc --decode_raw。客户端忽略系统代理时需网络层重定向。

测试重点:按方法逐一检查授权(枚举反射中的全部方法,用低权限令牌逐个调用);关注被直接暴露的内部服务,其常假设只有其他服务会调用,可能完全无认证;检查服务读取的身份类元数据头(如 x-user-id、x-tenant-id、x-role)是否存在信任而导致的认证绕过;注入客户端从不发送但服务端 schema 已定义的字段(如 is_admin、tenant_id)测试大规模赋值;尝试线格式类型混淆、深层嵌套消息或超大重复字段检查资源耗尽与消息大小限制;核实明文通道是否被接受以及 mTLS 是强制还是可选。

限制:字段级推断会丢失字段名;反射被禁用并不等于方法不可发现,需转向客户端描述符提取;网关看不到方法意图,直接到达服务的请求会绕过网关控制。文中未提供具体价格、收费或平台支持信息。