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.

PORTSWIGGER API TESTING WRITE-UP

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.

Merhaba ben Ayşenur. Fırat Üniversitesi Adli Bilişim Mühendisi 3. sınıf öğrencisiyim. "sibermetin.com" sitesinde yazarlık yapıyorum. Siber alanı ile alakalı edindiğim bilgileri sizlere aktarmaya çalışıyorum. İyi okumalar :)