From 0938d0446b0917efd76b69fdf3a85a27faae89b9 Mon Sep 17 00:00:00 2001 From: Lukas Koenen <lukas.koenen@h-da.de> Date: Mon, 4 Sep 2023 12:39:49 +0200 Subject: [PATCH] feat: output severity json --- .../report_builders/html_report_builder.py | 35 ++++++++++++++++++- .../report_builders/json_report_builder.py | 3 +- contrib/report_builders/report_builder.py | 2 +- output_report.py | 2 +- run.sh | 3 ++ 5 files changed, 41 insertions(+), 4 deletions(-) diff --git a/contrib/report_builders/html_report_builder.py b/contrib/report_builders/html_report_builder.py index e7af652..7b4162b 100644 --- a/contrib/report_builders/html_report_builder.py +++ b/contrib/report_builders/html_report_builder.py @@ -1,3 +1,4 @@ +import json import os from typing import Any @@ -7,6 +8,25 @@ from contrib.descriptions import VulnDescriptionProvider from contrib.report_builders import JsonReportBuilder +class Severity: + def __init__(self, severity): + self.level = severity + self.num_level = 0 + + if severity == 'Medium': + self.num_level = 1 + + if severity == 'High': + self.num_level = 2 + + def toJSON(self): + return json.dumps(self, default=lambda o: o.__dict__, + sort_keys=True, indent=4) + + def __lt__(self, other): + return self.num_level < other.num_level + + class JinjaHtmlReportBuilder(JsonReportBuilder): def __init__(self, description_provider: VulnDescriptionProvider): super().__init__(description_provider) @@ -15,7 +35,20 @@ class JinjaHtmlReportBuilder(JsonReportBuilder): self._read_template() # type: Template def build(self) -> Any: - return self._template.render(data=self._buffer) + json_data = self._buffer + + max_severity = Severity('Low') + for vv in json_data['vulnerable'].values(): + for v in vv['vulnerabilities']: + s = Severity(v['severity_str']) + + if s > max_severity: + max_severity = s + + with open(f'{json_data["output_path"]}.severity', 'w+') as severity: + severity.write(max_severity.toJSON()) + + return self._template.render(data=json_data) def _read_template(self): template_loader = FileSystemLoader(searchpath=self.template_path) diff --git a/contrib/report_builders/json_report_builder.py b/contrib/report_builders/json_report_builder.py index 4af6e2d..49d26b6 100644 --- a/contrib/report_builders/json_report_builder.py +++ b/contrib/report_builders/json_report_builder.py @@ -11,9 +11,10 @@ class JsonReportBuilder(ReportBuilder): self.description_provider = description_provider self._buffer = {'ips': [], 'vulnerable': {}, 'not_vulnerable': {}, 'password_auth_enabled': []} - def init_report(self, start_date: str, nmap_command: str): + def init_report(self, start_date: str, nmap_command: str, output_path: str): self._buffer['start_date'] = start_date self._buffer['nmap_command'] = nmap_command + self._buffer['output_path'] = output_path def build(self) -> Any: return json.dumps(self._buffer) diff --git a/contrib/report_builders/report_builder.py b/contrib/report_builders/report_builder.py index cd919d0..279bcec 100644 --- a/contrib/report_builders/report_builder.py +++ b/contrib/report_builders/report_builder.py @@ -8,7 +8,7 @@ __all__ = ['ReportBuilder'] class ReportBuilder(metaclass=abc.ABCMeta): - def init_report(self, start_date: str, nmap_command: str): + def init_report(self, start_date: str, nmap_command: str, output_path: str): """ Creates document section with report overview """ diff --git a/output_report.py b/output_report.py index c6a1a00..8973d64 100644 --- a/output_report.py +++ b/output_report.py @@ -13,7 +13,7 @@ from contrib.report_builders import ReportBuilder, LatexReportBuilder, MarkdownR def create_report(parser: FlanXmlParser, builder: ReportBuilder, nmap_command: str, start_date: str, output_writer: IO, ip_reader: IO): - builder.init_report(start_date, nmap_command) + builder.init_report(start_date, nmap_command, os.path.splitext(output_writer.name)[0]) if parser.vulnerable_services: builder.add_vulnerable_section() diff --git a/run.sh b/run.sh index ad90700..db943d0 100755 --- a/run.sh +++ b/run.sh @@ -20,6 +20,7 @@ xml_subdir=$xml_dir/$current_time report_subdir=$report_dir/$current_time report_file=report_$current_time.$report_extension +severity_file=report_$current_time.severity if [[ ! -z $project ]] then @@ -27,6 +28,7 @@ then report_subdir=$report_dir/$project/$current_time report_file=report_$project\_$current_time.$report_extension + severity_file=report_$project\_$current_time.severity fi function upload { @@ -85,3 +87,4 @@ then sed -i 's/%/\\%/g' $root_dir/$report_dir/$report_file fi upload $report_subdir/$report_file +upload $report_subdir/$severity_file -- GitLab