Tiredful API, içerisinde kasıtlı olarak zafiyetler barındıran bir web uygulamasıdır. Ücretsiz olarak bu web uygulamasını kurduktan sonra örnek senaryolar ile içerisindeki zafiyetleri sömürerek kendinizi geliştirebilirsiniz.
Tiredful API uygulamasında olan zafiyet başlıkları;
- Access Control
- Cross Site Scripting (XSS)
- Information Disclosure
- Insecure Direct Object Reference
- SQL Injection
- Throttling
Yapmış olduğum işlemlerin ekran görüntülerini sizlerle paylaştım ve en sonunda zafiyeti nasıl sömürdüğümü detaylı bir şekilde açıklamaya çalıştım. Umarım sizler için yararlı bir yazı olmuştur.
Access Control
Step 1;

Step 2;

Step 3;

Step 4;

Açıklama : Bizden sadece “Admin” yetkisine sahip bir kullanıcının yapabileceği bir işlem yapmamız isteniyor. Articles 2’yi görüntüleyebilmek adına bir istek attık ve aldığımız cevapta(Response) “Articles 2” sayfasını görüntüleyebildiğimizi anladık. Bir sonra ki işlemde bu sayfayı silmeyi deneyeceğiz. Metodu “DELETE” olarak değiştirdik ve isteğimizi attık. Cevapta bize “IsAdmın” başlığının eksik olduğu söyleniyor. Bunun üzerine biz “IsAdmin” isminde bir Header(Başlık) oluşturup değerini “True” olarak verdik. DELETE metodunda olan isteğimizi tekrar gönderdiğimizde sayfayı başarılı bir şekilde silebildik.
Cross Site Scripting
Step 1;

Step 2;

Step 3;

Step 4;

Step 5;

Step 6;

Açıklama : Bu zafiyette bizden sunucuya zararlı XSS kodlarını yerleştirmemiz isteniyor. Bir kullanıcı için Token oluşturduktan sonra, bu token değerini kullanarak bize verilen URL’e(…/api/v1/advertisements) isteğimizi göndermeden önce zararlı XSS payloadlarımızı yerleştiriyoruz. Sonrasında bu URL’e istek yapıp sunucunun cevabını(Response) incelediğimizde XSS payloadlarımızın yerleşmiş olduğunu görüyoruz.
Information Disclosure
Step 1;

Step 2;

Step 3;

Açıklama : Bu zafiyet türünde, Kitaplar için “ISBN” değişkeni belirlenmiş. Bize verilen URL üzerine (“…/api/v1/books/<ISBN>”) geçerli ISBN değerlerini girdiğimizde kitapların bilgisine ulaşabiliyoruz. Bizden “stacktrace”(yığın izleme) bilgisine ulaşmamız isteniyor. İlk ekran görüntüsünde gördüğünüz üzere bize verilen ISBN değerlerinden birini girip kitabı GET isteği ile görüntüleyebildik. Diğer adımda ise geçerli olmayan ISBN değeri gireceğiz. Burada görünütlediğimiz kitabın ISBN değerinin sonunda ki “2” rakamını “A” olarak değiştirdik ve GET isteğini gönderdik. Var olmayan bir ISBN değeri girip görüntülemeye çalıştığımızda sayfa bize cevap olarak “Stacktrace” bilgilerini döndü.
Insecure Direct Object Reference
Step 1;

Step 2;

Step 3;

Step 4;

Step 5;

Step 6;

Açıklama : Bu zafiyette bize Batman kullanıcısının “MQ==” ve “Mg==” Sınav Kimliği ile sınava girdiği söyleniyor. Bu MQ== ve Mg== base64 encode halidir. Base64 Decode işlemi yaptığımzıda MQ== değerinin “1”, Mg== değerinin ise “2” olduğunu gördük. Bizden Batman kullanıcısı ile başka bir kişinin sınav bilgilerini görüntülememiz isteniyor. Öncelikle Batman kullanıcısı için bir Token oluşturduk. Biz sınav erişim kimliği numarası “56” olan kişinin sınav notlarını görüntülemek istiyoruz. 56 sayısını Base64 ile encode ettik ve Base64 halinin “NTY=” olduğunu bulduk. İstek yapacağımız URL’de(<…/api/v1/exams/id>) ID yerine “NTY=” değerini yazdığımızda ve Batman kullanıcısının Token değerini girdiğimizde, Batman kullanıcısı ile başka bir kişinin sınav bilgilerini görüntüleyebilmiş olduk.
SQL Injection
Step 1;

Step 2;

Step 3;

Açıklama : Bu zafiyette bizden Veritabanında bulunan tablo isimlerini bulmamız isteniyor ve bu veritabanın SQLite olduğu bilgisi veriliyor. İlk olarak bize verilen örnekteki gibi bir veri(“month”:”1″) gönderdik ve dönen cevabı inceledik. Dönen cevaptaki değişkenleri(“sleep”,”heartbeat”,”calories”,”running”,”month”,”user”) incelediğimizde bu veritabanında 6 veya 6’dan fazla Sütun olduğunu anlayabiliyoruz. Tablo isimlerini çekebilmek için bir UNION sorgusu kullanacağız. Bir UNION sorgusu yapabilmek için; Veritabanında kaç tane Sütun bulunduğunu bilmemiz ve sorguda bu değeri belirtmemiz gerekiyor. Bu adımda “month”:”1 UNION SELECT 1,2,3,4,5,6,name FROM sqlite_master WHERE type=’table’;” payloadını yazarak isteğimizi gönderdik. Dönen cevabı incelediğimizde veritabanında bulunan tablo isimlerini görüntüleyebilmiş olduk.
Throttling
Step 1;

Step 2;

Step 3;

Step 4;

Step 5;

Açıklama : Bu zafiyet türünde bizden sunucudan “429” Yanıt kodunu almamız isteniyor. 429 Yanıtı iste “Çok fazla istek” demektir. Batman kullanıcısı için bir token oluşturduk. Token değerini girip, bize verilen URL’e(…/api/v1/trains) 20’den fazla istek yaptığımızda sunucu bize 429 yanıt kodunu döndürdü.
0x021
Bir Cevap Yazın