hacktricks/pentesting-web/grpc-web-pentest.md
2024-02-11 01:46:25 +00:00

9.2 KiB

Testowanie penetracyjne gRPC-Web

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Manipulowanie danymi gRPC-Web

gRPC-Web używa Content-Type: application/grpc-web-text w żądaniach, które są rodzajem protobuf w formie zakodowanej w base64. Możesz użyć narzędzia gprc-coder, a także zainstalować jego Rozszerzenie dla Burp Suite.

Ręczne użycie narzędzia gGRPC Coder

  1. Najpierw odkoduj dane:
echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt
  1. Edytuj zawartość odkodowanego ładunku
nano out.txt
2: {"Amin Nasiri Xenon GRPC"}
3: 54
7: {"<script>alert(origin)</script>"}
  1. Zakoduj nowy payload
protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text
  1. Użyj wyników w intercepcie Burp:

W przypadku, gdy chcesz przechwycić i zmodyfikować żądania i odpowiedzi gRPC, możesz skorzystać z funkcji intercepcji w narzędziu Burp. Aby to zrobić, wykonaj następujące kroki:

  1. Uruchom Burp Suite i skonfiguruj przeglądarkę internetową, aby korzystała z proxy Burp.
  2. Przejdź do zakładki "Proxy" w Burp Suite i włącz intercepcję.
  3. Wykonaj żądanie gRPC, które chcesz przechwycić.
  4. Gdy żądanie pojawi się w intercepcie Burp, możesz je zobaczyć i zmodyfikować przed wysłaniem.
  5. Po dokonaniu odpowiednich zmian, kliknij przycisk "Forward" w intercepcie, aby wysłać zmodyfikowane żądanie.
  6. Odpowiedź gRPC również pojawi się w intercepcie, gdzie możesz ją zobaczyć i zmodyfikować przed odesłaniem do klienta.

Dzięki temu podejściu możesz kontrolować i manipulować danymi przesyłanymi przez protokół gRPC, co może być przydatne podczas testowania penetracyjnego aplikacji webowych.

AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+

Podręcznik z rozszerzeniem Burp Suite dla gRPC-Web Coder

Możesz użyć rozszerzenia Burp Suite dla gRPC-Web Coder w gRPC-Web Pentest Suite, co jest prostsze. Instrukcje dotyczące instalacji i użycia znajdziesz w repozytorium.

Analiza plików Javascript gRPC-Web

W każdej aplikacji gRPC-Web znajduje się co najmniej jeden plik Javascript. Możesz przeanalizować ten plik, aby znaleźć nowe wiadomości, punkty końcowe i usługi. Spróbuj użyć narzędzia gRPC-Scan.

  1. Pobierz plik Javascript gRPC-Web
  2. Przeskanuj go za pomocą grpc-scan.py:
python3 grpc-scan.py --file main.js
  1. Analiza wyników i przetestuj nowe punkty końcowe oraz nowe usługi:
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            |
+--------------+----------------+--------------+

Odnośniki

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: