Skip to content

Commit

Permalink
Release: v0.6.11
Browse files Browse the repository at this point in the history
  • Loading branch information
0xdade committed Aug 15, 2020
1 parent 6f8c7a6 commit e7f2dbf
Show file tree
Hide file tree
Showing 13 changed files with 472 additions and 70 deletions.
232 changes: 164 additions & 68 deletions CHANGELOG.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion natlas-agent/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
class Config:

# Current Version
NATLAS_VERSION = "0.6.10"
NATLAS_VERSION = "0.6.11"

BASEDIR = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(BASEDIR, ".env"))
Expand Down
36 changes: 36 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/_header.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<div class="row page-header">
<div class="col-xs-12 col-sm">
<h1>{% if host %}{% include 'host/versions/0.6.11/_host-status.html' %}{% endif %}{{ ip }}{% if host %}<small class="text-muted host-header-date"> - <time datetime="{{host.ctime}}">{{ host.ctime | ctime }}</time></small>{% endif %}</h1>
</div>
{% if current_user.is_authenticated %}
<div class="col-xs-12 col-sm-2" style="text-align:right;">
<div class="btn-group host-history-export" role="group">
<form method="POST" action="{{ url_for('host.rescan_host', ip=ip) }}">{{ rescanForm.hidden_tag() }}<button id="requestRescan" class="btn btn-primary" title="Request Rescan" name="requestRescan" type="submit" onclick="return confirm('Request rescan of {{ ip }}?')"><i class="fas fa-redo-alt"></i></button></form>
{% if current_user.is_admin %}
<button id="deleteGroup" type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-trash-alt text-white"></i>
</button>
<div class="dropdown-menu" aria-labelledby="deleteGroup">
{% if host %}
<form method="POST" class="dropdown-item" action="{{ url_for('admin.delete_scan', scan_id=host.scan_id) }}">{{ delForm.hidden_tag() }} <button class="dropdown-item" id="deleteScan" name="deleteScan" title="Delete Scan" aria-hidden="true" onclick="return confirm('Are you sure you want to delete scan: {{ host.scan_id }}')" type="submit" ><i class="fas fa-trash-alt text-danger"></i> Delete Scan</button></form>
{% endif %}
<form method="POST" class="dropdown-item" action="{{ url_for('admin.delete_host', ip=ip) }}">{{ delHostForm.hidden_tag() }} <button class="dropdown-item" id="deleteHost" name="deleteHost" title="Delete Host" aria-hidden="true" onclick="return confirm('Are you sure you want to delete host: {{ ip }}')" type="submit" ><i class="fas fa-dumpster-fire text-danger"></i> Delete Host</button></form>
</div> <!-- End delete dropdown-->
{% endif %}
</div>
</div>
{% endif %}
</div>
<div class="row">
<ul class="nav nav-tabs host-nav">
<li role="presentation" class="nav-item">
<a id="summary" class="nav-link{{ ' active' if active_page == 'summary' }}" href="{{ url_for('host.host', ip=ip) }}">Summary</a>
</li>
<li role="presentation" class="nav-item">
<a id="history" class="nav-link{{ ' active' if active_page == 'history' }}" href="{{ url_for('host.host_history', ip=ip) }}">History <span class="badge badge-dark">{{ info.history }}</span></a>
</li>
<li role="presentation" class="nav-item">
<a id="headshots" class="nav-link{{ ' active' if active_page == 'screenshots' }}" href="{{ url_for('host.host_screenshots', ip=ip) }}">Screenshots {% if info.screenshot_count > 0%}<span class="badge badge-dark">{{ info.screenshot_count }}</span>{% endif %}</a>
</li>
</ul>
</div>
11 changes: 11 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/_host-export.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<div class="btn-group host-export" role="group">
<button id="exportGroup-{{host.scan_id}}" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-file-export mr-1"></i>Export
</button>
<div class="dropdown-menu" aria-labelledby="exportGroup-{{host.scan_id}}">
{% if host.xml_data %}<a class="dropdown-item" href="{{ url_for('host.export_scan', ip=host.ip, scan_id=host.scan_id, ext='xml') }}">.xml</a>{% endif %}
{% if host.nmap_data %}<a class="dropdown-item" href="{{ url_for('host.export_scan', ip=host.ip, scan_id=host.scan_id, ext='nmap') }}">.nmap</a>{% endif %}
{% if host.gnmap_data %}<a class="dropdown-item" href="{{ url_for('host.export_scan', ip=host.ip, scan_id=host.scan_id, ext='gnmap') }}">.gnmap</a>{% endif %}
<a class="dropdown-item" href="{{ url_for('host.export_scan', ip=host.ip, scan_id=host.scan_id, ext='json') }}">.json</a>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<div class="row host-row py-1 no-gutters">
<div class="col col-xs-6 col-sm-4 vert-flex-mid">
<span class="host-row-text pl-2">
{% include 'host/versions/0.6.11/_host-status.html' %}
<a href="{{ url_for('host.host_historical_result', ip=host.ip, scan_id=host.scan_id) }}">
<time datetime={{ host.ctime }} title="{{ host.ctime|ctime(human=True) }}">{{ host.ctime | ctime }}</time>
</a>
</span>
</div>
<div class="col col-xs-6 col-sm-4 col-md-7 pr-2 vert-flex-mid">
{% if host.is_up and host.port_count == 0 %}
No ports open
{% elif not host.is_up and host.timed_out %}
Scan Timed Out
{% elif not host.is_up %}
Host down
{% elif host.is_up and host.port_count > 0 %}
<div class="d-xs-flex d-md-none"><span>{% for port in host.ports %}{{ port.port }}{% if not loop.last %}, {% endif %}{% endfor %}</span></div>
<div class="row d-none d-md-flex">
{% for port in host.ports %}
<div class="col-xs-4 col-sm-2 port-summary my-1">
<div class="port-number">
{{ port.port }}
</div>
<div class="port-protocol">
{{port.protocol}}
</div>
<div class="clearfix"></div>
<div class="port-service">
{{ port.service.name }}
</div>
</div><!--end port-summary-->
{% endfor %}
</div>
{% endif %}
</div>

