metasploit_data_models 0.24.1.pre.rspec.pre.3.pre.1 → 0.24.1
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.
- checksums.yaml +4 -4
- data/.rspec +3 -3
- data/Gemfile +3 -1
- data/app/models/metasploit_data_models/ip_address/v4/segmented.rb +1 -1
- data/app/models/metasploit_data_models/search/visitor/where.rb +1 -1
- data/app/validators/password_is_strong_validator.rb +1 -1
- data/lib/mdm/host/operating_system_normalization.rb +10 -0
- data/lib/metasploit_data_models/version.rb +1 -2
- data/metasploit_data_models.gemspec +1 -1
- data/spec/app/models/mdm/api_key_spec.rb +3 -1
- data/spec/app/models/mdm/client_spec.rb +11 -9
- data/spec/app/models/mdm/cred_spec.rb +54 -42
- data/spec/app/models/mdm/event_spec.rb +23 -21
- data/spec/app/models/mdm/exploit_attempt_spec.rb +21 -19
- data/spec/app/models/mdm/exploited_host_spec.rb +13 -11
- data/spec/app/models/mdm/host_detail_spec.rb +17 -15
- data/spec/app/models/mdm/host_spec.rb +260 -261
- data/spec/app/models/mdm/host_tag_spec.rb +8 -6
- data/spec/app/models/mdm/listener_spec.rb +32 -30
- data/spec/app/models/mdm/loot_spec.rb +23 -21
- data/spec/app/models/mdm/macro_spec.rb +3 -1
- data/spec/app/models/mdm/mod_ref_spec.rb +3 -1
- data/spec/app/models/mdm/module/action_spec.rb +12 -10
- data/spec/app/models/mdm/module/arch_spec.rb +12 -10
- data/spec/app/models/mdm/module/author_spec.rb +17 -22
- data/spec/app/models/mdm/module/detail_spec.rb +75 -184
- data/spec/app/models/mdm/module/mixin_spec.rb +12 -10
- data/spec/app/models/mdm/module/platform_spec.rb +12 -10
- data/spec/app/models/mdm/module/ref_spec.rb +12 -10
- data/spec/app/models/mdm/module/target_spec.rb +15 -13
- data/spec/app/models/mdm/nexpose_console_spec.rb +37 -35
- data/spec/app/models/mdm/note_spec.rb +25 -23
- data/spec/app/models/mdm/profile_spec.rb +3 -1
- data/spec/app/models/mdm/ref_spec.rb +12 -10
- data/spec/app/models/mdm/route_spec.rb +8 -6
- data/spec/app/models/mdm/service_spec.rb +40 -38
- data/spec/app/models/mdm/session_event_spec.rb +12 -10
- data/spec/app/models/mdm/session_spec.rb +15 -13
- data/spec/app/models/mdm/tag_spec.rb +29 -29
- data/spec/app/models/mdm/task_cred_spec.rb +11 -9
- data/spec/app/models/mdm/task_host_spec.rb +11 -9
- data/spec/app/models/mdm/task_service_spec.rb +11 -9
- data/spec/app/models/mdm/task_session_spec.rb +9 -7
- data/spec/app/models/mdm/task_spec.rb +29 -27
- data/spec/app/models/mdm/user_spec.rb +19 -17
- data/spec/app/models/mdm/vuln_attempt_spec.rb +16 -14
- data/spec/app/models/mdm/vuln_detail_spec.rb +28 -26
- data/spec/app/models/mdm/vuln_ref_spec.rb +10 -8
- data/spec/app/models/mdm/vuln_spec.rb +26 -24
- data/spec/app/models/mdm/web_form_spec.rb +13 -11
- data/spec/app/models/mdm/web_page_spec.rb +21 -19
- data/spec/app/models/mdm/web_site_spec.rb +23 -21
- data/spec/app/models/mdm/web_vuln_spec.rb +65 -63
- data/spec/app/models/mdm/wmap_request_spec.rb +3 -1
- data/spec/app/models/mdm/wmap_target_spec.rb +3 -1
- data/spec/app/models/mdm/workspace_spec.rb +100 -97
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_result_spec.rb +5 -3
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_set_spec.rb +15 -13
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_spec.rb +3 -1
- data/spec/app/models/metasploit_data_models/automatic_exploitation/run_spec.rb +3 -1
- data/spec/app/models/metasploit_data_models/ip_address/v4/cidr_spec.rb +12 -10
- data/spec/app/models/metasploit_data_models/ip_address/v4/nmap_spec.rb +6 -4
- data/spec/app/models/metasploit_data_models/ip_address/v4/range_spec.rb +23 -21
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/list_spec.rb +11 -9
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/range_spec.rb +23 -21
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/segmented_spec.rb +6 -4
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/single_spec.rb +15 -22
- data/spec/app/models/metasploit_data_models/ip_address/v4/single_spec.rb +6 -4
- data/spec/app/models/metasploit_data_models/module_run_spec.rb +3 -1
- data/spec/app/models/metasploit_data_models/search/operation/ip_address_spec.rb +20 -18
- data/spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb +8 -6
- data/spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb +10 -8
- data/spec/app/models/metasploit_data_models/search/operation/range_spec.rb +10 -8
- data/spec/app/models/metasploit_data_models/search/operator/ip_address_spec.rb +4 -2
- data/spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb +10 -8
- data/spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb +8 -6
- data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +11 -9
- data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +7 -5
- data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +19 -17
- data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +7 -5
- data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +23 -61
- data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +10 -8
- data/spec/app/validators/parameters_validator_spec.rb +29 -29
- data/spec/app/validators/password_is_strong_validator_spec.rb +46 -54
- data/spec/factories/mdm/module/details.rb +1 -1
- data/spec/lib/base64_serializer_spec.rb +19 -19
- data/spec/lib/metasploit_data_models/ip_address/cidr_spec.rb +12 -18
- data/spec/lib/metasploit_data_models/ip_address/range_spec.rb +6 -4
- data/spec/lib/metasploit_data_models/match/child_spec.rb +4 -2
- data/spec/lib/metasploit_data_models/match/parent_spec.rb +6 -4
- data/spec/lib/metasploit_data_models/version_spec.rb +5 -3
- data/spec/spec_helper.rb +6 -72
- data/spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb +2 -2
- data/spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb +4 -4
- data/spec/support/shared/examples/metasploit_data_models/search/operation/ipaddress/match.rb +2 -2
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_children.rb +5 -5
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_metasploit_model_search_operation_base.rb +5 -5
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_equality.rb +3 -3
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +6 -7
- metadata +7 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1ac9c58f2799f6dcb7e997a8a328d585daf4c3e4
|
|
4
|
+
data.tar.gz: 13c3f4938ac23baf1c6d15a89f32f6b1f78d01e2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 20bcf96f7f4ce0794ec99f0408432d3768a966ca982f5d85c5a107806ca50c5cbad2217be893aeeb41941db21abdcd73a439335331d67625a99360c1cd1e37a2
|
|
7
|
+
data.tar.gz: eedd216995f5ed8e7dab6453a6372f0dac7419ef54be71edb3bca75993da99e5f836ca71190b963bb2afb66d6a9afebbcaf97d535665206f8c45c74ab0f9273b
|
data/.rspec
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
--
|
|
2
|
-
--
|
|
3
|
-
--
|
|
1
|
+
--format nested
|
|
2
|
+
--colour
|
|
3
|
+
--drb
|
data/Gemfile
CHANGED
|
@@ -32,9 +32,11 @@ group :test do
|
|
|
32
32
|
gem 'shoulda-matchers'
|
|
33
33
|
# code coverage of tests
|
|
34
34
|
gem 'simplecov', :require => false
|
|
35
|
+
# @todo Update specs for rspec 3.0.0 compatibility and remove this gem in favor of just rspec-rails
|
|
36
|
+
gem 'rspec-core', '< 3.0.0'
|
|
35
37
|
# need rspec-rails >= 2.12.0 as 2.12.0 adds support for redefining named subject in nested context that uses the
|
|
36
38
|
# named subject from the outer context without causing a stack overflow.
|
|
37
|
-
gem 'rspec-rails', '
|
|
39
|
+
gem 'rspec-rails', '>= 2.12.0'
|
|
38
40
|
# used for building markup for webpage factories
|
|
39
41
|
gem 'builder'
|
|
40
42
|
end
|
|
@@ -32,7 +32,7 @@ class MetasploitDataModels::Search::Visitor::Where
|
|
|
32
32
|
}
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
visit
|
|
35
|
+
visit *EQUALITY_OPERATION_CLASS_NAMES do |operation|
|
|
36
36
|
attribute = attribute_visitor.visit operation.operator
|
|
37
37
|
|
|
38
38
|
attribute.eq(operation.value)
|
|
@@ -185,6 +185,15 @@ module Mdm::Host::OperatingSystemNormalization
|
|
|
185
185
|
# Merge and normalize the best match to the host object
|
|
186
186
|
apply_match_to_host(match) if match
|
|
187
187
|
|
|
188
|
+
# Handle cases where the flavor contains the base name (legacy parsing, etc)
|
|
189
|
+
# TODO: Remove this once we are sure it is no longer needed
|
|
190
|
+
if host.os_name && host.os_flavor && host.os_flavor.index(host.os_name)
|
|
191
|
+
dlog("Host #{host.address} has os_flavor that contains os_name")
|
|
192
|
+
dlog("os_flavor: #{host.os_flavor}")
|
|
193
|
+
dlog("os_name: #{host.os_name}")
|
|
194
|
+
host.os_flavor = host.os_flavor.gsub(host.os_name, '').strip
|
|
195
|
+
end
|
|
196
|
+
|
|
188
197
|
# Set some sane defaults if needed
|
|
189
198
|
host.os_name ||= 'Unknown'
|
|
190
199
|
host.purpose ||= 'device'
|
|
@@ -293,6 +302,7 @@ module Mdm::Host::OperatingSystemNormalization
|
|
|
293
302
|
# name collision seems silly.
|
|
294
303
|
return false
|
|
295
304
|
else
|
|
305
|
+
dlog("Could not validate fingerprint data: #{fp.inspect}")
|
|
296
306
|
return false
|
|
297
307
|
end
|
|
298
308
|
end
|
|
@@ -7,8 +7,7 @@ module MetasploitDataModels
|
|
|
7
7
|
MINOR = 24
|
|
8
8
|
# The patch number, scoped to the {MAJOR} and {MINOR} version numbers.
|
|
9
9
|
PATCH = 1
|
|
10
|
-
|
|
11
|
-
PRERELEASE = 'rspec-3-1'
|
|
10
|
+
|
|
12
11
|
|
|
13
12
|
# The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the `PRERELEASE` in the
|
|
14
13
|
# {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
|
|
@@ -45,7 +45,7 @@ Gem::Specification.new do |s|
|
|
|
45
45
|
s.add_runtime_dependency 'recog', '~> 1.0'
|
|
46
46
|
|
|
47
47
|
s.add_runtime_dependency 'metasploit-concern', '0.4.0'
|
|
48
|
-
s.add_runtime_dependency 'metasploit-model', '~> 0.
|
|
48
|
+
s.add_runtime_dependency 'metasploit-model', '~> 0.29.0'
|
|
49
49
|
s.add_runtime_dependency 'railties', '< 4.0.0'
|
|
50
50
|
|
|
51
51
|
# arel-helpers: Useful tools to help construct database queries with ActiveRecord and Arel.
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::Client do
|
|
2
4
|
|
|
3
5
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
4
6
|
|
|
5
7
|
context 'associations' do
|
|
6
|
-
it {
|
|
8
|
+
it { should belong_to(:host).class_name('Mdm::Host') }
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
context '#destroy' do
|
|
@@ -21,21 +23,21 @@ RSpec.describe Mdm::Client, type: :model do
|
|
|
21
23
|
context 'factory' do
|
|
22
24
|
it 'should be valid' do
|
|
23
25
|
client = FactoryGirl.build(:mdm_client)
|
|
24
|
-
|
|
26
|
+
client.should be_valid
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
context 'database' do
|
|
29
31
|
context 'columns' do
|
|
30
|
-
it {
|
|
31
|
-
it {
|
|
32
|
-
it {
|
|
33
|
-
it {
|
|
32
|
+
it { should have_db_column(:host_id).of_type(:integer)}
|
|
33
|
+
it { should have_db_column(:ua_string).of_type(:string).with_options(:null => false) }
|
|
34
|
+
it { should have_db_column(:ua_name).of_type(:string) }
|
|
35
|
+
it { should have_db_column(:ua_ver).of_type(:string) }
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
context 'timestamps' do
|
|
37
|
-
it {
|
|
38
|
-
it {
|
|
39
|
+
it { should have_db_column(:created_at).of_type(:datetime) }
|
|
40
|
+
it { should have_db_column(:updated_at).of_type(:datetime) }
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
end
|
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::Cred do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context "Associations" do
|
|
5
|
-
it {
|
|
6
|
-
it {
|
|
7
|
-
it {
|
|
7
|
+
it { should have_many(:task_creds).class_name('Mdm::TaskCred').dependent(:destroy) }
|
|
8
|
+
it { should have_many(:tasks).class_name('Mdm::Task').through(:task_creds) }
|
|
9
|
+
it { should belong_to(:service).class_name('Mdm::Service') }
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
context 'database' do
|
|
11
13
|
context 'timestamps' do
|
|
12
|
-
it {
|
|
13
|
-
it {
|
|
14
|
+
it { should have_db_column(:created_at).of_type(:datetime) }
|
|
15
|
+
it { should have_db_column(:updated_at).of_type(:datetime) }
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
context 'columns' do
|
|
17
|
-
it {
|
|
18
|
-
it {
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
-
it {
|
|
22
|
-
it {
|
|
23
|
-
it {
|
|
24
|
-
it {
|
|
19
|
+
it { should have_db_column(:service_id).of_type(:integer).with_options(:null => false) }
|
|
20
|
+
it { should have_db_column(:user).of_type(:string) }
|
|
21
|
+
it { should have_db_column(:pass).of_type(:string) }
|
|
22
|
+
it { should have_db_column(:active).of_type(:boolean).with_options(:default => true) }
|
|
23
|
+
it { should have_db_column(:proof).of_type(:string) }
|
|
24
|
+
it { should have_db_column(:ptype).of_type(:string) }
|
|
25
|
+
it { should have_db_column(:source_id).of_type(:integer) }
|
|
26
|
+
it { should have_db_column(:source_type).of_type(:string) }
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
29
|
|
|
@@ -66,23 +68,25 @@ RSpec.describe Mdm::Cred, type: :model do
|
|
|
66
68
|
|
|
67
69
|
context 'constants' do
|
|
68
70
|
it 'should define the key_id regex' do
|
|
69
|
-
|
|
71
|
+
described_class::KEY_ID_REGEX.should == /([0-9a-fA-F:]{47})/
|
|
70
72
|
end
|
|
71
73
|
|
|
72
74
|
it 'should define ptypes to humanize' do
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
)
|
|
75
|
+
described_class::PTYPES.should == {
|
|
76
|
+
'read/write password' => 'password_rw',
|
|
77
|
+
'read-only password' => 'password_ro',
|
|
78
|
+
'SMB hash' => 'smb_hash',
|
|
79
|
+
'SSH private key' => 'ssh_key',
|
|
80
|
+
'SSH public key' => 'ssh_pubkey'
|
|
81
|
+
}
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
context 'methods' do
|
|
86
|
+
#
|
|
87
|
+
# lets
|
|
88
|
+
#
|
|
89
|
+
|
|
86
90
|
let(:host) {
|
|
87
91
|
FactoryGirl.create(
|
|
88
92
|
:mdm_host,
|
|
@@ -130,47 +134,55 @@ RSpec.describe Mdm::Cred, type: :model do
|
|
|
130
134
|
FactoryGirl.create(:mdm_workspace)
|
|
131
135
|
}
|
|
132
136
|
|
|
137
|
+
#
|
|
138
|
+
# Callbacks
|
|
139
|
+
#
|
|
140
|
+
|
|
141
|
+
before(:all) do
|
|
142
|
+
Mdm::Workspace.any_instance.stub(:valid_ip_or_range? => true)
|
|
143
|
+
end
|
|
144
|
+
|
|
133
145
|
context '#ptype_human' do
|
|
134
146
|
it "should return 'read/write password' for 'password_rw'" do
|
|
135
147
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => 'msfadmin', :ptype => 'password_rw')
|
|
136
|
-
|
|
148
|
+
cred.ptype_human.should == 'read/write password'
|
|
137
149
|
end
|
|
138
150
|
|
|
139
151
|
it "should return 'read-only password' for 'password_ro'" do
|
|
140
152
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => 'msfadmin', :ptype => 'password_ro')
|
|
141
|
-
|
|
153
|
+
cred.ptype_human.should == 'read-only password'
|
|
142
154
|
end
|
|
143
155
|
|
|
144
156
|
it "should return 'SMB Hash' for 'smb_hash'" do
|
|
145
157
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => 'msfadmin', :ptype => 'smb_hash')
|
|
146
|
-
|
|
158
|
+
cred.ptype_human.should == 'SMB hash'
|
|
147
159
|
end
|
|
148
160
|
|
|
149
161
|
it "should return 'SSH private key' for 'ssh_key'" do
|
|
150
162
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => 'msfadmin', :ptype => 'ssh_key')
|
|
151
|
-
|
|
163
|
+
cred.ptype_human.should == 'SSH private key'
|
|
152
164
|
end
|
|
153
165
|
|
|
154
166
|
it "should return 'SSH public key' for 'ssh_pubkey'" do
|
|
155
167
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => 'msfadmin', :ptype => 'ssh_pubkey')
|
|
156
|
-
|
|
168
|
+
cred.ptype_human.should == 'SSH public key'
|
|
157
169
|
end
|
|
158
170
|
end
|
|
159
171
|
|
|
160
172
|
context '#ssh_key_id' do
|
|
161
173
|
it 'should return nil if not an ssh_key' do
|
|
162
174
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => 'msfadmin', :ptype => 'password_rw')
|
|
163
|
-
|
|
175
|
+
cred.ssh_key_id.should == nil
|
|
164
176
|
end
|
|
165
177
|
|
|
166
178
|
it 'should return nil if proof does not contain the key id' do
|
|
167
179
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => '/path/to/keyfile', :ptype => 'ssh_key', :proof => "no key here")
|
|
168
|
-
|
|
180
|
+
cred.ssh_key_id.should == nil
|
|
169
181
|
end
|
|
170
182
|
|
|
171
183
|
it 'should return the key id for an ssh_key' do
|
|
172
184
|
cred = FactoryGirl.build(:mdm_cred, :user => 'msfadmin', :pass => '/path/to/keyfile', :ptype => 'ssh_key', :proof => "KEY=57:c3:11:5d:77:c5:63:90:33:2d:c5:c4:99:78:62:7a")
|
|
173
|
-
|
|
185
|
+
cred.ssh_key_id.should == '57:c3:11:5d:77:c5:63:90:33:2d:c5:c4:99:78:62:7a'
|
|
174
186
|
end
|
|
175
187
|
|
|
176
188
|
end
|
|
@@ -222,14 +234,14 @@ RSpec.describe Mdm::Cred, type: :model do
|
|
|
222
234
|
it 'should behave the same for public keys as private keys' do
|
|
223
235
|
pubkey2 = FactoryGirl.create(:mdm_cred, :service => service, :user => 'msfadmin', :pass => '/path/to/keyfile', :ptype => 'ssh_pubkey', :proof => "KEY=57:c3:11:5d:77:c5:63:90:33:2d:c5:c4:99:78:62:7a")
|
|
224
236
|
pubkey3 = FactoryGirl.create(:mdm_cred, :service => service, :user => 'msfadmin', :pass => '/path/to/keyfile', :ptype => 'ssh_pubkey', :proof => "KEY=66:d4:22:6e:88:d6:74:A1:44:3e:d6:d5:AA:89:73:8b")
|
|
225
|
-
|
|
226
|
-
|
|
237
|
+
pubkey2.ssh_key_matches?(ssh_pubkey).should == true
|
|
238
|
+
pubkey2.ssh_key_matches?(pubkey3).should == false
|
|
227
239
|
end
|
|
228
240
|
|
|
229
241
|
it 'should always return false for non ssh key creds' do
|
|
230
242
|
cred2 = FactoryGirl.create(:mdm_cred, :service => other_service, :ptype => 'password', :user => 'msfadmin', :pass => 'msfadmin' )
|
|
231
243
|
cred3 = FactoryGirl.create(:mdm_cred, :service => other_service, :ptype => 'password', :user => 'msfadmin', :pass => 'msfadmin' )
|
|
232
|
-
|
|
244
|
+
cred2.ssh_key_matches?(cred3).should == false
|
|
233
245
|
end
|
|
234
246
|
end
|
|
235
247
|
|
|
@@ -259,11 +271,11 @@ RSpec.describe Mdm::Cred, type: :model do
|
|
|
259
271
|
end
|
|
260
272
|
|
|
261
273
|
it 'should return all ssh private keys with a matching id' do
|
|
262
|
-
|
|
274
|
+
other_ssh_key.ssh_keys.should include(ssh_key)
|
|
263
275
|
end
|
|
264
276
|
|
|
265
277
|
it 'should return all ssh public keys with a matching id' do
|
|
266
|
-
|
|
278
|
+
other_ssh_key.ssh_keys.should include(ssh_pubkey)
|
|
267
279
|
end
|
|
268
280
|
end
|
|
269
281
|
|
|
@@ -293,11 +305,11 @@ RSpec.describe Mdm::Cred, type: :model do
|
|
|
293
305
|
end
|
|
294
306
|
|
|
295
307
|
it 'should return ssh private keys with matching ids' do
|
|
296
|
-
|
|
308
|
+
other_ssh_key.ssh_private_keys.should include(ssh_key)
|
|
297
309
|
end
|
|
298
310
|
|
|
299
311
|
it 'should not return ssh public keys with matching ids' do
|
|
300
|
-
|
|
312
|
+
other_ssh_key.ssh_private_keys.should_not include(ssh_pubkey)
|
|
301
313
|
end
|
|
302
314
|
end
|
|
303
315
|
|
|
@@ -327,11 +339,11 @@ RSpec.describe Mdm::Cred, type: :model do
|
|
|
327
339
|
end
|
|
328
340
|
|
|
329
341
|
it 'should not return ssh private keys with matching ids' do
|
|
330
|
-
|
|
342
|
+
other_ssh_key.ssh_public_keys.should_not include(ssh_key)
|
|
331
343
|
end
|
|
332
344
|
|
|
333
345
|
it 'should return ssh public keys with matching ids' do
|
|
334
|
-
|
|
346
|
+
other_ssh_key.ssh_public_keys.should include(ssh_pubkey)
|
|
335
347
|
end
|
|
336
348
|
end
|
|
337
349
|
end
|
|
@@ -339,7 +351,7 @@ RSpec.describe Mdm::Cred, type: :model do
|
|
|
339
351
|
context 'factory' do
|
|
340
352
|
it 'should be valid' do
|
|
341
353
|
cred = FactoryGirl.build(:mdm_cred)
|
|
342
|
-
|
|
354
|
+
cred.should be_valid
|
|
343
355
|
end
|
|
344
356
|
end
|
|
345
357
|
|
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::Event do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'associations' do
|
|
5
|
-
it {
|
|
6
|
-
it {
|
|
7
|
+
it { should belong_to(:host).class_name('Mdm::Host') }
|
|
8
|
+
it { should belong_to(:workspace).class_name('Mdm::Workspace') }
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
context 'database' do
|
|
10
12
|
context 'timestamps' do
|
|
11
|
-
it {
|
|
12
|
-
it {
|
|
13
|
+
it { should have_db_column(:created_at).of_type(:datetime) }
|
|
14
|
+
it { should have_db_column(:updated_at).of_type(:datetime) }
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
context 'columns' do
|
|
16
|
-
it {
|
|
17
|
-
it {
|
|
18
|
-
it {
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
-
it {
|
|
22
|
-
it {
|
|
18
|
+
it { should have_db_column(:workspace_id).of_type(:integer) }
|
|
19
|
+
it { should have_db_column(:host_id).of_type(:integer) }
|
|
20
|
+
it { should have_db_column(:name).of_type(:string) }
|
|
21
|
+
it { should have_db_column(:critical).of_type(:boolean) }
|
|
22
|
+
it { should have_db_column(:seen).of_type(:boolean) }
|
|
23
|
+
it { should have_db_column(:username).of_type(:string) }
|
|
24
|
+
it { should have_db_column(:info).of_type(:text) }
|
|
23
25
|
end
|
|
24
26
|
end
|
|
25
27
|
|
|
@@ -42,16 +44,16 @@ RSpec.describe Mdm::Event, type: :model do
|
|
|
42
44
|
flagged_event = FactoryGirl.create(:mdm_event, :name => 'flagme', :critical => true, :seen => false)
|
|
43
45
|
non_critical_event = FactoryGirl.create(:mdm_event, :name => 'dontflagmebro', :critical => false, :seen => false)
|
|
44
46
|
flagged_set = Mdm::Event.flagged
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
flagged_set.should include(flagged_event)
|
|
48
|
+
flagged_set.should_not include(non_critical_event)
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
it 'should exclude seen events' do
|
|
50
52
|
flagged_event = FactoryGirl.create(:mdm_event, :name => 'flagme', :critical => true, :seen => false)
|
|
51
53
|
non_critical_event = FactoryGirl.create(:mdm_event, :name => 'dontflagmebro', :critical => false, :seen => true)
|
|
52
54
|
flagged_set = Mdm::Event.flagged
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
flagged_set.should include(flagged_event)
|
|
56
|
+
flagged_set.should_not include(non_critical_event)
|
|
55
57
|
end
|
|
56
58
|
end
|
|
57
59
|
|
|
@@ -60,8 +62,8 @@ RSpec.describe Mdm::Event, type: :model do
|
|
|
60
62
|
flagged_event = FactoryGirl.create(:mdm_event, :name => 'module_run')
|
|
61
63
|
non_critical_event = FactoryGirl.create(:mdm_event, :name => 'dontflagmebro')
|
|
62
64
|
flagged_set = Mdm::Event.module_run
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
flagged_set.should include(flagged_event)
|
|
66
|
+
flagged_set.should_not include(non_critical_event)
|
|
65
67
|
end
|
|
66
68
|
end
|
|
67
69
|
end
|
|
@@ -69,15 +71,15 @@ RSpec.describe Mdm::Event, type: :model do
|
|
|
69
71
|
context 'validations' do
|
|
70
72
|
it 'should require name' do
|
|
71
73
|
unnamed_event = FactoryGirl.build(:mdm_event, :name => nil)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
unnamed_event.should_not be_valid
|
|
75
|
+
unnamed_event.errors[:name].should include("can't be blank")
|
|
74
76
|
end
|
|
75
77
|
end
|
|
76
78
|
|
|
77
79
|
context 'factory' do
|
|
78
80
|
it 'should be valid' do
|
|
79
81
|
event = FactoryGirl.build(:mdm_event)
|
|
80
|
-
|
|
82
|
+
event.should be_valid
|
|
81
83
|
end
|
|
82
84
|
end
|
|
83
85
|
|