risu 1.4.4 → 1.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/NEWS.markdown +14 -1
  2. data/README.markdown +23 -41
  3. data/TODO.markdown +48 -39
  4. data/lib/risu.rb +4 -9
  5. data/lib/risu/base.rb +15 -0
  6. data/lib/risu/base/prawn_templater.rb +37 -0
  7. data/lib/risu/{schema.rb → base/schema.rb} +34 -15
  8. data/lib/risu/base/template_base.rb +23 -0
  9. data/lib/risu/base/template_manager.rb +106 -0
  10. data/lib/risu/base/templater.rb +37 -0
  11. data/lib/risu/cli/application.rb +28 -8
  12. data/lib/risu/models.rb +1 -2
  13. data/lib/risu/models/host.rb +147 -23
  14. data/lib/risu/models/item.rb +131 -43
  15. data/lib/risu/models/plugin.rb +1 -1
  16. data/lib/risu/models/report.rb +11 -1
  17. data/lib/risu/models/serverpreference.rb +0 -2
  18. data/lib/risu/models/servicedescription.rb +10 -0
  19. data/lib/risu/parsers.rb +2 -3
  20. data/lib/risu/parsers/nessus/nessus_document.rb +69 -0
  21. data/lib/risu/parsers/nessus/nessus_sax_listener.rb +278 -0
  22. data/lib/risu/templates/assets.rb +45 -18
  23. data/lib/risu/templates/cover_sheet.rb +70 -42
  24. data/lib/risu/templates/exec_summary.rb +64 -45
  25. data/lib/risu/templates/executive_summary.rb +185 -161
  26. data/lib/risu/templates/finding_statistics.rb +44 -17
  27. data/lib/risu/templates/findings_host.rb +70 -46
  28. data/lib/risu/templates/findings_summary.rb +78 -54
  29. data/lib/risu/templates/findings_summary_with_pluginid.rb +80 -54
  30. data/lib/risu/templates/graphs.rb +46 -19
  31. data/lib/risu/templates/host_summary.rb +62 -39
  32. data/lib/risu/templates/ms_patch_summary.rb +59 -35
  33. data/lib/risu/templates/ms_update_summary.rb +59 -35
  34. data/lib/risu/templates/pci_compliance.rb +88 -64
  35. data/lib/risu/templates/technical_findings.rb +132 -106
  36. data/lib/risu/templates/template.rb +24 -0
  37. metadata +12 -6
  38. data/lib/risu/listener.rb +0 -274
  39. data/lib/risu/nessusdocument.rb +0 -66
  40. data/lib/risu/prawn_templater.rb +0 -38
@@ -1,116 +1,142 @@
1
- text Report.classification, :align => :center
2
- text "\n"
3
-
4
- font_size(22) { text Report.title, :align => :center }
5
- font_size(18) {
6
- text "High and Medium Findings", :align => :center
7
- text "\n"
8
- text "This report was prepared by\n#{Report.author}", :align => :center
9
- }
10
-
11
- text "\n\n\n"
12
-
13
- #@todo Revamping blacklisting in 1.3
14
- #blacklist_ip = "-"
15
- #blacklist_host_id = Host.where(:ip => blacklist_ip)
16
- #.where("host_id != (?)", blacklist_host_id)
17
-
18
- unique_risks = Array.new
19
- unique_risks << Hash[:title => "High Findings", :color => "FF0000", :values => Item.high_risks_unique]
20
- unique_risks << Hash[:title => "Medium Findings", :color => "FF8040", :values => Item.medium_risks_unique]
21
-
22
- unique_risks.each do |h|
23
- if h[:values].length > 1
24
- font_size(20) {
25
- fill_color h[:color]
26
- text h[:title], :style => :bold
27
- fill_color "000000"
28
- }
29
-
30
- text "\n"
31
-
32
- h[:values].each do |f|
33
-
34
- hosts = Item.where(:plugin_id => f.plugin_id)
35
- plugin = Plugin.find_by_id(f.plugin_id)
36
-
37
- #Check if vuln is just on the blacklisted
38
- #if hosts.count == 1
39
- # if hosts.first.host_id == blacklist_host_id.first.id
40
- # next
41
- # end
42
- #end
43
-
44
-
45
- references = Reference.where(:plugin_id => plugin.id).group(:value).order(:reference_name)
46
-
47
- font_size(16) { text "#{plugin.plugin_name}\n" }
48
-
49
- if hosts.length > 1
50
- text "Hosts", :style => :bold
51
- else
52
- text "Host", :style => :bold
53
- end
54
-
55
- hostlist = Array.new
56
- hosts.each do |host|
57
- h = Host.find_by_id(host.host_id)
58
- #if h.id != blacklist_host_id.first.id
59
- hostlist << h.name
60
- #end
61
- end
62
-
63
- text hostlist.join(', ')
64
-
65
- if f.plugin_output != nil
66
- text "\nPlugin output", :style => :bold
67
- text f.plugin_output
68
- end
69
-
70
- if plugin.description != nil
71
- text "\nDescription", :style => :bold
72
- text plugin.description
73
- end
74
-
75
- if plugin.synopsis != nil
76
- text "\nSynopsis", :style => :bold
77
- text plugin.synopsis
78
- end
79
-
80
- if plugin.cvss_base_score != nil
81
- text "\nCVSS Base Score", :style => :bold
82
- text plugin.cvss_base_score
1
+ module Risu
2
+ module Modules
3
+ class TechnicalFindings < Risu::Base::TemplateBase
4
+
5
+ #
6
+ #
7
+ def initialize ()
8
+ @template_info =
9
+ {
10
+ :name => "technical_findings",
11
+ :author => "hammackj",
12
+ :version => "0.0.1",
13
+ :description => "Generates a Technical Findings Report"
14
+ }
83
15
  end