<div class="col col-sm-4 col-md-1 d-none d-sm-flex vert-flex-mid">
{% if host.nmap_data or host.xml_data or host.gnmap_data %}
{% include 'host/versions/0.6.11/_host-export.html' %}
{% else %}
<div class="btn-group host-history-export" role="group">
<button id="exportGroup-{{host.scan_id}}" type="button" class="btn btn-primary dropdown-toggle" disabled data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="No data available to export">
Export
</button>
</div>
{% endif %}
</div>
</div>
60 changes: 60 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/_host-row.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<div class="row host-row py-1">
<div class="col-xs-12 col-sm-4 col-md-3">
{% if pagetype == 'search' %}
<h3 class="mt-2"><a href="{{ url_for('host.host', ip=host.ip) }}">{{ host.ip }}</a></h3>
{% endif %}
{% if host.ctime %}
<div class="date-submitted">
<span class="submitted-text text-muted pr-1">Submitted:</span>
<a href="{{ url_for('host.host_historical_result', ip=host.ip, scan_id=host.scan_id) }}">
<time datetime={{ host.ctime }} title="{{ host.ctime|ctime(human=True) }}">{{ host.ctime | ctime }}</time>
</a>
</div>
{% endif %}
{% if host.ports|length > 0 %}
<h5 class="mt-2">Open Ports</h5>
<span class="port-str">{{ host.port_str }}</span>
{% elif host.port_count == 0 and host.is_up %}
<h5 class="mt-2">No open ports</h5>
{% elif not host.is_up %}
<h5 class="mt-2">Host down</h5>
{% endif %}
{% if host.hostname %}
<h5 class="mt-2">Hostname</h5>
<span class="host-hostname">{{ host.hostname }}</span>
{% endif %}
{% if host.tags %}
<h5 class="mt-2">Tags</h5>
{% for tag in host.tags %}
<a href="{{ url_for('main.search', query="tags:" + tag)}}"><span class="badge badge-secondary badge-tag">{{ tag }}</span></a>
{% endfor %}
{% endif %}
<div class="btn-group export-group mt-2" role="group">
{% include 'host/versions/0.6.11/_host-export.html' %}
</div>

