# Testowanie penetracyjne gRPC-Web
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)! Inne sposoby wsparcia HackTricks: * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)! * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
## **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](https://github.com/nxenon/grpc-pentest-suite), a także zainstalować jego [Rozszerzenie dla Burp Suite](https://github.com/nxenon/grpc-pentest-suite). ### **Ręczne użycie narzędzia gGRPC Coder** 1. Najpierw odkoduj dane: ```bash echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt ``` 2. Edytuj zawartość odkodowanego ładunku ``` nano out.txt 2: {"Amin Nasiri Xenon GRPC"} 3: 54 7: {""} ``` 3. Zakoduj nowy payload ```bash protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text ``` 4. 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](https://github.com/nxenon/grpc-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](https://github.com/nxenon/grpc-pentest-suite). 1. Pobierz plik Javascript gRPC-Web 2. Przeskanuj go za pomocą grpc-scan.py: ```bash python3 grpc-scan.py --file main.js ``` 3. 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 * [Włamywanie się do gRPC-Web - artykuł autorstwa Amina Nasiri](https://infosecwriteups.com/hacking-into-grpc-web-a54053757a45) * [Zestaw narzędzi do pentestowania gRPC-Web](https://github.com/nxenon/grpc-pentest-suite)
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)! Inne sposoby wsparcia HackTricks: * Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)! * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podziel się swoimi trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.