84
16
 
85
- if plugin.exploit_available != nil
86
- text "\nExploit Available", :style => :bold
17
+ #
18
+ #
19
+ def render(output)
20
+ output.text Report.classification, :align => :center
21
+ output.text "\n"
22
+
23
+ output.font_size(22) { output.text Report.title, :align => :center }
24
+ output.font_size(18) {
25
+ output.text "High and Medium Findings", :align => :center
26
+ output.text "\n"
27
+ output.text "This report was prepared by\n#{Report.author}", :align => :center
28
+ }
87
29
 
88
- if plugin.exploit_available == "true"
89
- text "Yes"
90
- else
91
- text "No"
30
+ output.text "\n\n\n"
31
+
32
+ #@todo Revamping blacklisting in 1.3
33
+ #blacklist_ip = "-"
34
+ #blacklist_host_id = Host.where(:ip => blacklist_ip)
35
+ #.where("host_id != (?)", blacklist_host_id)
36
+
37
+ unique_risks = Array.new
38
+ unique_risks << Hash[:title => "High Findings", :color => "FF0000", :values => Item.high_risks_unique]
39
+ unique_risks << Hash[:title => "Medium Findings", :color => "FF8040", :values => Item.medium_risks_unique]
40
+
41
+ unique_risks.each do |h|
42
+ if h[:values].length > 1
43
+ output.font_size(20) do
44
+ output.fill_color h[:color]
45
+ output.text h[:title], :style => :bold
46
+ output.fill_color "000000"
47
+ end
48
+
49
+ output.text "\n"
50
+
51
+ h[:values].each do |f|
52
+
53
+ hosts = Item.where(:plugin_id => f.plugin_id)
54
+ plugin = Plugin.find_by_id(f.plugin_id)
55
+
56
+ #Check if vuln is just on the blacklisted
57
+ #if hosts.count == 1
58
+ # if hosts.first.host_id == blacklist_host_id.first.id
59
+ # next
60
+ # end
61
+ #end
62
+
63
+
64
+ references = Reference.where(:plugin_id => plugin.id).group(:value).order(:reference_name)
65
+
66
+ output.font_size(16) do
67
+ output.text "#{plugin.plugin_name}\n"
68
+ end
69
+
70
+ if hosts.length > 1
71
+ output.text "Hosts", :style => :bold
72
+ else
73
+ output.text "Host", :style => :bold
74
+ end
75
+
76
+ hostlist = Array.new
77
+ hosts.each do |host|
78
+ h = Host.find_by_id(host.host_id)
79
+ #if h.id != blacklist_host_id.first.id
80
+ hostlist << h.name
81
+ #end
82
+ end
83
+
84
+ output.text hostlist.join(', ')
85
+
86
+ if f.plugin_output != nil
87
+ output.text "\nPlugin output", :style => :bold
88
+ output.text f.plugin_output
89
+ end
90
+
91
+ if plugin.description != nil
92
+ output.text "\nDescription", :style => :bold
93
+ output.text plugin.description
94
+ end
95
+
96
+ if plugin.synopsis != nil
97
+ output.text "\nSynopsis", :style => :bold
98
+ output.text plugin.synopsis
99
+ end
100
+
101
+ if plugin.cvss_base_score != nil
102
+ output.text "\nCVSS Base Score", :style => :bold
103
+ output.text plugin.cvss_base_score
104
+ end
105
+
106
+ if plugin.exploit_available != nil
107
+ output.text "\nExploit Available", :style => :bold
108
+
109
+ if plugin.exploit_available == "true"
110
+ output.text "Yes"
111
+ else
112
+ output.text "No"
113
+ end
114
+ end
115
+
116
+ if plugin.solution != nil
117
+ output.text "\nSolution", :style => :bold
118
+ output.text plugin.solution
119
+ end
120
+
121
+ if references.size != 0
122
+ output.text "\nReferences", :style => :bold
123
+ references.each do |ref|
124
+ ref_text = sprintf "%s: %s\n", ref.reference_name, ref.value
125
+ output.text ref_text
126
+ end
127
+ output.text "\nNessus Plugin", :style => :bold
128
+ output.text "http://www.tenablesecurity.com/plugins/index.php?view=single&id=#{f.plugin_id}"
129
+ end
130
+ output.text "\n"
131
+ end
132
+ end
133
+
134
+ output.start_new_page unless h[:values] == nil
92
135
  end