{% for screenshot in host.screenshots %}
{% if screenshot.hash %}
<div class="image-browser">
<div class="thumbnail-hover d-flex flex-column justify-content-between">
<div class="image-browser-service p-2">{{ screenshot.service }}</div>
<div class="image-browser-port p-2">{{ screenshot.host }}:{{ screenshot.port }}</div>
</div>
<img class="img-responsive img-thumbnail" data-path='/media/original/{{screenshot.hash|get_screenshot_path(screenshot.service)}}' data-ip='{{host.ip}}' data-scan_id='{{host.scan_id}}' src='/media/thumbs/{{screenshot.thumb_hash|get_screenshot_path(screenshot.service)}}' alt="{{ screenshot.host }} - {{ screenshot.port }}{%if screenshot.host != host.ip %} ({{host.ip}}){%endif%}">
</div>
{% endif %}
{% endfor %}
</div><!--meta column-->
{% if current_user.result_format == 0 or not current_user.result_format %}
<div class="col-xs-12 col-sm-8 col-md-9">
{% for port in host.ports %}
{% set portloop = loop %}
{% include 'host/versions/0.6.11/_port-info.html' %}
{% endfor %}
</div><!--data column-->
{% elif current_user.result_format == 1 %}
<div class="col-xs-12 col-sm-8 col-md-9">
<pre class="nmap_data px-2 py-2 mt-2">{{ host.nmap_data }}</pre>
</div>
{% endif %}
</div><!-- end host row -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{% if host.is_up and host.port_count == 0 %}
<i class="fas fa-circle text-warning" title="No ports open"></i>
{% elif not host.is_up and host.timed_out %}
<i class="fas fa-circle text-warning" title="Scan timed out"></i>
{% elif not host.is_up %}
<i class="fas fa-circle text-danger" title="Host down"></i>
{% elif host.is_up and host.port_count > 0 %}
<i class="fas fa-circle text-success" title="{{ host.port_count }} ports open"></i>
{% endif %}
11 changes: 11 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/_imagemodal.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<div class="modal fade" id="imagemodal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h3 class="imagetitle">Placeholder Title</h3>
<img src="/static/img/placeholder.png" alt="Placeholder Alt" class="imagepreview" style="width: 100%;" >
</div>
</div>
</div>
</div>
52 changes: 52 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/_port-info.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<div class="row py-3{% if not portloop.last %} port-row{% endif %}">
<div class="col-xs-6 col-sm-2 port-summary">
<div class="port-num-proto d-block">
<div class="port-number">
{{ port.port }}
</div>
<div class="port-protocol">
{{ port.protocol }}
</div>
<div class="clearfix"></div>
</div>
<div class="port-service">
{{ port.service.name }}
</div>
{% if 'http' in port.service.name %}
<div class="port-link">
<a class="d-block" target="_blank" rel="noopener noreferrer" href="{% if port.service.tunnel == 'ssl' %}https://{% else %}http://{% endif %}{{ host.ip }}{% if port.port not in [80,443] %}:{{ port.port }}{% endif %}"><i class="fas fa-external-link-alt"></i></a>
</div>
{% endif %}
</div><!--end port-summary-->

<div class="col-xs-12 col-sm-10 port-details">
{% if port.service.product or port.service.version or port.service.extrainfo %}
<h5 class="service-header">{{ port.service.product }}{% if port.service.version %}<small class="text-muted service-version pl-2">{{ port.service.version }}</small>{% endif %}{% if port.service.extrainfo %}<small class="text-muted service-extrainfo pl-2">{{ port.service.extrainfo }}</small>{% endif %}</h5>
{% endif %}
{% if port.banner %}
<div class="row port-banner">
<div class="col">
<p><small class="text-muted">{{ port.banner }}</small></p>
</div>
</div>
{% endif %}
{% if port.scripts %}
{% for script in port.scripts %}
{% if script.output.rstrip() != "" %}
<div class="row script-header">
<div class="col">
<div class="script-container" id="{{ port.protocol }}-{{ port.port }}-{{ script.id }}-{{ host.scan_id }}">
<h5 class="text-muted script-id">{{ script.id }}</h5>
</div>
</div>
</div>
<div class="row script-data">
<div class="col">
<pre class="script-output pl-2 pt-2">{{ script.output }}</pre>
</div>
</div>
{% endif %}
{% endfor %}
{% endif %} <!--end scripts-->
</div><!--end port-details-->
</div><!--end port-->
20 changes: 20 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/history.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{% extends "base.html" %}
{% set title = ip ~ " | History | Page " ~ page %}
{% set active_page = "history" %}
{% set pagetype = 'multi' %}
{% block content %}
{% include 'host/versions/0.6.11/_header.html' %}
<div class="host-rows">
{% for host in hosts %}
{% include 'host/versions/0.6.11/_host-row-history.html' %}
{% endfor %}
</div>
{% include 'host/versions/0.6.11/_imagemodal.html' %}
{% if numresults > current_user.results_per_page %}
<div class="row">
<div class="col text-center my-2">
{% include 'includes/pagination.html' %}
</div>
</div>
{% endif %}
{% endblock %}
49 changes: 49 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/screenshots.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{% extends "base.html" %}
{% set title = ip ~ " | Screenshots" %}
{% set active_page = "screenshots" %}
{% block content %}
{% include 'host/versions/0.6.11/_header.html' %}
{% include 'host/versions/0.6.11/_imagemodal.html' %}
{% if numresults > current_user.results_per_page %}
<div class="row">
<div class="col text-center my-2">
{% include 'includes/pagination.html' %}
</div>
</div>
{% endif %}
{% for entry in historical_screenshots %}
<div class="row screenshot-header-row mt-2">
<h5 class="border-bottom">
<a href="{{url_for('host.host_historical_result', ip=ip, scan_id=entry.scan_id)}}"><time datetime={{ entry.ctime }} title="{{ entry.ctime|ctime(human=True) }}">{{ entry.ctime | ctime }}</time></a>
</h5>
</div>
<div class="row image-row">
{% for screenshot in entry.screenshots %}
{% if screenshot.hash %}
<div class="col-xs-12 col-sm-3">
<div class="image-browser">
<div class="thumbnail-hover d-flex flex-column justify-content-between">
<div class="image-browser-service p-2">{{ screenshot.service }}</div>
<div class="image-browser-port p-2">{{ screenshot.host }}:{{ screenshot.port }}</div>
</div>
<img class="img-responsive img-thumbnail" data-path='/media/original/{{screenshot.hash|get_screenshot_path(screenshot.service)}}' data-ip='{{ip}}' data-scan_id='{{entry.scan_id}}' src='/media/thumbs/{{screenshot.thumb_hash|get_screenshot_path(screenshot.service)}}' alt="{{ screenshot.host }} - {{ screenshot.port }}{%if screenshot.host != ip %} ({{ip}}){%endif%}">
</div>
</div>
{% endif %}
{% if screenshot.path %}
<div class="col-xs-12 col-sm-3">
<strong class="mt-2">{{ screenshot.service }}</strong>
<div class="expand-img"><img class="img-responsive img-thumbnail" data-path='/media/{{screenshot.path}}' src='/media/{{screenshot.thumb}}' alt="{{ entry.ctime|ctime }} - {{ screenshot.service }}"></div>
</div>
{% endif %}
{% endfor %}
</div>
{% endfor %}
{% if numresults > current_user.results_per_page %}
<div class="row">
<div class="col text-center my-2">
{% include 'includes/pagination.html' %}
</div>
</div>
{% endif %}
{% endblock %}
9 changes: 9 additions & 0 deletions natlas-server/app/templates/host/versions/0.6.11/summary.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{% extends "base.html" %}
{% set title = ip ~ " | Summary" %}
{% set active_page = "summary" %}
{% set pagetype = 'single' %}
{% block content %}
{% include 'host/versions/0.6.11/_header.html' %}
{% include 'host/versions/0.6.11/_host-row.html' %}
{% include 'host/versions/0.6.11/_imagemodal.html' %}
{% endblock %}
2 changes: 1 addition & 1 deletion natlas-server/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def casted_value(expected_type, value):
class Config(object):

# Current Version
NATLAS_VERSION = "0.6.10"
NATLAS_VERSION = "0.6.11"

BASEDIR = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(BASEDIR, ".env"))
Expand Down

0 comments on commit e7f2dbf

Please sign in to comment.