"Read the unreadable" sorusu
RingZer0 ekibinin bu sorusunun çözümünde HTTP İstek Başlıklarından bir tanesi olan “
Range” başlığını incelenecektir. Reel hedefler üzerinde pek işinizi göreceğini düşünmüyorum fakat farklı konular adına ufuk açıcı bir soru olabileceği için paylaşıyorum.
Soru Linki ;
Read the Unreadable 1
Soruya girdiğinizde “
Bu sayfanın içeriği FLAG kelimesini içerdiğinden engellendi” gibi bir ibare ile karşılaşıyoruz. Bizim izleyeceğimiz yol site içeriğini belirli aralıklara bölerek içerisinde FLAG kelimesi geçmeyecek şekilde isteklerde bulunmak olacak.
Bu noktada yardımımıza “
Range” HTTP Başlığı koşuyor. Range başlığı ; kaynağın yalnızca bir bölümünü istediğini belirtir. İstenen bölüm, başlık içerisinde byte değerlere bölünerek ayrılabilir.
Genel manada kullanımı ; “
Range: bytes=880-1000/*” şeklinde olabilmekte. Bu istek sonucunda 120 byte karakterin çıktısını alıyoruz. Hemen test edelim.
Daha önceki soruların FLAG değerlerinden bilindiği üzere soruların cevaplarının formatı “
FLAG-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” şeklindedir. Sayfayı bytelara bölerken FLAG kelimesinin olmadığı aralığı bulmamız gerekiyor.
Flag değerleri 37 karakterden oluşuyor. İlk karakter olan “F” harfinin olmadığı 36 karakterlik atlamalar yaparak isteklerde bulunacağız ve kolaylıkla sonuca ulaşacağız.
Bu amaçla basit bir python scripti yazıp, işlemimizi otomatize edip flag değerini elde edelim.
Bu script, yukarıda bahsettiğimiz gibi 36 bytelık aralıklarla isteklerde bulunacak ve içerisinde
“LAG-” kelimesinin olduğu ve aynı zamanda sayfamızın engellendiğini ifade eden
“blocked” kelimesinin olmadığı aralığı bulup ekrana FLAG değerini ve kullanılan payloadı basacak.
Çıktıdan görüldüğü üzere “
Range: bytes=1068-1104/*” şeklinde bir istek atarak FLAG değerini elde ettik.
Manuel kontrolümüzüde gerçekleştirelim ;
Jonturk @ JRBops