Nettacker/nettacker/config.py

196 lines
5.5 KiB
Python

import inspect
from functools import lru_cache
from pathlib import Path
from nettacker import version
from nettacker.core.utils.common import now, generate_random_token
CWD = Path.cwd()
PACKAGE_PATH = Path(__file__).parent
@lru_cache(maxsize=128)
def version_info():
"""
version information of the framework
Returns:
an array of version and code name
"""
return version.__version__, version.__release_name__
class ConfigBase:
@classmethod
def as_dict(cls):
return {attr_name: getattr(cls, attr_name) for attr_name in cls()}
def __init__(self) -> None:
self.attributes = sorted(
(
attribute[0]
for attribute in inspect.getmembers(self)
if not attribute[0].startswith("_") and not inspect.ismethod(attribute[1])
)
)
self.idx = 0
def __iter__(self):
yield from self.attributes
# Some sensitive header fields for HTTP requests.
# Please edit this if you don't want your HTTP header to be present in the logs
sensitive_headers = {
"authorization",
"proxy-authorization",
"cookie",
"set-cookie",
"x-api-key",
"x-amz-security-token",
"x-amz-credential",
"x-amz-signature",
"x-session-id",
"x-csrf-token",
"x-auth-token",
"x-user-token",
"x-id-token",
}
class ApiConfig(ConfigBase):
"""OWASP Nettacker API Default Configuration"""
api_access_log = str(CWD / ".nettacker/data/nettacker.log")
api_access_key = generate_random_token(32)
api_client_whitelisted_ips = [] # disabled - to enable please put an array with list of ips/cidr/ranges
# [
# "127.0.0.1",
# "10.0.0.0/24",
# "192.168.1.1-192.168.1.255"
# ],
api_debug_mode = False
api_hostname = "0.0.0.0"
api_port = 5000
start_api_server = False
class DbConfig(ConfigBase):
"""
Database Config (could be modified by user)
For sqlite database:
fill the name of the DB as sqlite,
DATABASE as the name of the db user wants
Set the journal_mode (default="WAL") and
synchronous_mode (default="NORMAL"). Rest
of the fields can be left emptyAdd commentMore actions
This is the default database:
str(CWD / ".data/nettacker.db")
For mysql users:
fill the ENGINE name of the DB as mysql
NAME as the name of the database you want to create
USERNAME, PASSWORD, HOST and the PORT of the MySQL server
need to be filled respectively (default port is 3306)
For postgres users:
fill the Engine name of the DB as postgres
NAME as the name of the database user wants
USERNAME, PASSWORD, HOST and the PORT of the Postgres server
need to be filled respectively (default port is 5432)
Set ssl_mode to "require" if you need to use encrypted
databases.
"""
engine = "sqlite"
name = str(CWD / ".nettacker/data/nettacker.db")
host = ""
port = ""
username = ""
password = ""
ssl_mode = "disable"
journal_mode = "WAL"
synchronous_mode = "NORMAL"
class PathConfig:
"""
home path for the framework (could be modify by user)
Returns:
a JSON contain the working, tmp and results path
"""
data_dir = CWD / ".nettacker/data"
new_database_file = CWD / ".nettacker/data/nettacker.db"
old_database_file = CWD / ".data/nettacker.db"
graph_dir = PACKAGE_PATH / "lib/graph"
home_dir = CWD
locale_dir = PACKAGE_PATH / "locale"
logo_file = PACKAGE_PATH / "logo.txt"
module_protocols_dir = PACKAGE_PATH / "core/lib"
modules_dir = PACKAGE_PATH / "modules"
payloads_dir = PACKAGE_PATH / "lib/payloads"
release_name_file = PACKAGE_PATH / "release_name.txt"
results_dir = CWD / ".nettacker/data/results"
tmp_dir = CWD / ".nettacker/data/tmp"
web_static_dir = PACKAGE_PATH / "web/static"
user_agents_file = PACKAGE_PATH / "lib/payloads/User-Agents/web_browsers_user_agents.txt"
class DefaultSettings(ConfigBase):
"""OWASP Nettacker Default Configuration"""
excluded_modules = None
excluded_ports = None
graph_name = "d3_tree_v2_graph"
language = "en"
modules_extra_args = None
parallel_module_scan = 1
passwords = None
passwords_list = None
ping_before_scan = False
ports = None
profiles = None
report_path_filename = "{results_path}/results_{date_time}_{random_chars}.html".format(
results_path=PathConfig.results_dir,
date_time=now(format="%Y_%m_%d_%H_%M_%S"),
random_chars=generate_random_token(10),
)
retries = 1
max_retries = 3
retry_delay = 0.1
scan_ip_range = False
scan_subdomains = False
selected_modules = None
url_base_path = None
http_header = None
read_from_file = ""
set_hardware_usage = "maximum" # low, normal, high, maximum
show_all_modules = False
show_all_profiles = False
show_help_menu = False
show_version = False
skip_service_discovery = False
socks_proxy = None
targets = None
targets_list = None
thread_per_host = 100
time_sleep_between_requests = 0.0
timeout = 3.0
user_agent = "Nettacker {version_number} {version_code}".format(
version_number=version_info()[0], version_code=version_info()[1]
)
usernames = None
usernames_list = None
verbose_event = False
verbose_mode = False
scan_compare_id = None
compare_report_path_filename = ""
class Config:
api = ApiConfig()
db = DbConfig()
path = PathConfig()
settings = DefaultSettings()