GCP - Firebase Enum

Support HackTricks

Firebase Realtime Database to hostowana w chmurze baza danych NoSQL, która pozwala na przechowywanie i synchronizowanie danych między użytkownikami w czasie rzeczywistym. Dowiedz się więcej.

Unauthenticated Enum

Niektóre punkty końcowe Firebase mogą być znalezione w aplikacjach mobilnych. Istnieje możliwość, że używany punkt końcowy Firebase jest źle skonfigurowany, przyznając wszystkim uprawnienia do odczytu (i zapisu).

To jest powszechna metodologia do wyszukiwania i wykorzystywania źle skonfigurowanych baz danych Firebase:

  1. Pobierz APK aplikacji, możesz użyć dowolnego narzędzia, aby uzyskać APK z urządzenia dla tego POC. Możesz użyć “APK Extractor” https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. Dezkompiluj APK używając apktool, wykonaj poniższe polecenie, aby wyodrębnić kod źródłowy z APK.

  3. Przejdź do res/values/strings.xml i poszukaj tego oraz wyszukaj słowo kluczowe “firebase

  4. Możesz znaleźć coś takiego jak ten URL “https://xyz.firebaseio.com/

  5. Następnie przejdź do przeglądarki i nawiguj do znalezionego URL: https://xyz.firebaseio.com/.json

  6. Mogą pojawić się 2 typy odpowiedzi:

  7. Permission Denied”: To oznacza, że nie masz dostępu, więc jest dobrze skonfigurowane

  8. Odpowiedź “null” lub mnóstwo danych JSON: To oznacza, że baza danych jest publiczna i masz przynajmniej dostęp do odczytu.

  9. W takim przypadku możesz sprawdzić uprawnienia do zapisu, exploit do testowania uprawnień do zapisu można znaleźć tutaj: https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit

Ciekawa uwaga: Podczas analizy aplikacji mobilnej za pomocą MobSF, jeśli znajdzie bazę danych firebase, sprawdzi, czy jest publicznie dostępna i powiadomi o tym.

Alternatywnie, możesz użyć Firebase Scanner, skryptu w Pythonie, który automatyzuje powyższe zadanie, jak pokazano poniżej:

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

Authenticated Enum

Jeśli masz dane uwierzytelniające do uzyskania dostępu do bazy danych Firebase, możesz użyć narzędzia takiego jak Baserunner, aby łatwiej uzyskać dostęp do przechowywanych informacji. Lub skryptu takiego jak poniższy:

#Taken from https://blog.assetnote.io/bug-bounty/2020/02/01/expanding-attack-surface-react-native/
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())

Aby przetestować inne działania na bazie danych, takie jak zapis do bazy danych, zapoznaj się z dokumentacją Pyrebase, którą można znaleźć tutaj.

Informacje dostępu z APPID i kluczem API

Jeśli zdekompilujesz aplikację iOS i otworzysz plik GoogleService-Info.plist, znajdziesz klucz API i identyfikator APP:

  • KLUCZ API AIzaSyAs1[...]

  • IDENTYFIKATOR APP 1:612345678909:ios:c212345678909876

Możesz uzyskać dostęp do interesujących informacji

Żądanie

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

Odniesienia

Wsparcie HackTricks

Last updated