Module: PWN::Plugins::NmapIt

Defined in:
lib/pwn/plugins/nmap_it.rb

Overview

This plugin is used as an interface to nmap, the exploration tool and security / port scanner. More info on available options can be found at: github.com/postmodern/ruby-nmap/blob/main/lib/nmap/command.rb

Class Method Summary collapse

Class Method Details

.authorsObject

Author(s)

0day Inc. <[email protected]>



86
87
88
89
90
# File 'lib/pwn/plugins/nmap_it.rb', line 86

public_class_method def self.authors
  "AUTHOR(S):
    0day Inc. <[email protected]>
  "
end

.diff_xml_results(opts = {}) ⇒ Object

Supported Method Parameters

PWN::Plugins::NmapIt.diff_xml_results(

xml_a: 'required - path to nmap xml results',
xml_b: 'required - path to nmap xml results',
diff: 'required - path to nmap xml results diff'

)



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/pwn/plugins/nmap_it.rb', line 67

public_class_method def self.diff_xml_results(opts = {})
  xml_a = opts[:xml_a].to_s.scrub.strip.chomp
  xml_b = opts[:xml_b].to_s.scrub.strip.chomp
  diff = opts[:diff].to_s.scrub.strip.chomp

  stdout, _stderr, _status = Open3.capture3(
    'ndiff',
    '--xml',
    xml_a,
    xml_b
  )

  File.write(diff, stdout)
rescue StandardError => e
  raise e
end

.helpObject

Display Usage for this Module



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/pwn/plugins/nmap_it.rb', line 94

public_class_method def self.help
  puts "USAGE:
    #{self}.port_scan do |nmap|
      puts nmap.public_methods
      nmap.connect_scan = true
      nmap.service_scan = true
      nmap.verbose = true
      nmap.ports = [1..1024,1337]
      nmap.targets = '127.0.0.1'
      nmap.xml = '/tmp/nmap_port_scan_res.xml'
    end

    #{self}.parse_xml_results(:xml_file => 'required - path to nmap xml results') do |xml|
      xml.each_host do |host|
        puts host.ip

        host.scripts.each do |name,output|
          output.each_line { |line| puts line }
        end

        host.each_port do |port|
          puts port

          port.scripts.each do |name,output|
            puts name
            output.each_line { |line| puts line }
          end
        end
      end
    end

    #{self}.diff_xml_results(
      xml_a: 'required - path to nmap xml results',
      xml_b: 'required - path to nmap xml results',
      diff: 'required - path to nmap xml results diff'
    )

    #{self}.authors
  "
end

.parse_xml_results(opts = {}) ⇒ Object

Supported Method Parameters

PWN::Plugins::NmapIt.parse_xml_results(:xml_file => ‘required - path to nmap xml results’) do |xml|

puts xml.public_methods
xml.each_host do |host|
  puts "[#{host.ip}]"

  host.scripts.each do |name,output|
    output.each_line { |line| puts "  #{line}" }
  end

  host.each_port do |port|
    puts "  [#{port.number}/#{port.protocol}]"

    port.scripts.each do |name,output|
      puts "    [#{name}]"
      output.each_line { |line| puts "      #{line}" }
    end
  end
end

end



51
52
53
54
55
56
57
58
59
# File 'lib/pwn/plugins/nmap_it.rb', line 51

public_class_method def self.parse_xml_results(opts = {})
  xml_file = opts[:xml_file].to_s.scrub.strip.chomp if File.exist?(opts[:xml_file].to_s.scrub.strip.chomp)

  Nmap::XML.open(xml_file) do |xml|
    yield(xml)
  end
rescue StandardError => e
  raise e
end

.port_scanObject

Supported Method Parameters

PWN::Plugins::NmapIt.port_scan do |nmap|

puts nmap.public_methods
nmap.connect_scan = true
nmap.service_scan = true
nmap.verbose = true
nmap.ports = [1..1024,1337]
nmap.targets = '127.0.0.1'
nmap.xml = '/tmp/nmap_port_scan_res.xml'

end



22
23
24
25
26
27
28
# File 'lib/pwn/plugins/nmap_it.rb', line 22

public_class_method def self.port_scan
  Nmap::Command.sudo do |nmap|
    yield(nmap)
  end
rescue StandardError => e
  raise e
end