# GCP - Firebase Enum

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

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

Firebase Realtime Databaseは、ユーザー間でデータをリアルタイムで保存および同期できるクラウドホストのNoSQLデータベースです。[詳細はこちら](https://firebase.google.com/products/realtime-database/)。

### 認証なしの列挙

一部の**Firebaseエンドポイント**は**モバイルアプリケーション**に存在する可能性があります。使用されているFirebaseエンドポイントが**不適切に構成されており、すべての人に読み取り（および書き込み）の権限を付与している**可能性があります。

これは、不適切に構成されたFirebaseデータベースを検索して悪用する一般的な方法論です：

1. **APKを取得**します。POCのためにデバイスからAPKを取得するために任意のツールを使用できます。\
「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. **apktool**を使用してAPKを**逆コンパイル**します。以下のコマンドに従ってAPKからソースコードを抽出します。
3. _**res/values/strings.xml**_に移動し、これを探して“**firebase**”キーワードを**検索**します。
4. “_**https://xyz.firebaseio.com/**_”のようなURLが見つかるかもしれません。
5. 次に、ブラウザに移動し、見つけたURLに**移動**します：_https://xyz.firebaseio.com/.json_
6. 2種類の応答が表示される可能性があります：
   1. “**Permission Denied**”：これはアクセスできないことを意味し、適切に構成されています。
   2. “**null**”応答または一連の**JSONデータ**：これはデータベースが公開されており、少なくとも読み取りアクセスがあることを意味します。
      1. この場合、**書き込み権限を確認**できます。書き込み権限をテストするためのエクスプロイトはここにあります：[https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit](https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit)

**興味深い注記**：**MobSF**を使用してモバイルアプリケーションを分析する際、Firebaseデータベースが見つかると、それが**公開されているかどうか**を確認し、通知します。

また、[Firebase Scanner](https://github.com/shivsahni/FireBaseScanner)を使用することもできます。これは、上記のタスクを自動化するPythonスクリプトです。
```bash
python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>
```
### Authenticated Enum

Firebaseデータベースにアクセスするための資格情報がある場合、[**Baserunner**](https://github.com/iosiro/baserunner)のようなツールを使用して、保存された情報により簡単にアクセスできます。または、次のようなスクリプトを使用できます：
```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())
```
他のアクションをデータベースでテストするには、データベースへの書き込みなど、Pyrebase4のドキュメントを参照してください。ドキュメントは[こちら](https://github.com/nhorvath/Pyrebase4)で見つけることができます。

### APPIDとAPIキーで情報にアクセスする <a href="#access-info-with-appid-and-api-key" id="access-info-with-appid-and-api-key"></a>

iOSアプリケーションをデコンパイルし、`GoogleService-Info.plist`ファイルを開くと、APIキーとAPP IDが見つかります：

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

いくつかの興味深い情報にアクセスできるかもしれません。

**リクエスト**

`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"}'`

## 参考文献 <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}}
