Metasploit Exploit Geliştirme - 3
HTTP istekleri göndermek
Modül yazarken HTTP istekleri göndermemiz ve cevabını alıp ayrıştırmamız gerekebilir. HTTP istekleri gönderebilmek için include Msf::Exploit::Remote::HttpClient
satırı modüle eklenmelidir.
send_request_cgi({
'method' => 'GET',
'uri' => '/index.php',
'vars_get' => {
'parametre1' => 'test1',
'parametre2' => 'test2'
}
})
Yukarıdaki örnekte örnek bir GET isteği gösterilmiştir. Örneğin test/index.php
gibi bir url oluşturulamaya çalıştığımızda / işaretleri bazen çift konulabilmekte veya eksik kalabilmektedir. Bu durum sık yapılan hatalardandır. Güvenli şekilde url oluşturabilmek için normalize_uri
kullanılır.
1 – Çalışan uygulama bir dizin altında çalıştığı zaman bunu belirtmek için TARGETURI
datastore’a kaydedilir.
register_options(
[
OptString.new('TARGETURI', [true, 'Varsayılan Dizin', '/uygulama/'])
], self.class)
res = send_request_cgi({
'method' => 'GET',
'uri' => normalize_uri(target_uri, 'admin', 'login.php'),
# "/uygulama/admin/login.php" döndürür.
'vars_get' => {
'parametre1' => 'test1',
'parametre2' => 'test2'
}
})
Örnek bir POST isteği de alttaki gibidir.
res = send_request_cgi({
'method' => 'POST',
'uri' => normalize_uri(uri, 'admin', 'login.php'),
'vars_post' => {
'parametre1' => 'test1',
'parametre2' => 'test2'
}
})
HTTP Response ayrıştırma
Gelen response objesini res
değişkenine atadık.
data = res.body
ile response’un body kısmını alabiliriz. HTTP yanıtını string olarak almak istersek
raw_res = res.to_s
ile alabiliriz.
Nokogiri kütüphanesi ile HTTP response’unu parçalayarak istediğimiz kısımı alabiliriz.
html = res.get_html_document
greeting = html.at('div')
Örnekte div tag’ı olan yerler bulunmuştur.
https://github.com/rapid7/metasploit-framework/wiki/How-to-parse-an-HTTP-response
surum = res.body.scan(/Version = "(.*?)"/).flatten.first.to_s
Yukarıdaki örnekte Version = “2.3.4” geçen yer response içerisinde bulunarak 2.3.4 değeri surum değişkenine atanmıştır.
Burp Suite ile çalışma
Burp Suite, HttpClient
kullanarak bir modül geliştirirken HTTP trafiğini incelemek veya değiştirmek içinde kullanışlı bir araçtır. Bunu yapmak için:
- Burp Suite’i çalıştırın.
- Çalışmak istediğininiz modülü
use
ile seçin. set Proxies HTTP:127.0.0.1:8080
- Modül çalıştırıldığında HTTP trafiğinine müdahale edebilmelidir.