Lab: Unprotected admin functionality

None

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

None

Lab: Unprotected admin functionality with unpredictable URL

None

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

None

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

None

Admin paneline erişim sağlanabilmektedir.

None

Lab: User role can be modified in user profile

None

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.

None

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.

None

Lab: User ID controlled by request parameter

None

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.

None

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

None

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.

None

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

None

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

None

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.

None

Lab: User ID controlled by request parameter with password disclosure

None

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.

None

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

None

Lab: Insecure direct object references

None

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.

None

Lab: URL-based access control can be circumvented

None

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:

None

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

None

Lab: Method-based access control can be circumvented

None

İ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:

None

İ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.

None

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.

None

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

None

Ö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.

None

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.

None

Lab: Referer-based access control

None

Ö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.

None

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.

None

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

None