Class: Msf::Exploit::Remote::Pkcs12::Storage
- Inherits:
-
Object
- Object
- Msf::Exploit::Remote::Pkcs12::Storage
- Includes:
- Auxiliary::Report
- Defined in:
- lib/msf/core/exploit/remote/pkcs12/storage.rb
Instance Attribute Summary collapse
-
#framework ⇒ Object
readonly
Returns the value of attribute framework.
-
#framework_module ⇒ Object
readonly
Returns the value of attribute framework_module.
Instance Method Summary collapse
-
#activate(ids:) ⇒ Array<StoredPkcs12>
Mark Pkcs12(s) as active.
-
#deactivate(ids:) ⇒ Array<StoredPkcs12>
Mark Pkcs12(s) as inactive.
- #delete(options = {}) ⇒ Object
-
#filter_pkcs12(options) ⇒ Array<Metasploit::Credential::Core>
Return the raw stored pkcs12.
-
#initialize(framework: nil, framework_module: nil) ⇒ Storage
constructor
A new instance of Storage.
-
#pkcs12(options = {}, &block) ⇒ Array<StoredPkcs12>
Get stored pkcs12 matching the options query.
-
#workspace ⇒ String
The name of the workspace in which to operate.
Methods included from Auxiliary::Report
#active_db?, #create_cracked_credential, #create_credential, #create_credential_and_login, #create_credential_login, #db, #db_warning_given?, #get_client, #get_host, #inside_workspace_boundary?, #invalidate_login, #mytask, #myworkspace, #myworkspace_id, #report_auth_info, #report_client, #report_exploit, #report_host, #report_loot, #report_note, #report_service, #report_vuln, #report_web_form, #report_web_page, #report_web_site, #report_web_vuln, #store_cred, #store_local, #store_loot
Methods included from Metasploit::Framework::Require
optionally, optionally_active_record_railtie, optionally_include_metasploit_credential_creation, #optionally_include_metasploit_credential_creation, optionally_require_metasploit_db_gem_engines
Constructor Details
#initialize(framework: nil, framework_module: nil) ⇒ Storage
Returns a new instance of Storage.
14 15 16 17 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 14 def initialize(framework: nil, framework_module: nil) @framework = framework || framework_module&.framework @framework_module = framework_module end |
Instance Attribute Details
#framework ⇒ Object (readonly)
Returns the value of attribute framework.
8 9 10 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 8 def framework @framework end |
#framework_module ⇒ Object (readonly)
Returns the value of attribute framework_module.
12 13 14 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 12 def framework_module @framework_module end |
Instance Method Details
#activate(ids:) ⇒ Array<StoredPkcs12>
Mark Pkcs12(s) as active
122 123 124 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 122 def activate(ids:) set_status(ids: ids, status: 'active') end |
#deactivate(ids:) ⇒ Array<StoredPkcs12>
Mark Pkcs12(s) as inactive
114 115 116 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 114 def deactivate(ids:) set_status(ids: ids, status: 'inactive') end |
#delete(options = {}) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 88 def delete( = {}) if .keys == [:ids] # skip calling #filter_pkcs12 which issues a query when the IDs are specified ids = [:ids] else ids = filter_pkcs12().map(&:id) end framework.db.delete_credentials(ids: ids).map do |stored_pkcs12| StoredPkcs12.new(stored_pkcs12) end end |
#filter_pkcs12(options) ⇒ Array<Metasploit::Credential::Core>
Return the raw stored pkcs12.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 42 def filter_pkcs12() return [] unless active_db? filter = {} filter[:id] = [:id] if [:id].present? creds = framework.db.creds( workspace: .fetch(:workspace) { workspace }, type: 'Metasploit::Credential::Pkcs12', **filter ).select do |cred| # this is needed since if a filter is provided (e.g. `id:`) framework.db.creds will ignore the type: next false unless cred.private.type == 'Metasploit::Credential::Pkcs12' if [:username].present? next false if [:username].casecmp(cred.public.username) != 0 end if [:realm].present? && cred.realm next false if [:realm].casecmp(cred.realm.value) != 0 end if [:status].present? # If status is not set on the credential, considere it is `active` status = cred.private.status || 'active' next false if status != [:status] end cert = cred.private.openssl_pkcs12.certificate unless Time.now.between?(cert.not_before, cert.not_after) ilog("[filter_pkcs12] Found a matching certificate but it has expired") next false end if [:tls_auth] eku = cert.extensions.select { |c| c.oid == 'extendedKeyUsage' }.first unless eku&.value.include?('TLS Web Client Authentication') ilog("[filter_pkcs12] Found a matching certificate but it doesn't have the 'TLS Web Client Authentication' EKU") next false end end true end end |
#pkcs12(options = {}, &block) ⇒ Array<StoredPkcs12>
Get stored pkcs12 matching the options query.
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 26 def pkcs12( = {}, &block) stored_pkcs12_array = filter_pkcs12().map do |pkcs12_entry| StoredPkcs12.new(pkcs12_entry) end stored_pkcs12_array.each do |stored_pkcs12| block.call(stored_pkcs12) if block_given? end stored_pkcs12_array end |
#workspace ⇒ String
Returns The name of the workspace in which to operate.
102 103 104 105 106 107 108 |
# File 'lib/msf/core/exploit/remote/pkcs12/storage.rb', line 102 def workspace if @framework_module return @framework_module.workspace elsif @framework&.db&.active return @framework.db.workspace&.name end end |