diff --git a/config/application.rb b/config/application.rb index e96bc21f80..c48edfafac 100644 --- a/config/application.rb +++ b/config/application.rb @@ -46,4 +46,7 @@ module Metasploit end end end -end \ No newline at end of file +end + +# Silence warnings about this defaulting to true +I18n.enforce_available_locales = true diff --git a/lib/msf/core/db.rb b/lib/msf/core/db.rb index b05cce6a27..52017ab8e3 100644 --- a/lib/msf/core/db.rb +++ b/lib/msf/core/db.rb @@ -2938,7 +2938,6 @@ class DBManager # is unknown. def import(args={}, &block) data = args[:data] || args['data'] - wspace = args[:wspace] || args['wspace'] || workspace ftype = import_filetype_detect(data) yield(:filetype, @import_filedata[:type]) if block self.send "import_#{ftype}".to_sym, args, &block @@ -2959,6 +2958,7 @@ class DBManager # :ip_list # :libpcap # :mbsa_xml + # :msf_cred_dump_zip # :msf_pwdump # :msf_xml # :msf_zip @@ -2980,6 +2980,8 @@ class DBManager # :wapiti_xml # # If there is no match, an error is raised instead. + # + # @raise DBImportError if the type can't be detected def import_filetype_detect(data) if data and data.kind_of? Zip::File @@ -2992,6 +2994,11 @@ class DBManager @import_filedata[:zip_basename] = @import_filedata[:zip_filename].gsub(/\.zip$/,"") @import_filedata[:zip_entry_names] = data.entries.map {|x| x.name} + if @import_filedata[:zip_entry_names].include?(Metasploit::Credential::Importer::Zip::MANIFEST_FILE_NAME) + @import_filedata[:type] = "Metasploit Credential Dump" + return :msf_cred_dump_zip + end + xml_files = @import_filedata[:zip_entry_names].grep(/^(.*)\.xml$/) # TODO This check for our zip export should be more extensive @@ -3613,10 +3620,10 @@ class DBManager } data.entries.each do |e| - target = ::File.join(@import_filedata[:zip_tmp],e.name) + target = ::File.join(@import_filedata[:zip_tmp], e.name) data.extract(e,target) - if target =~ /^.*.xml$/ + if target =~ /\.xml\z/ target_data = ::File.open(target, "rb") {|f| f.read 1024} if import_filetype_detect(target_data) == :msf_xml @import_filedata[:zip_extracted_xml] = target @@ -3801,7 +3808,9 @@ class DBManager end # Import credentials given a path to a valid manifest file + # # @param creds_dump_manifest_path [String] + # @param workspace [Mdm::Workspace] Default: {#workspace} # @return [void] def import_msf_cred_dump(creds_dump_manifest_path, workspace) manifest_file = File.open(creds_dump_manifest_path) @@ -3810,6 +3819,18 @@ class DBManager importer.import! end + # Import credentials given a path to a valid manifest file + # + # @option args [String] :filename + # @option args [Mdm::Workspace] :wspace Default: {#workspace} + # @return [void] + def import_msf_cred_dump_zip(args = {}) + wspace = args[:wspace] || workspace + origin = Metasploit::Credential::Origin::Import.create!(filename: File.basename(args[:filename])) + importer = Metasploit::Credential::Importer::Zip.new(workspace: wspace, input: File.open(args[:filename]), origin: origin) + importer.import! + nil + end # @param report [REXML::Element] to be imported # @param args [Hash]