93
- end
94
136
 
95
- if plugin.solution != nil
96
- text "\nSolution", :style => :bold
97
- text plugin.solution
98
- end
137
+ output.number_pages "<page> of <total>", :at => [output.bounds.right - 75, 0], :width => 150, :page_filter => :all
99
138
 
100
- if references.size != 0
101
- text "\nReferences", :style => :bold
102
- references.each { |ref|
103
- ref_text = sprintf "%s: %s\n", ref.reference_name, ref.value
104
- text ref_text
105
- }
106
- text "\nNessus Plugin", :style => :bold
107
- text "http://www.tenablesecurity.com/plugins/index.php?view=single&id=#{f.plugin_id}"
108
139
  end
109
- text "\n"
110
140
  end
111
141
  end
112
-
113
- start_new_page unless h[:values] == nil
114
142
  end
115
-
116
- number_pages "<page> of <total>", :at => [bounds.right - 75, 0], :width => 150, :page_filter => :all
@@ -0,0 +1,24 @@
1
+ module Risu
2
+ module Modules
3
+ class Template < Risu::Base::TemplateBase
4
+
5
+ #
6
+ #
7
+ def initialize ()
8
+ @template_info =
9
+ {
10
+ :name => "template",
11
+ :author => "hammackj",
12
+ :version => "0.0.1",
13
+ :description => "template"
14
+ }
15
+ end
16
+
17
+ #
18
+ #
19
+ def render(output)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: risu
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.4.4
5
+ version: 1.4.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jacob Hammack
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-27 00:00:00 -05:00
13
+ date: 2011-07-04 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -175,12 +175,17 @@ files:
175
175
  - Rakefile
176
176
  - README.markdown
177
177
  - TODO.markdown
178
+ - lib/risu/base/prawn_templater.rb
179
+ - lib/risu/base/schema.rb
180
+ - lib/risu/base/template_base.rb
181
+ - lib/risu/base/template_manager.rb
182
+ - lib/risu/base/templater.rb
183
+ - lib/risu/base.rb
178
184
  - lib/risu/cli/application.rb
179
185
  - lib/risu/cli/banner.rb
180
186
  - lib/risu/cli.rb
181
187
  - lib/risu/exceptions/invaliddocument.rb
182
188
  - lib/risu/exceptions.rb
183
- - lib/risu/listener.rb
184
189
  - lib/risu/models/familyselection.rb
185
190
  - lib/risu/models/host.rb
