dradis-metasploit 3.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,28 @@
1
+ # Metasploit add-on for Dradis
2
+
3
+ [![Build Status](https://secure.travis-ci.org/dradis/dradis-metasploit.png?branch=master)](http://travis-ci.org/dradis/dradis-metasploit) [![Code Climate](https://codeclimate.com/github/dradis/dradis-metasploit.png)](https://codeclimate.com/github/dradis/dradis-metasploit.png)
4
+
5
+ The Metasploit add-on enables users to upload Metasploit XML files to create a structure of nodes/notes that contain the same information about the hosts/ports/services as the original file.
6
+
7
+ The add-on requires [Dradis CE](https://dradisframework.org/) > 3.0, or [Dradis Pro](https://dradisframework.com/pro/).
8
+
9
+
10
+
11
+ ## More information
12
+
13
+ See the Dradis Framework's [README.md](https://github.com/dradis/dradisframework/blob/master/README.md)
14
+
15
+
16
+ ## Contributing
17
+
18
+ See the Dradis Framework's [CONTRIBUTING.md](https://github.com/dradis/dradisframework/blob/master/CONTRIBUTING.md)
19
+
20
+
21
+ ## License
22
+
23
+ Dradis Framework and all its components are released under [GNU General Public License version 2.0](http://www.gnu.org/licenses/old-licenses/gpl-2.0.html) as published by the Free Software Foundation and appearing in the file LICENSE included in the packaging of this file.
24
+
25
+
26
+ ## Feature requests and bugs
27
+
28
+ Please use the [Dradis Framework issue tracker](https://github.com/dradis/dradis-ce/issues) for add-on improvements and bug reports.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,34 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+ require 'dradis/plugins/metasploit/version'
3
+ version = Dradis::Plugins::Metasploit::VERSION::STRING
4
+
5
+ # Describe your gem and declare its dependencies:
6
+ Gem::Specification.new do |spec|
7
+ spec.platform = Gem::Platform::RUBY
8
+ spec.name = 'dradis-metasploit'
9
+ spec.version = version
10
+ spec.summary = 'Metasploit add-on for the Dradis Framework.'
11
+ spec.description = 'This add-on allows you to upload and parse output produced from Metasploit Framework into Dradis.'
12
+
13
+ spec.license = 'GPL-2'
14
+
15
+ spec.authors = ['Daniel Martin']
16
+ spec.email = ['etd@nomejortu.com']
17
+ spec.homepage = 'http://dradisframework.org'
18
+
19
+ spec.files = `git ls-files`.split($\)
20
+ spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
21
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
+
23
+ # By not including Rails as a dependency, we can use the gem with different
24
+ # versions of Rails (a sure recipe for disaster, I'm sure), which is needed
25
+ # until we bump Dradis Pro to 4.1.
26
+ # s.add_dependency 'rails', '~> 4.1.1'
27
+ spec.add_dependency 'dradis-plugins', '~> 3.6'
28
+ spec.add_dependency 'nokogiri', '~> 1.3'
29
+
30
+ spec.add_development_dependency 'bundler', '~> 1.6'
31
+ spec.add_development_dependency 'rake', '~> 10.0'
32
+ spec.add_development_dependency 'rspec-rails'
33
+ spec.add_development_dependency 'combustion', '~> 0.5.3'
34
+ end
@@ -0,0 +1,5 @@
1
+ # Hook to the framework base clases
2
+ require 'dradis-plugins'
3
+
4
+ # Load this add-on's engine
5
+ require 'dradis/plugins/metasploit'
@@ -0,0 +1,11 @@
1
+ module Dradis
2
+ module Plugins
3
+ module Metasploit
4
+ end
5
+ end
6
+ end
7
+
8
+ require 'dradis/plugins/metasploit/engine'
9
+ require 'dradis/plugins/metasploit/field_processor'
10
+ require 'dradis/plugins/metasploit/importer'
11
+ require 'dradis/plugins/metasploit/version'
@@ -0,0 +1,13 @@
1
+ module Dradis
2
+ module Plugins
3
+ module Metasploit
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Dradis::Plugins::Metasploit
6
+
7
+ include ::Dradis::Plugins::Base
8
+ description 'Processes Metasploit XML output, use: db_export'
9
+ provides :upload
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,25 @@
1
+ module Dradis
2
+ module Plugins
3
+ module Metasploit
4
+ class FieldProcessor < Dradis::Plugins::Upload::FieldProcessor
5
+ # No need to implement anything here
6
+ # def post_initialize(args={})
7
+ # end
8
+
9
+ def value(args={})
10
+ field = args[:field]
11
+
12
+ # fields in the template are of the form <foo>.<field>, where <foo>
13
+ # is common across all fields for a given template (and meaningless).
14
+ _, name = field.split('.')
15
+
16
+ if child = data.at_xpath(name)
17
+ child.text
18
+ else
19
+ 'n/a'
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ module Dradis
2
+ module Plugins
3
+ module Metasploit
4
+ # Returns the version of the currently loaded Dradis as a <tt>Gem::Version</tt>
5
+ def self.gem_version
6
+ Gem::Version.new VERSION::STRING
7
+ end
8
+
9
+ module VERSION
10
+ MAJOR = 3
11
+ MINOR = 18
12
+ TINY = 0
13
+ PRE = nil
14
+
15
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,98 @@
1
+ module Dradis::Plugins::Metasploit
2
+ class Importer < Dradis::Plugins::Upload::Importer
3
+ # The framework will call this function if the user selects this plugin from
4
+ # the dropdown list and uploads a file.
5
+ # @returns true if the operation was successful, false otherwise
6
+ def import(params={})
7
+
8
+ file_content = File.read( params[:file] )
9
+
10
+ # Parse the uploaded file into a Ruby Hash
11
+ logger.info { "Parsing Metasploit output from #{ params[:file] }..." }
12
+ @doc = Nokogiri::XML(file_content)
13
+ logger.info { 'Done.' }
14
+
15
+ case @doc.root.name
16
+ when 'MetasploitV5'
17
+ # version_importer = Dradis::Plugins::Metasploit::Importers::Version5.new(@doc)
18
+ when /MetasploitV/
19
+ error = "Invalid Metasploit version. Sorry, the XML file corresponds to a version of Metasploit we don't have a parser for. Please let us know: http://discuss.dradisframework.org"
20
+ logger.fatal { error }
21
+ content_service.create_note text: error
22
+ return false
23
+ else
24
+ error = "Invalid XML file. The XML document didn't contain a Metasploit root tag. Did you upload a Metasploit XML file?"
25
+ logger.fatal { error }
26
+ content_service.create_note text: error
27
+ return false
28
+ end
29
+
30
+ parse_file
31
+ end
32
+
33
+ private
34
+ def parse_file
35
+ # hosts
36
+ @doc.root.xpath('hosts/host').each do |xml_host|
37
+ parse_host(xml_host)
38
+ end
39
+
40
+ # events
41
+ # services
42
+ # web sites
43
+ # web pages
44
+ # web forms
45
+ # web vulns
46
+ # module details
47
+ end
48
+
49
+ # Parses each of the MetasploitV5/hosts/host entries in the document.
50
+ def parse_host(xml_host)
51
+ address = xml_host.at_xpath('address').text
52
+ logger.info { "\tParsing: #{address}" }
53
+
54
+ # Create the Node
55
+ host_node = content_service.create_node(label: address, type: :host)
56
+
57
+ # Node properties
58
+ if host_node.respond_to?(:properties)
59
+ # Set basic host properties
60
+ host_node.set_property(:ip, address)
61
+
62
+ if mac = xml_host.at_xpath('mac')
63
+ host_node.set_property(:mac, mac.text)
64
+ end
65
+
66
+ if os_name = xml_host.at_xpath('os-name')
67
+ host_node.set_property(:os_name, os_name.text)
68
+ end
69
+
70
+ # Service-related properties
71
+ xml_host.xpath('services/service').each do |xml_service|
72
+ port = xml_service.at_xpath('port').text.to_i
73
+ protocol = xml_service.at_xpath('proto').text
74
+ state = xml_service.at_xpath('state').text
75
+
76
+ logger.info { "\t\tFound: #{protocol}/#{port} - #{state}" }
77
+
78
+ host_node.set_service(
79
+ protocol: protocol,
80
+ port: port,
81
+ state: state,
82
+ name: xml_service.at_xpath('name').text,
83
+ source: :metasploit,
84
+ info: xml_service.at_xpath('info').text,
85
+ )
86
+ end
87
+
88
+ # Commit changes
89
+ host_node.save
90
+ end
91
+
92
+ xml_host.xpath('notes/note').each do |xml_note|
93
+ host_note = template_service.process_template(template: 'host_note', data: xml_note)
94
+ content_service.create_note(text: host_note, node: host_node)
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'gem_version'
2
+
3
+ module Dradis
4
+ module Plugins
5
+ module Metasploit
6
+ # Returns the version of the currently loaded Metasploit as a
7
+ # <tt>Gem::Version</tt>.
8
+ def self.version
9
+ gem_version
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ class MetasploitTasks < Thor
2
+ include Rails.application.config.dradis.thor_helper_module
3
+
4
+ namespace "dradis:plugins:metasploit"
5
+
6
+ desc "upload FILE", "upload Metasploit results in XML format"
7
+ long_desc "This plugin expects an XML file generated by Metasploit using: db_export"\
8
+
9
+ def upload(file_path)
10
+ require 'config/environment'
11
+
12
+ unless File.exist?(file_path)
13
+ $stderr.puts "** the file [#{file_path}] does not exist"
14
+ exit(-1)
15
+ end
16
+
17
+ detect_and_set_project_scope
18
+
19
+ importer = Dradis::Plugins::Metasploit::Importer.new(task_options)
20
+ importer.import(file: file_path)
21
+ end
22
+
23
+ end
@@ -0,0 +1,98 @@
1
+ require "spec_helper"
2
+ require "ostruct"
3
+
4
+ describe Dradis::Plugins::Metasploit::Importer do
5
+ let(:plugin) { Dradis::Plugins::Metasploit }
6
+
7
+ let(:content_service) { Dradis::Plugins::ContentService.new(plugin: plugin) }
8
+ let(:template_service) { Dradis::Plugins::TemplateService.new(plugin: plugin) }
9
+
10
+ let(:importer) {
11
+ described_class.new(
12
+ content_service: content_service,
13
+ template_service: template_service
14
+ )
15
+ }
16
+
17
+ before do
18
+ # Stub template service
19
+ templates_dir = File.expand_path('../../../../../templates', __FILE__)
20
+ allow_any_instance_of(Dradis::Plugins::TemplateService).to \
21
+ receive(:default_templates_dir).and_return(templates_dir)
22
+
23
+ # Stub dradis-plugins methods
24
+ #
25
+ # They return their argument hashes as objects mimicking
26
+ # Nodes, Issues, etc
27
+ %i[node note evidence issue].each do |model|
28
+ allow(content_service).to receive(:"create_#{model}") do |args|
29
+ OpenStruct.new(args)
30
+ end
31
+ end
32
+ end
33
+
34
+ let(:example_xml) { 'spec/fixtures/files/msf5.xml' }
35
+
36
+ def run_import!
37
+ importer.import(file: example_xml)
38
+ end
39
+
40
+ context "valid XML file" do
41
+ it "detects an invalid XML root tag" do
42
+ expect_to_create_note_with(text: 'Invalid XML')
43
+ expect(importer.import(file: 'spec/fixtures/files/qualys.xml')).to eq(false)
44
+ end
45
+
46
+ it "detects a not-supported Metasploit XML version" do
47
+ expect_to_create_note_with(text: 'Invalid Metasploit version')
48
+ expect(importer.import(file: 'spec/fixtures/files/msf4.xml')).to eq(false)
49
+ end
50
+
51
+ context "supported XML version" do
52
+ it "creates one Node for each host" do
53
+ expect_to_create_node_with(label: '10.127.53.65', type: :host)
54
+ run_import!
55
+ end
56
+
57
+ it "creates one Note for each host note" do
58
+ expect_to_create_note_with(text: 'mac_oui')
59
+ expect_to_create_note_with(text: 'fingerprint.match')
60
+ expect_to_create_note_with(text: 'smb.fingerprint')
61
+
62
+ run_import!
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+
69
+ def expect_to_create_node_with(label:, type: :default)
70
+ expect(content_service).to receive(:create_node).with(
71
+ hash_including label: label, type: type
72
+ ).once
73
+ end
74
+
75
+ def expect_to_create_note_with(node_label: nil, text:)
76
+ expect(content_service).to receive(:create_note) do |args|
77
+ expect(args[:text]).to include text
78
+ expect(args[:node].label).to eq node_label unless node_label.nil?
79
+ end.once
80
+ end
81
+
82
+ def expect_to_create_issue_with(text:)
83
+ expect(content_service).to receive(:create_issue) do |args|
84
+ expect(args[:text]).to include text
85
+ OpenStruct.new(args)
86
+ end.once
87
+ end
88
+
89
+ def expect_to_create_evidence_with(content:, issue:, node_label:)
90
+ expect(content_service).to receive(:create_evidence) do |args|
91
+ expect(args[:content]).to include content
92
+ expect(args[:issue].text).to include issue
93
+ expect(args[:node].label).to eq node_label
94
+ end.once
95
+ end
96
+
97
+ end
98
+
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <MetasploitV4>
3
+ <generated time="2015-01-07 21:04:30 UTC" user="root" project="default" product="framework"/>
4
+ <!-- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -->
5
+ </MetasploitV4>
@@ -0,0 +1,248 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <MetasploitV5>
3
+ <generated time="2015-01-07 21:04:30 UTC" user="root" project="default" product="framework"/>
4
+ <hosts>
5
+ <host>
6
+ <id>91</id>
7
+ <created-at>2014-12-17 17:52:03 UTC</created-at>
8
+ <address>10.127.53.65</address>
9
+ <mac>00:1a:4b:44:bc:66</mac>
10
+ <comm></comm>
11
+ <name>MAPWS</name>
12
+ <state>alive</state>
13
+ <os-name>Windows XP</os-name>
14
+ <os-flavor/>
15
+ <os-sp/>
16
+ <os-lang/>
17
+ <arch/>
18
+ <workspace-id>2</workspace-id>
19
+ <updated-at>2014-12-17 19:58:31 UTC</updated-at>
20
+ <purpose>client</purpose>
21
+ <info/>
22
+ <comments/>
23
+ <scope/>
24
+ <virtual-host/>
25
+ <note-count>3</note-count>
26
+ <vuln-count>0</vuln-count>
27
+ <service-count>2</service-count>
28
+ <host-detail-count>0</host-detail-count>
29
+ <exploit-attempt-count>9</exploit-attempt-count>
30
+ <cred-count>0</cred-count>
31
+ <nexpose-data-asset-id/>
32
+ <history-count>0</history-count>
33
+ <detected-arch/>
34
+ <host_details>
35
+ </host_details>
36
+ <exploit_attempts>
37
+ <exploit_attempt>
38
+ <id>594</id>
39
+ <host-id>91</host-id>
40
+ <service-id/>
41
+ <vuln-id/>
42
+ <attempted-at>2014-12-17 20:08:53 UTC</attempted-at>
43
+ <exploited/>
44
+ <fail-reason>no-access</fail-reason>
45
+ <username>root</username>
46
+ <module>exploit/windows/smb/ms10_061_spoolss</module>
47
+ <session-id/>
48
+ <loot-id/>
49
+ <port>445</port>
50
+ <proto>tcp</proto>
51
+ <fail-detail>The server responded with error: STATUS_ACCESS_DENIED (Command=37 WordCount=0)</fail-detail>
52
+ </exploit_attempt>
53
+ <exploit_attempt>
54
+ <id>595</id>
55
+ <host-id>91</host-id>
56
+ <service-id/>
57
+ <vuln-id/>
58
+ <attempted-at>2014-12-17 20:09:15 UTC</attempted-at>
59
+ <exploited/>
60
+ <fail-reason>no-access</fail-reason>
61
+ <username>root</username>
62
+ <module>exploit/windows/oracle/extjob</module>
63
+ <session-id/>
64
+ <loot-id/>
65
+ <port>445</port>
66
+ <proto>tcp</proto>
67
+ <fail-detail>The server responded with error: STATUS_ACCESS_DENIED (Command=162 WordCount=0)</fail-detail>
68
+ </exploit_attempt>
69
+ <exploit_attempt>
70
+ <id>596</id>
71
+ <host-id>91</host-id>
72
+ <service-id/>
73
+ <vuln-id/>
74
+ <attempted-at>2014-12-17 20:09:33 UTC</attempted-at>
75
+ <exploited/>
76
+ <fail-reason>unknown</fail-reason>
77
+ <username>root</username>
78
+ <module>exploit/multi/samba/usermap_script</module>
79
+ <session-id/>
80
+ <loot-id/>
81
+ <port>139</port>
82
+ <proto>tcp</proto>
83
+ <fail-detail>Stream #&lt;TCPSocket:0x11c51cbc&gt; is closed.</fail-detail>
84
+ </exploit_attempt>
85
+ <exploit_attempt>
86
+ <id>598</id>
87
+ <host-id>91</host-id>
88
+ <service-id/>
89
+ <vuln-id/>
90
+ <attempted-at>2014-12-17 20:14:44 UTC</attempted-at>
91
+ <exploited/>
92
+ <fail-reason>unknown</fail-reason>
93
+ <username>root</username>
94
+ <module>exploit/windows/smb/ms08_067_netapi</module>
95
+ <session-id/>
96
+ <loot-id/>
97
+ <port>445</port>
98
+ <proto>tcp</proto>
99
+ <fail-detail>The SMB server did not reply to our request</fail-detail>
100
+ </exploit_attempt>
101
+ <exploit_attempt>
102
+ <id>600</id>
103
+ <host-id>91</host-id>
104
+ <service-id/>
105
+ <vuln-id/>
106
+ <attempted-at>2014-12-17 20:34:04 UTC</attempted-at>
107
+ <exploited/>
108
+ <fail-reason>no-access</fail-reason>
109
+ <username>root</username>
110
+ <module>exploit/windows/smb/ms10_061_spoolss</module>
111
+ <session-id/>
112
+ <loot-id/>
113
+ <port>445</port>
114
+ <proto>tcp</proto>
115
+ <fail-detail>The server responded with error: STATUS_ACCESS_DENIED (Command=37 WordCount=0)</fail-detail>
116
+ </exploit_attempt>
117
+ <exploit_attempt>
118
+ <id>606</id>
119
+ <host-id>91</host-id>
120
+ <service-id/>
121
+ <vuln-id/>
122
+ <attempted-at>2014-12-17 21:06:37 UTC</attempted-at>
123
+ <exploited/>
124
+ <fail-reason>payload-failed</fail-reason>
125
+ <username>root</username>
126
+ <module>exploit/windows/smb/psexec</module>
127
+ <session-id/>
128
+ <loot-id/>
129
+ <port>445</port>
130
+ <proto>tcp</proto>
131
+ <fail-detail>No session created</fail-detail>
132
+ </exploit_attempt>
133
+ <exploit_attempt>
134
+ <id>610</id>
135
+ <host-id>91</host-id>
136
+ <service-id/>
137
+ <vuln-id/>
138
+ <attempted-at>2014-12-18 01:41:37 UTC</attempted-at>
139
+ <exploited/>
140
+ <fail-reason>unknown</fail-reason>
141
+ <username>root</username>
142
+ <module>exploit/windows/smb/ms08_067_netapi</module>
143
+ <session-id/>
144
+ <loot-id/>
145
+ <port>445</port>
146
+ <proto>tcp</proto>
147
+ <fail-detail>Stream #&lt;TCPSocket:0x1297c270&gt; is closed.</fail-detail>
148
+ </exploit_attempt>
149
+ <exploit_attempt>
150
+ <id>611</id>
151
+ <host-id>91</host-id>
152
+ <service-id/>
153
+ <vuln-id/>
154
+ <attempted-at>2014-12-18 01:44:53 UTC</attempted-at>
155
+ <exploited/>
156
+ <fail-reason>unknown</fail-reason>
157
+ <username>root</username>
158
+ <module>exploit/windows/smb/ms08_067_netapi</module>
159
+ <session-id/>
160
+ <loot-id/>
161
+ <port>445</port>
162
+ <proto>tcp</proto>
163
+ <fail-detail>Stream #&lt;TCPSocket:0x1292f2b8&gt; is closed.</fail-detail>
164
+ </exploit_attempt>
165
+ <exploit_attempt>
166
+ <id>612</id>
167
+ <host-id>91</host-id>
168
+ <service-id/>
169
+ <vuln-id/>
170
+ <attempted-at>2014-12-18 01:46:04 UTC</attempted-at>
171
+ <exploited/>
172
+ <fail-reason>unknown</fail-reason>
173
+ <username>root</username>
174
+ <module>exploit/windows/smb/ms08_067_netapi</module>
175
+ <session-id/>
176
+ <loot-id/>
177
+ <port>445</port>
178
+ <proto>tcp</proto>
179
+ <fail-detail>Stream #&lt;TCPSocket:0x127a9024&gt; is closed.</fail-detail>
180
+ </exploit_attempt>
181
+ </exploit_attempts>
182
+ <services>
183
+ <service>
184
+ <id>338</id>
185
+ <host-id>91</host-id>
186
+ <created-at>2014-12-17 19:38:02 UTC</created-at>
187
+ <port>139</port>
188
+ <proto>tcp</proto>
189
+ <state>open</state>
190
+ <name/>
191
+ <updated-at>2014-12-17 19:38:02 UTC</updated-at>
192
+ <info></info>
193
+ </service>
194
+ <service>
195
+ <id>352</id>
196
+ <host-id>91</host-id>
197
+ <created-at>2014-12-17 19:38:23 UTC</created-at>
198
+ <port>445</port>
199
+ <proto>tcp</proto>
200
+ <state>open</state>
201
+ <name>smb</name>
202
+ <updated-at>2014-12-17 19:58:30 UTC</updated-at>
203
+ <info>Windows XP SP3 (language:English) (name:MAPWS) (domain:IECA)</info>
204
+ </service>
205
+ </services>
206
+ <notes>
207
+ <note>
208
+ <id>123</id>
209
+ <created-at>2014-12-17 17:52:03 UTC</created-at>
210
+ <ntype>mac_oui</ntype>
211
+ <workspace-id>2</workspace-id>
212
+ <service-id/>
213
+ <host-id>91</host-id>
214
+ <updated-at>2014-12-19 20:21:30 UTC</updated-at>
215
+ <critical/>
216
+ <seen/>
217
+ <data>Hewlett-Packard Company</data>
218
+ </note>
219
+ <note>
220
+ <id>312</id>
221
+ <created-at>2014-12-17 19:58:30 UTC</created-at>
222
+ <ntype>fingerprint.match</ntype>
223
+ <workspace-id>2</workspace-id>
224
+ <service-id>352</service-id>
225
+ <host-id>91</host-id>
226
+ <updated-at>2014-12-17 23:49:48 UTC</updated-at>
227
+ <critical/>
228
+ <seen/>
229
+ <data>BAh7CSIPb3MudmVyc2lvbiITU2VydmljZSBQYWNrIDMiEG9zLmxhbmd1YWdlIgxFbmdsaXNoIg5ob3N0Lm5hbWUiCk1BUFdTIhBob3N0LmRvbWFpbiIJSVVBQQ==</data>
230
+ </note>
231
+ <note>
232
+ <id>313</id>
233
+ <created-at>2014-12-17 19:58:31 UTC</created-at>
234
+ <ntype>smb.fingerprint</ntype>
235
+ <workspace-id>2</workspace-id>
236
+ <service-id>352</service-id>
237
+ <host-id>91</host-id>
238
+ <updated-at>2014-12-17 23:49:48 UTC</updated-at>
239
+ <critical/>
240
+ <seen/>
241
+ <data>BAh7CzoObmF0aXZlX29zIhBXaW5kb3dzIDUuMToObmF0aXZlX2xtIh1XaW5kb3dzIDIwMDAgTEFOIE1hbmFnZXI6Cm9zX3NwIhNTZXJ2aWNlIFBhY2sgMzoMb3NfbGFuZyIMRW5nbGlzaDoMU01CTmFtZSIKTUFQV1M6DlNNQkRvbWFpbiIJSVVBQQ==</data>
242
+ </note>
243
+ </notes>
244
+ <vulns>
245
+ </vulns>
246
+ </host>
247
+ </hosts>
248
+ </MetasploitV5>