İçeriğe geç

PortSwigger Business Logic Lab 11: Authentication Bypass via Encryption Oracle

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.

Screenshot

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.

Screenshot

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

Screenshot

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

Screenshot

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.

Screenshot

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

Screenshot

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:

Screenshot

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

Screenshot

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

Screenshot

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

Screenshot

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

Screenshot

Hesabı silince de lab çözülmüş olunacaktır.

Kategori:Web

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir