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
@@ -0,0 +1,24 @@
1
+ class AddTasks < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :tasks do |t|
5
+ t.integer :workspace_id, :null => false, :default => 1
6
+ t.string :created_by
7
+ t.string :module
8
+ t.datetime :completed_at
9
+ t.string :path, :limit => 1024
10
+ t.string :info
11
+ t.string :description
12
+ t.integer :progress
13
+ t.text :options
14
+ t.text :error
15
+ t.timestamps
16
+ end
17
+ end
18
+
19
+ def self.down
20
+ drop_table :tasks
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,10 @@
1
+ class AddTasksResult < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :tasks, :result, :text
4
+ end
5
+
6
+ def self.down
7
+ remove_column :tasks, :result
8
+ end
9
+ end
10
+
@@ -0,0 +1,12 @@
1
+ class AddLootsFields < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :loots, :name, :text
4
+ add_column :loots, :info, :text
5
+ end
6
+
7
+ def self.down
8
+ remove_column :loots, :name
9
+ remove_column :loots, :info
10
+ end
11
+ end
12
+
@@ -0,0 +1,16 @@
1
+ class RenameUser < ActiveRecord::Migration
2
+ def self.up
3
+ remove_column :events, :user
4
+ change_table :events do |t|
5
+ t.string :username
6
+ end
7
+ end
8
+
9
+ def self.down
10
+ remove_column :events, :username
11
+ change_table :events do |t|
12
+ t.string :user
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,10 @@
1
+ class AddHostPurpose < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :hosts, :purpose, :text
4
+ end
5
+
6
+ def self.down
7
+ remove_column :hosts, :purpose
8
+ end
9
+ end
10
+
@@ -0,0 +1,58 @@
1
+ class ExpandInfo2 < ActiveRecord::Migration
2
+ def self.up
3
+ remove_column :events, :info
4
+ change_table :events do |t|
5
+ t.string :info, :limit => 65536
6
+ end
7
+
8
+ remove_column :notes, :data
9
+ change_table :notes do |t|
10
+ t.string :data, :limit => 65536
11
+ end
12
+
13
+ remove_column :vulns, :data
14
+ change_table :vulns do |t|
15
+ t.string :data, :limit => 65536
16
+ end
17
+
18
+ remove_column :hosts, :info
19
+ change_table :hosts do |t|
20
+ t.string :info, :limit => 65536
21
+ end
22
+
23
+ remove_column :services, :info
24
+ change_table :services do |t|
25
+ t.string :info, :limit => 65536
26
+ end
27
+ end
28
+
29
+ def self.down
30
+
31
+ remove_column :events, :info
32
+ change_table :events do |t|
33
+ t.string :info
34
+ end
35
+
36
+ remove_column :notes, :data
37
+ change_table :notes do |t|
38
+ t.string :data, :limit => 4096
39
+ end
40
+
41
+ remove_column :hosts, :info
42
+ change_table :hosts do |t|
43
+ t.string :info, :limit => 4096
44
+ end
45
+
46
+ remove_column :vulns, :data
47
+ change_table :vulns do |t|
48
+ t.string :data, :limit => 4096
49
+ end
50
+
51
+ remove_column :services, :info
52
+ change_table :services do |t|
53
+ t.string :info, :limit => 4096
54
+ end
55
+
56
+ end
57
+ end
58
+
@@ -0,0 +1,29 @@
1
+ class AddWorkspaceUserInfo < ActiveRecord::Migration
2
+ def self.up
3
+ change_table :workspaces do |t|
4
+ t.string :boundary, :limit => 4096
5
+ end
6
+
7
+ change_table :users do |t|
8
+ t.string :fullname
9
+ t.string :email
10
+ t.string :phone
11
+ t.string :company
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ change_table :workspaces do |t|
17
+ t.remove :boundary
18
+ end
19
+
20
+ change_table :users do |t|
21
+ t.remove :fullname
22
+ t.remove :email
23
+ t.remove :phone
24
+ t.remove :company
25
+ end
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,23 @@
1
+ class AddWorkspaceDesc < ActiveRecord::Migration
2
+ def self.up
3
+ change_table :workspaces do |t|
4
+ t.string :description, :limit => 4096
5
+ end
6
+
7
+ change_table :hosts do |t|
8
+ t.string :comments, :limit => 4096
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ change_table :workspaces do |t|
14
+ t.remove :description
15
+ end
16
+
17
+ change_table :hosts do |t|
18
+ t.remove :comments
19
+ end
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,11 @@
1
+ class AddUserPreferences < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :users, :prefs, :string, :limit => 524288
4
+ end
5
+
6
+ def self.down
7
+ remove_column :users, :prefs
8
+ end
9
+
10
+ end
11
+
@@ -0,0 +1,18 @@
1
+ class StandardizeInfoAndData < ActiveRecord::Migration
2
+ def self.up
3
+ # Remove the host requirement. We'll add the column back in below.
4
+ remove_column :vulns, :data
5
+ change_table :vulns do |t|
6
+ t.string :info, :limit => 65536
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ remove_column :vulns, :info
12
+ change_table :notes do |t|
13
+ t.string :data, :limit => 65536
14
+
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,10 @@
1
+ class EnlargeEventInfo < ActiveRecord::Migration
2
+ def self.up
3
+ change_column :events, :info, :text
4
+ end
5
+
6
+ def self.down
7
+ change_column :events, :info, :string, :limit => 65535
8
+ end
9
+ end
10
+
@@ -0,0 +1,10 @@
1
+ class AddReportDownloadedAt < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :reports, :downloaded_at, :timestamp
4
+ end
5
+
6
+ def self.down
7
+ remove_column :reports, :downloaded_at
8
+ end
9
+ end
10
+
@@ -0,0 +1,12 @@
1
+ class ConvertServiceInfoToText < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ change_column :services, :info, :text
5
+ end
6
+
7
+ def self.down
8
+ change_column :services, :info, :string, :limit => 65536
9
+ end
10
+
11
+ end
12
+
@@ -0,0 +1,19 @@
1
+ class AddUserAdmin < ActiveRecord::Migration
2
+
3
+ # Add user admin flag and project member list.
4
+ def self.up
5
+ add_column :users, :admin, :boolean, :default => true
6
+
7
+ create_table :project_members, :id => false do |t|
8
+ t.integer :workspace_id, :null => false
9
+ t.integer :user_id, :null => false
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ remove_column :users, :admin
15
+
16
+ drop_table :project_members
17
+ end
18
+ end
19
+
@@ -0,0 +1,19 @@
1
+ class AddCredsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :creds do |t|
4
+ t.integer :service_id, :null => false
5
+ t.timestamps
6
+ t.string :user, :limit => 2048
7
+ t.string :pass, :limit => 4096
8
+ t.boolean :active, :default => true
9
+ t.string :proof, :limit => 4096
10
+ t.string :ptype, :limit => 16
11
+ t.integer :source_id
12
+ t.string :source_type
13
+ end
14
+ end
15
+ def self.down
16
+ drop_table :creds
17
+ end
18
+ end
19
+
@@ -0,0 +1,154 @@
1
+ class MigrateCredData < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ begin # Wrap the whole thing in a giant rescue.
5
+ skipped_notes = []
6
+ new_creds = []
7
+ Mdm::Note.find(:all).each do |note|
8
+ next unless note.ntype[/^auth\.(.*)/]
9
+ service_name = $1
10
+ if !service_name
11
+ skipped_notes << note
12
+ next
13
+ end
14
+ if note.host and note.host.respond_to?(:address)
15
+ if note.service
16
+ svc_id = note.service.id
17
+ else
18
+ candidate_services = []
19
+ note.host.services.each do |service|
20
+ if service.name == service_name
21
+ candidate_services << service
22
+ end
23
+ end
24
+ # Use the default port, or the first port that matches the protocol name.
25
+ default_port = case service_name.downcase
26
+ when 'ftp'; 21
27
+ when /^smb/; 445
28
+ when /^imap/; 143
29
+ when 'telnet'; 23
30
+ when 'pop3'; 110
31
+ when 'http','domino','axis','wordpress','tomcat'; 80
32
+ when 'tns'; 1521
33
+ when 'snmp'; 161
34
+ when 'mssql'; 1433
35
+ when 'ssh'; 22
36
+ when 'https'; 443
37
+ when 'mysql'; 3306
38
+ when 'db2'; 50000
39
+ when 'postgres'; 5432
40
+ else nil
41
+ end
42
+ if !default_port
43
+ skipped_notes << note
44
+ next
45
+ end
46
+ if candidate_services.size == 1
47
+ svc_id = candidate_services.first.id
48
+ elsif candidate_services.empty?
49
+ Mdm::Service.new do |svc|
50
+ svc.host_id = note.host.id
51
+ svc.port = default_port
52
+ svc.proto = 'tcp'
53
+ svc.state = 'open'
54
+ svc.name = service_name.downcase
55
+ svc.save!
56
+ svc_id = svc.id
57
+ end
58
+ elsif candidate_services.size > 1
59
+ svc_ports = candidate_services.map{|s| s.port}
60
+ if svc_ports.index(default_port)
61
+ svc_id = candidate_services[svc_ports.index(default_port)].id
62
+ else
63
+ svc_id = candidate_services.first.id
64
+ end
65
+ end
66
+ end
67
+ else
68
+ skipped_notes << note
69
+ next
70
+ end
71
+ if note.data[:hash]
72
+ ptype = 'smb_hash'
73
+ pass = note.data[:hash]
74
+ elsif note.data[:ssh_key]
75
+ ptype = 'ssh_key'
76
+ pass = note.data[:extra]
77
+ else
78
+ ptype = 'password'
79
+ pass = note.data[:pass]
80
+ end
81
+ # Format domains and databases into the usernames.
82
+ if note.ntype == "auth.smb_challenge"
83
+ domain = note.data[:extra].match(/DOMAIN=([^\s]+)/)[1]
84
+ if domain
85
+ user = [domain, note.data[:user]].join("/")
86
+ else
87
+ user = note.data[:user]
88
+ end
89
+ elsif note.ntype =~ /auth\.(postgres|db2)/
90
+ if note.data[:database]
91
+ user = [note.data[:database], note.data[:user]].join("/")
92
+ else
93
+ user = note.data[:user]
94
+ end
95
+ else
96
+ user = note.data[:user]
97
+ end
98
+ # Not actually a credentials, convert to migrated notes
99
+ if service_name == 'smb' && note.data[:token]
100
+ skipped_notes << note
101
+ next
102
+ end
103
+ if service_name == 'tns' && note.data[:type] == "bruteforced_sid"
104
+ skipped_notes << note
105
+ next
106
+ end
107
+ # Special case for the bizarre reporting for aux/admin/oracle/oracle_login
108
+ if service_name == 'tns' && note.data[:type] == "bruteforced_account"
109
+ note.data[:data] =~ /([^\x2f]+)\x2f([^\s]+).*with sid (.*)/
110
+ user = "#{$3}/#{$1}"
111
+ pass = $2
112
+ end
113
+ new_creds << [svc_id, ptype, user, pass]
114
+ end
115
+
116
+ say "Migrating #{new_creds.size} credentials."
117
+ new_creds.uniq.each do |note|
118
+ Mdm::Cred.new do |cred|
119
+ cred.service_id = note[0]
120
+ cred.user = note[2]
121
+ cred.pass = note[3]
122
+ cred.ptype = note[1]
123
+ cred.save!
124
+ end
125
+ end
126
+
127
+ say "Migrating #{skipped_notes.size} notes."
128
+ skipped_notes.uniq.each do |note|
129
+ Mdm::Note.new do |new_note|
130
+ new_note.host_id = note.host_id
131
+ new_note.ntype = "migrated_auth"
132
+ new_note.data = note.data.merge(:migrated_auth_type => note.ntype)
133
+ new_note.save!
134
+ end
135
+ end
136
+
137
+ say "Deleting migrated auth notes."
138
+ Mdm::Note.find(:all).each do |note|
139
+ next unless note.ntype[/^auth\.(.*)/]
140
+ note.delete
141
+ end
142
+ rescue
143
+ say "There was a problem migrating auth credentials. Skipping."
144
+ return true # Never fail!
145
+ end
146
+ end
147
+
148
+
149
+ def self.down
150
+ raise ActiveRecord::IrreversibleMigration
151
+ end
152
+
153
+ end
154
+