PORTSWIGGER API TESTING WRITE-UP
Herkese merhabalar. Bu yazıda Portswiggerin hazırlamış olduğu yeni bölüm API Testing'in çözümünü yapacağız. Herkese iyi çalışmalar dilerim.
Lab 1: Belgeleri Kullanarak Bir API Uç Noktasından Yararlanma
Şekil 1.1 : Lab Web Sitesi
Burp aracını açıp giriş kısmından kullanıcı bilgisini girip giriş yapalım. (“ wiener: peter ”)
Şekil 1.2 : Giriş Bilgileri Girme
Giriş yaptıktan sonra e-posta adresini güncellememiz istenecek.
Şekil 1.3 : E-posta Güncelleme
Rastgele bir mail adresi girelim.
Şekil 1.4 : Rastagele Bir Mail Adresi Girme
Rastgele bir mail adresi girerek girişin başarılı olduğunu Burp Suite aracımızdan görebiliriz. Şimdi Request kısmını Repeater kısmına göndererek işe koyulalım.
Test amaçlı tekrar bir istek gönderelim.
Şekil 1.5 : Test Amaçlı İstek Gönderme
Bu sefer GET metoduyla ile istek atalım.
Şekil 1.6 : GET Metoduyla İstek Atma
GET isteğinde mail kısmına ihtiyacımız yok. Bu kısmı sildiğimiz halde istek attığımızda bilgiler hâlâ görünüyor.
Şekil 1.7 : Mail Bilgisini Silerek İstek Atma
Çerez bilgisini silerek GET isteği atmayı deneyelim.
Şekil 1.8 : Çerez Bilgisini Silerek İstek Atma
Cevap olarak yetkisiz olduğumu söylüyor. Kullanıcı adını “carlos ” olarak değiştirip istek atalım.
Şekil 1.9 : Kullanıcı Adı Değiştirerek İstek Atma
Girişimizi başarılı bir şekilde gerçekleştirmiş bulunmaktayız. Kullanıcıyı silersek laboratuvarı çözüme kavuşturmuş olacağız. DELETE metodu ile kullanıcıyı silelim.
Şekil 1.10 : DELETE Metodu ile Kullanıcıyı Silme
Cevap kısmında kullanıcıyı sildiğimizi görebiliyoruz. Şimdi 2. laboratuvarımıza geçebiliriz.
Lab 2: Sorgu Dizesinde Sunucu Tarafı Parametre Kirliliğinden Yararlanma
Şekil 2.1 : Lab Web Sitesi
Burp aracını açıp giriş kısmından kullanıcı bilgisini girip giriş yapalım. (“ wiener: peter ”)
Şekil 2.2 : Giriş Bilgileri Girme
Girdiğimiz kullanıcı adı ya da şifrenin hatalı olduğunu söyleyen bir uyarı alıyoruz. Şifreyi unuttum kısmına girelim. Kullanıcı adı kısmına “administrator” yazalım.
Şekil 2.3 : Kullanıcı Adı ile Giriş
Aşağıdaki görselde görünen mail hesabına şifreyi değiştirmek için bağlantı gönderildi. Amacımız o bağlantıya sahip olmak.
Şekil 2.4 : Kullanıcı Adı ile Giriş
Burp Suite aracından “forgot-password” kısmını repeatera yollayalım.
Şekil 2.5 : Repeatera Gönderme
Geçersiz bir kullanıcı adı kullanıp hata alıp almadığına bakalım.
Şekil 2.6 : Geçersiz Kullanıcı Adı ile İstek Atma
Bir hata verdiğini gördük. “#” karakterini kullanarak sunucu tarafı sorgu dizesini kesmeyi deneyelim.
Şekil 2.7 : “#” Karakterini Kullanma
Bir hata ile karşılaştık. Şimdi parola sıfırlama için kullanılan “reset_token” parametresini kullanıp istek atalım.
Şekil 2.8 : “reset_token” Kullanımı
Şimdi parametre değerini şu şekilde değiştirip tekrar istek atalım.
Şekil 2.9 : Parametre Değerini Değiştirip İstek Atma
Geçerli bir alan türü olması için parametreye “field” eklemeliyiz. Şimdi istek atalım.
Şekil 2.10 : “username=administrator%26field=reset_token” ile İstek Atma
Result kısmındaki değeri adres çubuğuna ekleyip girelim.
Şekil 2.11 : Değeri Adres Çubuğuna Ekleme
Karşımıza şifreyi değiştirmek için bir sayfa açılıyor. Rastgele bir şifre oluşturabiliriz.
Şekil 2.12 : Şifreyi Değiştirme
Şifreyi değiştirdik. Şimdi de tekrar login kısmına gelip “administrator” kullanıcı adı ve belirlediğim şifre ile giriş yapalım.
Şekil 2.13 : Giriş Yapma
Önümüze çıkan sayfada Admin panel yazan kısmına girelim.
Şekil 2.14 : Admin Panele Giriş
Carlos kullanıcısını silerek laboratuvarı çözüme kavuşturabiliriz.
Şekil 2.15 : Carlos Kullanıcısını Silme
Şimdi 3. laboratuvara geçebiliriz.
Lab 3: Kullanılmayan Bir API Uç Noktasını Bulma ve Bunlardan Yararlanma
Şekil 3.1 : Lab Web Sitesi
Burp aracını açıp giriş kısmından kullanıcı bilgisini girip giriş yapalım. (“ wiener: peter ”)
Şekil 3.2 : Giriş Yapma
Ana sayfaya gidip ceketi sepete ekleyelim.
Şekil 3.3 : Ceketi Sepete Ekleme
Sepete gidip sipariş vere tıkladığımızda yeterli kredinin olmadığını söylüyor.
Şekil 3.4 : Ceketi Sipariş Etme
Burp Suite aracından HTTP history kısmını incelediğimizde /api/products/1/price kısmı gözümüze çarpıyor. Bunu repeatera yollayıp inceleyelim.
Şekil 3.5 : /api/products/1/price Repeatere Gönderme
Bir GET isteği yolladığımızda ürün fiyatını ve mesajını gösteriyor. Biz bu ürün fiyatını 0 olarak değiştirip sipariş etmeye çalışacağız.
Şekil 3.6 : GET İsteği Yollama
Şimdi diğer istek metotlarını deneyelim ilk olarak POST metotundan başlayalım.
Şekil 3.7 : POST İsteği Yollama
POST metotunu kullandığımızda izin verilmedi uyarısı ile karşılaşıyoruz. Şimdi diğer metotumuz olan PATCH kullanalım.
Şekil 3.8 : PATCH İsteği Yollama
PATCH isteği yolladığımızda sadece “Content-Type: application/json” desteklediğini söylüyor. Biz de request kısmına “Content-Type: application/json” ekleyelim.
Şekil 3.9 : Content-Type: application/json Ekleme
Ekledikten sonra tekrar istek attığımızda dahili servis hatası verdi. “price: 0” değerini ekleyerek fiyatın 0 olmasını sağlayalım.
Şekil 3.10 : “price:0” Değerini Ekleme
Tekrar istek attığımızda cevap olarak ürünün fiyatını 0$ olarak verdi. Şimdi siparişimizi yapabiliriz.
Şekil 3.11 : Ürün Siparişi Verildi
Siparişimizi verdiğimize göre 4. laboratuvarımıza geçebiliriz.
Lab 4: Toplu Atama Güvenlik Açığından Yararlanma
Şekil 4.1 : Lab Web Sitesi
Burp aracını açıp giriş kısmından kullanıcı bilgisini girip giriş yapalım. (“ wiener: peter ”)
Şekil 4.2 : Giriş Bilgileri Girme
Giriş yaptıktan sonra home sayfasına gidip deri ceketi sepete ekleyelim.
Şekil 4.3 : Deri Ceketi Sepete Ekleme
Sepete gidip sipariş vere tıkladığımızda satın alma işlemi için yeterli kredinin olmadığını söyleyen bir uyarı veriyor.
Şekil 4.4 :Ürünü Sipariş Etme
Burp Suite aracından api isteklerini incelemek için repeatere atalım.
Şekil 4.5 : /api/checkout Repeatere Gönderme
İstek attığımızda gelen cevapta indirim yüzde dğerinin 0 olduğınu gösteren bir değişken vardır. Bu yüzdenin değerini 100 yaparsak ürünü sipariş edebiliriz.
Şekil 4.6 : /api/checkout Repeater
Ürünün değerini değiştirebilmek için POST metodunu repeatera atmamız lazım.
Şekil 4.7 : POST /api/checkout Repeatera Gönderme
Şimdi GET methodundaki repeaterda indirim ile alakalı kodu kopyalayım POST methodunun repeater kısmına yapışturalım ve değeri 100 diyerek değiştirelim.
Şekil 4.8 : İndirim Değerini Kopyalama
Şekil 4.9 : İndirim Değerini Yapıştırma
İsteği yolladığımızda bu laboratuvarı da çözmüş olmaktayız. İşte şimdi son laboratuvarımıza geçebiliriz.
Lab 5: REST URL'sinde Sunucu Tarafı Parametre Kirliliğinden Yararlanma
Şekil 5.1 : Lab Web Sitesi
Burp aracını açıp giriş kısmından kullanıcı bilgisini girip giriş yapmalıyız fakat sadece administrator kullanıcı adına sahibiz. Şifreyi unuttum kısmına basıp kullanıcı adını girelim.
Şekil 5.2 : Giriş Bilgilerin Girilmesi
Kullanıcı adını girdikten sonra mail hesabına giriş yapmak için bir bağlantı gönderildi. Amacımız bu bağlantıyı elde etmek.
Şekil 5.3 : Maile Giriş Bağlantı Gönderilmesi
Burp Suite aracından HTTP history kısmından POST metotu olarak görünen /forgot-password kısmını repeatera yollayıp inceleyelim.
Şekil 5.4 : /forgot-password Repeatera Gönderilmesi
POST isteğini gönderelim. Maile giriş bağlantısı yolladı.
Şekil 5.5 : POST İsteği Gönderme
Bir üst dizine çıkmak için kullanılan ../ ifadeyi kullanıcı adı değeri yaparak istek atalım.
Şekil 5.6 : Kullanıcı Adı Değerini “../” Yapma
Burada bir hata verdi. Bu hata ile sunucu yoluna girdiğini görebiliriz. ../../../../ ifadesini kullanarak daha da ilerisine gitmeye çalışalım.
Şekil 5.7 : Kullanıcı Adı Değerini “../../../../” Yapma
URL yoluna bazı yaygın API tanımı dosya adları ekleyelim. Örneğin openapi.json.
Şekil 5.8 : Kullanıcı Adı Değerini “../../../../openapi.json#” Yapma
İstek attıktan sonra API uç noktasını içeren bir hata ile karşılaşıyoruz. Bu hatadan yararlanarak kullanıcı adı değerini “../../v1/users/administrator/field/passwordResetToken#” yapıp istek atalım.
Şekil 5.9 : Kullanıcı Adı Değerini “../../v1/users/administrator/field/passwordResetToken#” Yapma
Cevap olarak bize bir token değeri verdi. Biz bu token değerini URL’ye ekleyelim.
Şekil 5.10 : Token Değerini URL’ye Ekleme
Karşımıza yeni şifre belirlememiz için bir sayfa çıkıyor. Rastgele bir şifre belirleyelim.
Şekil 5.11 : Yeni Şifre Belirleme
Belirlediğimiz şifre ile administrator kullanıcı adı ile giriş yapalım.
Şekil 5.12 : Administrator ile Giriş Yapma
Admin paneline girelim.
Şekil 5.13 : Admin Paneline Giriş Yapma
Admin panelinden Carlos kullanıcısını silelim.
Şekil 5.14 : Carlos Kullanıcısını Silme
API testing çözümlerini böylece tamamlamış olduk.