Skip to content
Snippets Groups Projects
Commit 0938d044 authored by Lukas Koenen's avatar Lukas Koenen
Browse files

feat: output severity json

parent fd9cc26c
No related branches found
No related tags found
No related merge requests found
Pipeline #160653 passed
import json
import os import os
from typing import Any from typing import Any
...@@ -7,6 +8,25 @@ from contrib.descriptions import VulnDescriptionProvider ...@@ -7,6 +8,25 @@ from contrib.descriptions import VulnDescriptionProvider
from contrib.report_builders import JsonReportBuilder 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): class JinjaHtmlReportBuilder(JsonReportBuilder):
def __init__(self, description_provider: VulnDescriptionProvider): def __init__(self, description_provider: VulnDescriptionProvider):
super().__init__(description_provider) super().__init__(description_provider)
...@@ -15,7 +35,20 @@ class JinjaHtmlReportBuilder(JsonReportBuilder): ...@@ -15,7 +35,20 @@ class JinjaHtmlReportBuilder(JsonReportBuilder):
self._read_template() # type: Template self._read_template() # type: Template
def build(self) -> Any: 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): def _read_template(self):
template_loader = FileSystemLoader(searchpath=self.template_path) template_loader = FileSystemLoader(searchpath=self.template_path)
......
...@@ -11,9 +11,10 @@ class JsonReportBuilder(ReportBuilder): ...@@ -11,9 +11,10 @@ class JsonReportBuilder(ReportBuilder):
self.description_provider = description_provider self.description_provider = description_provider
self._buffer = {'ips': [], 'vulnerable': {}, 'not_vulnerable': {}, 'password_auth_enabled': []} 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['start_date'] = start_date
self._buffer['nmap_command'] = nmap_command self._buffer['nmap_command'] = nmap_command
self._buffer['output_path'] = output_path
def build(self) -> Any: def build(self) -> Any:
return json.dumps(self._buffer) return json.dumps(self._buffer)
......
...@@ -8,7 +8,7 @@ __all__ = ['ReportBuilder'] ...@@ -8,7 +8,7 @@ __all__ = ['ReportBuilder']
class ReportBuilder(metaclass=abc.ABCMeta): 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 Creates document section with report overview
""" """
......
...@@ -13,7 +13,7 @@ from contrib.report_builders import ReportBuilder, LatexReportBuilder, MarkdownR ...@@ -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, def create_report(parser: FlanXmlParser, builder: ReportBuilder, nmap_command: str, start_date: str, output_writer: IO,
ip_reader: 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: if parser.vulnerable_services:
builder.add_vulnerable_section() builder.add_vulnerable_section()
......
...@@ -20,6 +20,7 @@ xml_subdir=$xml_dir/$current_time ...@@ -20,6 +20,7 @@ xml_subdir=$xml_dir/$current_time
report_subdir=$report_dir/$current_time report_subdir=$report_dir/$current_time
report_file=report_$current_time.$report_extension report_file=report_$current_time.$report_extension
severity_file=report_$current_time.severity
if [[ ! -z $project ]] if [[ ! -z $project ]]
then then
...@@ -27,6 +28,7 @@ then ...@@ -27,6 +28,7 @@ then
report_subdir=$report_dir/$project/$current_time report_subdir=$report_dir/$project/$current_time
report_file=report_$project\_$current_time.$report_extension report_file=report_$project\_$current_time.$report_extension
severity_file=report_$project\_$current_time.severity
fi fi
function upload { function upload {
...@@ -85,3 +87,4 @@ then ...@@ -85,3 +87,4 @@ then
sed -i 's/%/\\%/g' $root_dir/$report_dir/$report_file sed -i 's/%/\\%/g' $root_dir/$report_dir/$report_file
fi fi
upload $report_subdir/$report_file upload $report_subdir/$report_file
upload $report_subdir/$severity_file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment