Selamlar, bugün sizlerle OWASP TOP 10 başında yer alan broken access control açığına bakacağız, yanında yazdığım zaafiyetli kodları da vereceğim lokale kurup deneyebilirsiniz.
Broken Access Control zaafiyeti yetkisiz erişimle belirli bir yetkiye sahip olmaktır, client-side kontrollerde ortaya çıkar bu açık karşımıza, veya en kötüsü hiç kontrol yapılmaz.
Örneğin bir web sitesine girdik, sitedeki "/admin" dizinine bir GET isteği attık, yazılımı yapan abimiz login.php yönlendirmesini kullanıcı tarafında yapmış windows.location.href = 'login.php' şeklinde, burada biz tarayıcıdaki JS'i kapatıyoruz, bu yönlendirme kodu çalışmaz, ve eğer bu PHP dashboardda eğer exit(); de yapılmamışsa ve dashboard elimizdeyse işte buna broken access denir.
Veya bir diğer örnek de şu olur, sen girdin site.com/account/myprofile/?user=mehmet , işte burada user parametresini ahmet yap, bakalım o kullanıcının profili geliyor mu, geliyorsa bu da broken access zaafiyetidir (veya IDOR da denebilir), böyle bir durumda da yazılan PHP kodunda $user = $_GET['user']; gibi bir kod çalışıyor kalan işlemler de $user değişkeni üzerine yapılıyor olabilir.
Veya exit() konulmuş ama biraz yanlış bölüme koyulmuş ise şu olur: yine /account/myprofile/?user=mehmet dizinine istek atıyoruz, user parametresini yine ahmet yaptık bu sefer yönlendirmeyi yapmış tamam ama password ifşası veya mail ifşası olabilir ona da curl -sk /account/myprofile/?user=ahmet diyerek bakabiliriz cmd ile.
Son örneğim de şu olacak: site.com/admin veya site.com/?page=admin artık neyse açtık, admin diye cookie var mesela, o false ise true yapalım ne oluyor, 0 ise 1 yapalım ne oluyor veya saçma sapan bişey yapalım ne oluyor diye bakmalıyız.
Kodladığım basit lab (Biraz dandik oldu aceleyle yaptım):
Broken Access Control zaafiyeti yetkisiz erişimle belirli bir yetkiye sahip olmaktır, client-side kontrollerde ortaya çıkar bu açık karşımıza, veya en kötüsü hiç kontrol yapılmaz.
Örneğin bir web sitesine girdik, sitedeki "/admin" dizinine bir GET isteği attık, yazılımı yapan abimiz login.php yönlendirmesini kullanıcı tarafında yapmış windows.location.href = 'login.php' şeklinde, burada biz tarayıcıdaki JS'i kapatıyoruz, bu yönlendirme kodu çalışmaz, ve eğer bu PHP dashboardda eğer exit(); de yapılmamışsa ve dashboard elimizdeyse işte buna broken access denir.
Veya bir diğer örnek de şu olur, sen girdin site.com/account/myprofile/?user=mehmet , işte burada user parametresini ahmet yap, bakalım o kullanıcının profili geliyor mu, geliyorsa bu da broken access zaafiyetidir (veya IDOR da denebilir), böyle bir durumda da yazılan PHP kodunda $user = $_GET['user']; gibi bir kod çalışıyor kalan işlemler de $user değişkeni üzerine yapılıyor olabilir.
Veya exit() konulmuş ama biraz yanlış bölüme koyulmuş ise şu olur: yine /account/myprofile/?user=mehmet dizinine istek atıyoruz, user parametresini yine ahmet yaptık bu sefer yönlendirmeyi yapmış tamam ama password ifşası veya mail ifşası olabilir ona da curl -sk /account/myprofile/?user=ahmet diyerek bakabiliriz cmd ile.
Son örneğim de şu olacak: site.com/admin veya site.com/?page=admin artık neyse açtık, admin diye cookie var mesela, o false ise true yapalım ne oluyor, 0 ise 1 yapalım ne oluyor veya saçma sapan bişey yapalım ne oluyor diye bakmalıyız.
Kodladığım basit lab (Biraz dandik oldu aceleyle yaptım):