9.4 KiB
Pentesting gRPC-Web
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks 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.
Manuell mit dem gGRPC Coder Tool
- Dekodieren Sie zuerst den Payload:
echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt
- 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.
nano out.txt
2: {"Amin Nasiri Xenon GRPC"}
3: 54
7: {"<script>alert(origin)</script>"}
- Kodieren Sie die neue Nutzlast
protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text
- 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.
- Laden Sie die Javascript gRPC-Web-Datei herunter.
- Scannen Sie sie mit grpc-scan.py:
python3 grpc-scan.py --file main.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 |
+--------------+----------------+--------------+
Referenzen
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.