Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an dieHackTricks und HackTricks Cloud GitHub-Repositories senden.
Manipulation von gRPC-Web-Payloads
gRPC-Web verwendet Content-Type: application/grpc-web-text in Anfragen, was einer Art von protobuf in base64-kodierter Form entspricht. Sie können das gprc-coder-Tool verwenden und auch die Burp Suite-Erweiterung installieren.
Bearbeiten Sie den Inhalt der decodierten Nutzlast
Manchmal müssen Sie möglicherweise den Inhalt der decodierten Nutzlast bearbeiten, um bestimmte Angriffe durchzuführen oder Informationen zu ändern. Hier sind einige Schritte, um den Inhalt der decodierten Nutzlast zu bearbeiten:
Decodieren Sie die Nutzlast: Verwenden Sie die entsprechenden Tools oder Techniken, um die Nutzlast zu decodieren und den Inhalt sichtbar zu machen.
Bearbeiten Sie den Inhalt: Öffnen Sie die decodierte Nutzlast in einem Texteditor und bearbeiten Sie den Inhalt nach Bedarf. Stellen Sie sicher, dass Sie die Syntax und Struktur der Nutzlast beibehalten, um Fehler zu vermeiden.
Speichern Sie die Änderungen: Speichern Sie die bearbeitete Nutzlast und stellen Sie sicher, dass sie im richtigen Format gespeichert wird, um sie später verwenden zu können.
Es ist wichtig zu beachten, dass das Bearbeiten der Nutzlast bestimmte Risiken mit sich bringen kann. Stellen Sie sicher, dass Sie die Auswirkungen Ihrer Änderungen verstehen und die erforderlichen Vorsichtsmaßnahmen treffen, um unerwünschte Folgen zu vermeiden.
Handbuch mit gRPC-Web Coder Burp Suite Erweiterung
Sie können die gRPC-Web Coder Burp Suite Erweiterung in der gRPC-Web Pentest Suite verwenden, was einfacher ist. Die Installations- und Verwendungshinweise finden Sie im entsprechenden Repository.
Analyse von gRPC-Web Javascript-Dateien
In jeder gRPC-Web-Anwendung gibt es mindestens eine Javascript-Datei. Sie können die Datei analysieren, um neue Nachrichten, Endpunkte und Dienste zu finden. Versuchen Sie es mit dem Tool gRPC-Scan.
Laden Sie die Javascript gRPC-Web-Datei herunter.
Scannen Sie sie mit grpc-scan.py:
python3grpc-scan.py--filemain.js
Analysiere die Ausgabe und teste die neuen Endpunkte und neuen Services:
Output:
Found Endpoints:
/grpc.gateway.testing.EchoService/Echo
/grpc.gateway.testing.EchoService/EchoAbort
/grpc.gateway.testing.EchoService/NoOp
/grpc.gateway.testing.EchoService/ServerStreamingEcho
/grpc.gateway.testing.EchoService/ServerStreamingEchoAbort
Found Messages:
grpc.gateway.testing.EchoRequest:
+------------+--------------------+--------------+
| Field Name | Field Type | Field Number |
+============+====================+==============+
| Message | Proto3StringField | 1 |
+------------+--------------------+--------------+
| Name | Proto3StringField | 2 |
+------------+--------------------+--------------+
| Age | Proto3IntField | 3 |
+------------+--------------------+--------------+
| IsAdmin | Proto3BooleanField | 4 |
+------------+--------------------+--------------+
| Weight | Proto3FloatField | 5 |
+------------+--------------------+--------------+
| Test | Proto3StringField | 6 |
+------------+--------------------+--------------+
| Test2 | Proto3StringField | 7 |
+------------+--------------------+--------------+
| Test3 | Proto3StringField | 16 |
+------------+--------------------+--------------+
| Test4 | Proto3StringField | 20 |
+------------+--------------------+--------------+
grpc.gateway.testing.EchoResponse:
+--------------+--------------------+--------------+
| Field Name | Field Type | Field Number |
+==============+====================+==============+
| Message | Proto3StringField | 1 |
+--------------+--------------------+--------------+
| Name | Proto3StringField | 2 |
+--------------+--------------------+--------------+
| Age | Proto3IntField | 3 |
+--------------+--------------------+--------------+
| IsAdmin | Proto3BooleanField | 4 |
+--------------+--------------------+--------------+
| Weight | Proto3FloatField | 5 |
+--------------+--------------------+--------------+
| Test | Proto3StringField | 6 |
+--------------+--------------------+--------------+
| Test2 | Proto3StringField | 7 |
+--------------+--------------------+--------------+
| Test3 | Proto3StringField | 16 |
+--------------+--------------------+--------------+
| Test4 | Proto3StringField | 20 |
+--------------+--------------------+--------------+
| MessageCount | Proto3IntField | 8 |
+--------------+--------------------+--------------+
grpc.gateway.testing.ServerStreamingEchoRequest:
+-----------------+-------------------+--------------+
| Field Name | Field Type | Field Number |
+=================+===================+==============+
| Message | Proto3StringField | 1 |
+-----------------+-------------------+--------------+
| MessageCount | Proto3IntField | 2 |
+-----------------+-------------------+--------------+
| MessageInterval | Proto3IntField | 3 |
+-----------------+-------------------+--------------+
grpc.gateway.testing.ServerStreamingEchoResponse:
+------------+-------------------+--------------+
| Field Name | Field Type | Field Number |
+============+===================+==============+
| Message | Proto3StringField | 1 |
+------------+-------------------+--------------+
grpc.gateway.testing.ClientStreamingEchoRequest:
+------------+-------------------+--------------+
| Field Name | Field Type | Field Number |
+============+===================+==============+
| Message | Proto3StringField | 1 |
+------------+-------------------+--------------+
grpc.gateway.testing.ClientStreamingEchoResponse:
+--------------+----------------+--------------+
| Field Name | Field Type | Field Number |
+==============+================+==============+
| MessageCount | Proto3IntField | 1 |
+--------------+----------------+--------------+