mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-unauthenticated-e
This commit is contained in:
+106
-15
@@ -1,30 +1,30 @@
|
||||
# GCP - API Anahtarları Yetkisiz Enum
|
||||
# GCP - API Keys Unauthenticated Enum
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## API Anahtarları
|
||||
## API Keys
|
||||
|
||||
API Anahtarları hakkında daha fazla bilgi için kontrol edin:
|
||||
API Keys hakkında daha fazla bilgi için şuraya bakın:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-api-keys-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### OSINT teknikleri
|
||||
### OSINT techniques
|
||||
|
||||
**Google API Anahtarları, istemci tarafında kullanılan her türlü uygulama tarafından yaygın olarak kullanılmaktadır.** Bunları web sitelerinin kaynak kodunda veya ağ isteklerinde, mobil uygulamalarda veya Github gibi platformlarda regex araması yaparak bulmak yaygındır.
|
||||
**Google API Keys, client tarafında çalışan her tür uygulama tarafından yaygın olarak kullanılır**. Bunları web sitelerinin source code'unda veya network requests içinde, mobile applications'da ya da sadece Github gibi platformlarda regex arayarak bulmak yaygındır.
|
||||
|
||||
Regex: **`AIza[0-9A-Za-z_-]{35}`**
|
||||
Regex şudur: **`AIza[0-9A-Za-z_-]{35}`**
|
||||
|
||||
Örneğin bunu Github'da şu şekilde arayın: [https://github.com/search?q=%2FAIza%5B0-9A-Za-z\_-%5D%7B35%7D%2F\&type=code\&ref=advsearch](https://github.com/search?q=%2FAIza%5B0-9A-Za-z_-%5D%7B35%7D%2F&type=code&ref=advsearch)
|
||||
Örneğin Github'da şu aramayla bulun: [https://github.com/search?q=%2FAIza%5B0-9A-Za-z\_-%5D%7B35%7D%2F\&type=code\&ref=advsearch](https://github.com/search?q=%2FAIza%5B0-9A-Za-z_-%5D%7B35%7D%2F&type=code&ref=advsearch)
|
||||
|
||||
### Kaynak GCP projesini kontrol et
|
||||
### Check origin GCP project
|
||||
|
||||
Bu, **bulduğunuz bir API anahtarının hangi GCP projesine ait olduğunu kontrol etmek için son derece faydalıdır.** Farklı seçeneklerimiz var:
|
||||
Bu, bulduğunuz bir API key'in **hangi GCP project'e ait olduğunu** kontrol etmek için son derece kullanışlıdır. Farklı seçeneklerimiz var:
|
||||
|
||||
- İletişim `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key`
|
||||
- Contact `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key>`
|
||||
|
||||
Kısalık adına çıktı kısaltılmıştır, ancak tam çıktıda proje kimliği 5'ten fazla kez görünmektedir.
|
||||
Kısalık için output kısaltıldı, ancak tam output'ta project ID 5 kereden fazla görünür
|
||||
```bash
|
||||
curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=AIzaSyD[...]uE8Y"
|
||||
|
||||
@@ -34,9 +34,9 @@ curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectCo
|
||||
"message": "Identity Toolkit API has not been used in project 943955951114 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=943955951114 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
|
||||
[...]
|
||||
```
|
||||
- İletişim `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key>`
|
||||
- `https://identitytoolkit.googleapis.com/v1/projects?key=<api-key>` ile iletişime geçin
|
||||
|
||||
Kısalık adına çıktı kesildi, ancak tam çıktıda proje kimliği 5'ten fazla kez görünmektedir.
|
||||
Kısalık adına çıktı kırpıldı, ancak tam çıktıda project ID 5 kereden fazla görünür
|
||||
```bash
|
||||
curl -s "https://identitytoolkit.googleapis.com/v1/projects?key=AIzaSyD[...]uE8Y"
|
||||
|
||||
@@ -69,8 +69,99 @@ resource: projects/89123452509
|
||||
service: cloudresourcemanager.googleapis.com
|
||||
reason: AUTH_PERMISSION_DENIED
|
||||
```
|
||||
### Brute Force API uç noktaları
|
||||
### Discovery-document driven API recon
|
||||
|
||||
Proje içinde hangi API'lerin etkin olduğunu bilmediğiniz için, aracı çalıştırmak ilginç olabilir [https://github.com/ozguralp/gmapsapiscanner](https://github.com/ozguralp/gmapsapiscanner) ve **API anahtarı ile neleri erişebileceğinizi kontrol edin.**
|
||||
Geçerli bir anahtarınız olduğunda, sadece bariz public API'leri test etmeyin. Google ortamlarında, **discovery documents** makine tarafından okunabilir bir attack-surface haritası olarak çalışabilir ve **resources, methods, paths, HTTP verbs, parameters, and request/response schemas** bilgilerini açığa çıkarabilir.
|
||||
|
||||
Useful targets:
|
||||
```bash
|
||||
# Public / common path
|
||||
curl -s 'https://serviceusage.googleapis.com/$discovery/rest?key=<api-key>'
|
||||
|
||||
# Hidden docs behind a visibility label
|
||||
curl -s 'https://serviceusage.googleapis.com/$discovery/rest?labels=GOOGLE_INTERNAL&key=<api-key>'
|
||||
```
|
||||
Notlar:
|
||||
|
||||
- `GOOGLE_INTERNAL` gibi etiketlerle ve etiketler olmadan doküman boyutunu ve method sayısını karşılaştırın.
|
||||
- Gerçek bir **nonexistent method** genellikle bir **HTML 404** döner. `Method not found.` içeren bir **JSON 404**, methodun var olduğunu ancak **API key project**’inin gerekli bir visibility label eksik olduğunu gösterebilir.
|
||||
- Bazı first-party APIs’e, public API explorer yerine `*.clients6.google.com` veya undocumented `*-pa.googleapis.com` hostları üzerinden ulaşmak daha kolaydır.
|
||||
|
||||
Bu, özellikle **Internet’e yanlışlıkla açılmış internal/admin APIs**’i enumerate etmek ve JSON alanlarını elle tahmin etmek yerine schema’dan özel fuzzers oluşturmak için çok kullanışlıdır.
|
||||
|
||||
### Key ownership filtering at scale
|
||||
|
||||
APK’lerden, browser traffic’ten, IPA’lardan veya binary’lerden çok sayıda Google API key toplarsanız, hızlıca **hangi project’in hangi key’e sahip olduğunu** ve bunun target company’ye ait olup olmadığını belirlemek isteyebilirsiniz.
|
||||
|
||||
Pratik bir trick, key için **enabled olmayan** bir API’yi bilinçli olarak çağırmaktır. Google çoğu zaman error içinde arka plandaki **project number**’ı sızdırır:
|
||||
```bash
|
||||
curl -s 'https://protos.googleapis.com/$discovery/rest?key=<api-key>'
|
||||
```
|
||||
Şu mesajlara bakın:
|
||||
```text
|
||||
Protos API has not been used in project 244648151629 before or it is disabled
|
||||
```
|
||||
Bu project number daha sonra diğer endpoint’lerle, leak olmuş metadata ile veya internal company-mapping logic ile ilişkilendirilerek **in-scope first-party keys** ile customer / third-party projects ayrıştırılabilir.
|
||||
|
||||
### Bir key’i discard etmeden önce key restrictions’ı handle et
|
||||
|
||||
Restricted bir key her zaman useless değildir. Key’in bulunduğu context’i koruyun ve matching headers ile requests’i replay edin:
|
||||
```bash
|
||||
# Browser restricted
|
||||
curl -H 'X-Goog-Api-Key: <api-key>' \
|
||||
-H 'Referer: https://target.google.com' \
|
||||
'https://servicemanagement.googleapis.com/v1/operations'
|
||||
|
||||
# iOS restricted
|
||||
curl -H 'X-Goog-Api-Key: <api-key>' \
|
||||
-H 'X-Ios-Bundle-Identifier: com.google.GoogleMobile' \
|
||||
'https://servicemanagement.clients6.google.com/v1/operations'
|
||||
|
||||
# Android restricted
|
||||
curl -H 'X-Goog-Api-Key: <api-key>' \
|
||||
-H 'X-Android-Package: com.google.android.settings.intelligence' \
|
||||
-H 'X-Android-Cert: <sha1-signing-cert>' \
|
||||
'https://servicemanagement.clients6.google.com/v1/operations'
|
||||
```
|
||||
Common restriction classes:
|
||||
|
||||
- **HTTP Referer**
|
||||
- **iOS bundle ID** (`X-Ios-Bundle-Identifier`)
|
||||
- **Android package + signing cert** (`X-Android-Package` + `X-Android-Cert`)
|
||||
- **Server IP** restrictions, which generally cannot be bypassed remotely
|
||||
|
||||
### First-party auth / origin whitelist hints
|
||||
|
||||
Some Google web APIs accept a mix of **session cookie + first-party authorization headers** and are hosted on `*.clients6.google.com`. When testing these APIs:
|
||||
|
||||
- `Origin` ve `Referer` değerlerini normalde API’yi kullanan ürünle uyumlu tutun.
|
||||
- `reason: SESSION_COOKIE_INVALID` içeren bir `401`, aslında çerezin kötü olduğu değil, **origin whitelist’te olmadığı** anlamına gelebilir.
|
||||
- Sadece `*.corp.google.com` gibi internal origin’leri kabul eden publicly reachable APIs, broken access control incelemesi için yüksek değerli adaylardır.
|
||||
|
||||
### Brute force enabled APIs and fuzz documented methods
|
||||
|
||||
Projectte hangi APIs’nin enabled olduğunu bilemeyebileceğiniz için, [https://github.com/ozguralp/gmapsapiscanner](https://github.com/ozguralp/gmapsapiscanner) aracını çalıştırıp **API key ile nereye erişebildiğinizi** kontrol etmek ilginç olabilir.
|
||||
|
||||
Ulaşılabilir servisleri belirledikten sonra, kör tahmin yerine **schema-driven fuzzing** tercih edin:
|
||||
|
||||
- İstekleri doğrudan discovery docs’tan üretin
|
||||
- Aynı isteği **bilinen çalışan tüm keys** ile yeniden gönderin
|
||||
- Hataları normalize edin ki **invalid input** ile **visibility-label / auth / restriction** hatalarını ayırt edebilin
|
||||
- Sayısal object identifier’lar için `ID-1`, `ID+1`, `1`, `2`, `100`, `1000` gibi yakın değerleri deneyin
|
||||
- Sadece **cross-user data access** veya başka gerçek bir authorization failure doğrulandığında raporlayın; plain enumeration tek başına genelde yeterli değildir
|
||||
|
||||
### Common vuln pattern: unauthenticated direct-object reference
|
||||
|
||||
Yinelenen bir bug pattern’i, victim-controlled bir identifier (örneğin `gaiaId`) alan ve yalnızca request’in kullanılabilir bir API key taşıdığını doğrulayan, ancak **çağıranın o belirli object’e erişmeye authorized olup olmadığını asla kontrol etmeyen** bir **internal/admin API**’dir.
|
||||
```bash
|
||||
curl 'https://gfibervoice-pa.googleapis.com/v1/BssGetVoiceSettings?gaiaId=<victim_gaia_id>' \
|
||||
-H 'X-Goog-Api-Key: <api-key>'
|
||||
```
|
||||
If the endpoint returns another user's phone number, email address, settings, or other private fields, bunu klasik bir **IDOR / broken access control** sorunu olarak değerlendirin.
|
||||
|
||||
## References
|
||||
|
||||
- [Hacking Google with AI: AI-Assisted Discovery-Document Fuzzing of Google APIs](https://brutecat.com/articles/hacking-google-with-ai)
|
||||
- [Google APIs Explorer](https://developers.google.com/apis-explorer)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user