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