GCP - Firebase Enum
Reading time: 4 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Firebase
Firebase Realtime Database는 사용자가 실시간으로 데이터를 저장하고 동기화할 수 있도록 해주는 클라우드 호스팅 NoSQL 데이터베이스입니다. 자세히 알아보기.
인증되지 않은 열거
일부 Firebase 엔드포인트는 모바일 애플리케이션에서 발견될 수 있습니다. 사용된 Firebase 엔드포인트가 잘못 구성되어 모든 사용자에게 읽기(및 쓰기) 권한을 부여할 가능성이 있습니다.
잘못 구성된 Firebase 데이터베이스를 검색하고 악용하는 일반적인 방법론은 다음과 같습니다:
- APK를 가져옵니다. 이 POC를 위해 장치에서 APK를 가져오는 도구를 사용할 수 있습니다.
“APK Extractor”를 사용할 수 있습니다. https://play.google.com/store/apps/details?id=com.ext.ui&hl=e - apktool을 사용하여 APK를 디컴파일합니다. 아래 명령어를 따라 APK에서 소스 코드를 추출합니다.
- _res/values/strings.xml_로 이동하여 “firebase” 키워드를 검색합니다.
- “https://xyz.firebaseio.com/”와 같은 URL을 찾을 수 있습니다.
- 다음으로, 브라우저로 가서 발견된 URL로 이동합니다: https://xyz.firebaseio.com/.json
- 2가지 유형의 응답이 나타날 수 있습니다:
- “Permission Denied”: 이는 접근할 수 없음을 의미하므로 잘 구성된 것입니다.
- “null” 응답 또는 많은 JSON 데이터: 이는 데이터베이스가 공개적이며 최소한 읽기 권한이 있음을 의미합니다.
- 이 경우, 쓰기 권한을 확인할 수 있습니다. 쓰기 권한을 테스트하는 악용 방법은 여기에서 찾을 수 있습니다: 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/
#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 문서를 참조하십시오.
APPID 및 API 키로 정보 접근
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"}'
참고 문헌
- https://blog.securitybreached.org/2020/02/04/exploiting-insecure-firebase-database-bugbounty/
- https://medium.com/@danangtriatmaja/firebase-database-takover-b7929bbb62e1
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.