Removed font ttf, using google fonts

This commit is contained in:
Yogesh Ojha
2022-04-24 22:57:30 +05:30
parent 2ab64713e4
commit 824f59b2f8
12 changed files with 1 additions and 1082 deletions
+1 -44
View File
@@ -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.
-26
View File
@@ -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

-459
View File
@@ -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;
}
-29
View File
@@ -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

-21
View File
@@ -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

-503
View File
@@ -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>&nbsp;</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 %}
&nbsp;&nbsp;&nbsp;
{% endif %}
</div>
<div class="cell" style="width: 15%;">
{% if subdomain.http_status %}
{{subdomain.http_status}}
{% else %}
&nbsp;&nbsp;&nbsp;
{% 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: &nbsp;
{% 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>