prenus 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -0
- data/bin/prenus +6 -1
- data/lib/css/table.css +11 -0
- data/lib/output/htmlout.rb +62 -32
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -96,6 +96,8 @@ This will only work if you're in the Circos Tools tableviewer folder (in my inst
|
|
96
96
|
This will dump the png into the img/ folder.
|
97
97
|
|
98
98
|
== Changes
|
99
|
+
* Version 0.0.11 - A bunch of cosmetic changes. PLUS, a new optional command line flag to add HTML content to the top of the index.html file.
|
100
|
+
* Version 0.0.10 - Added new pie graph to HTML output, and updated pie graph generater to allow for setting of colours
|
99
101
|
* Version 0.0.9 - Added Nokogiri gem dep
|
100
102
|
* Version 0.0.8 - Default HTML output directory - plus - can filter out severity issues for HTML. Updated gemspec, removed internal gem
|
101
103
|
* Version 0.0.7 - Included push update for XLS output - and updated version statements
|
data/bin/prenus
CHANGED
@@ -19,7 +19,7 @@ require 'lib/input'
|
|
19
19
|
require 'lib/gemcache/ruby-nessus/ruby-nessus'
|
20
20
|
|
21
21
|
#Versioning and .. those things
|
22
|
-
$verstring = "Version 0.0.
|
22
|
+
$verstring = "Version 0.0.11 - 7th of October, 2013 - Created by Christian \"xntrik\" Frichot.\n\n"
|
23
23
|
$verstring += "Copyright 2013 Christian Frichot\n\n"
|
24
24
|
$verstring += "See LICENSE.txt for more details\n"
|
25
25
|
|
@@ -71,6 +71,11 @@ class OptsConsole
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
|
+
# optional HTML content in a file to be inserted into the header
|
75
|
+
opts.on('--header-file FILE',"Optional HTML FILE to be inserted into the top of the index.html file when using HTML output") do |indexfile|
|
76
|
+
options[:indexfile] = indexfile
|
77
|
+
end
|
78
|
+
|
74
79
|
# level - how deep to go on some of the inputs
|
75
80
|
opts.on('-s', '--severity LEVEL', "Defaults to 3 for High -> Critical. For large datasets 4 is saner") do |sev|
|
76
81
|
case sev.to_i
|
data/lib/css/table.css
CHANGED
data/lib/output/htmlout.rb
CHANGED
@@ -88,10 +88,10 @@ class Htmlout < Baseout
|
|
88
88
|
end
|
89
89
|
|
90
90
|
pie_data = []
|
91
|
-
pie_data << ['Low',low_total.to_i,'green'] if @options[:severity] <= 1
|
92
|
-
pie_data << ['Medium',med_total.to_i,'orange'] if @options[:severity] <= 2
|
93
|
-
pie_data << ['High',high_total.to_i,'red'] if @options[:severity] <= 3
|
94
|
-
pie_data << ['Critical',crit_total.to_i,'purple'] if @options[:severity] <= 4
|
91
|
+
pie_data << ['Low',low_total.to_i,'green'] if @options[:severity] <= 1 and low_total.to_i > 0
|
92
|
+
pie_data << ['Medium',med_total.to_i,'orange'] if @options[:severity] <= 2 and med_total.to_i > 0
|
93
|
+
pie_data << ['High',high_total.to_i,'red'] if @options[:severity] <= 3 and high_total.to_i > 0
|
94
|
+
pie_data << ['Critical',crit_total.to_i,'purple'] if @options[:severity] <= 4 and crit_total.to_i > 0
|
95
95
|
|
96
96
|
pie_js(f,"pie_graph","Unique Vulnerability Breakdown","Unique Vuln Breakdown",pie_data,"document.location.href = 'vuln_overview.html';")
|
97
97
|
|
@@ -108,10 +108,10 @@ class Htmlout < Baseout
|
|
108
108
|
end
|
109
109
|
|
110
110
|
pie_data = []
|
111
|
-
pie_data << ['Low',low_total.to_i,'green'] if @options[:severity] <= 1
|
112
|
-
pie_data << ['Medium',med_total.to_i,'orange'] if @options[:severity] <= 2
|
113
|
-
pie_data << ['High',high_total.to_i,'red'] if @options[:severity] <= 3
|
114
|
-
pie_data << ['Critical',crit_total.to_i,'purple'] if @options[:severity] <= 4
|
111
|
+
pie_data << ['Low',low_total.to_i,'green'] if @options[:severity] <= 1 and low_total.to_i > 0
|
112
|
+
pie_data << ['Medium',med_total.to_i,'orange'] if @options[:severity] <= 2 and med_total.to_i > 0
|
113
|
+
pie_data << ['High',high_total.to_i,'red'] if @options[:severity] <= 3 and high_total.to_i > 0
|
114
|
+
pie_data << ['Critical',crit_total.to_i,'purple'] if @options[:severity] <= 4 and crit_total.to_i > 0
|
115
115
|
|
116
116
|
pie_js(f,"pie_graph2","Total Vunerability Breakdown","Total Vuln Breakdown",pie_data,"document.location = href= 'vuln_overview.html';")
|
117
117
|
|
@@ -131,9 +131,13 @@ class Htmlout < Baseout
|
|
131
131
|
|
132
132
|
close_html_header(f)
|
133
133
|
|
134
|
+
unless @options[:indexfile].nil?
|
135
|
+
IO.copy_stream(File.open(@options[:indexfile]),f)
|
136
|
+
end
|
137
|
+
|
134
138
|
body = '<div style="width: 800px; margin-left: auto; margin-right: auto; padding-top: 30px;">'
|
135
|
-
body += '<div id="pie_graph" style="min-width:
|
136
|
-
body += '<div id="pie_graph2" style="min-width:
|
139
|
+
body += '<div id="pie_graph" style="min-width: 375px; height: 375px; margin: 0 auto; float: left"></div>'
|
140
|
+
body += '<div id="pie_graph2" style="min-width: 375px; height: 375px; margin: 0 auto; float: left"></div>'
|
137
141
|
body += '</div>'
|
138
142
|
body += '<div style="clear: both;"></div>'
|
139
143
|
body += '<div id="bar_graph" style="min-width: 400px; height: 900px; margin: 0 auto"></div>'
|
@@ -145,10 +149,21 @@ class Htmlout < Baseout
|
|
145
149
|
ips << host[1][:ip]
|
146
150
|
end
|
147
151
|
|
148
|
-
body += '<table id="hosts_table" class="display"><thead><tr><th>IP</th><th>Hostname</th><th>OS</th><th>
|
152
|
+
body += '<table id="hosts_table" class="display"><thead><tr><th>IP</th><th>Hostname</th><th>OS</th><th>Vulnerability Count (Low to Critical)</th></tr></thead><tbody>'
|
149
153
|
ips.sort_by{|ip| ip.split('.').map{|octet| octet.to_i}}.each do |ip|
|
150
154
|
@hosts.select{|k,v| v[:ip] == ip}.each do |k,v|
|
151
|
-
|
155
|
+
tmp_actual_v_count = 0
|
156
|
+
tmp_actual_v_count += v[:low].to_i if @options[:severity] <= 1 and v[:low].to_i > 0
|
157
|
+
tmp_actual_v_count += v[:med].to_i if @options[:severity] <= 2 and v[:med].to_i > 0
|
158
|
+
tmp_actual_v_count += v[:high].to_i if @options[:severity] <= 3 and v[:high].to_i > 0
|
159
|
+
tmp_actual_v_count += v[:crit].to_i if @options[:severity] <= 4 and v[:crit].to_i > 0
|
160
|
+
body += '<tr><td>'
|
161
|
+
if tmp_actual_v_count > 0
|
162
|
+
body += '<a href="host_' + k.to_s + '.html">' + ip + '</a>'
|
163
|
+
else
|
164
|
+
body += ip
|
165
|
+
end
|
166
|
+
body += '</td><td>' + v[:hostname] + '</td><td>' + v[:os] + '</td><td>' + v[:total_excl_info].to_s + '</td></tr>'
|
152
167
|
end
|
153
168
|
end
|
154
169
|
body += '</tbody></table>'
|
@@ -179,7 +194,7 @@ class Htmlout < Baseout
|
|
179
194
|
|
180
195
|
close_html_header(f)
|
181
196
|
|
182
|
-
body = '<a href="index.html">Home</a><br /><div id="vulns"><h2>
|
197
|
+
body = '<a href="index.html">Home</a><br /><div id="vulns"><h2>Vulnerabilities</h2>'
|
183
198
|
|
184
199
|
body += '<table id="vulns_table" class="display"><thead><tr><th>Nessus ID</th><th>Severity</th><th>Name</th><th>Family</th><th>Ports</th><th>Number of impacted hosts</th></tr></thead><tbody>'
|
185
200
|
@events.each do |k,v|
|
@@ -291,10 +306,10 @@ class Htmlout < Baseout
|
|
291
306
|
pie_js(f,"pie_graph","Criticality Breakdown","Criticality Breakdown",[['Informational ONLY',values[:info].to_i,'blue']])
|
292
307
|
else
|
293
308
|
pie_data = []
|
294
|
-
pie_data << ['Low',values[:low].to_i,'green'] if @options[:severity] <= 1
|
295
|
-
pie_data << ['Medium',values[:med].to_i,'orange'] if @options[:severity] <= 2
|
296
|
-
pie_data << ['High',values[:high].to_i,'red'] if @options[:severity] <= 3
|
297
|
-
pie_data << ['Critical',values[:crit].to_i,'purple'] if @options[:severity] <= 4
|
309
|
+
pie_data << ['Low',values[:low].to_i,'green'] if @options[:severity] <= 1 and values[:low].to_i > 0
|
310
|
+
pie_data << ['Medium',values[:med].to_i,'orange'] if @options[:severity] <= 2 and values[:med].to_i > 0
|
311
|
+
pie_data << ['High',values[:high].to_i,'red'] if @options[:severity] <= 3 and values[:high].to_i > 0
|
312
|
+
pie_data << ['Critical',values[:crit].to_i,'purple'] if @options[:severity] <= 4 and values[:crit].to_i > 0
|
298
313
|
pie_js(f,"pie_graph","Criticality Breakdown","Criticality Breakdown",pie_data,"document.location.href = '#' + event.point.name;")
|
299
314
|
end
|
300
315
|
|
@@ -305,10 +320,10 @@ class Htmlout < Baseout
|
|
305
320
|
body += '<div id="pie_graph" style="min-width: 400px; height: 400px; margin: 0 auto"></div>'
|
306
321
|
body += '</div>'
|
307
322
|
|
308
|
-
body += '<div id="vulns"><h2>
|
323
|
+
body += '<div id="vulns"><h2>Vulnerabilities</h2>'
|
309
324
|
|
310
325
|
|
311
|
-
if @options[:severity] <= 4
|
326
|
+
if @options[:severity] <= 4 and values[:crit].to_i > 0
|
312
327
|
body += '<div id="critical"><a name="Critical"></a><h3>Critical</h3>'
|
313
328
|
|
314
329
|
body += '<table id="critical_table" class="display"><thead><tr><th>Nessus ID</th><th>Name</th><th>Synopsis</th><th>Result</th><th>Family</th><th>Port</th></tr></thead><tbody>'
|
@@ -325,7 +340,7 @@ class Htmlout < Baseout
|
|
325
340
|
body += '</tbody></table></div>'
|
326
341
|
end
|
327
342
|
|
328
|
-
if @options[:severity] <= 3
|
343
|
+
if @options[:severity] <= 3 and values[:high].to_i > 0
|
329
344
|
|
330
345
|
body += '<div id="high"><a name="High"></a><h3>High</h3>'
|
331
346
|
|
@@ -342,7 +357,7 @@ class Htmlout < Baseout
|
|
342
357
|
body += '</tbody></table></div>'
|
343
358
|
end
|
344
359
|
|
345
|
-
if @options[:severity] <= 2
|
360
|
+
if @options[:severity] <= 2 and values[:med].to_i > 0
|
346
361
|
|
347
362
|
body += '<div id="medium"><a name="Medium"></a><h3>Medium</h3>'
|
348
363
|
|
@@ -360,7 +375,7 @@ class Htmlout < Baseout
|
|
360
375
|
|
361
376
|
end
|
362
377
|
|
363
|
-
if @options[:severity] <= 1
|
378
|
+
if @options[:severity] <= 1 and values[:low].to_i > 0
|
364
379
|
|
365
380
|
body += '<div id="low"><a name="Low"></a><h3>Low</h3>'
|
366
381
|
|
@@ -377,7 +392,7 @@ class Htmlout < Baseout
|
|
377
392
|
body += '</tbody></table></div>'
|
378
393
|
end
|
379
394
|
|
380
|
-
if @options[:severity] <= 0
|
395
|
+
if @options[:severity] <= 0 and values[:info].to_i > 0
|
381
396
|
|
382
397
|
body += '<div id="informational"><a name="Informational"></a><h3>Informational</h3>'
|
383
398
|
|
@@ -396,11 +411,11 @@ class Htmlout < Baseout
|
|
396
411
|
|
397
412
|
|
398
413
|
body += "<script>$(document).ready(function() {\n ";
|
399
|
-
body += "$('#critical_table').dataTable({\"bPaginate\": false});\n" if @options[:severity]
|
400
|
-
body += "$('#high_table').dataTable({\"bPaginate\": false});\n" if @options[:severity]
|
401
|
-
body += "$('#medium_table').dataTable({\"bPaginate\": false});\n" if @options[:severity]
|
402
|
-
body += "$('#low_table').dataTable({\"bPaginate\": false});\n" if @options[:severity]
|
403
|
-
body += "$('#informational_table').dataTable({\"bPaginate\": false});\n" if @options[:severity]
|
414
|
+
body += "$('#critical_table').dataTable({\"bPaginate\": false});\n" if @options[:severity] <= 4
|
415
|
+
body += "$('#high_table').dataTable({\"bPaginate\": false});\n" if @options[:severity] <= 3
|
416
|
+
body += "$('#medium_table').dataTable({\"bPaginate\": false});\n" if @options[:severity] <= 2
|
417
|
+
body += "$('#low_table').dataTable({\"bPaginate\": false});\n" if @options[:severity] <= 1
|
418
|
+
body += "$('#informational_table').dataTable({\"bPaginate\": false});\n" if @options[:severity] <= 0
|
404
419
|
body += "});</script>"
|
405
420
|
|
406
421
|
body += '</div></div>'
|
@@ -571,6 +586,9 @@ class Htmlout < Baseout
|
|
571
586
|
var chart;
|
572
587
|
$(document).ready(function() {
|
573
588
|
chart = new Highcharts.Chart({
|
589
|
+
credits: {
|
590
|
+
enabled: false
|
591
|
+
},
|
574
592
|
chart: {
|
575
593
|
renderTo: '#{renderto}',
|
576
594
|
type: 'bar'
|
@@ -598,6 +616,7 @@ class Htmlout < Baseout
|
|
598
616
|
},
|
599
617
|
yAxis: {
|
600
618
|
min: 0,
|
619
|
+
allowDecimals: false,
|
601
620
|
title: {
|
602
621
|
text: 'Findings'
|
603
622
|
}
|
@@ -615,11 +634,17 @@ class Htmlout < Baseout
|
|
615
634
|
plotOptions: {
|
616
635
|
series: {
|
617
636
|
stacking: 'normal',
|
637
|
+
//threshold: 1,
|
618
638
|
dataLabels: {
|
619
639
|
enabled: true,
|
620
640
|
color: '#000000',
|
621
641
|
x: 0,
|
622
|
-
align: 'center'
|
642
|
+
align: 'center',
|
643
|
+
formatter: function() {
|
644
|
+
if (this.y !=0) {
|
645
|
+
return this.y;
|
646
|
+
}
|
647
|
+
}
|
623
648
|
},
|
624
649
|
events: {
|
625
650
|
click: function(event) {
|
@@ -727,6 +752,9 @@ class Htmlout < Baseout
|
|
727
752
|
var chart;
|
728
753
|
$(document).ready(function() {
|
729
754
|
chart = new Highcharts.Chart({
|
755
|
+
credits: {
|
756
|
+
enabled: false
|
757
|
+
},
|
730
758
|
chart: {
|
731
759
|
renderTo: '#{renderto}',
|
732
760
|
plotBackgroundColor: null,
|
@@ -738,11 +766,12 @@ class Htmlout < Baseout
|
|
738
766
|
},
|
739
767
|
tooltip: {
|
740
768
|
formatter: function() {
|
741
|
-
return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
|
769
|
+
return '<b>'+ this.point.name +'</b>: '+ Math.round(this.percentage) +' %';
|
742
770
|
}
|
743
771
|
},
|
744
772
|
plotOptions: {
|
745
773
|
pie: {
|
774
|
+
size: '60%',
|
746
775
|
allowPointSelect: true,
|
747
776
|
cursor: 'pointer',
|
748
777
|
dataLabels: {
|
@@ -751,11 +780,12 @@ class Htmlout < Baseout
|
|
751
780
|
connectorColor: '#000000',
|
752
781
|
formatter: function() {
|
753
782
|
return '<b>'+ this.point.name +'</b>: '+ this.y;
|
754
|
-
}
|
783
|
+
},
|
784
|
+
distance: 20
|
755
785
|
}
|
756
786
|
eos
|
757
787
|
|
758
|
-
|
788
|
+
unless clickfunction.nil?
|
759
789
|
fp.puts ',events: { click: function(event) { ' + clickfunction + '} }'
|
760
790
|
end
|
761
791
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prenus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rainbow
|