metasploit_data_models 0.24.4 → 0.24.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +3 -3
  3. data/.travis.yml +3 -6
  4. data/CONTRIBUTING.md +52 -10
  5. data/Gemfile +8 -1
  6. data/Rakefile +0 -23
  7. data/app/models/mdm/api_key.rb +1 -41
  8. data/app/models/mdm/client.rb +1 -41
  9. data/app/models/mdm/cred.rb +19 -107
  10. data/app/models/mdm/event.rb +1 -48
  11. data/app/models/mdm/exploit_attempt.rb +16 -65
  12. data/app/models/mdm/exploited_host.rb +1 -28
  13. data/app/models/mdm/host_detail.rb +1 -45
  14. data/app/models/mdm/host_tag.rb +8 -6
  15. data/app/models/mdm/listener.rb +1 -53
  16. data/app/models/mdm/macro.rb +0 -42
  17. data/app/models/mdm/mod_ref.rb +0 -21
  18. data/app/models/mdm/module/action.rb +0 -15
  19. data/app/models/mdm/module/arch.rb +0 -10
  20. data/app/models/mdm/module/author.rb +0 -16
  21. data/app/models/mdm/module/mixin.rb +0 -13
  22. data/app/models/mdm/module/platform.rb +0 -11
  23. data/app/models/mdm/module/target.rb +0 -18
  24. data/app/models/mdm/nexpose_console.rb +4 -82
  25. data/app/models/mdm/profile.rb +0 -36
  26. data/app/models/mdm/route.rb +5 -17
  27. data/app/models/mdm/session_event.rb +1 -33
  28. data/app/models/mdm/tag.rb +10 -49
  29. data/app/models/mdm/task.rb +45 -94
  30. data/app/models/mdm/task_cred.rb +0 -29
  31. data/app/models/mdm/task_host.rb +0 -25
  32. data/app/models/mdm/task_service.rb +0 -25
  33. data/app/models/mdm/task_session.rb +0 -25
  34. data/app/models/mdm/user.rb +6 -188
  35. data/app/models/mdm/vuln_attempt.rb +12 -37
  36. data/app/models/mdm/vuln_detail.rb +5 -139
  37. data/app/models/mdm/vuln_ref.rb +1 -4
  38. data/app/models/mdm/web_form.rb +1 -35
  39. data/app/models/mdm/web_page.rb +1 -70
  40. data/app/models/mdm/web_site.rb +1 -51
  41. data/app/models/mdm/wmap_request.rb +0 -85
  42. data/app/models/mdm/wmap_target.rb +0 -40
  43. data/app/models/mdm/workspace.rb +14 -152
  44. data/app/models/metasploit_data_models/automatic_exploitation.rb +16 -0
  45. data/app/models/metasploit_data_models/automatic_exploitation/match.rb +24 -19
  46. data/app/models/metasploit_data_models/automatic_exploitation/match_result.rb +5 -33
  47. data/app/models/metasploit_data_models/automatic_exploitation/match_set.rb +4 -22
  48. data/app/models/metasploit_data_models/automatic_exploitation/run.rb +3 -13
  49. data/app/models/metasploit_data_models/ip_address/v4/segmented.rb +1 -1
  50. data/app/models/metasploit_data_models/module_run.rb +1 -1
  51. data/app/models/metasploit_data_models/search/visitor/where.rb +1 -1
  52. data/app/validators/ip_format_validator.rb +0 -4
  53. data/app/validators/parameters_validator.rb +0 -12
  54. data/app/validators/password_is_strong_validator.rb +1 -10
  55. data/lib/mdm/host/operating_system_normalization.rb +10 -7
  56. data/lib/metasploit_data_models.rb +0 -4
  57. data/lib/metasploit_data_models/engine.rb +0 -2
  58. data/lib/metasploit_data_models/serialized_prefs.rb +0 -6
  59. data/lib/metasploit_data_models/version.rb +10 -24
  60. data/lib/tasks/yard.rake +33 -0
  61. data/metasploit_data_models.gemspec +2 -9
  62. data/spec/app/models/mdm/api_key_spec.rb +3 -1
  63. data/spec/app/models/mdm/client_spec.rb +11 -9
  64. data/spec/app/models/mdm/cred_spec.rb +54 -42
  65. data/spec/app/models/mdm/event_spec.rb +23 -21
  66. data/spec/app/models/mdm/exploit_attempt_spec.rb +21 -19
  67. data/spec/app/models/mdm/exploited_host_spec.rb +13 -11
  68. data/spec/app/models/mdm/host_detail_spec.rb +17 -15
  69. data/spec/app/models/mdm/host_spec.rb +260 -261
  70. data/spec/app/models/mdm/host_tag_spec.rb +8 -6
  71. data/spec/app/models/mdm/listener_spec.rb +32 -30
  72. data/spec/app/models/mdm/loot_spec.rb +23 -21
  73. data/spec/app/models/mdm/macro_spec.rb +3 -1
  74. data/spec/app/models/mdm/mod_ref_spec.rb +3 -1
  75. data/spec/app/models/mdm/module/action_spec.rb +12 -10
  76. data/spec/app/models/mdm/module/arch_spec.rb +12 -10
  77. data/spec/app/models/mdm/module/author_spec.rb +17 -22
  78. data/spec/app/models/mdm/module/detail_spec.rb +75 -184
  79. data/spec/app/models/mdm/module/mixin_spec.rb +12 -10
  80. data/spec/app/models/mdm/module/platform_spec.rb +12 -10
  81. data/spec/app/models/mdm/module/ref_spec.rb +12 -10
  82. data/spec/app/models/mdm/module/target_spec.rb +15 -13
  83. data/spec/app/models/mdm/nexpose_console_spec.rb +37 -35
  84. data/spec/app/models/mdm/note_spec.rb +25 -23
  85. data/spec/app/models/mdm/profile_spec.rb +3 -1
  86. data/spec/app/models/mdm/ref_spec.rb +12 -10
  87. data/spec/app/models/mdm/route_spec.rb +8 -6
  88. data/spec/app/models/mdm/service_spec.rb +40 -38
  89. data/spec/app/models/mdm/session_event_spec.rb +12 -10
  90. data/spec/app/models/mdm/session_spec.rb +15 -13
  91. data/spec/app/models/mdm/tag_spec.rb +29 -29
  92. data/spec/app/models/mdm/task_cred_spec.rb +11 -9
  93. data/spec/app/models/mdm/task_host_spec.rb +11 -9
  94. data/spec/app/models/mdm/task_service_spec.rb +11 -9
  95. data/spec/app/models/mdm/task_session_spec.rb +9 -7
  96. data/spec/app/models/mdm/task_spec.rb +29 -27
  97. data/spec/app/models/mdm/user_spec.rb +19 -17
  98. data/spec/app/models/mdm/vuln_attempt_spec.rb +16 -14
  99. data/spec/app/models/mdm/vuln_detail_spec.rb +28 -26
  100. data/spec/app/models/mdm/vuln_ref_spec.rb +10 -8
  101. data/spec/app/models/mdm/vuln_spec.rb +26 -24
  102. data/spec/app/models/mdm/web_form_spec.rb +13 -11
  103. data/spec/app/models/mdm/web_page_spec.rb +21 -19
  104. data/spec/app/models/mdm/web_site_spec.rb +23 -21
  105. data/spec/app/models/mdm/web_vuln_spec.rb +65 -63
  106. data/spec/app/models/mdm/wmap_request_spec.rb +3 -1
  107. data/spec/app/models/mdm/wmap_target_spec.rb +3 -1
  108. data/spec/app/models/mdm/workspace_spec.rb +100 -97
  109. data/spec/app/models/metasploit_data_models/automatic_exploitation/match_result_spec.rb +5 -3
  110. data/spec/app/models/metasploit_data_models/automatic_exploitation/match_set_spec.rb +15 -13
  111. data/spec/app/models/metasploit_data_models/automatic_exploitation/match_spec.rb +3 -1
  112. data/spec/app/models/metasploit_data_models/automatic_exploitation/run_spec.rb +3 -1
  113. data/spec/app/models/metasploit_data_models/ip_address/v4/cidr_spec.rb +12 -10
  114. data/spec/app/models/metasploit_data_models/ip_address/v4/nmap_spec.rb +6 -4
  115. data/spec/app/models/metasploit_data_models/ip_address/v4/range_spec.rb +23 -21
  116. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/list_spec.rb +11 -9
  117. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/range_spec.rb +23 -21
  118. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/segmented_spec.rb +6 -4
  119. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/single_spec.rb +15 -22
  120. data/spec/app/models/metasploit_data_models/ip_address/v4/single_spec.rb +6 -4
  121. data/spec/app/models/metasploit_data_models/module_run_spec.rb +3 -1
  122. data/spec/app/models/metasploit_data_models/search/operation/ip_address_spec.rb +20 -18
  123. data/spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb +8 -6
  124. data/spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb +10 -8
  125. data/spec/app/models/metasploit_data_models/search/operation/range_spec.rb +10 -8
  126. data/spec/app/models/metasploit_data_models/search/operator/ip_address_spec.rb +4 -2
  127. data/spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb +10 -8
  128. data/spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb +8 -6
  129. data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +11 -9
  130. data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +7 -5
  131. data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +19 -17
  132. data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +7 -5
  133. data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +23 -61
  134. data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +10 -8
  135. data/spec/app/validators/parameters_validator_spec.rb +29 -29
  136. data/spec/app/validators/password_is_strong_validator_spec.rb +46 -54
  137. data/spec/dummy/db/structure.sql +3403 -0
  138. data/spec/factories/mdm/module/details.rb +1 -1
  139. data/spec/lib/base64_serializer_spec.rb +19 -19
  140. data/spec/lib/metasploit_data_models/ip_address/cidr_spec.rb +12 -18
  141. data/spec/lib/metasploit_data_models/ip_address/range_spec.rb +6 -4
  142. data/spec/lib/metasploit_data_models/match/child_spec.rb +4 -2
  143. data/spec/lib/metasploit_data_models/match/parent_spec.rb +6 -4
  144. data/spec/lib/metasploit_data_models/version_spec.rb +141 -3
  145. data/spec/spec_helper.rb +12 -86
  146. data/spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb +2 -2
  147. data/spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb +4 -4
  148. data/spec/support/shared/examples/metasploit_data_models/search/operation/ipaddress/match.rb +2 -2
  149. data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_children.rb +5 -5
  150. data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_metasploit_model_search_operation_base.rb +5 -5
  151. data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_equality.rb +3 -3
  152. data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +6 -7
  153. metadata +9 -67
  154. data/CHANGELOG.md +0 -6
  155. data/RELEASING.md +0 -88
  156. data/UPGRADING.md +0 -1
  157. data/lib/metasploit_data_models/automatic_exploitation.rb +0 -25
  158. data/spec/lib/metasploit_data_models_spec.rb +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61442f9aba4eb0add5a0c6f73069b50a8f45f252
