GCP - Firebase Enum

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Baza danych Firebase Realtime to hostowana w chmurze baza danych NoSQL, która umożliwia przechowywanie i synchronizację danych między użytkownikami w czasie rzeczywistym. Dowiedz się więcej.

Enumeracja bez uwierzytelnienia

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

Oto powszechna metodyka wyszukiwania i wykorzystywania źle skonfigurowanych baz danych Firebase:

  1. Pobierz plik APK aplikacji, możesz użyć dowolnego narzędzia do pobrania pliku APK z urządzenia w celu przeprowadzenia POC. Możesz użyć "APK Extractor" https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. Dekompiluj plik APK za pomocą apktool, postępuj zgodnie z poniższym poleceniem, aby wyodrębnić kod źródłowy z pliku APK.

  3. Przejdź do res/values/strings.xml i wyszukaj to i wyszukaj słowo kluczowe "firebase"

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

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

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

  7. "Permission Denied": Oznacza to, że nie masz do niego dostępu, więc jest to poprawnie skonfigurowane.

  8. Odpowiedź "null" lub wiele danych JSON: Oznacza to, że baza danych jest publiczna, a przynajmniej masz dostęp do odczytu.

  9. W tym 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 ona publicznie dostępna i powiadomi o tym.

Alternatywnie, można użyć Firebase Scanner, skryptu napisanego w języku Python, który automatyzuje powyższe zadanie, jak pokazano poniżej:

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

Wyliczanie z uwierzytelnieniem

Jeśli masz poświadczenia 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 podobnego do poniższego:

#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 zapisywanie do bazy danych, należy odwołać się do dokumentacji Pyrebase, która znajduje się tutaj.

Dostęp do informacji za pomocą APPID i klucza API

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

  • KLUCZ API AIzaSyAs1[...]

  • ID APLIKACJI 1:612345678909:ios:c212345678909876

Możesz uzyskać dostęp do niektórych 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"}'

Odwołania

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated