metasploit-framework/modules/auxiliary/admin/smb/download_file.rb

81 lines
2.3 KiB
Ruby
Raw Normal View History

##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
2016-03-08 13:02:44 +00:00
class MetasploitModule < Msf::Auxiliary
# Exploit mixins should be called first
2015-02-13 23:17:59 +00:00
include Msf::Exploit::Remote::SMB::Client
include Msf::Exploit::Remote::SMB::Client::Authenticated
2015-11-10 02:15:40 +00:00
include Msf::Exploit::Remote::SMB::Client::RemotePaths
include Msf::Auxiliary::Report
include Msf::Auxiliary::Scanner
# Aliases for common classes
SIMPLE = Rex::Proto::SMB::SimpleClient
XCEPT = Rex::Proto::SMB::Exceptions
CONST = Rex::Proto::SMB::Constants
def initialize
super(
'Name' => 'SMB File Download Utility',
'Description' => %Q{
This module downloads a file from a target share and path. The usual reason
2013-10-28 18:48:25 +00:00
to use this module is to work around limitations in an existing SMB client that may not
be able to take advantage of pass-the-hash style authentication.
},
'Author' =>
[
'mubix' # copied from hdm upload_file module
],
'License' => MSF_LICENSE
)
register_options([
OptString.new('SMBSHARE', [true, 'The name of a share on the RHOST', 'C$'])
])
end
2013-10-23 17:22:49 +00:00
def smb_download
vprint_status("Connecting...")
connect()
smb_login()
vprint_status("#{peer}: Mounting the remote share \\\\#{rhost}\\#{datastore['SMBSHARE']}'...")
self.simple.connect("\\\\#{rhost}\\#{datastore['SMBSHARE']}")
remote_paths.each do |remote_path|
begin
vprint_status("Trying to download #{remote_path}...")
data = ''
fd = simple.open("\\#{remote_path}", 'ro')
begin
data = fd.read
ensure
fd.close
end
fname = remote_path.split("\\")[-1]
path = store_loot("smb.shares.file", "application/octet-stream", rhost, data, fname)
print_good("#{remote_path} saved as: #{path}")
rescue Rex::Proto::SMB::Exceptions::ErrorCode => e
2015-12-08 17:06:59 +00:00
elog("#{e.class} #{e.message}\n#{e.backtrace * "\n"}")
print_error("Unable to download #{remote_path}: #{e.message}")
end
end
end
def run_host(ip)
2013-10-23 17:22:49 +00:00
begin
smb_download
rescue Rex::Proto::SMB::Exceptions::LoginError => e
2015-12-08 17:06:59 +00:00
elog("#{e.class} #{e.message}\n#{e.backtrace * "\n"}")
print_error("Unable to login: #{e.message}")
2013-10-23 17:22:49 +00:00
end
end
end