4
- data.tar.gz: e1fc9dfd4147569783fb3d2ff3a267a6d4a1efca
3
+ metadata.gz: d1295b513f0e595f45f1315528cec3ad0f4cf2de
4
+ data.tar.gz: 9e7bb0f98fc9b16e90fd65c502e715fc31f5a34a
5
5
  SHA512:
6
- metadata.gz: 43783566f818d244740e6b766646a3cc0a984f5e0436b5a09083b7d39533222dde50acfd9a39ed0d1777b72e16d7825ce8d9e61b5d5e28c88190c4d12c19080c
7
- data.tar.gz: ffff912b548476d593a6e3fc34a9d0ae25fb00d3233d184df48ff7634ae42d0eea0cd38d837d8f37051adc6739437f54440daf97e7d6fc9fc73a8a9569d684e2
6
+ metadata.gz: 29da581587c411a58073e15611381797eaa99d526e9f18bb4c41c7abf0d21cdce16050bdab6300431e0e65baca48b845dac7bbc9e30b6b5b7d226c1bd6cbffe9
7
+ data.tar.gz: 7645723fa0cb86dd2b484f8a4e51fdaee78be760a41bb25f6ca60df9c6f174d702cc584e26e4e810819e04af8bd3473b7b88510753961529a3eed04cd361968e
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --color
2
- --format documentation
3
- --require spec_helper
1
+ --format nested
2
+ --colour
3
+ --drb
data/.travis.yml CHANGED
@@ -1,8 +1,3 @@
1
- addons:
2
- postgresql: '9.3'
3
- before_install:
4
- # graphviz for yard-metasploit-erd
5
- - sudo apt-get install graphviz
6
1
  before_script:
