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ü
useile seçin. set Proxies HTTP:127.0.0.1:8080- Modül çalıştırıldığında HTTP trafiğinine müdahale edebilmelidir.