API Recon (Detaylı Anlatım ve Uygulama Teknikleri)
API Recon (veya API Discovery), bir hedef organizasyonun kullandığı veya maruz bıraktığı API endpoint'lerini, versiyonlarını, dokümantasyonlarını ve potansiyel zafiyetli uç noktalarını tespit etme sürecidir. Modern web uygulamalarının %90'ı API tabanlı çalıştığı için, bug bounty ve pentest'lerin en kritik aşamalarından biridir.API Türleri (Güncel):
| API Türü | Açıklama | Örnek |
|---|---|---|
| REST API | En yaygın, HTTP metotları (GET, POST, PUT, DELETE) | /api/v1/users |
| GraphQL | Tek endpoint, sorgu tabanlı | /graphql, /api/graphql |
| gRPC | Google RPC, protobuf tabanlı | :50051 |
| SOAP | XML tabanlı (eski) | /soap, /webservice |
| WebSocket | Gerçek zamanlı | ws://, wss:// |
| RPC | Uzaktan prosedür çağrısı | /jsonrpc, /xmlrpc |
API Keşif Yöntemleri:
1. Path/Endpoint Fuzzing
bash# REST API endpoint'leri
ffuf -u https://hedef.com/api/FUZZ -w api_paths.txt -fs 0
# Versiyonlu API'ler
ffuf -u https://hedef.com/api/v1/FUZZ -w api_paths.txt -fs 0
ffuf -u https://hedef.com/api/v2/FUZZ -w api_paths.txt -fs 0
ffuf -u https://hedef.com/api/v3/FUZZ -w api_paths.txt -fs 0
# GraphQL
ffuf -u https://hedef.com/FUZZ -w graphql_paths.txt -fs 0
Yaygın API Path'leri:
text
/api
/api/v1
/api/v2
/api/v3
/rest
/rest/v1
/rest/v2
/graphql
/gql
/query
/rpc
/soap
/webservice
/ws
/jsonrpc
/xmlrpc
2. JavaScript Dosyaları
bash# JavaScript'ten API URL'leri çıkar
cat js_files.txt | grep -E '"/api/|/v1/|/graphql|/rest/|\.json|\.xml' | sort -u
# API base URL'leri
cat js_files.txt | grep -E 'baseURL|BASE_URL|apiUrl|API_URL' | cut -d '"' -f2
3. Wayback Machine
bash# Tarihsel API endpoint'leri
waybackurls hedef.com | grep -E '/api|/v1|/v2|/rest|/graphql' | sort -u
gau hedef.com | grep -E '/api|/v1|/v2|/rest|/graphql' | sort -u
4. Mobile Apps (Android/iOS)
bash# APK'dan API URL'leri çıkar
apktool d app.apk
grep -r "api\.hedef\.com" app/
strings app.apk | grep -E 'https?://[a-zA-Z0-9.-]+'
# iOS IPA
strings app.ipa | grep -E 'https?://[a-zA-Z0-9.-]+'
5. Documentation (Swagger/OpenAPI)
bash# Swagger endpoint'leri
ffuf -u https://hedef.com/FUZZ -w swagger_paths.txt -fs 0
# OpenAPI
curl -s https://hedef.com/swagger/v1/swagger.json
curl -s https://hedef.com/api/docs
curl -s https://hedef.com/api/swagger
curl -s https://hedef.com/swagger-ui
Yaygın Dokümantasyon Path'leri:
text
/swagger
/swagger-ui
/swagger-ui.html
/swagger/v1/swagger.json
/swagger/v2/swagger.json
/api-docs
/api-docs/swagger.json
/apidocs
/openapi
/openapi.json
/redoc
/rapidoc
/docs
/documentation
6. GitHub Dorking
textorg:"hedef" api
org:"hedef" swagger
org:"hedef" openapi
org:"hedef" baseURL
org:"hedef" API_KEY
org:"hedef" endpoint
"https://api.hedef.com"
7. API Headers
bash# API header'larını tespit et
curl -sI https://hedef.com | grep -i 'api\|x-api\|x-request'
API Keşif Araçları:
1. Kiterunner (Assetnote)
Açıklama: API endpoint keşfi için özel olarak tasarlanmış fuzzing aracı.Kurulum:
bash
go install github.com/assetnote/kiterunner@latest
Kullanım:
bash
# Tüm wordlist'leri listele
kr list
# API endpoint keşfi
kr brute -u https://hedef.com -w /usr/share/kiterunner/route-large.txt
# JSON çıktı
kr brute -u https://hedef.com -w routes-small.txt -j -o results.json
# Bulk işlem
cat urls.txt | kr brute -w routes-small.txt -j -o results.json
2. APKurlGrep
Açıklama: APK dosyalarından URL ve API endpoint'leri çıkarma.bash
git clone https://github.com/ndelphit/apkurlgrep
cd apkurlgrep
python apkurlgrep.py -f app.apk
3. GraphQL Introspection
Açıklama: GraphQL endpoint'lerinden şema bilgisi çekme.graphql
query {
__schema {
types {
name
fields {
name
type {
name
}
}
}
}
}
bash
# GraphQL endpoint'leri test et
curl -s -X POST -H "Content-Type: application/json" \
-d '{"query":"query{__schema{types{name}}}"}' \
https://hedef.com/graphql
4. Arjun (API Parametreleri)
Açıklama: API parametre fuzzing.bash
# API parametreleri bul
arjun -u https://hedef.com/api/users -m GET
# JSON body ile
arjun -u https://hedef.com/api/users -m POST --data '{"FUZZ":"test"}'
API Versiyon Keşfi:
bash# Versiyon kontrolü
for v in {1..10}; do
curl -s -o /dev/null -w "%{http_code} /api/v$v\n" https://hedef.com/api/v$v
done
# Eski versiyonlar (unutulmuş)
curl -s https://hedef.com/api/v1/users
curl -s https://hedef.com/api/v2/users
curl -s https://hedef.com/api/v3/users
API Authentication Keşfi:
| Auth Type | Headers/Patterns |
|---|---|
| Bearer Token | Authorization: Bearer {token} |
| API Key | X-API-Key: {key}, api_key={key} |
| JWT | Authorization: Bearer eyJ... |
| Basic Auth | Authorization: Basic {base64} |
| OAuth | Authorization: OAuth {token} |
| Custom Header | X-Auth-Token, X-Session-ID |
# Auth header'larını tespit et
curl -sI https://hedef.com/api/users | grep -i 'authorization\|x-api\|x-auth'
API Recon Pipeline:
bash#!/bin/bash
# API Recon Pipeline
DOMAIN=$1
OUTPUT_DIR="api_recon_$DOMAIN"
mkdir -p $OUTPUT_DIR
echo "[1] API Endpoint Discovery"
# Path fuzzing
kr brute -u https://$DOMAIN -w routes-large.txt -o $OUTPUT_DIR/kiterunner.json
# Wayback Machine
waybackurls $DOMAIN | grep -E '/api|/v[0-9]|/graphql|/rest' > $OUTPUT_DIR/wayback_api.txt
gau $DOMAIN | grep -E '/api|/v[0-9]|/graphql|/rest' >> $OUTPUT_DIR/wayback_api.txt
# JavaScript'ten
cat js_files.txt | grep -E '"/api/|/v[0-9]/|/graphql|/rest"' > $OUTPUT_DIR/js_api.txt
echo "[2] API Documentation Discovery"
# Swagger/OpenAPI
for path in swagger swagger-ui api-docs openapi; do
curl -s "https://$DOMAIN/$path" -o /dev/null -w "%{http_code} $path\n"
done > $OUTPUT_DIR/docs_status.txt
echo "[3] API Version Discovery"
for v in {1..10}; do
curl -s "https://$DOMAIN/api/v$v/users" -o /dev/null -w "%{http_code} v$v\n"
done > $OUTPUT_DIR/version_status.txt
echo "[4] GraphQL Discovery"
curl -s -X POST "https://$DOMAIN/graphql" \
-H "Content-Type: application/json" \
-d '{"query":"query{__schema{types{name}}}"}' \
-o $OUTPUT_DIR/graphql_schema.txt
echo "[5] Result"
cat $OUTPUT_DIR/*.txt > $OUTPUT_DIR/all_api_endpoints.txt
sort -u $OUTPUT_DIR/all_api_endpoints.txt
API Recon Kontrol Listesi:
A. Endpoint Keşfi:
- Path fuzzing yapıldı mı?
- JavaScript dosyaları analiz edildi mi?
- Wayback Machine kontrolü yapıldı mı?
- Mobile uygulamalar analiz edildi mi?
B. Dokümantasyon:
- Swagger/OpenAPI bulundu mu?
- API dökümanları bulundu mu?
- GraphQL introspection yapıldı mı?
C. Versiyonlar:
- Farklı API versiyonları bulundu mu?
- Eski/unutulmuş versiyonlar bulundu mu?
D. Authentication:
- API auth mekanizması tespit edildi mi?
- Auth header'ları bulundu mu?
- API key pattern'leri bulundu mu?
Güncel API Recon İpuçları (2026):
- GraphQL: Introspection genellikle kapalı ama bazen açık kalır → test et!
- gRPC: :50051 portu, protobuf dosyaları (.proto) ara
- WebSocket: ws://, wss:// endpoint'leri test et
- API Gateways: AWS API Gateway, Kong, Tyk → ek zafiyet yüzeyi
- Internal APIs: internal-api.hedef.com, admin-api.hedef.com → DNS'ten bul
- Serverless: AWS Lambda, Azure Functions, GCP Cloud Functions → bucket benzeri yapılar
- Kubernetes: /api/v1/namespaces, /api/v1/pods → internal API'ler
🔒 Bu içeriği görmek için giriş yapın