7
2
  - cp spec/dummy/config/database.yml.travis spec/dummy/config/database.yml
8
3
  - bundle exec rake db:setup
@@ -10,4 +5,6 @@ cache: bundler
10
5
  language: ruby
11
6
  rvm:
12
7
  - 2.1
13
- script: bundle exec rake spec yard
8
+ sudo: false
9
+ addons:
10
+ postgresql: '9.3'
data/CONTRIBUTING.md CHANGED
@@ -25,18 +25,19 @@ issue tracking software.
25
25
 
26
26
  ### `PRERELEASE`
27
27
 
28
- 1. Update `PRERELEASE` to match the `SUMMARY` in the branch name. If you branched from `master`, and [version.rb](lib/metasploit_data_models/version.rb) does not have `PRERELEASE` defined, then adding the following lines after `PATCH`:
28
+ 1. Update `PRERELEASE` to match the `SUMMARY` in the branch name. If you branched from `master`, and [version.rb](lib/metasploit_data_models/version.rb) does not have `PRERELEASE` defined, then adding the following lines after `PATCH`:
29
29
  ```
30
- # The prerelease version, scoped to the {MAJOR}, {MINOR}, and {PATCH} version number.
30
+ # The prerelease version, scoped to the {PATCH} version number.
31
31
  PRERELEASE = '<SUMMARY>'
32
32
  ```
