Module: PWN::Reports::Engagement
- Defined in:
- lib/pwn/reports/engagement.rb
Overview
Compile engagement findings into a client-ready HTML/Markdown report.
Class Method Summary collapse
Class Method Details
.authors ⇒ Object
51 52 53 |
# File 'lib/pwn/reports/engagement.rb', line 51 public_class_method def self. "AUTHOR(S):\n 0day Inc. <[email protected]>\n" end |
.generate(opts = {}) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/pwn/reports/engagement.rb', line 19 public_class_method def self.generate(opts = {}) name = (opts[:engagement] || opts[:name] || 'default').to_s rows = if opts[:findings] Array(opts[:findings]) elsif defined?(PWN::Plugins::Findings) PWN::Plugins::Findings.report else [] end rows = rows.sort_by { |r| -severity_rank(row: r) } payload = { title: "Engagement #{name}", findings: rows, summary: { count: rows.length, critical: rows.count { |r| r[:severity].to_s == 'critical' || r['severity'].to_s == 'critical' } } } dir = opts[:dir_path].to_s dir = File.join(Dir.home, '.pwn', 'exports') if dir.empty? report_name = (opts[:report_name] || "engagement-#{name}").to_s { markdown: PWN::Reports::Markdown.generate(results_hash: payload, dir_path: dir, report_name: report_name), html: PWN::Reports::HTML.generate(results_hash: payload, dir_path: dir, report_name: report_name), json: PWN::Reports::JSON.generate(results_hash: payload, dir_path: dir, report_name: report_name) } end |
.help ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/pwn/reports/engagement.rb', line 55 public_class_method def self.help puts "USAGE: # Compile findings into markdown, html, and json. #{self}.generate( engagement: 'optional - engagement name (defaults to default)', name: 'optional - alias for engagement', findings: 'optional - Array of finding hashes (defaults to Findings.report)', dir_path: 'optional - output directory', report_name: 'optional - basename without extension' ) # Render one format (md|html|json) for a session/engagement. #{self}.render( session_id: 'optional - pwn-ai session id', format: 'optional - md, html, or json (defaults to md)', engagement: 'optional - engagement name', dir_path: 'optional - output directory', report_name: 'optional - basename without extension' ) # Print the AUTHOR(S) string for this module. #{self}.authors " constants.sort end |
.render(opts = {}) ⇒ Object
9 10 11 12 13 14 15 16 17 |
# File 'lib/pwn/reports/engagement.rb', line 9 public_class_method def self.render(opts = {}) out = generate(opts) fmt = (opts[:format] || 'md').to_s case fmt when 'html' then { path: out[:html], format: fmt } when 'json' then { path: out[:json], format: fmt } else { path: out[:markdown], format: 'md', all: out } end end |