Skip to content

Commit

Permalink
Adds a test module for host resolution
Browse files Browse the repository at this point in the history
  • Loading branch information
cgranleese-r7 committed Feb 3, 2025
1 parent 8ee5649 commit 36a67c7
Show file tree
Hide file tree
Showing 9 changed files with 298 additions and 0 deletions.
32 changes: 32 additions & 0 deletions spec/support/acceptance/command_shell/cmd.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,38 @@ module Acceptance::Session
}
],
module_tests: [
{
name: 'post/test/resolve_host',
platforms: [
[
:linux,
{
skip: true,
reason: 'Payload not compiled for platform'
}
],
[
:osx,
{
skip: true,
reason: 'Payload not compiled for platform'
}
],
:windows
],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: []
}
}
},
{
name: 'post/test/cmd_exec',
platforms: [
Expand Down
26 changes: 26 additions & 0 deletions spec/support/acceptance/command_shell/linux.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,32 @@ module Acceptance::Session
}
}
},
{
name: "post/test/resolve_host",
platforms: [
:linux,
:osx,
[
:windows,
{
skip: true,
reason: "Payload not compiled for platform"
}
]
],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: []
}
}
},
{
name: "post/test/cmd_exec",
platforms: [
Expand Down
32 changes: 32 additions & 0 deletions spec/support/acceptance/command_shell/powershell.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,38 @@ module Acceptance::Session
}
],
module_tests: [
{
name: 'post/test/resolve_host',
platforms: [
[
:linux,
{
skip: true,
reason: 'Payload not compiled for platform'
}
],
[
:osx,
{
skip: true,
reason: 'Payload not compiled for platform'
}
],
:windows
],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: []
}
}
},
{
name: 'post/test/cmd_exec',
platforms: [
Expand Down
16 changes: 16 additions & 0 deletions spec/support/acceptance/session/java.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,22 @@ module Acceptance::Session
}
}
},
{
name: "post/test/resolve_host",
platforms: [:linux, :osx, :windows],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: []
}
}
},
{
name: "post/test/cmd_exec",
platforms: [:linux, :osx, :windows],
Expand Down
26 changes: 26 additions & 0 deletions spec/support/acceptance/session/mettle.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,32 @@ module Acceptance::Session
}
}
},
{
name: "post/test/resolve_host",
platforms: [
:linux,
:osx,
[
:windows,
{
skip: true,
reason: "Payload not compiled for platform"
}
]
],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: []
}
}
},
{
name: "post/test/cmd_exec",
platforms: [
Expand Down
17 changes: 17 additions & 0 deletions spec/support/acceptance/session/php.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,23 @@ module Acceptance::Session
}
}
},
{
name: "post/test/resolve_host",
platforms: [:linux, :osx, :windows],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: [
]
}
}
},
{
name: "post/test/cmd_exec",
platforms: [:linux, :osx, :windows],
Expand Down
16 changes: 16 additions & 0 deletions spec/support/acceptance/session/python.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,22 @@ module Acceptance::Session
}
}
},
{
name: "post/test/resolve_host",
platforms: [:linux, :osx, :windows],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: []
}
}
},
{
name: "post/test/cmd_exec",
platforms: [:linux, :osx, :windows],
Expand Down
32 changes: 32 additions & 0 deletions spec/support/acceptance/session/windows_meterpreter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,38 @@ module Acceptance::Session
}
}
},
{
name: "post/test/resolve_host",
platforms: [
[
:linux,
{
skip: true,
reason: "Payload not compiled for platform"
}
],
[
:osx,
{
skip: true,
reason: "Payload not compiled for platform"
}
],
:windows
],
skipped: false,
lines: {
linux: {
known_failures: []
},
osx: {
known_failures: []
},
windows: {
known_failures: []
}
}
},
{
name: "post/test/cmd_exec",
platforms: [
Expand Down
101 changes: 101 additions & 0 deletions test/modules/post/test/resolve_host.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
require 'rex'

lib = File.join(Msf::Config.install_root, "test", "lib")
$LOAD_PATH.push(lib) unless $LOAD_PATH.include?(lib)
require 'module_test'

class MetasploitModule < Msf::Post
include Msf::ModuleTest::PostTest
include Msf::Post::DNS::ResolveHost

def initialize(info = {})
super(
update_info(
info,
'Name' => 'Meterpreter resolve_host test',
'Description' => %q( This module will test the meterpreter resolve_host API ),
'License' => MSF_LICENSE,
'Platform' => [ 'windows', 'linux', 'unix', 'java', 'osx' ],
'SessionTypes' => ['meterpreter', 'shell', 'powershell']
)
)
end
def test_resolve_host
vprint_status("Starting resolve_host tests")

it "should return a Hash" do
# TODO: UPDATE TO NOT POINT AT GOOGLE
hostname = "google.com"
family = AF_INET6

resolved_host = resolve_host(hostname, family)
resolved_host.is_a?(Hash)
end

it "should return a valid IPV4 host" do
hostname = "rapid7.com"
family = AF_INET

resolved_host = resolve_host(hostname, family)

puts resolved_host[:ips]
resolved_host[:ips].each { |ip| !!(ip =~ Resolv::IPv4::Regex) }
end

it "should return a valid IPV6 host" do
hostname = "google.com"
family = AF_INET6

resolved_host = resolve_host(hostname, family)

puts resolved_host[:ips]
resolved_host[:ips].each { |ip| !!(ip =~ Resolv::IPv6::Regex) }
end

it "should handle an invalid IPV4 host" do
hostname = "foo.bar"
family = AF_INET

begin
resolve_host(hostname, family)
rescue Rex::Post::Meterpreter::RequestError => e
e.class == Rex::Post::Meterpreter::RequestError
end
end

it "should handle an invalid IPV6 host" do
hostname = "foo.bar"
family = AF_INET6

begin
resolve_host(hostname, family)
rescue Rex::Post::Meterpreter::RequestError => e
e.class == Rex::Post::Meterpreter::RequestError
end
end

# it "should return a valid IPV4 host via nslookup" do
# hostname = "google.com"
# family = AF_INET
#
# resolved_host = resolve_host(hostname, family)
#
# puts resolved_host[:ips]
# resolved_host[:ips].each { |ip| !!(ip =~ Resolv::IPv4::Regex) }
# end

# it "should return a valid IPV6 host via nslookup" do
# hostname = "google.com"
# family = AF_INET6
#
# resolved_host = resolve_host(hostname, family)
#
# resolved_host[:ips].each { |ip| !!(ip =~ Resolv::IPv6::Regex) }
# end

# TODO:
# - nslookup TESTS (IPV4/6)
# - HOST TESTS (IPV4/6)
#
end
end

0 comments on commit 36a67c7

Please sign in to comment.