33
33
  2. `rake spec`
34
34
  3. Verify the specs pass, which indicates that `PRERELEASE` was updated correctly.
35
35
  4. Commit the change `git commit -a`
36
36
 
37
+
37
38
  ### Your changes
38
39
 
39
- Make your changes or however many commits you like, committing each with `git commit`.
40
+ Make your changes or however many commits you like, commiting each with `git commit`.
40
41
 
41
42
  ### Pre-Pull Request Testing
42
43
 
@@ -45,12 +46,12 @@ Make your changes or however many commits you like, committing each with `git co
45
46
 
46
47
  ### Push
47
48
 
48
- Push your branch to your fork on github: `git push TYPE/ISSUE/SUMMARY`
49
+ Push your branch to your fork on gitub: `git push push TYPE/ISSUE/SUMMARY`
49
50
 
50
51
  ### Pull Request
51
52
 
52
53
  * [Create new Pull Request](https://github.com/rapid7/metasploit_data_models/compare/)
53
- * Add a Verification Steps to the description comment
54
+ * Add a Verification Steps comment
54
55
 
55
56
  ```
56
57
  # Verification Steps
@@ -61,12 +62,11 @@ Push your branch to your fork on github: `git push TYPE/ISSUE/SUMMARY`
61
62
  - [ ] `rake spec`
62
63
  - [ ] VERIFY no failures
