Bu labda, PortSwigger Web Security Academy’nin Business Logic kategorisindeki “Authentication bypass via encryption oracle” senaryosunu inceliyoruz. Uygulamanın yorum hataları için kullandığı şifreli bildirim mekanizması, seçtiğimiz verileri şifrelememize ve şifreli cookie değerlerinin içeriğini görmemize olanak tanıyor. Amacımız, bu mekanizmadan yararlanarak administrator hesabı için geçerli bir oturum cookie’si oluşturmak, admin panele erişmek ve carlos kullanıcısını silmek. Lab bağlantısı.
wiener:peter credential’larımız yine var ve bizden carlos kullanıcısını silmemiz isteniyor. Laba göre aslında şifreleme tarafında bir hatadan kaynaklı bizim bunu yapabileceğimizi dile getiriyor. Bunun üzerine ben de cookie’lere bakmaya karar verdim çünkü burada bir farklılık vardı. Oturumun açık kalması için bir checkbox eklenmiş bu şekilde giriş yapıldığında aşağıdaki gibi bize bir cookie atanıyor.

Atanan yeni cookie değeri: TA58IAJxdARKwFjvps%2fViW3czuT2yw%2fUdT4OQyyb0Gg%3d
Buradaki şifrelemeyi çözemedim ve bunun üzerine uygulamayı keşfetmeye başladım. Geçersiz bir e-posta ile yorum yapmak istediğimizde uygulama hata veriyor ve hata metnini de şifreleyerek gönderiyordu.

Hatalı metnin içeriği de ekranda gösteriliyordu.

Aynı olabilir ihtimali ile cookie değerimi buraya gönderdim ve…

Aslında username:timestamp olduğunu gördüm. Bunun üzerine aslında benim elde etmem gereken administrator:timestamp olacaktı. Ben de bu sefer e-posta kısmına bunu yazdım.

Değerim geldi ama o önüne birkaç değer daha ekledi: Invalid…

Tam istediğim metni şifreleyememiştim. Bundan dolayı şifreleme belki blok şifredir umuduyla padding ekleyip denemeler yaptım. Toplam uzunluğu kontrol ettim.
Birkaç deneme ile şifrelemenin 32 bloklarla yapıldığı anlaşılıyor. Tam ortasından kesebilmemiz için bizim 32’den sonra administrator ifadesini başlatmamız lazım.
>>> len("Invalid email address: ")
23
>>> 32-23
9
Bundan dolayı bizim 9 tane padding’e ihtiyacımız var.
>>> "a"*9+"administrator:1794171801839"
'aaaaaaaaaadministrator:1794171801839'
İşte yeni şifrelenmiş metin bu şekilde:

Burada amacımız bunu decode etmek olacak ve daha sonrasında hex olarak sileceğiz. Silmeden önce bu şekilde:

Sildikten sonra ve gerekli encode işlemlerini yapınca…

Ve test ettiğimizde de doğru cevabı alabiliyoruz.

Artık mevcut cookie’yi değiştirip admin sayfasına gidebiliriz.

Hesabı silince de lab çözülmüş olunacaktır.
İlk Yorumu Siz Yapın