Broken Access Control
Songül Kızılay
Erişim Kontrolü nedir ?
Erişim kontrolü, bir kişinin belirli bir konuma veya dosyaya uygun erişime sahip olarak erişebileceği bir yetkilendirme anlamına gelir. Herhangi bir kişi bu konuma veya dosyaya uygun yetkilendirme olmadan erişirse, bu yetkisiz erişimdir. Bu politikanın başarısızlığı, bilgilerin yetkisiz ifşasına, verilerin manipülasyonuna yol açacaktır. Saldırgan, kullanıcı veya yönetici olarak hareket eder ve kayıt oluşturma, güncelleme, erişim veya silme gibi ayrıcalıklı işlevleri kullanmaya başlar.
Broken Access Control
Kimliği doğrulanmış kullanıcıların yapmasına izin verilen kısıtlamalar düzgün bir şekilde uygulanmaz . Saldırganlar diğer kullanıcıların hesaplarına erişmek, hassas dosyaları görüntülemek , diğer kullanıcıların verilerini değiştirmek gibi yetkisiz işlemleri verilere erişmek için kusurlarından yararlanabilir
Güvenlik Açığı Tespiti
Oturum açık durumdayken web sitesine göz atalım ve ziyaret edilen sayfaları kaydedelim , daha sonra çıkış yapıp aynı sayfalara tekrar tıkladığınızda yanlızca oturum açmış kullanıcılar için açık olması gereken sayfalar yeniden açılıyorsa ,içerik gösteriliyorsa web sitesi savunmasızdır
Güvenlik Açığı Önleme
- Erişim kontrolü için yalnızca sunucu tarafı kodunu (veya sunucusuz API) kullanın
- Web sunucusu dizin listesini devre dışı bırakın ve dosya meta verilerinin ve yedekleme dosyalarının web dizinlerinde bulunmadığından emin olun.
- Uygulama genelinde erişim kontrollerini yeniden kullanın
- CORS kullanımını en aza indirin.
- Otomatik saldırılardan kaynaklanan zararı en aza indirmek için hız sınırlayıcı API ler ve denetleyiciler
- İşlevsel erişim kontrolü için birim ve entegrasyon testleri
Örnek Saldırı Senaryoları
1 Saldırgan istenen sonucu elde etmek için URL deki id parametresini değiştirir . Doğru şekilde yazılmadıysa saldırgan herhangi bir kullancının hesabına erişebilir
2. Bazı bağlantıları açmaya zorlamak Bunlar açılırsa saldırgan yönetici sayfasına erişebilir
3. sadece get isteğiyle kullanıcı tarafından resim yüklenen bir sayfa düşünün
http://example.com/show.php?name?=”image.jpg”
eğer yol kısıtlanmamışsa bunada izin verir
http://example.com/show.php?=”../../etc/passwd ”
4. uygulama hesap bilgilerine erişen sql isteğine doğrulanmamış veriler kullanıyorsa
pstmt.setString(1, request.getParameter(“acct”));
ResultSet results = pstmt.executeQuery();
saldırgan acct isteğine istedği hesap numarasını göndermek için tarayıcıdaki parametreyi değiştirir
cve listesi burada
PortSwigger Access Control Writeup
LAB 1 Unprotected admin functionality
Laba erişelim
robots.txt ye bakalım
admin panelin yeri gösterilmiş admin panele gidelim
kullanıcılar gösterilmiş carlos kullanıcısını silelim ve 1. labı bitirelim
LAB 2 Unprotected admin functionality with unpredictable URL
Lab erişelim
açıkcası aklıma ilk gelen robots.txt dosyasına bakmaktı ama buı kez işe yaramadı . Sayfanın kaynak kodlarına bakalım
pek javascript bilmesemde parametreleri teker teker araştırarak ne yaptğını anlayabiliriz
getAttribute( )
bağlantının href
özniteliğinin değerini toplamak ve onu istenen bir değişkene yerleştirmek için kullanabilir
setAttribute( )
yöntemi kullanarak yeni nitelik değerleri ekleyebilir veya mevcut olanları değiştirebilirsiniz .
yani burda adminPanelTag a /admin-2e4wif bağlantısı atanmış
verdiği adrese giderek carlosu silelim ve bu labı bitirelim
Lab 3 User role controlled by request parameter
Labaratuara erişelim
bize verilen bilgiler ile giriş yapalım
giriş yaparken burp suite ile isteği yakalayalım
kullanıcı bilgileri ile giriş yaptığımız zaman cookie de Admin adında bir değer tutulmakta ve bu değer false durumda . isteği repertera gönderip o değeri true yapalım ve gönderelim evet giriş yaptı tutulan isteği bırakalım ve giriş yapmasına izin verelim
carlosu silelim ve labı bitirelim
Lab 4 User role can be modified in user profile
laba erişelim
bize verilen kimlik bilgileri ile giriş yapalım ve isteği yakalayalım
wiener:peter
Update email butonuna tıklayalım ve mail adresimizi değiştirmeye çalışırken isteği yakalayalım burp suite ile
gelen isteği repertara gönderelim ve isteği inceleyelim
roiled değerini 1 den 2 ye değiştirmemiz gerek
sayfayı yeniyerek admin panele gidelim ve carlosu silerek labı bitirelim
Lab 5: URL-based access control can be circumvented
laba erişelim
admin panele gitmeye çalışınca hata döndürdü
isteği yakalayalım soruda anlatıldığı gibi X-Original-URL un karşısına /admin
get isteğini boş bırakalım
ve carlosu silerek labı bitirelim
Lab 6 : Method-based access control can be circumvented
laba erişelim admin hesabı ile giriş yapalım admin panele gidip varlosu upgrade e tıklayalım isteği yakalayalım
yeni bir pencerede wiener hesabı ile giriş yapalım
home dizinine gelen isteği yakalayalım repertera gönderelim wiever ın cookie session bilgisini admin reperterdaki isteğe yapıştıralım ve sağ tık yaparak change request metadoa tıklayalım get isteği yapmamız gerekiyor ve adımızı wiener yapalım
Lab 7 : User ID controlled by request parameter
kullanıcı bilgilerimizle giriş yapalım ve isteği yakalayalım
url adresindeki wiener kısmını admin olarak değiştirelim ve yeniden isteği yakalayalım buna izin vermedi ilk başta yakaladığımız reperter isteğine gidelim
wieveri carlos olarak değiştirelim ve isteği gönderelim sonunda bizim api keyimizle carlosun api keyi aynı oldu
Lab 8: User ID controlled by request parameter, with unpredictable user IDs
verilen oturum bilgileri ile giriş yapalım ve url deki id bilgisini kaydedelim
9da07203–9f52–408a-a339-ef409f58dafe
carlos un yazdığı bir posttan id sini kaydedelim
5f6645d3-f785–4ab0-b349–50180d90d2c6
my accounta tıklayalım ve gelen isteği yakalayalım my_accountun id yi carlosunki ile değiştirelim
isteği gönderelim ve gelen apı bilgisini submit solution kısmına girelim
Lab 9: User ID controlled by request parameter with data leakage in redirect
bize verilen bilgilerle giriş yapalım ve isteği burp suite ile yakalayalım id kısmını carlos olarak değiştirelim ve isdteğimizi gönderelim
request 302 döndü 302 nedir ?
302 yeniden yönlendirme kodudur geçici olarak taşındığını gösterir
apı keyi submit kısmına girelim 🎃
Lab 10 :User ID controlled by request parameter with password disclosure
laba bağlanalım ve bize verilen bilgiler ile giriş yapalım
hesabım kısmında isteği yakalayalım
wiener kısmını administrator olarak değiştirelim ve repertera gönderelim isteği gönderelim ve dönen çıktıyı inceleyelim
yönetici parolasını bulduk ir5jl261ki5royep7qn9
admin panele giriş yaparak carlosu silelim
Lab 11 : Insecure direct object references
laba bağlanalım
siteyi biraz inceleyelim en ilginç canlı sohbet seçeneği
bir mesaj göndermeye çalışalım
transkripti görüntüleye tıklayalım bir txt belgesi indirdi
mesajların bir çıktısını veriyor transkripti görüntülemeye çalışırken isteği yakalayalım 2.txt yi 1.txt yapalım isteği gönderelim
gerçek konuşma burda yer alıyor ve bize carlosun şifresi verilmiş
63o1rapyzf0ip1vh0vmv 👑
hesabım kısmına şifremizle giriş yapalım
Lab 12: Multi-step process with no access control on one step
laba bağlanalım ve verilen bilgilerle giriş yapalım. admin panel kısmına tıklayalım ve carlosu upgrade butonuna tıklayalım ve gelen isteği yakalayalım repertera gönderelim
yeni bir sayfa açarak wiener ile giriş yapalım my accountu yenileyerek isteği yakalayalım admin paneldeki cookie session bilgisini buraya ekleyelim ve adını değiştirerek isteği gönderelim
Lab 13 : Referer-based access control
laba bağlanalım verilen admin bilgileri ile giriş yapalım admin panele girerek carlosa adminlik vermeye çalışalım ve isteği yakalayalım ve repertera gönderelim
başka bir sayfada wiener kullanıcısına girerek ana sayfada isteği yakalayalım
cookie bilgisini alarak admin repertera ekleyelim ve adını wiener yapalım
ve admin olduk ✨