top of page

Lab: Password reset broken logic

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
2 dakikada okunur

Lab: Password reset broken logic

Bu labda, uygulamanın şifre sıfırlama (password reset) mekanizmasında bulunan bir mantık hatası bulunuyor. Şifre sıfırlama sürecinde kullanılan token ile kullanıcı arasında doğru bir ilişki kurulmadığı için, bir kullanıcıya ait reset bilgisi başka bir kullanıcının şifresini değiştirmek için kullanılabiliyor.

Labın amacı, bu hatayı istismar ederek carlos kullanıcısının şifresini sıfırlamak ve ardından onun hesabına giriş yaparak My account sayfasına erişmek.

Teste başlamak için bana verilen bilgiler şunlardı:

- Kendi hesabım: wiener : peter

- Hedef kullanıcı: carlos

İlk olarak wiener:peter bilgileriyle uygulamaya giriş yaptım. Hesap sayfasında biraz dolaştım, profil alanlarını ve yapılabilecek işlemleri inceledim. Acaba doğrudan gözüme çarpan bir zafiyet var mı diye baktım ama bu aşamada işime yarayacak bir şey bulamadım.

Bunun üzerine çıkış yapmaya karar verdim ve Forgot password (şifre sıfırlama) fonksiyonuna yöneldim. Şifre sıfırlama sürecini başlatırken oluşan tüm HTTP isteklerini Burp Suite üzerinden yakalamaya başladım.

Lab: Password reset broken logic

Reset linki üzerinden yeni şifre belirleme ekranına geldiğimde aşağıdaki isteğin gönderildiğini fark ettim İstek gövdesini incelediğimde şu parametrelerin gönderildiğini gördüm:

Lab: Password reset broken logic

temp-forgot-password-token=bihtop2a7bo9biw73jmmy9euc5dywaps&username=wiener&new-password-1=pass&new-password-2=pass

Bu noktada durup düşündüm. Reset token’ı wiener için üretilmişti ama username parametresi tamamen istemciden gönderiliyordu . Yani sunucu tarafında “bu token gerçekten bu kullanıcıya mı ait?” gibi bir doğrulama yapılmıyor olabilirdi.

Bunu test etmek için isteği Burp Repeater ’a gönderdim ve yalnızca username parametresini değiştirdim. wiener yerine carlos yazdım. Token’a dokunmadım, aynen bıraktım.

Manipüle ettiğim istek şu hale geldi:

Lab: Password reset broken logic

temp-forgot-password-token=bihtop2a7bo9biw73jmmy9euc5dywaps&username=carlos&new-password-1=pass&new-password-2=pass

Bu isteği gönderdiğimde sunucu herhangi bir hata döndürmedi ve işlemi kabul etti. Yani wiener için oluşturulmuş bir reset token’ı kullanarak carlos’un şifresini başarıyla değiştirmiş oldum .

Son olarak giriş sayfasına giderek:

- kullanıcı adı: carlos

- şifre: pass

bilgileriyle giriş yaptım. Carlos’un My account sayfasına eriştiğim anda lab başarıyla çözülmüş oldu.

Lab: Password reset broken logic

Bu zafiyetin ortaya çıkmasının temel sebebi, şifre sıfırlama sürecinde:

- Reset token’ının hangi kullanıcıya ait olduğunun sunucu tarafında doğrulanmaması

- Kullanıcı bilgisinin istemciden gelen username parametresine güvenilerek belirlenmesi

Yani token ile kullanıcı arasında sağlam bir bağ kurulmamış olması.

Bu lab, şifre sıfırlama gibi kritik bir fonksiyonda yapılan küçük bir mantık hatasının, doğrudan hesap ele geçirmeye yol açabileceğini çok net bir şekilde gösteriyor.

Benim için bu labın en güzel tarafı, çözümü ezbere gitmeden; akışı izleyerek, parametreleri sorgulayarak ve mantığını okuyarak bulmuş olmamdı. Reset token’ı ile kullanıcı arasındaki bağın zayıf olduğunu fark ettiğim anda çözüm kendiliğinden ortaya çıktı.

Bir sonraki labda görüşmek üzere🌸

 
 
bottom of page