GCPBucketBrute
Sebuah skrip untuk menghitung keranjang Penyimpanan Google, menentukan akses apa yang Anda miliki ke keranjang tersebut, dan menentukan apakah hak istimewanya dapat ditingkatkan.
- Skrip ini (opsional) menerima kredensial akun pengguna/layanan GCP dan kata kunci.
- Kemudian, daftar permutasi akan dihasilkan dari kata kunci tersebut yang kemudian akan digunakan untuk memindai keberadaan bucket Penyimpanan Google dengan nama tersebut.
- Jika kredensial diberikan, sebagian besar enumerasi akan tetap dilakukan saat tidak diautentikasi, namun untuk setiap bucket yang ditemukan melalui enumerasi yang tidak diautentikasi, ia akan mencoba menghitung izin bucket menggunakan API TestIamPermissions dengan kredensial yang diberikan. Ini akan membantu menemukan keranjang yang dapat diakses saat diautentikasi, namun tidak dapat diakses saat tidak diautentikasi.
- Terlepas apakah kredensial diberikan atau tidak, skrip kemudian akan mencoba menghitung izin bucket menggunakan API TestIamPermissions saat tidak diautentikasi. Artinya, jika Anda tidak memasukkan kredensial, Anda hanya akan diperlihatkan hak istimewa yang dimiliki pengguna yang tidak diautentikasi, namun jika Anda memasukkan kredensial, Anda akan melihat akses apa yang dimiliki pengguna yang diautentikasi dibandingkan dengan pengguna yang tidak diautentikasi.
- PERINGATAN: Jika kredensial diberikan, nama pengguna Anda dapat diungkapkan dalam log akses setiap keranjang yang Anda temukan.
TL;DR Ringkasan
- Dengan adanya kata kunci, skrip ini menghitung keranjang Penyimpanan Google berdasarkan sejumlah permutasi yang dihasilkan dari kata kunci tersebut.
- Kemudian, setiap keranjang yang ditemukan akan dikeluarkan.
- Kemudian, izin apa pun yang Anda berikan (jika ada) ke keranjang yang ditemukan akan ditampilkan.
- Kemudian skrip akan memeriksa hak istimewa tersebut untuk peningkatan hak istimewa (storage.buckets.setIamPolicy) dan akan menampilkan apa pun yang menarik (seperti dapat dicantumkan secara publik, dapat ditulis secara publik, dapat dicantumkan yang diautentikasi, eskalasi hak istimewa, dll).
Persyaratan
- Linux/OS X
- Windows hanya berfungsi untuk pemindaian yang tidak diautentikasi. Ada yang salah dengan cara skrip menggunakan modul subproses sehingga gagal saat menggunakan klien Google yang diautentikasi.
- Python3
- pip3
Instalasi
-
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
atau python3 -m pip install -r requirements.txt
Penggunaan
Pertama, tentukan jenis autentikasi yang ingin Anda gunakan untuk enumerasi antara akun pengguna, akun layanan, atau tidak diautentikasi. Jika Anda menggunakan akun layanan, berikan jalur file ke kunci pribadi melalui argumen -f
/ --service-account-credential-file-path
. Jika Anda menggunakan akun pengguna, jangan berikan argumen autentikasi. Anda kemudian akan diminta memasukkan token akses akun pengguna Anda untuk mengakses API GCP. Jika Anda ingin memindai sepenuhnya tanpa autentikasi, berikan argumen -u
/ --unauthenticated
untuk menyembunyikan perintah autentikasi.
- Pindai keranjang menggunakan kata kunci "test" saat tidak diautentikasi sama sekali:
python3 gcpbucketbrute.py -k test -u
- Pindai bucket menggunakan kata kunci "test" saat mengautentikasi dengan akun layanan (kunci pribadi disimpan di ../sa-priv-key.pem), menghasilkan hasil ke out.txt di direktori saat ini:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Pindai bucket menggunakan kata kunci "test", menggunakan token akses akun pengguna, berjalan dengan 10 subproses, bukan 5:
python3 gcpbucketbrute.py -k test -s 10
Argumen yang Tersedia
-
-k
/ --keyword
- Argumen ini digunakan untuk menentukan kata kunci apa yang akan digunakan untuk menghasilkan permutasi. Permutasi itulah yang akan dicari di Penyimpanan Google.
-
--check
- Argumen ini saling eksklusif dengan
-k
/ --keyword
dan menerima satu string. Ini memungkinkan Anda memeriksa izin pada keranjang tertentu, daripada membuat daftar permutasi berdasarkan kata kunci. Hal ini dapat diulangi untuk memeriksa beberapa ember. Kredit: @BBerastegui
-
--check-list
- Argumen ini saling eksklusif dengan
-k
/ --keyword
dan --check
. Ini memungkinkan Anda untuk memeriksa izin daftar keranjang dalam sebuah file. Mereka harus dicantumkan satu per baris dalam file teks. Untuk membaca dari input standar, berikan -
sebagai nama file.
-
-s
/ --subprocesses
- Argumen ini menentukan berapa banyak subproses yang akan digunakan untuk enumerasi bucket. Standarnya adalah 5 dan semakin tinggi Anda menetapkan nilai ini, semakin cepat penghitungannya, namun permintaan per detik Anda ke Google akan meningkat. Ini pada dasarnya adalah thread, tetapi skrip menggunakan subproses alih-alih thread untuk eksekusi paralel.
-
-f
/ --service-account-credential-file-path
- Argumen ini adalah tempat Anda menentukan jalur ke file kunci pribadi akun layanan GCP yang ingin Anda gunakan untuk mengautentikasi ke Google Storage. Ini opsional. Jika Anda ingin menggunakan token akses, hilangkan argumen ini dan Anda akan diminta memasukkan token tersebut sehingga tidak disimpan ke riwayat baris perintah Anda. Informasi lebih lanjut di sini: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files dan di sini: https://google-auth.readthedocs.io/ en/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- Argumen ini memaksa pencacahan yang tidak diautentikasi. Dengan tanda ini, Anda tidak akan dimintai kredensial dan bucket yang valid tidak akan diperiksa untuk izin yang diautentikasi.
-
-o
/ --out-file
- Argumen ini memungkinkan Anda menentukan jalur file (relatif atau absolut) ke file log untuk menampilkan hasilnya. File akan dibuat jika belum ada dan akan ditambahkan jika sudah ada.
-
-w
/ --wordlist
- Argumen ini memungkinkan Anda menentukan file input daftar kata.