186
191
  - lib/risu/models/individualpluginselection.rb
@@ -191,12 +196,12 @@ files:
191
196
  - lib/risu/models/reference.rb
192
197
  - lib/risu/models/report.rb
193
198
  - lib/risu/models/serverpreference.rb
199
+ - lib/risu/models/servicedescription.rb
194
200
  - lib/risu/models/version.rb
195
201
  - lib/risu/models.rb
196
- - lib/risu/nessusdocument.rb
202
+ - lib/risu/parsers/nessus/nessus_document.rb
203
+ - lib/risu/parsers/nessus/nessus_sax_listener.rb
197
204
  - lib/risu/parsers.rb
198
- - lib/risu/prawn_templater.rb
199
- - lib/risu/schema.rb
200
205
  - lib/risu/templates/assets.rb
201
206
  - lib/risu/templates/cover_sheet.rb
202
207
  - lib/risu/templates/data/nessuslogo.jpg
@@ -212,6 +217,7 @@ files:
212
217
  - lib/risu/templates/ms_update_summary.rb
213
218
  - lib/risu/templates/pci_compliance.rb
214
219
  - lib/risu/templates/technical_findings.rb
220
+ - lib/risu/templates/template.rb
215
221
  - lib/risu.rb
216
222
  - risu.gemspec
217
223
  - bin/risu
