HTTP Request Builder Aracını Kullanarak Özgün HTTP İstekleri Oluşturma & Gönderme
HTTP Request Builder Aracı, kendi HTTP isteklerinizi yapmanıza ve bu isteklere verilen yanıtlar vasıtasıyla zafiyetleri manuel olarak analiz etmenize olanak sağlayan bir penetration testing aracıdır. Genelde, gelişmiş sızma testi süreçlerinde kullanılır.
Request Builder Nedir?
Netsparker Desktop’ta bulunan Request Builder aracı, kendi HTTP isteklerinizi oluşturmanıza, var olanlar üzerinde değişiklik yapmanıza, istekleri hedefe göndermenize ve hedefin döndürdüğü HTTP yanıtlarını analiz etmenize olanak sağlar.
Netsparker HTTP Request Builder aracını, aşağıdaki ekran görüntüsünde de vurgulanan Request Builder sekmesine tıklayarak açabilirsiniz.
HTTP Request Builder Neden Kullanılır?
Manuel olarak yaptığınız bir zafiyet değerlendirmesi sırasında kendi HTTP isteğinizi oluşturmak için HTTP Request Builder aracını kullanabilirsiniz. Örneğin, belli bir problemi çözmek için uğraşırken ya da mantıksal web zafiyetlerini tespit ederken söz konusu aracı kullanmanız size kolaylık sağlayacaktır.
Ayrıca web güvenlik tarayıcısının tarama esnasında bulduğu bir zafiyeti incelemek ve exploit etmek için bu aracı kullanabilirsiniz. Yanı sıra web uygulamasından dönen HTTP yanıtı incelemek için de bu araç oldukça kullanışlıdır.
HTTP İsteklerini Request Builder’a Aktarma
Bir taramadan elde edilen herhangi bir HTTP isteğini, örneğin bir Cross Site Scripting (XSS) tanımlamada kullanılan HTTP isteğini, Request Builder aracına aktarmak için zafiyeti Sitemap’te bulun ve sağ tık menüsünden Send to Request Builder seçeneğini tıklayın.
Ayrıca zafiyetin detaylarını gösteren pencerede bulunan araç çubuğundaki Send to Request Builder butonuna da tıklayabilirsiniz.
Request Builder aracını kullanarak, aktarılan HTTP isteğini kolayca düzenleyebilirsiniz. Örneğin, hem değeri hem de header ismini değiştirmeniz mümkün. Aynı işlem GET ve POST parametreleri için de geçerlidir.
Ek olarak HTTP isteğini RAW sekmesinde, düz metin halinde görüntüleyebilir ve üzerinde oynamalar yapabilirsiniz.
Request Builder İle Bir HTTP İsteği Oluşturma
HTTP isteği oluşturmak için ihtiyacınız olan şey URL, protokol ve HTTP metodunu tanımlamak olacaktır. Ayrıca ihtiyaç olursa HTTP header’larını (zorunlu değil) ve parametrelerini de oluşturmanız gerekir. Aşağıdaki bölüm bir HTTP isteğinin basitçe nasıl oluşturulabildiğini Netsparker Desktop Professional’ı satın alma sayfasını kullanarak açıklamaktadır:
https://www.netsparker.com/pricing/deal/?edition=pro
HTTP Metodu, Protokol, FQDN ve Path
Aşağıda, yaptığımız HTTP isteğinin ilk kısmına dair bir ekran görüntüsü bulunmaktadır. Burada HTTP Metodunu, protokolü, FQDN’i ve path’i değiştirebiliriz.
Aşağıda yapılandırılabilen tüm parametrelerin açıklamaları yapılmıştır:
GET: HTTP metodudur. GET, hedef web uygulamasından bilgi almak istediğimiz anlamına gelir. Hedef web uygulamasına bilgiyi post etmek için POST metodunu, sadece header bilgisini almak içinse HEAD metodunu seçmeniz gerekir. HTTP metotları hakkında bilgi almak için bağlantıya tıklayabilirsiniz.
HTTP: Bu parametre ise protokolü ifade eder. HTTP ya da HTTPS olabilir.
443: Bu seçenek ise web uygulamasıyla iletişim kuran port numarasını tanımlar. Bu numara otomatik olarak yerleştirilecektir. Şayet web uygulamanızda farklı bir port numarası kullanıyorsanız bunu elle girmeniz gerekir.
/pricing/: Erişmek istediğimiz yoldur. Buraya kadar isteğimizin bu bölümünü oluşturduk:
https://www.netsparker.com/pricing/
HTTP/1.1: Bu ise protokol sürümüdür. Genellikle HTTP/1.1 kullanılsa da bu durumda daha eski bir versiyonunu kullanmamız gerekecek. Bu yüzden HTTP/1.0 ‘ı seçin.
HTTP Başlıkları ve Parametreleri
Aşağıda, HTTP isteği, HTTP header ve parametrelerinin ikinci bölümünü gösteren bir ekran görüntüsü yer almaktadır.
Yukarıdakilerin ne anlama geldiğine bakalım.
HTTP Header’ları
Bir HTTP header’ı eklemek için Type kolonunda bulunan Header’ı seçin ve Value kolonuna header’ın değerini girin.
Accept: Bu header, yanıt için hangi Content-Type’ın kabul edilebilir olduğunu tanımlamak için kullanılır.
User-Agent: Bu header, client tarafından yazılım türünü tanımlamak için kullanılır. Örneğin her web tarayıcısı bir benzersiz (unique) user agent stringine sahiptir.
Host: Host header’ı, web sunucusu birden fazla uygulamayı barındırdığı takdirde client’ın erişmek istediği web uygulamasına istek yapmak için kullanılır. Tek zorunlu header’dır.
Note: HTTP header’ları genel olarak, istekle birlikte cookie’yi göndermek için kullanılır. Yukarıdaki örnekte HTTP isteğinin en basit hali gösterilmiştir. HTTP Header’ları hakkında daha fazla bilgiyi bağlantıya tıklayarak edinebilirsiniz.
GET Parametresi
Bir parametre eklemek için Type açılır menüsünden GET ya da POST parametresini seçin ve Value kolonuna parametrenin değerini girin.
edition: HTTP isteğimize ekleyeceğimiz parametre ve aldığı değer. (https://www.netsparker.com/pricing/deal/?edition=pro)
Header’ları ve Parametre Değerlerini Encode Etme
Encoding kolonundaki checkbox bir header ya da parametre için işaretlenmişse, girdiğiniz değerin encode edildiği ve bu şekliyle gönderileceği anlamına gelir. Eğer işaretlenmemişse belirlediğiniz değerin, encode edilmemiş olduğu ve hedefe gönderilirken encode edileceği anlamına gelir.
İsteğe Bağlı: HTTP İsteğine Request Body Ekleme
HTTP request body’sine ek bilgi dahil etmeniz gerekiyorsa HTTP headers ve parameters bölümünün altındaki Enable Raw Request Body seçeneğini aktifleştirin ve veriyi girin.
HTTP İsteğini Gönderme ve HTTP Yanıtını Analiz Etme
HTTP isteği tamamlanmış oldu. Şimdi ham HTTP isteğini diğer bir deyişle hedefe gönderilen formatı görebilmek için RAW’a tıklayın:
HTTP isteğinde bulunmak için Send Request’e tıklayın ve HTTP yanıtını alın. Aldığınız yanıtı RAW sekmesine tıklayarak ham biçimde (HTTP header’ları ve HTML kod) görüntüleyebilirsiniz. Ayrıca ham halde görüntülerken yanıtta bulunan bir metin için de arama yapmak mümkün.
HTTP header’larını görüntülemek için Headers sekmesine, yanıtın bir tarayıcıda nasıl görüntülendiğini görmek için Browser View’a tıklayın. Şunu unutmamak gerekir ki tarayıcı modundayken tüm script çeşitleri pasif durumdadır. Sadece yanıt yapısını görebilmenizin nedeni budur.
HTTP İsteğini Kaydetme
Son olarak, oluşturduğunuz ya da dışarıdan aldığınız ve Log Requests seçeneği işaretleyerek gönderdiğiniz tüm HTTP isteklerinin bir kaydını tutmanızın mümkün olduğunu söyleyelim.
History penceresinde depolanan bir isteği, üzerine iki kere tıklayarak tekrar yükleyebilirsiniz. Ayrıca yüklenen istek üzerinde yeniden oynamalar yapıp hedefe gönderebilirsiniz. Oynanmış olan versiyon da ayrı bir HTTP isteği olarak History penceresinde kayıtlı tutulacaktır. Yani isteğin yeni hali, değişikliğe uğramış eski versiyonun üzerine yazılmaz.
Gönderilen HTTP isteklerinin geçmişinin sadece var olan oturumlar için tutulacağını da unutmamak gerekir. Bu nedenle Netsparker web uygulaması güvenlik tarayıcısını kapattığınızda ya da yeniden başlattığınızda HTTP Request Builder aracındaki geçmiş bilgisi kaybolur. Ayrıca Log Requests seçeneği varsayılan olarak pasif biçimde bulunur. Bundan dolayı HTTP isteklerini kaydetmek isterseniz çalışmaya başlamadan önce söz konusu seçeneğin aktif olduğundan emin olun.