63
64
  ```
64
-
65
65
  You should also include at least one scenario to manually check the changes outside of specs.
66
66
 
67
67
  * Add a Post-merge Steps comment
68
68
 
69
- The 'Post-merge Steps' are a reminder to the reviewer of the Pull Request of how to update the [`PRERELEASE`](lib/metasploit_data_models/version.rb) so that [version_spec.rb](spec/lib/metasploit_data_models/version.rb_spec.rb) passes on the target branch after the merge.
69
+ The 'Post-merge Steps' are a reminder to the reviewer of the Pull Request of how to update the [`PRERELEASE`](lib/metasploit_data_models/version.rb) so that [version_spec.rb](spec/lib/metasploit_data_models/version_spec.rb) passes on the target branch after the merge.
70
70
 
71
71
  DESTINATION is the name of the destination branch into which the merge is being made. SOURCE_SUMMARY is the SUMMARY from TYPE/ISSUE/SUMMARY branch name for the SOURCE branch that is being made.
72
72
 
@@ -106,7 +106,7 @@ Perform these steps prior to pushing to DESTINATION or the build will be broke o
106
106
  - [ ] Change `PRERELEASE` from `SOURCE_SUMMARY` to `DESTINATION_SUMMARY` to match the branch (DESTINATION) summary (DESTINATION_SUMMARY)
107
107
 
108
108
  ## Gem build
109
- - [ ] gem build metasploit_data_models.gemspec
109
+ - [ ] gem build *.gemspec
110
110
  - [ ] VERIFY the prerelease suffix has change on the gem.
111
111
 
112
112
  ## RSpec
@@ -118,5 +118,47 @@ Perform these steps prior to pushing to DESTINATION or the build will be broke o
118
118
  - [ ] `git push origin DESTINATION`
119
119
  ```
120
120
 
121
- To update the [CHANGELOG.md](CHANGELOG.md) with the merged changes or release the merged code see
122
- [RELEASING.md](RELEASING.md)
121
+ * Add a 'Release Steps' comment
122
+
123
+ The 'Release Steps' are a reminder to the reviewer of the Pull Request of how to release the gem.
124
+
125
+ ```
126
+ # Release
127
+
128
+ Complete these steps on DESTINATION
129
+
130
+ ## Version
131
+
132
+ ### Compatible changes
133
+
134
+ If the change are compatible with the previous branch's API, then increment [`PATCH`](lib/metasploit_data_models/version.rb).
135
+
136
+ ### Incompatible changes
137
+
138
+ If your changes are incompatible with the previous branch's API, then increment
139
+ [`MINOR`](lib/metasploit_data_models/version.rb) and reset [`PATCH`](lib/metasploit_data_models/version.rb) to `0`.
140
+
141
+ - [ ] Following the rules for [semantic versioning 2.0](http://semver.org/spec/v2.0.0.html), update
142
+ [`MINOR`](lib/metasploit_data_models/version.rb) and [`PATCH`](lib/metasploit_data_models/version.rb) and commit the changes.
143
+
144
+ ## JRuby
145
+ - [ ] `rvm use jruby@metasploit_data_models`
146
+ - [ ] `rm Gemfile.lock`
147
+ - [ ] `bundle install`
148
+ - [ ] `rake release`
149
+
150
+ ## MRI Ruby
151
+ - [ ] `rvm use ruby-2.1@metasploit_data_models`
152
+ - [ ] `rm Gemfile.lock`
153
+ - [ ] `bundle install`
154
+ - [ ] `rake release`
155
+ ```
156
+
157
+ ### Downstream dependencies
158
+
159
+ When releasing new versions, the following projects may need to be updated:
160
+
161
+ * [metasploit-credential](https://github.com/rapid7/metasploit-credential)
162
+ * [metasploit-framework](https://github.com/rapid7/metasploit-framework)
163
+ * [metasploit-pro-ui](https://github.com/rapid7/pro/tree/master/ui)
164
+ * [metasploit-pro-engine](https://github.com/rapid7/pro/tree/master/engine)
data/Gemfile CHANGED
@@ -3,6 +3,11 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in metasploit_data_models.gemspec
4
4
  gemspec
5
5
 
6
+ group :development do
7
+ # embed ERDs on index, namespace Module and Class<ActiveRecord::Base> pages
8
+ gem 'yard-metasploit-erd', '~> 0.0.2'
9
+ end
10
+
6
11
  # used by dummy application
7
12
  group :development, :test do
8
13
  # Upload coverage reports to coveralls.io
@@ -27,9 +32,11 @@ group :test do
27
32
  gem 'shoulda-matchers'
28
33
  # code coverage of tests
29
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'
30
37
  # need rspec-rails >= 2.12.0 as 2.12.0 adds support for redefining named subject in nested context that uses the
31
38
  # named subject from the outer context without causing a stack overflow.
32
- gem 'rspec-rails', '~> 3.2'
39
+ gem 'rspec-rails', '>= 2.12.0'
33
40
  # used for building markup for webpage factories
34
41
  gem 'builder'
35
42
  end
data/Rakefile CHANGED
@@ -42,29 +42,6 @@ else
42
42
  task :default => :spec
43
43
  end
44
44
 
45
- # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
46
- gem_specification = Gem::Specification.find_all_by_name('metasploit-yard').first
47
-
48
- if gem_specification
49
- Dir[File.join(gem_specification.gem_dir, 'lib', 'tasks', '**', '*.rake')].each do |rake|
50
- load rake
51
- end
52
-
53
- #
54
- # Eager load before yard docs so that ActiveRecord::Base subclasses are loaded for yard-metasploit-erd
55
- #
56
-
57
- task 'yard:doc' => :eager_load
58
-
59
- task eager_load: :environment do
60
- Rails.application.eager_load!
61
- end
62
- else
63
- puts "metasploit-yard not in bundle, so can't setup yard tasks. " \
64
- "To run yard ensure to install the development group."
65
- print_without = true
66
- end
67
-
68
45
  if print_without
69
46
  puts "Bundle currently installed '--without #{Bundler.settings.without.join(' ')}'."
70
47
  puts "To clear the without option do `bundle install --without ''` (the --without flag with an empty string) or " \
@@ -1,53 +1,13 @@
1
- # API key to access the RPC.
2
1
  class Mdm::ApiKey < ActiveRecord::Base
3
2
  #
4
- # Attributes
5
- #
6
-
7
- # @!attribute [rw] created_at
8
- # When this API Key was created.
9
- #
10
- # @return [DateTime]
11
-
12
- # @!attribute [rw] token
13
- # The API Key to authenicate to the RPC.
14
- #
15
- # @return [String]
16
-
17
- # @!attribute [rw] updated_at
18
- # The last time this API Key was updated.
19
- #
20
- # @return [DateTime]
21
-
22
- #
23
- #
24
- # Validations
25
- #
26
- #
27
-
28
- #
29
- # Method Validations
3
+ # Validators
30
4
  #
31
5
 
32
6
  validate :supports_api
33
-
34
- #
35
- # Attribute Validations
36
- #
37
-
38
7
  validates :token, :presence => true, :length => { :minimum => 8 }
39
8
 
40
- #
41
- # Instance Methods
42
- #
43
-
44
9
  protected
45
10
 
46
-
47
- # Validates whether License supports API.
48
- #
49
- # @return [void]
50
- # @todo MSP-2724
51
11
  def supports_api
52
12
  license = License.get
53
13
 
@@ -1,50 +1,10 @@
1
- # Client used for `report_client` in metasploit-framework Metasploit Modules.
2
1
  class Mdm::Client < ActiveRecord::Base
3
2
  #
4
- # Associations
3
+ # Relations
5
4
  #
6
-
7
- # {Mdm::Host} from which this client connected.
8
5
  belongs_to :host,
9
6
  class_name: 'Mdm::Host',
10
7
  inverse_of: :clients
11
8
 
12
- #
13
- # Attributes
14
- #
15
-
16
- # @!attribute created_at
17
- # When this client was created.
18
- #
19
- # @return [DateTime]
20
-
21
- # @!attribute updated_at
22
- # When this client was last updated.
23
- #
24
- # @return [DateTime]
25
-
26
- #
27
- # @!group User Agent
28
- #
29
-
30
- # @!attribute ua_name
31
- # Parsed name from {#ua_string user agent string}
32
- #
33
- # @return [String]
34
-
35
- # @!attribute ua_string
36
- # Raw user agent string from client browser
37
- #
38
- # @return [String]
39
-
40
- # @!attribute ua_ver
41
- # Version of user agent.
42
- #
43
- # @return [String]
44
-
45
- #
46
- # @!endgroup
47
- #
48
-
49
9
  Metasploit::Concern.run(self)
50
10
  end
@@ -1,15 +1,8 @@
1
- # @deprecated Use metasploit-credential's `Metasploit::Credential::Core`.
2
- #
3
- # A credential captured from a {#service}.
4
1
  class Mdm::Cred < ActiveRecord::Base
5
2
  #
6
3
  # CONSTANTS
7
4
  #
8
-
9
- # Checks if {#proof} is an SSH Key in {#ssh_key_id}.
10
5
  KEY_ID_REGEX = /([0-9a-fA-F:]{47})/
11
-
12
- # Maps {#ptype_human} to {#ptype}.
13
6
  PTYPES = {
14
7
  'read/write password' => 'password_rw',
15
8
  'read-only password' => 'password_ro',
@@ -19,93 +12,35 @@ class Mdm::Cred < ActiveRecord::Base
19
12
  }
20
13
 
21
14
  #
22
- #
23
- # Associations
24
- #
15
+ # Relations
25
16
  #
26
17
 
27
- # The {Mdm::Service} this Cred is for.
18
+ # @!attribute [rw] servce
19
+ # The service this cred is for
20
+ #
21
+ # @return [Mdm::Service]
28
22
  belongs_to :service,
29
23
  class_name: 'Mdm::Service',
30
24
  inverse_of: :creds
31
25
 
32
- # Joins {#tasks} to this Cred.
26
+ # @!attribute [rw] task_creds
27
+ # Details about what Tasks touched this cred
28
+ #
29
+ # @return [Array<Mdm::TaskCred>]
33
30
  has_many :task_creds,
34
31
  class_name: 'Mdm::TaskCred',
35
32
  dependent: :destroy,
36
33
  inverse_of: :cred
37
34
 
35
+ # @!attribute [rw] tasks
36
+ # Tasks that touched this service
38
37
  #
39
- # through: :task_creds
40
- #
41
-
42
- # Tasks that touched this service
38
+ # @return [Array<Mdm::Task>]
43
39
  has_many :tasks, :through => :task_creds
44
40
 
45
- #
46
- # Attributes
47
- #
48
-
49
- # @!attribute active
50
- # Whether the credential is active.
51
- #
52
- # @return [false] if a captured credential cannot be used to log into {#service}.
53
- # @return [true] otherwise
54
-
55
- # @!attribute created_at
56
- # When this credential was created.
57
- #
58
- # @return [DateTime]
59
-
60
- # @!attribute pass
61
- # Pass of credential.
62
- #
63
- # @return [String, nil]
64
-
65
- # @!attribute proof
66
- # Proof of credential capture.
67
- #
68
- # @return [String]
69
-
70
- # @!attribute ptype
71
- # Type of {#pass}.
72
- #
73
- # @return [String]
74
-
75
- # @!attribute source_id
76
- # Id of source of this credential.
77
- #
78
- # @return [Integer, nil]
79
-
80
- # @!attribute source_type
81
- # Type of source with {#source_id}.
82
- #
83
- # @return [String, nil]
84
-
85
- # @!attribute updated_at
86
- # The last time this credential was updated.
87
- #
88
- # @return [DateTime]
89
-
90
- # @!attribute user
91
- # User name of credential.
92
- #
93
- # @return [String, nil]
94
-
95
- #
96
- # Callbacks
97
- #
98
-
99
41
  after_create :increment_host_counter_cache
100
42
  after_destroy :decrement_host_counter_cache
101
43
 
102
- #
103
- # Instance methods
104
- #
105
-
106
- # Humanized {#ptype}.
107
- #
108
- # @return [String, nil]
109
44
  def ptype_human
110
45
  humanized = PTYPES.select do |k, v|
111
46
  v == ptype
@@ -114,24 +49,13 @@ class Mdm::Cred < ActiveRecord::Base
114
49
  humanized ? humanized : ptype
115
50
  end
116
51
 
117
- # Returns SSH Key ID.
118
- #
119
- # @return [String] SSH Key Id if ssh-type key and {#proof} matches {KEY_ID_REGEX}.
120
- # @return [nil] otherwise
52
+ # Returns its key id. If this is not an ssh-type key, returns nil.
121
53
  def ssh_key_id
122
54
  return nil unless self.ptype =~ /^ssh_/
123
55
  return nil unless self.proof =~ KEY_ID_REGEX
124
56
  $1.downcase # Can't run into NilClass problems.
125
57
  end
126
58
 
127
- # Returns whether `other`'s SSH private key or public key matches.
128
- #
129
- # @return [false] if `other` is not same class as `self`.
130
- # @return [false] if {#ptype} does not match.
131
- # @return [false] if {#ptype} is neither `"ssh_key"` nor `"ssh_pubkey"`.
132
- # @return [false] if {#ssh_key_id} is `nil`.
133
- # @return [false] if {#ssh_key_id} does not match.
134
- # @return [true] if {#ssh_key_id} matches.
135
59
  def ssh_key_matches?(other_cred)
136
60
  return false unless other_cred.kind_of? self.class
137
61
  return false unless self.ptype == other_cred.ptype
@@ -146,16 +70,14 @@ class Mdm::Cred < ActiveRecord::Base
146
70
  matches.include?(self) and matches.include?(other_cred)
147
71
  end
148
72
 
149
- # Returns all keys with matching key ids, including itself.
150
- #
151
- # @return [ActiveRecord::Relation<Mdm::Cred>] ssh_key and ssh_pubkey creds with matching {#ssh_key_id}.
73
+ # Returns all keys with matching key ids, including itself
74
+ # If this is not an ssh-type key, always returns an empty array.
152
75
  def ssh_keys
153
76
  (self.ssh_private_keys | self.ssh_public_keys)
154
77
  end
155
78
 
156
- # Returns all private keys with matching {#ssh_key_id}, including itself.
157
- #
158
- # @return [ActiveRecord::Relation<Mdm::Cred>] ssh_key creds with matching {#ssh_key_id}.
79
+ # Returns all private keys with matching key ids, including itself
80
+ # If this is not an ssh-type key, always returns an empty array.
159
81
  def ssh_private_keys
160
82
  return [] unless self.ssh_key_id
161
83
  matches = self.class.all(
@@ -164,9 +86,8 @@ class Mdm::Cred < ActiveRecord::Base
164
86
  matches.select {|c| c.workspace == self.workspace}
165
87
  end
166
88
 
167
- # Returns all public keys with matching {#ssh_key_id}, including itself.
168
- #
169
- # @return [ActiveRecord::Relation<Mdm::Cred>] ssh_pubkey creds with matching {#ssh_key_id}.
89
+ # Returns all public keys with matching key ids, including itself
90
+ # If this is not an ssh-type key, always returns an empty array.
170
91
  def ssh_public_keys
171
92
  return [] unless self.ssh_key_id
172
93
  matches = self.class.all(
@@ -176,29 +97,20 @@ class Mdm::Cred < ActiveRecord::Base
176
97
  end
177
98
 
178
99
  # Returns its workspace
179
- #
180
- # @return [Mdm::Workspace]
181
100
  def workspace
182
101
  self.service.host.workspace
183
102
  end
184
103
 
185
104
  private
186
105
 
187
- # Decrements {Mdm::Host#cred_count}.
188
- #
189
- # @return [void]
190
106
  def decrement_host_counter_cache
191
107
  Mdm::Host.decrement_counter("cred_count", self.service.host_id)
192
108
  end
193
109
 
194
- # Increments {Mdm::Host#cred_count}.
195
- #
196
- # @return [void]
197
110
  def increment_host_counter_cache
198
111
  Mdm::Host.increment_counter("cred_count", self.service.host_id)
199
112
  end
200
113
 
201
- # Switch back to public for load hooks.
202
114
  public
203
115
 
204
116
  Metasploit::Concern.run(self)