@@ -1,274 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'risu'
4
-
5
- module Risu
6
-
7
- # NessusSaxListener
8
- #
9
- #
10
- # @author Jacob Hammack <jacob.hammack@hammackj.com>
11
- class NessusSaxListener
12
- include LibXML::XML::SaxParser::Callbacks
13
-
14
- # Sets up a array of all valid xml fields
15
- #
16
- #
17
- def initialize
18
- @vals = Hash.new
19
-
20
- @valid_elements = Array["see_also", "cve", "ReportItem", "xref", "bid", "plugin_version", "risk_factor",
21
- "description", "cvss_base_score", "solution", "item", "plugin_output", "tag", "synopsis", "plugin_modification_date",
22
- "FamilyName", "FamilyItem", "Status", "vuln_publication_date", "ReportHost", "HostProperties", "preferenceName",
23
- "preferenceValues", "preferenceType", "fullName", "pluginId", "pluginName", "selectedValue", "selectedValue",
24
- "name", "value", "preference", "plugin_publication_date", "cvss_vector", "patch_publication_date",
25
- "NessusClientData_v2", "Policy", "PluginName", "ServerPreferences", "policyComments", "policyName", "PluginItem",
26
- "Report", "Family", "Preferences", "PluginsPreferences", "FamilySelection", "IndividualPluginSelection", "PluginId",
27
- "pci-dss-compliance", "exploitability_ease", "cvss_temporal_vector", "exploit_framework_core", "cvss_temporal_score",
28
- "exploit_available", "metasploit_name", "exploit_framework_canvas", "canvas_package", "exploit_framework_metasploit",
29
- "plugin_type", "cpe"]
30
-
31
- # This makes adding new host properties really easy.
32
- @valid_host_properties = {
33
- "HOST_END" => :end ,
34
- "mac-address" => :mac ,
35
- "HOST_START" => :start ,
36
- "operating-system" => :os,
37
- "host-ip" => :ip ,
38
- "host-fqdn" => :fqdn ,
39
- "netbios-name" => :netbios ,
40
- "local-checks-proto" => :local_checks_proto ,
41
- "smb-login-used" => :smb_login_used ,
42
- "ssh-auth-meth" => :ssh_auth_meth ,
43
- "ssh-login-used" => :ssh_login_used ,
44
- "pci-dss-compliance" => :pci_dss_compliance ,
45
- "pci-dss-compliance:" => :pci_dss_compliance_ ,
46
- "pcidss:compliance:failed" => :pcidss_compliance_failed,
47
- "pcidss:compliance:passed" => :pcidss_compliance_passed,
48
- "pcidss:deprecated_ssl" => :pcidss_deprecated_ssl,
49
- "pcidss:expired_ssl_certificate" => :pcidss_expired_ssl_certificate,
50
- "pcidss:high_risk_flaw" => :pcidss_high_risk_flaw,
51
- "pcidss:medium_risk_flaw" => :pcidss_medium_risk_flaw,
52
- "pcidss:reachable_db" => :pcidss_reachable_db,
53
- "pcidss:www:xss" => :pcidss_www_xss
54
- }
55
-
56
- @valid_ms_patches = {
57
- "MS11-030" => :ms11_030,
58
- "MS11-026" => :ms11_026,
59
- "MS11-034" => :ms11_034,
60
- "MS11-021" => :ms11_021,
61
- "MS11-029" => :ms11_029,
62
- "MS11-023" => :ms11_023,
63
- "MS11-022" => :ms11_022,
64
- "MS09-027" => :ms09_027,
65
- "MS11-033" => :ms11_033,
66
- "MS11-019" => :ms11_019,
67
- "MS11-024" => :ms11_024,
68
- "MS11-031" => :ms11_031,
69
- "MS11-020" => :ms11_020,
70
- "MS11-018" => :ms11_018,
71
- "MS11-028" => :ms11_028,
72
- "MS11-032" => :ms11_032
73
- }
74
- end
75
-
76
- # Callback for when the start of a xml element is reached
77
- #
78
- # @param element
79
- # @param attributes
80
- def on_start_element(element, attributes)
81
- @tag = element
82
- @vals[@tag] = ""
83
-
84
- if !@valid_elements.include?(element)
85
- puts "New XML element detected: #{element}. Please report this to #{Risu::EMAIL}"
86
- end
87
-
88
- case element
89
- when "Policy"
90
- @policy = Risu::Models::Policy.create
91
- @policy.save
92
- when "preference"
93
- @sp = @policy.server_preferences.create
94
- @sp.save
95
- when "item"
96
- @item = @policy.plugins_preferences.create
97
- @item.save
98
- when "FamilyItem"
99
- @family = @policy.family_selections.create
100
- @family.save
101
- when "PluginItem"
102
- @plugin_selection = @policy.individual_plugin_selections.create
103
- @plugin_selection.save
104
- when "Report"
105
- @report = @policy.reports.create
106
- @report.name = attributes["name"]
107
- @report.save
108
- when "ReportHost"
109
- @rh = @report.hosts.create
110
- @rh.name = attributes["name"]
111
- @rh.save
112
- when "tag"
113
- unless attributes["name"] =~ /(MS\d\d-\d\d\d)/
114
- @attr = if @valid_host_properties.keys.include?(attributes["name"])
115
- attributes["name"]
116
- else
117
- nil
118
- end
119
- puts "New HostProperties attribute: #{attributes["name"]}. Please report this to jacob.hammack@hammackj.com\n" if @attr.nil?
120
- end
121
- when "ReportItem"
122
- @vals = Hash.new # have to clear this out or everything has the same references
123
- @ri = @rh.items.create
124
- if attributes["pluginID"] == "0"
125
- @plugin = Risu::Models::Plugin.find_or_create_by_id(1)
126
- else
127
- @plugin = Risu::Models::Plugin.find_or_create_by_id(attributes["pluginID"])
128
- end
129
-
130
- @ri.port = attributes["port"]
131
- @ri.svc_name = attributes["svc_name"]
132
- @ri.protocol = attributes["protocol"]
133
- @ri.severity = attributes["severity"]
134
-
135
- @ri.plugin_id = @plugin.id
136
- @plugin.plugin_name = attributes["pluginName"]
137
- @plugin.family_name = attributes["pluginFamily"]
138
- @plugin.save
139
- @ri.save
140
- end
141
- end
142
-
143
- # Called when the inner text of a element is reached
144
- #
145
- # @param text
146
- def on_characters(text)
147
- if @vals[@tag] == nil then
148
- @vals[@tag] = text
149
- else
150
- @vals[@tag] << text
151
- end
152
- end
153
-
154
- # Called when the end of the xml element is reached
155
- #
156
- # @param element
157
- def on_end_element(element)
158
- @tag = nil
159
- case element
160
- when "policyName"
161
- @policy.attributes = {
162
- :name => @vals["policyName"]
163
- }
164
-
165
- @policy.save
166
- when "policyComments"
167
- @policy.attributes = {
168
- :comments => @vals["policyComments"]
169
- }
170
-
171
- @policy.save
172
- when "preference"
173
- @sp.attributes = {
174
- :name => @vals["name"],
175
- :value => @vals["value"]
176
- }
177
- @sp.save
178
-
179
- #This takes a really long time, there is about 34,000 pluginIDs in this
180
- #field and it takes about 36 minutes to parse just this info =\
181
- #lets prepopulate the plugins table with the known pluginid's
182
- #if @vals["name"] == "plugin_set"
183
- # @all_plugins = @vals["value"].split(";")
184
- #
185
- # @all_plugins.each { |p|
186
- # @plug = Plugin.find_or_create_by_id(p)
187
- # @plug.save
188
- # }
189
- #end
190
- when "item"
191
- @item.attributes = {
192
- :plugin_name => @vals["pluginName"],
193
- :plugin_id => @vals["pluginId"],
194
- :fullname => @vals["fullName"],
195
- :preference_name => @vals["preferenceName"],
196
- :preference_type => @vals["preferenceType"],
197
- :preference_values => @vals["preferenceValues"],
198
- :selected_values => @vals["selectedValue"]
199
- }
200
-
201
- @item.save
202
- when "FamilyItem"
203
- @family.attributes = {
204
- :family_name => @vals["FamilyName"],
205
- :status => @vals["Status"]
206
- }
207
-
208
- @family.save
209
- when "PluginItem"
210
- @plugin_selection.attributes = {
211
- :plugin_id => @vals["PluginId"],
212
- :plugin_name => @vals["PluginName"],
213
- :family => @vals["Family"],
214
- :status => @vals["Status"]
215
- }
216
-
217
- @plugin_selection.save
218
- when "tag"
219
- @rh.attributes = {@valid_host_properties[@attr] => @vals["tag"].gsub("\n", ",") } if @valid_host_properties.keys.include?(@attr)
220
- @rh.save
221
- #We cannot handle the references in the same block as the rest of the ReportItem tag because
222
- #there tends to be more than of the different types of reference per ReportItem, this causes issue for a sax
223
- #parser. To solve this we do the references before the final plugin data
224
- when "cve"
225
- @cve = @plugin.references.create
226
- @cve.reference_name = "cve"
227
- @cve.value = @vals["cve"]
228
- @cve.save
229
- when "bid"
230
- @bid = @plugin.references.create
231
- @bid.reference_name = "bid"
232
- @bid.value = @vals["bid"]
233
- @bid.save
234
- when "see_also"
235
- @see_also = @plugin.references.create
236
- @see_also.reference_name = "see_also"
237
- @see_also.value = @vals["see_also"]
238
- @see_also.save
239
- when "xref"
240
- @xref = @plugin.references.create
241
- @xref.reference_name = "xref"
242
- @xref.value = @vals["xref"]
243
- @xref.save
244
- when "ReportItem"
245
- @ri.plugin_output = @vals["plugin_output"]
246
- @ri.save
247
-
248
- @plugin.attributes = {
249
- :solution => @vals["solution"],
250
- :risk_factor => @vals["risk_factor"],
251
- :description => @vals["description"],
252
- :plugin_publication_date => @vals["plugin_publication_date"],
253
- :synopsis => @vals["synopsis"],
254
- :plugin_type => @vals["plugin_type"],
255
- :cvss_vector => @vals["cvss_vector"],
256
- :cvss_base_score => @vals["cvss_base_score"],
257
- :vuln_publication_date => @vals["vuln_publication_date"],
258
- :plugin_version => @vals["plugin_version"],
259
- :cvss_temporal_score => @vals["cvss_temporal_score"],
260
- :cvss_temporal_vector => @vals["cvss_temporal_vector"],
261
- :exploitability_ease => @vals["exploitability_ease"],
262
- :exploit_framework_core => @vals["exploit_framework_core"],
263
- :exploit_available => @vals["exploit_available"],
264
- :exploit_framework_metasploit => @vals["exploit_framework_metasploit"],
265
- :metasploit_name => @vals["metasploit_name"],
266
- :exploit_framework_canvas => @vals["exploit_framework_canvas"],
267
- :canvas_package => @vals["canvas_package"],
268
- :cpe => @vals["cpe"]
269
- }
270
- @plugin.save
271
- end
272
- end
273
- end
274
- end