diff --git a/modules/post/multi/gather/enum_vbox.rb b/modules/post/multi/gather/enum_vbox.rb index d5a4b2591f..283ffbfa7b 100644 --- a/modules/post/multi/gather/enum_vbox.rb +++ b/modules/post/multi/gather/enum_vbox.rb @@ -16,10 +16,10 @@ class Metasploit3 < Msf::Post super( update_info(info, 'Name' => 'Multi Gather VirtualBox VM Enumeration', 'Description' => %q{ - This module will attempt to enumerate any VirtualBox VMs on the target machine. - Due to the nature of VirtualBox, this module can only enumerate VMs registered - for the current user, thereforce, this module needs to be invoked from a user context. - }, + This module will attempt to enumerate any VirtualBox VMs on the target machine. + Due to the nature of VirtualBox, this module can only enumerate VMs registered + for the current user, thereforce, this module needs to be invoked from a user context. + }, 'License' => MSF_LICENSE, 'Author' => ['theLightCosine'], 'Platform' => %w{ bsd linux osx unix win }, @@ -29,27 +29,37 @@ class Metasploit3 < Msf::Post def run if session.platform =~ /win/ - res = session.shell_command_token_win32('"c:\Program Files\Oracle\VirtualBox\vboxmanage" list -l vms') || '' - if res.include? "The system cannot find the path specified" - print_error "VirtualBox does not appear to be installed on this machine" - return nil - elsif res == "\n" - print_status "VirtualBox is installed but this user has no VMs registered. Try another user." - return nil + if session.type == 'meterpreter' + begin + res = cmd_exec('c:\\Program Files\\Oracle\\VirtualBox\\vboxmanage', 'list -l vms') + rescue ::Rex::Post::Meterpreter::RequestError + print_error('VirtualBox does not appear to be installed on this machine') + return nil + end + + if res.empty? + print_status('VirtualBox is installed but this user has no VMs registered. Try another user.') + return nil + end + else + res = cmd_exec('"c:\\Program Files\\Oracle\\VirtualBox\\vboxmanage" list -l vms') + if res.empty? + print_error('VirtualBox isn\'t installed or this user has no VMs registered') + return nil + end end elsif session.platform =~ /unix|linux|bsd|osx/ - res = session.shell_command('vboxmanage list -l vms') - unless res.start_with? "Sun VirtualBox" - print_error "VirtualBox does not appear to be installed on this machine" - return nil - end - unless res.include? "Name:" - print_status "VirtualBox is installed but this user has no VMs registered. Try another user." + res = cmd_exec('vboxmanage list -l vms') + + unless res.start_with?('Sun VirtualBox') || res.include?('Name:') + print_error('VirtualBox isn\'t installed or this user has no VMs registered') return nil end end - print_good res - store_loot('virtualbox_vms', "text/plain", session, res, "virtualbox_vms.txt", "Virtualbox Virtual Machines") + + vprint_status(res) + store_path = store_loot('virtualbox_vms', "text/plain", session, res, "virtualbox_vms.txt", "Virtualbox Virtual Machines") + print_good("#{peer} - File successfully retrieved and saved on #{store_path}") end