class Risu::Templates::NotableTemplateDetailed

Public Class Methods

new() click to toggle source

Creates an instance of the [NotableTemplateDetailed] class and initializes its meta-data

# File lib/risu/templates/notable_detailed.rb, line 28
def initialize
        @template_info =
        {
                :name => "notable_detailed",
                :author => "hammackj",
                :version => "0.0.6",
                :renderer => "PDF",
                :description => "Notable Vulnerabilities Detailed"
        }
end

Public Instance Methods

render(output) click to toggle source
# File lib/risu/templates/notable_detailed.rb, line 41
def render output
        @output.text Report.classification.upcase, :align => :center
        @output.text "\n"

        report_title Report.title
        report_subtitle "Notable Vulnerabilities"
        report_author "This report was prepared by\n#{Report.author}"

        @output.text "\n\n\n"

        @output.text "Scan Date:", :style => :bold
        @output.text "#{Report.scan_date}"
        @output.text "\n"

        #data = Item.top_10_sorted_raw

        unique_risks = Array.new
        unique_risks << Hash[:title => "Notable Findings", :color => "9B30FF", :values => Item.top_10_sorted_raw[0..9]]
        counter = 1

        unique_risks.each do |h|
                if h[:values].length > 1
                        @output.text "\n"

                        h[:values].each do |f|
                                plugin_id = f[0]

                                hosts = Item.where(:plugin_id => plugin_id).group(:host_id)
                                #item = Item.where(:plugin_id => plugin_id)
                                plugin = Plugin.find_by_id(plugin_id)

                                references = Reference.where(:plugin_id => plugin.id).group(:value).order(:reference_name)

                                heading3 "#{counter}: #{Item.scrub_plugin_name(plugin.plugin_name)}\n"

                                if hosts.length > 1
                                        @output.text "Hosts (#{hosts.length})", :style => :bold
                                else
                                        @output.text "Host", :style => :bold
                                end

                                hostlist = Array.new
                                hosts.each do |host|
                                        h = Host.find_by_id(host.host_id)
                                        host_string = "#{h.name}"
                                        host_string << " (#{h.fqdn})" if h.fqdn != nil
                                        hostlist << host_string
                                end

                                @output.text hostlist.join(', ')

                                #if item.plugin_output != nil
                                #        @output.text "\nPlugin output", :style => :bold
                                #        @output.text f.plugin_output
                                #end

                                if plugin.description != nil
                                        @output.text "\nDescription", :style => :bold
                                        @output.text plugin.description.gsub(/[ ]{2,}/, " ")
                                end

                                if plugin.synopsis != nil
                                        @output.text "\nSynopsis", :style => :bold
                                        @output.text plugin.synopsis
                                end

                                if plugin.cvss_base_score != nil
                                        @output.text "\nCVSS Base Score", :style => :bold
                                        @output.text plugin.cvss_base_score
                                end

                                if plugin.exploit_available != nil
                                        @output.text "\nExploit Available", :style => :bold

                                        plugin.exploit_available? ? "Yes" : "No"
                                end

                                if plugin.solution != nil
                                        @output.text "\nSolution", :style => :bold
                                        @output.text plugin.solution
                                end

                                if references.size != 0
                                        @output.text "\nReferences", :style => :bold
                                        @output.text plugin.references.reference_string, :inline_format => true
                                        @output.text "<b>nessus_plugin</b>: http://www.tenablesecurity.com/plugins/index.php?view=single&id=#{plugin_id}", :inline_format => true
                                end



                                @output.text "\n"
                                counter += 1
                        end
                end

                @output.start_new_page unless h[:values] == nil
        end

        @output.number_pages "<page> of <total>", :at => [@output.bounds.right - 75, 0], :width => 150, :page_filter => :all
end