# GCP - Firebase Enum

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

## [Firebase](https://cloud.google.com/sdk/gcloud/reference/firebase/)

Firebase Realtime Database je NoSQL baza podataka koja se hostuje u oblaku i omogućava vam da skladištite i sinhronizujete podatke između vaših korisnika u realnom vremenu. [Saznajte više](https://firebase.google.com/products/realtime-database/).

### Neautentifikovana Enum

Neki **Firebase endpointi** mogu se naći u **mobilnim aplikacijama**. Moguće je da je Firebase endpoint koji se koristi **loše konfigurisan, dajući svima privilegije za čitanje (i pisanje)** na njemu.

Ovo je uobičajena metodologija za pretragu i eksploataciju loše konfigurisanih Firebase baza podataka:

1. **Preuzmite APK** aplikacije, možete koristiti bilo koji alat za preuzimanje APK-a sa uređaja za ovu POC.\
Možete koristiti “APK Extractor” [https://play.google.com/store/apps/details?id=com.ext.ui\&hl=e](https://hackerone.com/redirect?signature=3774f35d1b5ea8a4fd209d80084daa9f5887b105&url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.ext.ui%26hl%3Den)
2. **Dekompajlirajte** APK koristeći **apktool**, pratite sledeću komandu da biste izvukli izvorni kod iz APK-a.
3. Idite na _**res/values/strings.xml**_ i potražite ovo i **pretražujte** ključnu reč “**firebase**”
4. Možda ćete pronaći nešto poput ove URL adrese “_**https://xyz.firebaseio.com/**_”
5. Zatim, idite na pregledač i **navigirajte do pronađene URL adrese**: _https://xyz.firebaseio.com/.json_
6. Mogu se pojaviti 2 tipa odgovora:
   1. “**Permission Denied**”: To znači da ne možete pristupiti, tako da je dobro konfigurisan
   2. “**null**” odgovor ili gomila **JSON podataka**: To znači da je baza podataka javna i da imate barem pristup za čitanje.
      1. U ovom slučaju, mogli biste **proveriti privilegije za pisanje**, eksploatacija za testiranje privilegija za pisanje može se naći ovde: [https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit](https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit)

**Zanimljiva napomena**: Kada analizirate mobilnu aplikaciju sa **MobSF**, ako pronađe firebase bazu podataka, proveriće da li je **javna** i obavestiće vas o tome.

Alternativno, možete koristiti [Firebase Scanner](https://github.com/shivsahni/FireBaseScanner), python skriptu koja automatizuje gornji zadatak kao što je prikazano u nastavku:
```bash
python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>
```
### Autentifikovana enumeracija

Ako imate akreditive za pristup Firebase bazi podataka, možete koristiti alat kao što je [**Baserunner**](https://github.com/iosiro/baserunner) da lakše pristupite pohranjenim informacijama. Ili skriptu poput sledeće:
```python
#Taken from https://blog.assetnote.io/bug-bounty/2020/02/01/expanding-attack-surface-react-native/
#Install pyrebase: pip install pyrebase4
import pyrebase

config = {
"apiKey": "FIREBASE_API_KEY",
"authDomain": "FIREBASE_AUTH_DOMAIN_ID.firebaseapp.com",
"databaseURL": "https://FIREBASE_AUTH_DOMAIN_ID.firebaseio.com",
"storageBucket": "FIREBASE_AUTH_DOMAIN_ID.appspot.com",
}

firebase = pyrebase.initialize_app(config)

db = firebase.database()

print(db.get())
```
Da biste testirali druge akcije na bazi podataka, kao što je pisanje u bazu podataka, pogledajte Pyrebase4 dokumentaciju koja se može naći [ovde](https://github.com/nhorvath/Pyrebase4).

### Informacije o pristupu sa APPID i API ključem <a href="#access-info-with-appid-and-api-key" id="access-info-with-appid-and-api-key"></a>

Ako dekompajlirate iOS aplikaciju i otvorite datoteku `GoogleService-Info.plist` i pronađete API ključ i APP ID:

- API KLJUČ **AIzaSyAs1\[...]**
- APP ID **1:612345678909:ios:c212345678909876**

Možda ćete moći da pristupite nekim zanimljivim informacijama

**Zahtev**

`curl -v -X POST "https://firebaseremoteconfig.googleapis.com/v1/projects/612345678909/namespaces/firebase:fetch?key=AIzaSyAs1[...]" -H "Content-Type: application/json" --data '{"appId": "1:612345678909:ios:c212345678909876", "appInstanceId": "PROD"}'`

## Reference <a href="#references" id="references"></a>

- ​[https://blog.securitybreached.org/2020/02/04/exploiting-insecure-firebase-database-bugbounty/](https://blog.securitybreached.org/2020/02/04/exploiting-insecure-firebase-database-bugbounty/)​
- ​[https://medium.com/@danangtriatmaja/firebase-database-takover-b7929bbb62e1](https://medium.com/@danangtriatmaja/firebase-database-takover-b7929bbb62e1)​

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