mirror of
https://github.com/yogeshojha/rengine.git
synced 2026-09-29 05:04:56 +02:00
Removed font ttf, using google fonts
This commit is contained in:
+1
-44
@@ -3,7 +3,6 @@ import logging
|
||||
import requests
|
||||
import itertools
|
||||
import tempfile
|
||||
import markdown
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
@@ -639,9 +638,6 @@ def customize_report(request, id):
|
||||
|
||||
|
||||
def create_report(request, id):
|
||||
primary_color = '#FFB74D'
|
||||
secondary_color = '#212121'
|
||||
|
||||
scan_object = ScanHistory.objects.get(id=id)
|
||||
unique_vulnerabilities = Vulnerability.objects.filter(scan_history=scan_object).values("name", "severity").annotate(count=Count('name')).order_by('-severity', '-count')
|
||||
all_vulnerabilities = Vulnerability.objects.filter(scan_history=scan_object).order_by('-severity')
|
||||
@@ -653,7 +649,6 @@ def create_report(request, id):
|
||||
ip_addresses = IpAddress.objects.filter(
|
||||
ip_addresses__in=Subdomain.objects.filter(
|
||||
scan_history__id=id)).distinct()
|
||||
|
||||
data = {
|
||||
'scan_object': scan_object,
|
||||
'unique_vulnerabilities': unique_vulnerabilities,
|
||||
@@ -661,46 +656,8 @@ def create_report(request, id):
|
||||
'subdomain_alive_count': subdomain_alive_count,
|
||||
'interesting_subdomains': interesting_subdomains,
|
||||
'subdomains': subdomains,
|
||||
'ip_addresses': ip_addresses,
|
||||
'ip_addresses': ip_addresses
|
||||
}
|
||||
|
||||
# get report related config
|
||||
if VulnerabilityReportSetting.objects.all().exists():
|
||||
report = VulnerabilityReportSetting.objects.all()[0]
|
||||
data['company_name'] = report.company_name
|
||||
data['company_address'] = report.company_address
|
||||
data['company_email'] = report.company_email
|
||||
data['company_website'] = report.company_website
|
||||
data['show_rengine_banner'] = report.show_rengine_banner
|
||||
data['show_footer'] = report.show_footer
|
||||
data['footer_text'] = report.footer_text
|
||||
data['show_executive_summary'] = report.show_executive_summary
|
||||
|
||||
primary_color = report.primary_color
|
||||
secondary_color = report.secondary_color
|
||||
|
||||
description = report.executive_summary_description
|
||||
|
||||
# replace executive_summary_description with template syntax!
|
||||
description = description.replace('{scan_date}', scan_object.start_scan_date.strftime('%d %B, %Y'))
|
||||
description = description.replace('{company_name}', report.company_name)
|
||||
description = description.replace('{target_name}', scan_object.domain.name)
|
||||
if scan_object.domain.description:
|
||||
description = description.replace('{target_description}', scan_object.domain.description)
|
||||
description = description.replace('{subdomain_count}', str(subdomains.count()))
|
||||
description = description.replace('{vulnerability_count}', str(all_vulnerabilities.count()))
|
||||
description = description.replace('{critical_count}', str(all_vulnerabilities.filter(severity=4).count()))
|
||||
description = description.replace('{high_count}', str(all_vulnerabilities.filter(severity=3).count()))
|
||||
description = description.replace('{medium_count}', str(all_vulnerabilities.filter(severity=2).count()))
|
||||
description = description.replace('{low_count}', str(all_vulnerabilities.filter(severity=1).count()))
|
||||
description = description.replace('{info_count}', str(all_vulnerabilities.filter(severity=0).count()))
|
||||
|
||||
# convert to html
|
||||
data['executive_summary_description'] = markdown.markdown(description)
|
||||
|
||||
data['primary_color'] = primary_color
|
||||
data['secondary_color'] = secondary_color
|
||||
|
||||
template = get_template('report/template.html')
|
||||
html = template.render(data)
|
||||
pdf = HTML(string=html).write_pdf()
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 56.7 56.7" style="enable-background:new 0 0 56.7 56.7;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;stroke:#231F20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<rect x="12.4" y="6.1" class="st0" width="31.9" height="44.5"/>
|
||||
<line class="st0" x1="16.4" y1="10.8" x2="26.8" y2="10.8"/>
|
||||
<line class="st0" x1="37" y1="10.8" x2="40.2" y2="10.8"/>
|
||||
<g>
|
||||
<rect x="-85.5" y="-13" class="st0" width="31.9" height="44.5"/>
|
||||
<line class="st0" x1="-81.4" y1="-6.3" x2="-71.1" y2="-6.3"/>
|
||||
<line class="st0" x1="-81.4" y1="-0.1" x2="-71.1" y2="-0.1"/>
|
||||
<line class="st0" x1="-81.4" y1="6.1" x2="-71.1" y2="6.1"/>
|
||||
<line class="st0" x1="-81.4" y1="12.3" x2="-71.1" y2="12.3"/>
|
||||
<line class="st0" x1="-81.4" y1="18.6" x2="-71.1" y2="18.6"/>
|
||||
<line class="st0" x1="-81.4" y1="24.8" x2="-71.1" y2="24.8"/>
|
||||
<line class="st0" x1="-60.8" y1="-6.3" x2="-57.6" y2="-6.3"/>
|
||||
<line class="st0" x1="-60.8" y1="-0.1" x2="-57.6" y2="-0.1"/>
|
||||
<line class="st0" x1="-60.8" y1="6.1" x2="-57.6" y2="6.1"/>
|
||||
<line class="st0" x1="-60.8" y1="12.3" x2="-57.6" y2="12.3"/>
|
||||
<line class="st0" x1="-60.8" y1="18.6" x2="-57.6" y2="18.6"/>
|
||||
<line class="st0" x1="-60.8" y1="24.8" x2="-57.6" y2="24.8"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -1,459 +0,0 @@
|
||||
@font-face {
|
||||
font-family: roboto-regular;
|
||||
font-weight: 300;
|
||||
src: url(Roboto-Regular.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: roboto-italic;
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: url(Roboto-Ialic.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: roboto-light;
|
||||
font-weight: 300;
|
||||
src: url(Roboto-Light.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: roboto-lightitalic;
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: url(Roboto-LightItalic.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: roboto-bold;
|
||||
font-weight: 700;
|
||||
src: url(Roboto-Bold.ttf);
|
||||
}
|
||||
|
||||
@page {
|
||||
size: A4;
|
||||
@top-left {
|
||||
background: #FF7043;
|
||||
content: counter(page);
|
||||
height: 1cm;
|
||||
text-align: center;
|
||||
width: 1cm;
|
||||
}
|
||||
@top-center {
|
||||
background: #FF7043;
|
||||
content: '';
|
||||
display: block;
|
||||
height: .05cm;
|
||||
opacity: .5;
|
||||
width: 100%;
|
||||
}
|
||||
@top-right {
|
||||
content: string(heading);
|
||||
font-size: 9pt;
|
||||
height: 1cm;
|
||||
vertical-align: middle;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@page :blank {
|
||||
@top-left { background: none; content: '' }
|
||||
@top-center { content: none }
|
||||
@top-right { content: none }
|
||||
}
|
||||
@page no-chapter {
|
||||
@top-left { background: none; content: none }
|
||||
@top-center { content: none }
|
||||
@top-right { content: none }
|
||||
}
|
||||
|
||||
@page :first {
|
||||
background-color: #424242;
|
||||
background-size: cover;
|
||||
margin: 0;
|
||||
}
|
||||
@page chapter {
|
||||
background: #FF7043;
|
||||
margin: 0;
|
||||
@top-left { content: none }
|
||||
@top-center { content: none }
|
||||
@top-right { content: none }
|
||||
}
|
||||
|
||||
html {
|
||||
color: #393939;
|
||||
font-family: roboto-regular;
|
||||
font-size: 11pt;
|
||||
font-weight: 300;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: roboto-light;
|
||||
font-size: 38pt;
|
||||
margin: 5cm 2cm 0 2cm;
|
||||
page: no-chapter;
|
||||
width: 100%;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
.subheading {
|
||||
font-family: roboto-light;
|
||||
font-size: 22pt;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
h2, h3, h4 {
|
||||
font-family: roboto-regular;
|
||||
color: black;
|
||||
font-weight: 400;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 28pt;
|
||||
string-set: heading content();
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: roboto-light;
|
||||
font-weight: 100;
|
||||
font-size: 15pt;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 13pt;
|
||||
}
|
||||
|
||||
#cover {
|
||||
align-content: space-between;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
height: 297mm;
|
||||
}
|
||||
|
||||
#cover footer {
|
||||
background: #FF7043;
|
||||
flex: 1 33%;
|
||||
margin: 0 -2cm;
|
||||
padding: 1cm 0;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
#cover footer:first-of-type {
|
||||
padding-left: 3cm;
|
||||
}
|
||||
|
||||
#summary {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
#summary h2, #summary h3 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#summary section {
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
#summary section h4 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
#summary section ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
#summary section ul li:not(:last-of-type) {
|
||||
margin: .5cm 0;
|
||||
}
|
||||
#summary section p {
|
||||
background: #FF7043;
|
||||
display: block;
|
||||
font-size: 15pt;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0;
|
||||
padding: .25cm 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#vulnerability-boxes {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
#vulnerability-boxes section {
|
||||
width: 24%;
|
||||
}
|
||||
|
||||
#vulnerability-boxes section h4 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#vulnerability-boxes section p {
|
||||
background: #FF7043;
|
||||
display: block;
|
||||
font-size: 15pt;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0;
|
||||
padding: .25cm 0;
|
||||
text-align: center;
|
||||
height: 85px;
|
||||
color: #37474F;
|
||||
}
|
||||
|
||||
.critical{
|
||||
background: #EF9A9A !important;
|
||||
}
|
||||
.high{
|
||||
background: #FFAB91 !important;
|
||||
}
|
||||
.medium{
|
||||
background: #FFCC80 !important;
|
||||
}
|
||||
.low{
|
||||
background: #FFE082 !important;
|
||||
}
|
||||
.success{
|
||||
background-color: #A5D6A7 !important;
|
||||
}
|
||||
.grey{
|
||||
background-color: #B0BEC5 !important;
|
||||
}
|
||||
.info{
|
||||
background-color: #90CAF9 !important;
|
||||
}
|
||||
|
||||
.badge{
|
||||
display:inline-block;
|
||||
padding-left:8px;
|
||||
padding-right:8px;
|
||||
text-align:center
|
||||
}
|
||||
|
||||
.dark-text{
|
||||
color: #424242;
|
||||
}
|
||||
|
||||
.critical-border{
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #EF9A9A !important;
|
||||
}
|
||||
.high-border{
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #FFAB91 !important;
|
||||
}
|
||||
.medium-border{
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #FFCC80 !important;
|
||||
}
|
||||
.low-border{
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #FFE082 !important;
|
||||
}
|
||||
.success-border{
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #A5D6A7 !important;
|
||||
}
|
||||
.grey-border{
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #B0BEC5 !important;
|
||||
}
|
||||
.info-border{
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #90CAF9 !important;
|
||||
}
|
||||
|
||||
.critical-text{
|
||||
color: #EF9A9A !important;
|
||||
}
|
||||
.high-text{
|
||||
color: #FFAB91 !important;
|
||||
}
|
||||
.medium-text{
|
||||
color: #FFCC80 !important;
|
||||
}
|
||||
.low-text{
|
||||
color: #FFE082 !important;
|
||||
}
|
||||
.info-text{
|
||||
color: #29B6F6 !important;
|
||||
}
|
||||
|
||||
.critical-line{
|
||||
border-bottom: 3px solid #EF9A9A !important;
|
||||
}
|
||||
.high-line{
|
||||
border-bottom: 3px solid #FFAB91 !important;
|
||||
}
|
||||
.medium-line{
|
||||
border-bottom: 3px solid #FFCC80 !important;
|
||||
}
|
||||
.low-line{
|
||||
border-bottom: 3px solid #FFE082 !important;
|
||||
}
|
||||
.info-line{
|
||||
border-bottom: 3px solid #90CAF9 !important;
|
||||
}
|
||||
|
||||
|
||||
#vulnerability-count{
|
||||
font-size: 30pt;
|
||||
}
|
||||
|
||||
#info_title{
|
||||
font-size: 13pt;
|
||||
color: #29B6F6;
|
||||
}
|
||||
|
||||
.bold-h3{
|
||||
font-family: roboto-medium;
|
||||
font-size: 18pt;
|
||||
}
|
||||
|
||||
.small_text{
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
.bold{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.line {
|
||||
border-bottom: 1px double #FF7043;
|
||||
}
|
||||
|
||||
.light-title{
|
||||
font-family: roboto-light;
|
||||
}
|
||||
|
||||
#primary-title{
|
||||
color: #FF7043;
|
||||
}
|
||||
|
||||
#mini-text{
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.table{
|
||||
margin: 0 0 40px 0;
|
||||
width: 100%;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
|
||||
display: table;
|
||||
border-spacing: 0 0.4em;
|
||||
}
|
||||
|
||||
.row{
|
||||
display: table-row;
|
||||
background: #f6f6f6;
|
||||
}
|
||||
|
||||
.cell{
|
||||
padding: 6px 6px 6px 6px;
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
.header{
|
||||
font-weight: 900;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.red-header{
|
||||
background: #ea6153;
|
||||
}
|
||||
|
||||
.blue-header{
|
||||
background: #1E88E5;
|
||||
}
|
||||
|
||||
.green-header{
|
||||
background: #66BB6A;
|
||||
}
|
||||
|
||||
.info-cell{
|
||||
background: #42A5F5;
|
||||
}
|
||||
|
||||
.severity-title-box{
|
||||
color: #37474F;
|
||||
}
|
||||
|
||||
|
||||
#contents {
|
||||
page: no-chapter;
|
||||
}
|
||||
#contents h2 {
|
||||
font-size: 20pt;
|
||||
font-weight: 400;
|
||||
margin-bottom: 3cm;
|
||||
}
|
||||
#contents h3 {
|
||||
font-weight: 500;
|
||||
margin: 3em 0 1em;
|
||||
}
|
||||
#contents h3::before {
|
||||
background: #FF7043;
|
||||
content: '';
|
||||
display: block;
|
||||
height: .08cm;
|
||||
margin-bottom: .25cm;
|
||||
width: 2cm;
|
||||
}
|
||||
#contents ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
#contents ul li {
|
||||
border-top: .25pt solid #c1c1c1;
|
||||
margin: .25cm 0;
|
||||
padding-top: .25cm;
|
||||
}
|
||||
#contents ul li::before {
|
||||
color: #FF7043;
|
||||
content: '• ';
|
||||
font-size: 30pt;
|
||||
line-height: 16pt;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
#contents ul li a {
|
||||
color: inherit;
|
||||
text-decoration-line: inherit;
|
||||
}
|
||||
#contents ul li a::before {
|
||||
content: target-text(attr(href));
|
||||
}
|
||||
#contents ul li a::after {
|
||||
color: #FF7043;
|
||||
content: target-counter(attr(href), page);
|
||||
float: right;
|
||||
}
|
||||
|
||||
#columns section {
|
||||
columns: 2;
|
||||
column-gap: 1cm;
|
||||
padding-top: 1cm;
|
||||
}
|
||||
#columns section p {
|
||||
text-align: justify;
|
||||
}
|
||||
#columns section p:first-of-type {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
|
||||
.line-break{
|
||||
display: block;
|
||||
}
|
||||
|
||||
#chapter {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
height: 297mm;
|
||||
justify-content: center;
|
||||
page: chapter;
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 56.7 56.7" style="enable-background:new 0 0 56.7 56.7;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;stroke:#231F20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<rect x="12.4" y="6.1" class="st0" width="31.9" height="44.5"/>
|
||||
<line class="st0" x1="16.4" y1="13.8" x2="40.2" y2="13.8"/>
|
||||
<g>
|
||||
<rect x="-85.5" y="-13" class="st0" width="31.9" height="44.5"/>
|
||||
<line class="st0" x1="-81.4" y1="-6.3" x2="-71.1" y2="-6.3"/>
|
||||
<line class="st0" x1="-81.4" y1="-0.1" x2="-71.1" y2="-0.1"/>
|
||||
<line class="st0" x1="-81.4" y1="6.1" x2="-71.1" y2="6.1"/>
|
||||
<line class="st0" x1="-81.4" y1="12.3" x2="-71.1" y2="12.3"/>
|
||||
<line class="st0" x1="-81.4" y1="18.6" x2="-71.1" y2="18.6"/>
|
||||
<line class="st0" x1="-81.4" y1="24.8" x2="-71.1" y2="24.8"/>
|
||||
<line class="st0" x1="-60.8" y1="-6.3" x2="-57.6" y2="-6.3"/>
|
||||
<line class="st0" x1="-60.8" y1="-0.1" x2="-57.6" y2="-0.1"/>
|
||||
<line class="st0" x1="-60.8" y1="6.1" x2="-57.6" y2="6.1"/>
|
||||
<line class="st0" x1="-60.8" y1="12.3" x2="-57.6" y2="12.3"/>
|
||||
<line class="st0" x1="-60.8" y1="18.6" x2="-57.6" y2="18.6"/>
|
||||
<line class="st0" x1="-60.8" y1="24.8" x2="-57.6" y2="24.8"/>
|
||||
</g>
|
||||
<line class="st0" x1="16.4" y1="20.9" x2="40.2" y2="20.9"/>
|
||||
<line class="st0" x1="16.4" y1="28" x2="40.2" y2="28"/>
|
||||
<line class="st0" x1="16.4" y1="35" x2="40.2" y2="35"/>
|
||||
<line class="st0" x1="16.4" y1="42.1" x2="40.2" y2="42.1"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 56.7 56.7" style="enable-background:new 0 0 56.7 56.7;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;stroke:#231F20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<rect x="12.4" y="6.1" class="st0" width="31.9" height="44.5"/>
|
||||
<line class="st0" x1="16.4" y1="12.8" x2="26.8" y2="12.8"/>
|
||||
<line class="st0" x1="16.4" y1="19" x2="26.8" y2="19"/>
|
||||
<line class="st0" x1="16.4" y1="25.2" x2="26.8" y2="25.2"/>
|
||||
<line class="st0" x1="16.4" y1="31.5" x2="26.8" y2="31.5"/>
|
||||
<line class="st0" x1="16.4" y1="37.7" x2="26.8" y2="37.7"/>
|
||||
<line class="st0" x1="16.4" y1="43.9" x2="26.8" y2="43.9"/>
|
||||
<line class="st0" x1="37" y1="12.8" x2="40.2" y2="12.8"/>
|
||||
<line class="st0" x1="37" y1="19" x2="40.2" y2="19"/>
|
||||
<line class="st0" x1="37" y1="25.2" x2="40.2" y2="25.2"/>
|
||||
<line class="st0" x1="37" y1="31.5" x2="40.2" y2="31.5"/>
|
||||
<line class="st0" x1="37" y1="37.7" x2="40.2" y2="37.7"/>
|
||||
<line class="st0" x1="37" y1="43.9" x2="40.2" y2="43.9"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -1,503 +0,0 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Report</title>
|
||||
<link href="http://127.0.0.1:8000/staticfiles/reports/report.css" rel="stylesheet" type="text/css" />
|
||||
<meta name="description" content="Report example">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<article id="cover">
|
||||
<h1 style="color:#FF7043">Full Scan Report
|
||||
<br>
|
||||
{{scan_object.domain.name}}
|
||||
<div class="line"></div>
|
||||
{# generated date #}
|
||||
<span class="subheading">{% now "F j, Y" %}</span>
|
||||
</h1>
|
||||
<footer>
|
||||
Company Name
|
||||
Company Address
|
||||
</footer>
|
||||
<footer>
|
||||
your@company.com
|
||||
https://yourcompany.org
|
||||
</footer>
|
||||
<footer>
|
||||
Generated by reNgine
|
||||
https://github.com/yogeshojha/rengine
|
||||
</footer>
|
||||
</article>
|
||||
<article id="contents">
|
||||
<h2> </h2>
|
||||
<h3>Table of contents</h3>
|
||||
<ul>
|
||||
<li><a href="#quick-summary"></a></li>
|
||||
{% if interesting_subdomains %}
|
||||
<li><a href="#interesting-recon-data"></a></li>
|
||||
{% endif %}
|
||||
{% if all_vulnerabilities.count > 0 %}
|
||||
<li><a href="#vulnerability-summary"></a></li>
|
||||
{% endif %}
|
||||
<li><a href="#reconnaissance-results"></a></li>
|
||||
{% if all_vulnerabilities.count > 0 %}
|
||||
<li><a href="#vulnerabilities-discovered"></a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article id="summary" style="page-break-before: always">
|
||||
<h2 id="quick-summary">Quick Summary</h2>
|
||||
<h4 class="light-title">This section contains quick summary of scan performed on <span id="primary-title">{{scan_object.domain.name}}</span></h4>
|
||||
<h3 id="reconnaissance-summary">Reconnaissance</h3>
|
||||
</article>
|
||||
<div id="vulnerability-boxes">
|
||||
<section>
|
||||
<p id="inside-box-title" class="success">Subdomains
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_subdomain_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="grey">Endpoints
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_endpoint_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="critical">Vulnerabilities
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<article>
|
||||
<br>
|
||||
<h3 id="vulnerability-summary">Vulnerability Summary</h3>
|
||||
<div id="vulnerability-boxes">
|
||||
<section>
|
||||
<p id="inside-box-title" class="critical">Critical
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_critical_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="high">High
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_high_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="medium">Medium
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_medium_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="low">Low
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_low_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<span id="info_title">* {{scan_object.get_info_vulnerability_count}} Informational Vulnerabilities Identified</span>
|
||||
</article>
|
||||
<article>
|
||||
<h3 id="assessment-timeline">Timeline of the Assessment</h3>
|
||||
<p>
|
||||
Scan started on: {{scan_object.start_scan_date|date:"F j, Y h:i"}}
|
||||
<br>
|
||||
Total time taken:
|
||||
{% if scan_object.scan_status == 0 %}
|
||||
{{ scan_object.start_scan_date|timesince:scan_object.stop_scan_date }}
|
||||
{% elif scan_object.scan_status == 1 %}
|
||||
{{ scan_object.get_elapsed_time }}
|
||||
{% elif scan_object.scan_status == 2 %}
|
||||
{% if scan_object.get_completed_time_in_sec < 60 %}
|
||||
Completed in < 1 minutes {% else %} Completed in {{ scan_object.start_scan_date|timesince:scan_object.stop_scan_date }} {% endif %} {% elif scan_object.scan_status == 3 %} Aborted in
|
||||
{{ scan_object.start_scan_date|timesince:scan_object.stop_scan_date }} {% endif %} <br>
|
||||
Report Generated on: {% now "F j, Y" %}
|
||||
</p>
|
||||
</article>
|
||||
{% if interesting_subdomains %}
|
||||
<article style="page-break-before: always" class="summary">
|
||||
<h3 id="interesting-recon-data" class="bold-h3">Interesting Recon Data</h3>
|
||||
<h4 class="light-title">Listed below are the {{interesting_subdomains.count}} interesting subdomains identified on <span id="primary-title">{{scan_object.domain.name}}</span></h4>
|
||||
<div class="table">
|
||||
<div class="row header green-header">
|
||||
<div class="cell" style="width: 5%">
|
||||
#
|
||||
</div>
|
||||
<div class="cell" style="width: 33%">
|
||||
Subdomain
|
||||
</div>
|
||||
<div class="cell" style="width: 33%">
|
||||
Page title
|
||||
</div>
|
||||
<div class="cell" style="width: 15%">
|
||||
HTTP Status
|
||||
</div>
|
||||
</div>
|
||||
{% for subdomain in interesting_subdomains %}
|
||||
<div class="row">
|
||||
<div class="cell" style="width: 5%">
|
||||
{{ forloop.counter }}
|
||||
</div>
|
||||
<div class="cell" style="width: 35%">
|
||||
{{subdomain.name}}
|
||||
</div>
|
||||
<div class="cell" style="width: 35%">
|
||||
{% if subdomain.page_title %}
|
||||
{{subdomain.page_title}}
|
||||
{% else %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="cell" style="width: 15%;">
|
||||
{% if subdomain.http_status %}
|
||||
{{subdomain.http_status}}
|
||||
{% else %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</article>
|
||||
{% endif %}
|
||||
{% if all_vulnerabilities.count > 0 %}
|
||||
<article style="page-break-before: always" class="summary">
|
||||
<h3 id="vulnerability-summary" class="bold-h3">Summary of Vulnerabilities Identified</h3>
|
||||
<h4 class="light-title">Listed below are the vulnerabilities identified on <span id="primary-title">{{scan_object.domain.name}}</span></h4>
|
||||
<div class="table">
|
||||
<div class="row header red-header">
|
||||
<div class="cell" style="width: 5%">
|
||||
#
|
||||
</div>
|
||||
<div class="cell" style="width: 50%">
|
||||
Vulnerability Name
|
||||
</div>
|
||||
<div class="cell" style="width: 19%;">
|
||||
Times Identified
|
||||
</div>
|
||||
<div class="cell" style="width: 15%">
|
||||
Severity
|
||||
</div>
|
||||
</div>
|
||||
{% for vulnerability in unique_vulnerabilities %}
|
||||
<div class="row">
|
||||
<div class="cell" style="width: 5%">
|
||||
{{ forloop.counter }}
|
||||
</div>
|
||||
<div class="cell" style="width: 50%">
|
||||
{{vulnerability.name}}
|
||||
</div>
|
||||
<div class="cell" style="float: right; width: 19%;">
|
||||
{{vulnerability.count}}
|
||||
</div>
|
||||
{% if vulnerability.severity == 0 %}
|
||||
<div class="cell info-cell" style="width: 15%">
|
||||
<span class="severity-title-box">Informational</span>
|
||||
{% elif vulnerability.severity == 1 %}
|
||||
<div class="cell low" style="width: 15%">
|
||||
<span class="severity-title-box">Low</span>
|
||||
{% elif vulnerability.severity == 2 %}
|
||||
<div class="cell medium" style="width: 15%">
|
||||
<span class="severity-title-box">Medium</span>
|
||||
{% elif vulnerability.severity == 3 %}
|
||||
<div class="cell high" style="width: 15%">
|
||||
<span class="severity-title-box">High</span>
|
||||
{% elif vulnerability.severity == 4 %}
|
||||
<div class="cell critical" style="width: 15%">
|
||||
<span class="severity-title-box">Critical</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</article>
|
||||
{% endif %}
|
||||
<article class="summary" style="page-break-before: always">
|
||||
<h2 id="reconnaissance-results">Discovered Assets</h2>
|
||||
<h3 id="">Subdomains</h3>
|
||||
<p>
|
||||
During the reconnaissance phase, {{scan_object.get_subdomain_count}} subdomains were discovered.
|
||||
Out of {{scan_object.get_subdomain_count}} subdomains, {{subdomain_alive_count}} returned HTTP status 200.
|
||||
{{interesting_subdomains.count}} interesting subdomains were also identified based on the interesting keywords used.
|
||||
</p>
|
||||
<h4>{{scan_object.get_subdomain_count}} subdomains identified on <span id="primary-title">{{scan_object.domain.name}}</span></h4>
|
||||
<div class="table">
|
||||
<div class="row header blue-header">
|
||||
<div class="cell" style="width: 38%">
|
||||
Subdomain
|
||||
</div>
|
||||
<div class="cell" style="width: 38%">
|
||||
Page title
|
||||
</div>
|
||||
<div class="cell" style="width: 18%">
|
||||
HTTP Status
|
||||
</div>
|
||||
</div>
|
||||
{% for subdomain in subdomains %}
|
||||
<div class="row">
|
||||
<div class="cell" style="width: 38%">
|
||||
{{subdomain.name}}
|
||||
</div>
|
||||
<div class="cell" style="width: 38%">
|
||||
{% if subdomain.page_title %}
|
||||
{{subdomain.page_title}}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="cell" style="width: 18%">
|
||||
{{subdomain.http_status}}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if ip_addresses.count %}
|
||||
<h3 id="">IP Addresses</h3>
|
||||
<h4>{{ip_addresses.count}} IP Addresses were identified on <span id="primary-title">{{scan_object.domain.name}}</span></h4>
|
||||
<div class="table">
|
||||
<div class="row header blue-header">
|
||||
<div class="cell" style="width: 38%">
|
||||
IP
|
||||
</div>
|
||||
<div class="cell" style="width: 38%">
|
||||
Open Ports
|
||||
</div>
|
||||
<div class="cell" style="width: 18%">
|
||||
Remarks
|
||||
</div>
|
||||
</div>
|
||||
{% for ip in ip_addresses %}
|
||||
<div class="row">
|
||||
<div class="cell" style="width: 38%">
|
||||
{{ip.address}}
|
||||
</div>
|
||||
<div class="cell" style="width: 38%">
|
||||
{% for port in ip.ports.all %}
|
||||
{{port.number}}/{{port.service_name}}{% if not forloop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if ip.is_cdn %}
|
||||
<div class="cell medium" style="width: 18%">
|
||||
CDN IP Address
|
||||
{% else %}
|
||||
<div class="cell" style="width: 18%">
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</article>
|
||||
<br>
|
||||
<article class="">
|
||||
<h3 class="bold-h3">Reconnaissance Findings</h3>
|
||||
{% for subdomain in subdomains %}
|
||||
<table class="table" cellspacing="0" style="border-collapse: collapse;">
|
||||
<tr>
|
||||
<td style="width: 2%" class="cell info-border">{{ forloop.counter }}.</td>
|
||||
<td style="width: 80%" class="cell info-border">{{subdomain.name}}</td>
|
||||
{% if subdomain.http_status == 200 %}
|
||||
<td style="width: 10%" class="cell info-border">{{subdomain.http_status}}</td>
|
||||
{% elif subdomain.http_status >= 300 and subdomain.http_status < 400 %}
|
||||
<td style="width: 10%" class="cell info-border">{{subdomain.http_status}}</td>
|
||||
{% elif subdomain.http_status >= 400 %}
|
||||
<td style="width: 10%" class="cell info-border">{{subdomain.http_status}}</td>
|
||||
{% elif subdomain.http_status == 0 %}
|
||||
<td style="width: 10%" class="cell info-border">N/A</td>
|
||||
{% else %}
|
||||
<td style="width: 10%" class="cell info-border">{{subdomain.http_status}}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% if subdomain.page_title %}
|
||||
<tr>
|
||||
<td colspan="3" class="cell info-border"><strong>Page Title: </strong>{{subdomain.page_title}}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if subdomain.ip_addresses.all %}
|
||||
<tr>
|
||||
<td colspan="3" class="cell info-border">
|
||||
IP Address:
|
||||
<ul>
|
||||
{% for ip in subdomain.ip_addresses.all %}
|
||||
<li>{{ip.address}}
|
||||
{% if ip.ports.all %}
|
||||
<ul>
|
||||
<li>Open Ports:
|
||||
{% for port in ip.ports.all %}
|
||||
{{port.number}}/{{port.service_name}}{% if not forloop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if subdomain.get_vulnerabilities %}
|
||||
<tr>
|
||||
<td colspan="3" class="cell info-border">
|
||||
Vulnerabilities
|
||||
{% regroup subdomain.get_vulnerabilities by name as vuln_list %}
|
||||
<ul>
|
||||
{% for vulnerability in vuln_list %}
|
||||
<li>
|
||||
{{ vulnerability.grouper }}
|
||||
{% regroup vulnerability.list by http_url as vuln_http_url_list %}
|
||||
<ul>
|
||||
{% for vuln_urls in vuln_http_url_list %}
|
||||
<li>
|
||||
{{vuln_urls.grouper}}
|
||||
<br>
|
||||
{% for vuln_url in vuln_urls.list %}
|
||||
<span class="small_text">
|
||||
{% if vuln_url.extracted_results %}
|
||||
{% if not forloop.first %}•{% endif %} {{vuln_url.exextracted_results}}
|
||||
<br>
|
||||
{% endif %}
|
||||
{% if vuln_url.matcher_name %}
|
||||
{% if not forloop.first %} • {% endif %} {{vuln_url.matcher_name}}
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endfor %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</table>
|
||||
{% endfor %}
|
||||
</article>
|
||||
{% if all_vulnerabilities.count > 0 %}
|
||||
<article style="page-break-before: always" class="summary">
|
||||
<h2 id="vulnerabilities-discovered">Vulnerabilities Discovered</h2>
|
||||
<p>
|
||||
This section reports the security issues found during the audit.
|
||||
<br>
|
||||
A Total of {{scan_object.get_vulnerability_count}} were discovered in {{scan_object.domain.name}},
|
||||
{{scan_object.get_critical_vulnerability_count}} of them were Critical,
|
||||
{{scan_object.get_high_vulnerability_count}} of them were High Severity,
|
||||
{{scan_object.get_medium_vulnerability_count}} of them were Medium severity,
|
||||
{{scan_object.get_low_vulnerability_count}} of them were Low severity, and
|
||||
{{scan_object.get_info_vulnerability_count}} of them were Informational.
|
||||
</p>
|
||||
<h3>Vulnerability Breakdown by Severity</h3>
|
||||
<div id="vulnerability-boxes">
|
||||
<section>
|
||||
<p id="inside-box-title" class="critical">Critical
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_critical_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="high">High
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_high_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="medium">Medium
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_medium_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<p id="inside-box-title" class="low">Low
|
||||
<br>
|
||||
<span id="vulnerability-count">
|
||||
{{scan_object.get_low_vulnerability_count}}
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<span id="info_title">* {{scan_object.get_info_vulnerability_count}} Informational Vulnerabilities Identified</span>
|
||||
</article>
|
||||
{# start vulnerability #}
|
||||
<article class="">
|
||||
{% regroup all_vulnerabilities by name as grouped_vulnerabilities %}
|
||||
{% for vulnerability in grouped_vulnerabilities %}
|
||||
<div>
|
||||
<h4 class="dark-text">
|
||||
{{vulnerability.grouper}}
|
||||
{% if vulnerability.list.0.severity == 0 %}
|
||||
<span style="float: right;" class="badge info dark-text">Informational</span>
|
||||
<div class="info-line"></div>
|
||||
{% elif vulnerability.list.0.severity == 1 %}
|
||||
<span style="float: right;" class="badge low dark-text">Low</span>
|
||||
<div class="low-line"></div>
|
||||
{% elif vulnerability.list.0.severity == 2 %}
|
||||
<span style="float: right;" class="badge medium dark-text">Medium</span>
|
||||
<div class="medium-line"></div>
|
||||
{% elif vulnerability.list.0.severity == 3 %}
|
||||
<span style="float: right;" class="badge high dark-text">High</span>
|
||||
<div class="high-line"></div>
|
||||
{% elif vulnerability.list.0.severity == 4 %}
|
||||
<span style="float: right;" class="badge critical dark-text">Critical</span>
|
||||
<div class="critical-line"></div>
|
||||
{% endif %}
|
||||
</h4>
|
||||
{% if vulnerability.list.0.description %}
|
||||
<h5>Description</h5>
|
||||
{{vulnerability.list.0.description}}
|
||||
{% endif %}
|
||||
<h5>Vulnerable URL(s)</h5>
|
||||
{% regroup vulnerability.list by http_url as vuln_http_url_list %}
|
||||
<ul>
|
||||
{% for vuln_urls in vuln_http_url_list %}
|
||||
<li>{{vuln_urls.grouper}}</li>
|
||||
<strong>Results/Findings:</strong>
|
||||
{% for vuln in vuln_urls.list %}
|
||||
{% if vuln.matcher_name %}
|
||||
{% if not forloop.first %} • {% endif %} {{vuln.matcher_name}}
|
||||
{% endif %}
|
||||
{% if vuln.extracted_results %}
|
||||
{% if not forloop.first %} • {% endif %} {{vuln.exextracted_results}}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if vulnerability.list.0.reference %}
|
||||
<h5>Reference</h5>
|
||||
{{vulnerability.list.0.reference}}
|
||||
{% endif %}
|
||||
<br>
|
||||
<br>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</article>
|
||||
{% endif %}
|
||||
<article id="chapter">
|
||||
<h2 id="chapter-title">END OF REPORT</h2>
|
||||
</article>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user