Skip to content

Commit 0d591a3

Browse files
Land #18526, Add a command to customise DNS resolution
2 parents 21d23be + 473ded3 commit 0d591a3

File tree

13 files changed

+873
-67
lines changed

13 files changed

+873
-67
lines changed

lib/msf/base/sessions/meterpreter.rb

+4
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,10 @@ def create(param)
602602
sock
603603
end
604604

605+
def supports_udp?
606+
true
607+
end
608+
605609
#
606610
# Get a string representation of the current session platform
607611
#

lib/msf/base/sessions/ssh_command_shell_bind.rb

+4
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,10 @@ def create(params)
287287
sock
288288
end
289289

290+
def supports_udp?
291+
false
292+
end
293+
290294
def create_server_channel(params)
291295
msf_channel = nil
292296
mutex = Mutex.new

lib/msf/core/feature_manager.rb

+7
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class FeatureManager
2020
MANAGER_COMMANDS = 'manager_commands'
2121
METASPLOIT_PAYLOAD_WARNINGS = 'metasploit_payload_warnings'
2222
DEFER_MODULE_LOADS = 'defer_module_loads'
23+
DNS_FEATURE = 'dns_feature'
2324
DEFAULTS = [
2425
{
2526
name: WRAPPED_TABLES,
@@ -53,6 +54,12 @@ class FeatureManager
5354
description: 'When enabled will not eagerly load all modules',
5455
requires_restart: true,
5556
default_value: false
57+
}.freeze,
58+
{
59+
name: DNS_FEATURE,
60+
description: 'When enabled, allows configuration of DNS resolution behaviour in Metasploit',
61+
requires_restart: false,
62+
default_value: false
5663
}.freeze
5764
].freeze
5865

lib/msf/core/framework.rb

+11
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ def initialize(options={})
8282
require 'msf/core/cert_provider'
8383
Rex::Socket::Ssl.cert_provider = Msf::Ssl::CertProvider
8484

85+
if options.include?('CustomDnsResolver')
86+
self.dns_resolver = options['CustomDnsResolver']
87+
self.dns_resolver.set_framework(self)
88+
Rex::Socket._install_global_resolver(self.dns_resolver)
89+
end
90+
8591
subscriber = FrameworkEventSubscriber.new(self)
8692
events.add_exploit_subscriber(subscriber)
8793
events.add_session_subscriber(subscriber)
@@ -147,6 +153,10 @@ def version
147153
Version
148154
end
149155

156+
#
157+
# DNS resolver for the framework
158+
#
159+
attr_reader :dns_resolver
150160
#
151161
# Event management interface for registering event handler subscribers and
152162
# for interacting with the correlation engine.
@@ -278,6 +288,7 @@ def eicar_corrupted?
278288
# @return [Hash]
279289
attr_accessor :options
280290

291+
attr_writer :dns_resolver #:nodoc:
281292
attr_writer :events # :nodoc:
282293
attr_writer :modules # :nodoc:
283294
attr_writer :datastore # :nodoc:

lib/msf/core/session/comm.rb

+7
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ module Comm
2222
def create(param)
2323
raise NotImplementedError
2424
end
25+
26+
#
27+
# Does the Comm support sending UDP messages?
28+
#
29+
def supports_udp?
30+
raise NotImplementedError
31+
end
2532
end
2633

2734
end

lib/msf/ui/console/command_dispatcher/core.rb

+1
Original file line numberDiff line numberDiff line change
@@ -1350,6 +1350,7 @@ def cmd_save(*args)
13501350
# Save the framework's datastore
13511351
begin
13521352
framework.save_config
1353+
driver.framework.dns_resolver.save_config
13531354

13541355
if active_module
13551356
active_module.save_config

0 commit comments

Comments
 (0)