Lab: Unprotected admin functionality

robots.txt dosyası incelendiğinde admin panelinin yolu Disallow satırı üzerinden açıkça görülmektedir.

Lab: Unprotected admin functionality with unpredictable URL

Ana sayfasının kaynak kodu incelendiğinde JavaScript içerisinde admin paneline ait URL bilgisinin yer aldığı görülmektedir. Bu bilgi kullanılarak admin paneline doğrudan erişim sağlanabilmektedir.
Lab: User role controlled by request parameter

İlgili kimlik bilgileri ile giriş yapıldıktan sonra istemci tarafında tutulan Admin=false çerezinin true olarak değiştirilmesiyle;

Admin paneline erişim sağlanabilmektedir.

Lab: User role can be modified in user profile

Sağlanan kimlik bilgileriyle giriş yapın ve hesap sayfasına gidin. E-posta güncelleme özelliğini kullanarak adresinizi değiştirin. Yanıtı inceleyin ve rol kimliğinizin (roleid) response içinde yer aldığını doğrulayın.

E-posta güncelleme isteğini Burp Repeater'a gönderin. İstek gövdesindeki JSON verisine "roleid": 2 parametresini ekleyin ve isteği tekrar gönderin. Yanıtta rol kimliğinizin 2 olarak değiştiğini gözlemleyin.

Lab: User ID controlled by request parameter

Giriş yapıldıktan sonra hesap sayfası URL'inde kullanıcı adının id parametresi olarak kullanıldığı görülmektedir. Bu istek Burp Repeater'a gönderilip id parametresi carlos olarak değiştirildiğinde yetkilendirme kontrolü olmadan carlos kullanıcısına ait API anahtarına erişilebilmektedir.

Lab: User ID controlled by request parameter, with unpredictable user IDs

Wiener kullanıcısı olarak giriş yaptıktan sonra carlos'a ait bir blog gönderisi incelendiğinde profil bağlantısında userId bilgisinin response'da yer aldığı görülmektedir. Giriş yapıldıktan sonra hesap sayfasındaki userId parametresi ile değiştirildiğinde yetkilendirme kontrolü yapılmadan carlos kullanıcısına geçiş yapılabilinmektedir.

Lab: User ID controlled by request parameter with data leakage in redirect

Giriş yapıldıktan sonra hesap sayfasına ait istek Burp Repeater'a gönderilir.

id parametresi carlos olarak değiştirildiğinde kullanıcı ana sayfaya yönlendirilse dahi response gövdesinde carlos kullanıcısına ait API anahtarının yer aldığı gözlemlenmiştir.

Lab: User ID controlled by request parameter with password disclosure

Kullanıcı bilgileri ile giriş yapılır ve kullanıcı hesap sayfasına erişilir. Hesap sayfasındayken URL'de bulunan id parametresi administrator olarak değiştirilir.

Response içerisinde administrator hesabına ait parola bilgisinin açık şekilde döndüğü görülür.

Lab: Insecure direct object references

Giriş yapıldıktan sonra ana sayfadan Live chat sekmesine girilir. Bir mesaj gönderilir ve ardından View transcript seçeneğine tıklanır. Gönderilen istek incelendiğinde tahmin edilebilir (predictable) bir dosya isimlendirme sistemi gözlemlenmektedir.

Lab: URL-based access control can be circumvented

Tarayıcı üzerinden /admin endpoint'ine gidildiğinde erişimin engellendiği görülür. Dönen response oldukça sade gözükmektedir bu kontrolün büyük ihtimalle front-end seviyesinde yapıldığı tahmin edilebilir. İstek Burp Repeater'a gönderilerek aşağıdaki şekilde değiştirilir:

Bu değişiklik sonrasında admin paneline erişim sağlanılır.

Lab: Method-based access control can be circumvented

İlk olarak administrator kimlik bilgileriyle giriş yapıyoruz. Carlos'u terfi ettiren isteği yakalayıp Burp Repeater'a gönderiyoruz. Ardından oturumu kapatıp yönetici olmayan bir kullanıcı ile tekrar giriş yapıyoruz. Aynı isteği bu kullanıcı ile yeniden göndermek için Repeater'daki isteğin oturum çerezini (session cookie) yönetici olmayan kullanıcıya ait çerez ile değiştiriyoruz. İstek gönderildiğinde yanıtın "Unauthorized" olduğunu gözlemliyoruz:

İsteğin HTTP metodunu POST → POSTX olarak değiştiriyoruz. Sunucunun bu hatalı metoda verdiği yanıtın artık "Unauthorized" değil "Missing parameter" olduğunu görüyoruz. Bu durum erişim kontrolünün metod bazlı kontrol edildiğini gösteriyor.

Son olarak isteği GET metodunu kullanacak şekilde değiştiriyoruz ve username parametresini kendi kullanıcı adımızla güncelliyoruz. İstek yeniden gönderildiğinde işlemin başarılı olduğunu görüyoruz.

Lab: Multi-step process with no access control on one step

Öncelikle administrator hesabıyla giriş yapıyoruz ve admin paneline gidiyoruz. Carlos'u terfi ettirme işlemini başlatıyoruz ve özellikle onay (confirmation) HTTP isteğini Burp Repeater'a gönderiyoruz.

Ardından yeni bir gizli (incognito) pencere açarak yönetici olmayan bir kullanıcı ile oturum açıyoruz. Repeater'daki isteğin session cookie değerini yönetici olmayan kullanıcıya ait cookie ile değiştiriyoruz. Ayrıca username parametresini kendi kullanıcı adımızla güncelliyoruz. İstek yeniden gönderildiğinde işlemin başarılı olduğunu görüyoruz.

Lab: Referer-based access control

Öncelikle administrator kimlik bilgileriyle oturum açıp admin paneline gidiyoruz ve Carlos'u terfi ettirme işlemini başlatıyoruz. Bu sırada oluşan isteği Burp üzerinden yakalayıp Repeater'a gönderiyoruz.

Ardından yeni bir gizli (incognito) pencerede yönetici olmayan kullanıcıyla giriş yapıyoruz. Bu kullanıcıyla doğrudan şu endpoint'e istek atmayı deniyoruz:
/admin-roles?username=carlos&action=upgrade
Bu isteği gönderdiğimizde sunucunun isteği Unauthorized olarak değerlendirdiğini görüyoruz.

Aynı isteği yeniden gönderiyoruz fakat bu kez isteğe admin panelinden gelmiş gibi bir Referer ekliyoruz:
