metasploit_data_models 0.7.0-java

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.
Files changed (214) hide show
  1. data/.gitignore +24 -0
  2. data/.rspec +3 -0
  3. data/.simplecov +38 -0
  4. data/.travis.yml +6 -0
  5. data/.yardopts +4 -0
  6. data/Gemfile +27 -0
  7. data/LICENSE +27 -0
  8. data/README.md +72 -0
  9. data/Rakefile +53 -0
  10. data/app/models/mdm/api_key.rb +20 -0
  11. data/app/models/mdm/client.rb +9 -0
  12. data/app/models/mdm/cred.rb +93 -0
  13. data/app/models/mdm/event.rb +30 -0
  14. data/app/models/mdm/exploit_attempt.rb +14 -0
  15. data/app/models/mdm/exploited_host.rb +11 -0
  16. data/app/models/mdm/host.rb +134 -0
  17. data/app/models/mdm/host_detail.rb +15 -0
  18. data/app/models/mdm/host_tag.rb +13 -0
  19. data/app/models/mdm/imported_cred.rb +10 -0
  20. data/app/models/mdm/listener.rb +24 -0
  21. data/app/models/mdm/loot.rb +63 -0
  22. data/app/models/mdm/macro.rb +20 -0
  23. data/app/models/mdm/mod_ref.rb +3 -0
  24. data/app/models/mdm/module_action.rb +24 -0
  25. data/app/models/mdm/module_arch.rb +24 -0
  26. data/app/models/mdm/module_author.rb +25 -0
  27. data/app/models/mdm/module_detail.rb +59 -0
  28. data/app/models/mdm/module_mixin.rb +24 -0
  29. data/app/models/mdm/module_platform.rb +24 -0
  30. data/app/models/mdm/module_ref.rb +24 -0
  31. data/app/models/mdm/module_target.rb +26 -0
  32. data/app/models/mdm/nexpose_console.rb +20 -0
  33. data/app/models/mdm/note.rb +49 -0
  34. data/app/models/mdm/profile.rb +9 -0
  35. data/app/models/mdm/ref.rb +14 -0
  36. data/app/models/mdm/report.rb +50 -0
  37. data/app/models/mdm/report_template.rb +27 -0
  38. data/app/models/mdm/route.rb +9 -0
  39. data/app/models/mdm/service.rb +56 -0
  40. data/app/models/mdm/session.rb +48 -0
  41. data/app/models/mdm/session_event.rb +9 -0
  42. data/app/models/mdm/tag.rb +46 -0
  43. data/app/models/mdm/task.rb +41 -0
  44. data/app/models/mdm/user.rb +25 -0
  45. data/app/models/mdm/vuln.rb +60 -0
  46. data/app/models/mdm/vuln_attempt.rb +15 -0
  47. data/app/models/mdm/vuln_detail.rb +14 -0
  48. data/app/models/mdm/vuln_ref.rb +13 -0
  49. data/app/models/mdm/web_form.rb +16 -0
  50. data/app/models/mdm/web_page.rb +16 -0
  51. data/app/models/mdm/web_site.rb +47 -0
  52. data/app/models/mdm/web_vuln.rb +190 -0
  53. data/app/models/mdm/wmap_request.rb +3 -0
  54. data/app/models/mdm/wmap_target.rb +3 -0
  55. data/app/models/mdm/workspace.rb +196 -0
  56. data/bin/mdm_console +68 -0
  57. data/console_db.yml +9 -0
  58. data/db/migrate/000_create_tables.rb +79 -0
  59. data/db/migrate/001_add_wmap_tables.rb +35 -0
  60. data/db/migrate/002_add_workspaces.rb +36 -0
  61. data/db/migrate/003_move_notes.rb +20 -0
  62. data/db/migrate/004_add_events_table.rb +16 -0
  63. data/db/migrate/005_expand_info.rb +58 -0
  64. data/db/migrate/006_add_timestamps.rb +26 -0
  65. data/db/migrate/007_add_loots.rb +20 -0
  66. data/db/migrate/008_create_users.rb +16 -0
  67. data/db/migrate/009_add_loots_ctype.rb +10 -0
  68. data/db/migrate/010_add_alert_fields.rb +16 -0
  69. data/db/migrate/011_add_reports.rb +19 -0
  70. data/db/migrate/012_add_tasks.rb +24 -0
  71. data/db/migrate/013_add_tasks_result.rb +10 -0
  72. data/db/migrate/014_add_loots_fields.rb +12 -0
  73. data/db/migrate/015_rename_user.rb +16 -0
  74. data/db/migrate/016_add_host_purpose.rb +10 -0
  75. data/db/migrate/017_expand_info2.rb +58 -0
  76. data/db/migrate/018_add_workspace_user_info.rb +29 -0
  77. data/db/migrate/019_add_workspace_desc.rb +23 -0
  78. data/db/migrate/020_add_user_preferences.rb +11 -0
  79. data/db/migrate/021_standardize_info_and_data.rb +18 -0
  80. data/db/migrate/022_enlarge_event_info.rb +10 -0
  81. data/db/migrate/023_add_report_downloaded_at.rb +10 -0
  82. data/db/migrate/024_convert_service_info_to_text.rb +12 -0
  83. data/db/migrate/025_add_user_admin.rb +19 -0
  84. data/db/migrate/026_add_creds_table.rb +19 -0
  85. data/db/migrate/20100819123300_migrate_cred_data.rb +154 -0
  86. data/db/migrate/20100824151500_add_exploited_table.rb +16 -0
  87. data/db/migrate/20100908001428_add_owner_to_workspaces.rb +9 -0
  88. data/db/migrate/20100911122000_add_report_templates.rb +18 -0
  89. data/db/migrate/20100916151530_require_admin_flag.rb +15 -0
  90. data/db/migrate/20100916175000_add_campaigns_and_templates.rb +61 -0
  91. data/db/migrate/20100920012100_add_generate_exe_column.rb +8 -0
  92. data/db/migrate/20100926214000_add_template_prefs.rb +11 -0
  93. data/db/migrate/20101001000000_add_web_tables.rb +57 -0
  94. data/db/migrate/20101002000000_add_query.rb +10 -0
  95. data/db/migrate/20101007000000_add_vuln_info.rb +15 -0
  96. data/db/migrate/20101008111800_add_clients_to_campaigns.rb +10 -0
  97. data/db/migrate/20101009023300_add_campaign_attachments.rb +15 -0
  98. data/db/migrate/20101104135100_add_imported_creds.rb +17 -0
  99. data/db/migrate/20101203000000_fix_web_tables.rb +34 -0
  100. data/db/migrate/20101203000001_expand_host_comment.rb +12 -0
  101. data/db/migrate/20101206212033_add_limit_to_network_to_workspaces.rb +9 -0
  102. data/db/migrate/20110112154300_add_module_uuid_to_tasks.rb +9 -0
  103. data/db/migrate/20110204112800_add_host_tags.rb +28 -0
  104. data/db/migrate/20110317144932_add_session_table.rb +110 -0
  105. data/db/migrate/20110414180600_add_local_id_to_session_table.rb +11 -0
  106. data/db/migrate/20110415175705_add_routes_table.rb +18 -0
  107. data/db/migrate/20110422000000_convert_binary.rb +73 -0
  108. data/db/migrate/20110425095900_add_last_seen_to_sessions.rb +8 -0
  109. data/db/migrate/20110513143900_track_successful_exploits.rb +31 -0
  110. data/db/migrate/20110517160800_rename_and_prune_nessus_vulns.rb +26 -0
  111. data/db/migrate/20110527000000_add_task_id_to_reports_table.rb +11 -0
  112. data/db/migrate/20110527000001_add_api_keys_table.rb +12 -0
  113. data/db/migrate/20110606000001_add_macros_table.rb +16 -0
  114. data/db/migrate/20110622000000_add_settings_to_tasks_table.rb +12 -0
  115. data/db/migrate/20110624000001_add_listeners_table.rb +19 -0
  116. data/db/migrate/20110625000001_add_macro_to_listeners_table.rb +12 -0
  117. data/db/migrate/20110630000001_add_nexpose_consoles_table.rb +21 -0
  118. data/db/migrate/20110630000002_add_name_to_nexpose_consoles_table.rb +12 -0
  119. data/db/migrate/20110717000001_add_profiles_table.rb +15 -0
  120. data/db/migrate/20110727163801_expand_cred_ptype_column.rb +9 -0
  121. data/db/migrate/20110730000001_add_initial_indexes.rb +85 -0
  122. data/db/migrate/20110812000001_prune_indexes.rb +23 -0
  123. data/db/migrate/20110922000000_expand_notes.rb +9 -0
  124. data/db/migrate/20110928101300_add_mod_ref_table.rb +17 -0
  125. data/db/migrate/20111011110000_add_display_name_to_reports_table.rb +24 -0
  126. data/db/migrate/20111203000000_inet_columns.rb +13 -0
  127. data/db/migrate/20111204000000_more_inet_columns.rb +17 -0
  128. data/db/migrate/20111210000000_add_scope_to_hosts.rb +9 -0
  129. data/db/migrate/20120126110000_add_virtual_host_to_hosts.rb +9 -0
  130. data/db/migrate/20120411173220_rename_workspace_members.rb +9 -0
  131. data/db/migrate/20120601152442_add_counter_caches_to_hosts.rb +21 -0
  132. data/db/migrate/20120625000000_add_vuln_details.rb +34 -0
  133. data/db/migrate/20120625000001_add_host_details.rb +16 -0
  134. data/db/migrate/20120625000002_expand_details.rb +16 -0
  135. data/db/migrate/20120625000003_expand_details2.rb +24 -0
  136. data/db/migrate/20120625000004_add_vuln_attempts.rb +19 -0
  137. data/db/migrate/20120625000005_add_vuln_and_host_counter_caches.rb +14 -0
  138. data/db/migrate/20120625000006_add_module_details.rb +118 -0
  139. data/db/migrate/20120625000007_add_exploit_attempts.rb +26 -0
  140. data/db/migrate/20120625000008_add_fail_message.rb +12 -0
  141. data/db/migrate/20120718202805_add_owner_and_payload_to_web_vulns.rb +13 -0
  142. data/db/migrate/20130228214900_change_required_columns_to_null_false_in_web_vulns.rb +35 -0
  143. data/db/migrate/20130423211152_add_creds_counter_cache.rb +24 -0
  144. data/lib/mdm.rb +12 -0
  145. data/lib/mdm/host/operating_system_normalization.rb +984 -0
  146. data/lib/metasploit_data_models.rb +60 -0
  147. data/lib/metasploit_data_models/base64_serializer.rb +103 -0
  148. data/lib/metasploit_data_models/engine.rb +23 -0
  149. data/lib/metasploit_data_models/serialized_prefs.rb +23 -0
  150. data/lib/metasploit_data_models/validators/ip_format_validator.rb +13 -0
  151. data/lib/metasploit_data_models/validators/password_is_strong_validator.rb +70 -0
  152. data/lib/metasploit_data_models/version.rb +8 -0
  153. data/lib/tasks/yard.rake +26 -0
  154. data/metasploit_data_models.gemspec +54 -0
  155. data/script/rails +8 -0
  156. data/spec/app/models/mdm/module_action_spec.rb +38 -0
  157. data/spec/app/models/mdm/module_arch_spec.rb +38 -0
  158. data/spec/app/models/mdm/module_author_spec.rb +50 -0
  159. data/spec/app/models/mdm/module_detail_spec.rb +291 -0
  160. data/spec/app/models/mdm/module_mixin_spec.rb +38 -0
  161. data/spec/app/models/mdm/module_platform_spec.rb +38 -0
  162. data/spec/app/models/mdm/module_ref_spec.rb +38 -0
  163. data/spec/app/models/mdm/module_target_spec.rb +41 -0
  164. data/spec/app/models/mdm/web_vuln_spec.rb +126 -0
  165. data/spec/dummy/Rakefile +7 -0
  166. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  167. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  168. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  169. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  170. data/spec/dummy/app/mailers/.gitkeep +0 -0
  171. data/spec/dummy/app/models/.gitkeep +0 -0
  172. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  173. data/spec/dummy/config.ru +4 -0
  174. data/spec/dummy/config/application.rb +61 -0
  175. data/spec/dummy/config/boot.rb +10 -0
  176. data/spec/dummy/config/database.yml.example +22 -0
  177. data/spec/dummy/config/database.yml.travis +22 -0
  178. data/spec/dummy/config/environment.rb +5 -0
  179. data/spec/dummy/config/environments/development.rb +37 -0
  180. data/spec/dummy/config/environments/production.rb +67 -0
  181. data/spec/dummy/config/environments/test.rb +37 -0
  182. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  183. data/spec/dummy/config/initializers/inflections.rb +15 -0
  184. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  185. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  186. data/spec/dummy/config/initializers/session_store.rb +8 -0
  187. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  188. data/spec/dummy/config/routes.rb +2 -0
  189. data/spec/dummy/db/schema.rb +639 -0
  190. data/spec/dummy/lib/assets/.gitkeep +0 -0
  191. data/spec/dummy/log/.gitkeep +0 -0
  192. data/spec/dummy/public/404.html +26 -0
  193. data/spec/dummy/public/422.html +26 -0
  194. data/spec/dummy/public/500.html +25 -0
  195. data/spec/dummy/public/favicon.ico +0 -0
  196. data/spec/dummy/script/rails +6 -0
  197. data/spec/factories/mdm/addresses.rb +7 -0
  198. data/spec/factories/mdm/hosts.rb +18 -0
  199. data/spec/factories/mdm/module_actions.rb +14 -0
  200. data/spec/factories/mdm/module_archs.rb +14 -0
  201. data/spec/factories/mdm/module_authors.rb +22 -0
  202. data/spec/factories/mdm/module_details.rb +9 -0
  203. data/spec/factories/mdm/module_mixins.rb +14 -0
  204. data/spec/factories/mdm/module_platforms.rb +14 -0
  205. data/spec/factories/mdm/module_refs.rb +14 -0
  206. data/spec/factories/mdm/module_targets.rb +19 -0
  207. data/spec/factories/mdm/services.rb +35 -0
  208. data/spec/factories/mdm/users.rb +22 -0
  209. data/spec/factories/mdm/web_sites.rb +8 -0
  210. data/spec/factories/mdm/web_vulns.rb +64 -0
  211. data/spec/factories/mdm/workspaces.rb +23 -0
  212. data/spec/lib/base64_serializer_spec.rb +174 -0
  213. data/spec/spec_helper.rb +36 -0
  214. metadata +472 -0
File without changes
File without changes
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ sequence :mdm_ipv4_address do |n|
3
+ max = 255
4
+
5
+ "192.168.#{(n / max).to_i}.#{n % max}"
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_host, :class => Mdm::Host do
3
+ #
4
+ # Associations
5
+ #
6
+ association :workspace, :factory => :mdm_workspace
7
+
8
+ #
9
+ # Attributes
10
+ #
11
+ address { generate :mdm_ipv4_address }
12
+ name { generate :mdm_host_name }
13
+ end
14
+
15
+ sequence :mdm_host_name do |n|
16
+ "mdm_host_#{n}"
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_action, :class => Mdm::ModuleAction do
3
+ name { generate :mdm_module_action_name }
4
+
5
+ #
6
+ # Associations
7
+ #
8
+ association :module_detail, :factory => :mdm_module_detail
9
+ end
10
+
11
+ sequence :mdm_module_action_name do |n|
12
+ "Mdm::ModuleAction#name #{n}"
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_arch, :class => Mdm::ModuleArch do
3
+ name { generate :mdm_module_arch_name }
4
+
5
+ #
6
+ # Associations
7
+ #
8
+ association :module_detail, :factory => :mdm_module_detail
9
+ end
10
+
11
+ sequence :mdm_module_arch_name do |n|
12
+ "Mdm::ModuleArch#name #{n}"
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_author, :class => Mdm::ModuleAuthor do
3
+ name { generate :mdm_module_author_name }
4
+
5
+ #
6
+ # Associations
7
+ #
8
+ association :module_detail, :factory => :mdm_module_detail
9
+
10
+ factory :full_mdm_module_author do
11
+ email { generate :mdm_module_author_name }
12
+ end
13
+ end
14
+
15
+ sequence :mdm_module_author_name do |n|
16
+ "Mdm::ModuleAuthor#name #{n}"
17
+ end
18
+
19
+ sequence :mdm_module_author_email do |n|
20
+ "Mdm::ModuleAuthor#email #{n}"
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_detail, :class => Mdm::ModuleDetail do
3
+ refname { generate :mdm_module_detail_refname }
4
+ end
5
+
6
+ sequence :mdm_module_detail_refname do |n|
7
+ "module/ref/name#{n}"
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_mixin, :class => Mdm::ModuleMixin do
3
+ name { generate :mdm_module_mixin_name }
4
+
5
+ #
6
+ # Associations
7
+ #
8
+ association :module_detail, :factory => :mdm_module_detail
9
+ end
10
+
11
+ sequence :mdm_module_mixin_name do |n|
12
+ "Mdm::ModuleMixin#name #{n}"
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_platform, :class => Mdm::ModulePlatform do
3
+ name { generate :mdm_module_platform_name }
4
+
5
+ #
6
+ # Associations
7
+ #
8
+ association :module_detail, :factory => :mdm_module_detail
9
+ end
10
+
11
+ sequence :mdm_module_platform_name do |n|
12
+ "Mdm::ModulePlatform#name #{n}"
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_ref, :class => Mdm::ModuleRef do
3
+ name { generate :mdm_module_ref_name }
4
+
5
+ #
6
+ # Associations
7
+ #
8
+ association :module_detail, :factory => :mdm_module_detail
9
+ end
10
+
11
+ sequence :mdm_module_ref_name do |n|
12
+ "Mdm::ModuleRef#name #{n}"
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_module_target, :class => Mdm::ModuleTarget do
3
+ index { generate :mdm_module_target_index }
4
+ name { generate :mdm_module_target_name }
5
+
6
+ #
7
+ # Associations
8
+ #
9
+ association :module_detail, :factory => :mdm_module_detail
10
+ end
11
+
12
+ sequence :mdm_module_target_index do |n|
13
+ n
14
+ end
15
+
16
+ sequence :mdm_module_target_name do |n|
17
+ "Mdm::ModuleTarget#name #{n}"
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_service, :class => Mdm::Service do
3
+ #
4
+ # Associations
5
+ #
6
+ association :host, :factory => :mdm_host
7
+
8
+ #
9
+ # Attributes
10
+ #
11
+ port 4567
12
+ proto 'snmp'
13
+ state 'open'
14
+
15
+ factory :web_service do
16
+ proto 'tcp'
17
+ name { FactoryGirl.generate(:web_service_name) }
18
+ port { FactoryGirl.generate(:port) }
19
+ end
20
+ end
21
+
22
+ port_bits = 16
23
+ port_limit = 1 << port_bits
24
+
25
+ sequence :port do |n|
26
+ n % port_limit
27
+ end
28
+
29
+ web_service_names = ['http', 'https']
30
+ web_service_name_count = web_service_names.length
31
+
32
+ sequence :web_service_name do |n|
33
+ web_service_names[n % web_service_name_count]
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_user, :class => Mdm::User do
3
+ admin true
4
+ company "Interplanetary Teleportation, LTD"
5
+ email "rwillingham@itl.com"
6
+ fullname { generate :mdm_user_fullname }
7
+ phone "5123334444"
8
+ username { generate :mdm_user_username }
9
+ end
10
+
11
+ factory :non_admin_mdm_user, :parent => :mdm_user do
12
+ admin false
13
+ end
14
+
15
+ sequence :mdm_user_fullname do |n|
16
+ "Mdm User Fullname the #{n.ordinalize}"
17
+ end
18
+
19
+ sequence :mdm_user_username do |n|
20
+ "mdm_user_username#{n}"
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_web_site, :class => Mdm::WebSite do
3
+ #
4
+ # Associations
5
+ #
6
+ association :service, :factory => :mdm_service
7
+ end
8
+ end
@@ -0,0 +1,64 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_web_vuln, :class => Mdm::WebVuln do
3
+ #
4
+ # Associations
5
+ #
6
+ association :web_site, :factory => :mdm_web_site
7
+
8
+ #
9
+ # Attributes
10
+ #
11
+
12
+ category { generate :mdm_web_vuln_category }
13
+ confidence { generate :mdm_web_vuln_confidence }
14
+ method { generate :mdm_web_vuln_method }
15
+ name { generate :mdm_web_vuln_name }
16
+ path { generate :mdm_web_vuln_path }
17
+ params { generate :mdm_web_vuln_params }
18
+ pname { params.first.first }
19
+ proof { generate :mdm_web_vuln_proof }
20
+ risk { generate :mdm_web_vuln_risk }
21
+ end
22
+
23
+ sequence :mdm_web_vuln_category do |n|
24
+ "mdm_web_vuln_category_#{n}"
25
+ end
26
+
27
+ sequence :mdm_web_vuln_confidence do |n|
28
+ # range is from 0 to 100
29
+ n % 101
30
+ end
31
+
32
+ method_count = Mdm::WebVuln::METHODS.length
33
+
34
+ sequence :mdm_web_vuln_method do |n|
35
+ Mdm::WebVuln::METHODS[n % method_count]
36
+ end
37
+
38
+ sequence :mdm_web_vuln_name do |n|
39
+ "Web Vulnerability #{n}"
40
+ end
41
+
42
+ sequence :mdm_web_vuln_path do |n|
43
+ "path/to/vulnerability/#{n}"
44
+ end
45
+
46
+ sequence :mdm_web_vuln_params do |n|
47
+ [
48
+ [
49
+ "param#{n}",
50
+ "value#{n}"
51
+ ]
52
+ ]
53
+ end
54
+
55
+ sequence :mdm_web_vuln_proof do |n|
56
+ "Mdm::WebVuln Proof #{n}"
57
+ end
58
+
59
+ sequence :mdm_web_vuln_risk do |n|
60
+ # range is 0 .. 5
61
+ n % 6
62
+
63
+ end
64
+ end
@@ -0,0 +1,23 @@
1
+ FactoryGirl.define do
2
+ factory :mdm_workspace, :class => Mdm::Workspace do
3
+ #
4
+ # Associations
5
+ #
6
+ association :owner, :factory => :mdm_user
7
+
8
+ #
9
+ # Attributes
10
+ #
11
+ boundary { generate :mdm_ipv4_address }
12
+ description { generate :mdm_workspace_description }
13
+ name { generate :mdm_workspace_name }
14
+ end
15
+
16
+ sequence :mdm_workspace_description do |n|
17
+ "Mdm::Workspace description #{n}"
18
+ end
19
+
20
+ sequence :mdm_workspace_name do |n|
21
+ "Mdm::Workspace Name #{n}"
22
+ end
23
+ end
@@ -0,0 +1,174 @@
1
+ require "spec_helper"
2
+
3
+ describe MetasploitDataModels::Base64Serializer do
4
+ let(:base64_marshaled) do
5
+ marshaled = Marshal.dump(unserialized)
6
+
7
+ [
8
+ marshaled
9
+ ].pack('m')
10
+ end
11
+
12
+ let(:default) do
13
+ {}
14
+ end
15
+
16
+ let(:unserialized) do
17
+ {
18
+ :foo => 'bar',
19
+ :baz => 'baz'
20
+ }
21
+ end
22
+
23
+ let(:yaml) do
24
+ unserialized.to_yaml
25
+ end
26
+
27
+ subject(:base64_serializer) do
28
+ described_class.new
29
+ end
30
+
31
+ context 'CONSTANTS' do
32
+ it 'should define DEFAULT' do
33
+ described_class::DEFAULT.should == default
34
+ end
35
+
36
+ context 'LOADERS' do
37
+ it 'should prefer base64 marshaled first' do
38
+ first = described_class::LOADERS[0]
39
+ deserialized = first.call(base64_marshaled)
40
+
41
+ deserialized.should == unserialized
42
+ end
43
+
44
+ it 'should fallback to the old YAML format second' do
45
+ second = described_class::LOADERS[1]
46
+ deserialized = second.call(yaml)
47
+
48
+ deserialized.should == unserialized
49
+ end
50
+
51
+ it 'should finally give up and just return the value' do
52
+ last = described_class::LOADERS.last
53
+ deserialized = last.call(unserialized)
54
+
55
+ deserialized.should == unserialized
56
+ end
57
+ end
58
+ end
59
+
60
+ context '#default' do
61
+ it 'should default to {}' do
62
+ base64_serializer.default.should == {}
63
+ end
64
+
65
+ it 'should return a duplicate' do
66
+ duplicate = base64_serializer.default
67
+ value = mock('Value')
68
+ duplicate[:key] = value
69
+
70
+ duplicate.should_not == base64_serializer.default
71
+ end
72
+ end
73
+
74
+ context '#dump' do
75
+ it 'should output Base64 encoded marshaled data' do
76
+ dumped = base64_serializer.dump(unserialized)
77
+
78
+ dumped.should == base64_marshaled
79
+ end
80
+ end
81
+
82
+ context '#initialize' do
83
+ let(:attributes) do
84
+ {}
85
+ end
86
+
87
+ subject(:base64_serializer) do
88
+ described_class.new(attributes)
89
+ end
90
+
91
+ context 'with :default' do
92
+ let(:attributes) do
93
+ {
94
+ :default => default
95
+ }
96
+ end
97
+
98
+ let(:default) do
99
+ [
100
+ [
101
+ 'param',
102
+ 'value'
103
+ ]
104
+ ]
105
+ end
106
+
107
+ it 'should have :default in attributes' do
108
+ attributes.should have_key(:default)
109
+ end
110
+
111
+ it 'should set default to :default value' do
112
+ base64_serializer.default.should == attributes[:default]
113
+ end
114
+ end
115
+
116
+ context 'without :default' do
117
+ it 'should not have :default in attributes' do
118
+ attributes.should_not have_key(:default)
119
+ end
120
+
121
+ it 'should default #default to DEFAULT' do
122
+ base64_serializer.default.should == default
123
+ end
124
+ end
125
+ end
126
+
127
+ context '#load' do
128
+ context 'with nil' do
129
+ let(:serialized) do
130
+ nil
131
+ end
132
+
133
+ it 'should return #default' do
134
+ default = mock('Default')
135
+ base64_serializer.stub(:default => default)
136
+ deserialized = base64_serializer.load(serialized)
137
+
138
+ deserialized.should == default
139
+ end
140
+ end
141
+
142
+ context 'with Base64 encoded marshaled' do
143
+ it 'should return unserialized' do
144
+ deserialized = base64_serializer.load(base64_marshaled)
145
+
146
+ deserialized.should == unserialized
147
+ end
148
+
149
+ end
150
+
151
+ context 'with YAML' do
152
+ it 'should return unserialized' do
153
+ deserialized = base64_serializer.load(yaml)
154
+
155
+ deserialized.should == unserialized
156
+ end
157
+ end
158
+
159
+ context 'without Base64 encoded marshaled' do
160
+ context 'without YAML' do
161
+ let(:raw_value) do
162
+ "< a > b >"
163
+ end
164
+
165
+ it 'should return raw value' do
166
+ deserialized = base64_serializer.load(raw_value)
167
+
168
+ deserialized.should == raw_value
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
174
+