GCP - Firebase Enum

Support HackTricks

Firebase Realtime Database एक क्लाउड-होस्टेड NoSQL डेटाबेस है जो आपको अपने उपयोगकर्ताओं के बीच डेटा को रीयलटाइम में स्टोर और सिंक करने की अनुमति देता है। Learn more.

Unauthenticated Enum

कुछ Firebase endpoints मोबाइल एप्लिकेशनों में पाए जा सकते हैं। यह संभव है कि उपयोग किया गया Firebase endpoint खराब तरीके से कॉन्फ़िगर किया गया हो जिससे सभी को पढ़ने (और लिखने) की अनुमति मिलती है

यह खराब कॉन्फ़िगर किए गए Firebase डेटाबेस को खोजने और शोषण करने की सामान्य पद्धति है:

  1. APK प्राप्त करें उस ऐप का, आप इस POC के लिए डिवाइस से APK प्राप्त करने के लिए किसी भी टूल का उपयोग कर सकते हैं। आप “APK Extractor” का उपयोग कर सकते हैं https://play.google.com/store/apps/details?id=com.ext.ui&hl=e

  2. APK को डिकंपाइल करें apktool का उपयोग करके, APK से स्रोत कोड निकालने के लिए नीचे दिए गए कमांड का पालन करें।

  3. res/values/strings.xml पर जाएं और इस पर नज़र डालें और “firebase” कीवर्ड के लिए खोजें

  4. आपको इस URL जैसा कुछ मिल सकता है “https://xyz.firebaseio.com/”।

  5. अगला, ब्राउज़र पर जाएं और पाई गई URL पर नेविगेट करें: https://xyz.firebaseio.com/.json

  6. 2 प्रकार की प्रतिक्रियाएँ प्रकट हो सकती हैं:

  7. Permission Denied”: इसका मतलब है कि आप इसे एक्सेस नहीं कर सकते, इसलिए यह अच्छी तरह से कॉन्फ़िगर किया गया है।

  8. null” प्रतिक्रिया या JSON डेटा का एक गुच्छा: इसका मतलब है कि डेटाबेस सार्वजनिक है और आपके पास कम से कम पढ़ने की अनुमति है।

  9. इस मामले में, आप लिखने की अनुमतियों की जांच कर सकते हैं, लिखने की अनुमतियों का परीक्षण करने के लिए एक शोषण यहाँ पाया जा सकता है: https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit

दिलचस्प नोट: जब MobSF के साथ एक मोबाइल एप्लिकेशन का विश्लेषण करते समय, यदि यह एक firebase डेटाबेस पाता है तो यह जांच करेगा कि क्या यह सार्वजनिक रूप से उपलब्ध है और इसे सूचित करेगा।

वैकल्पिक रूप से, आप Firebase Scanner का उपयोग कर सकते हैं, एक पायथन स्क्रिप्ट जो ऊपर दिए गए कार्य को स्वचालित करती है जैसा कि नीचे दिखाया गया है:

python FirebaseScanner.py -f <commaSeperatedFirebaseProjectNames>

Authenticated Enum

यदि आपके पास Firebase डेटाबेस तक पहुँचने के लिए क्रेडेंशियल्स हैं, तो आप संग्रहीत जानकारी तक अधिक आसानी से पहुँचने के लिए Baserunner जैसे टूल का उपयोग कर सकते हैं। या निम्नलिखित की तरह एक स्क्रिप्ट:

#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())

To test other actions on the database, such as writing to the database, refer to the Pyrebase documentation which can be found here.

Access info with APPID and API Key

यदि आप iOS एप्लिकेशन को डिकंपाइल करते हैं और फ़ाइल GoogleService-Info.plist खोलते हैं और आपको API Key और APP ID मिलती है:

  • API KEY AIzaSyAs1[...]

  • APP ID 1:612345678909:ios:c212345678909876

आप कुछ दिलचस्प जानकारी तक पहुँच सकते हैं

Request

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

References

Support HackTricks

Last updated