secator 0.8.2a0__py3-none-any.whl → 0.9.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of secator might be problematic. Click here for more details.
- secator/celery.py +7 -6
- secator/cli.py +17 -15
- secator/config.py +6 -0
- secator/installer.py +6 -0
- secator/output_types/error.py +5 -1
- secator/rich.py +1 -1
- secator/runners/command.py +6 -4
- secator/tasks/bbot.py +13 -5
- secator/tasks/httpx.py +3 -0
- secator/tasks/naabu.py +1 -1
- secator/tasks/wpscan.py +2 -0
- secator/utils.py +1 -1
- {secator-0.8.2a0.dist-info → secator-0.9.1.dist-info}/METADATA +16 -13
- {secator-0.8.2a0.dist-info → secator-0.9.1.dist-info}/RECORD +17 -17
- {secator-0.8.2a0.dist-info → secator-0.9.1.dist-info}/WHEEL +0 -0
- {secator-0.8.2a0.dist-info → secator-0.9.1.dist-info}/entry_points.txt +0 -0
- {secator-0.8.2a0.dist-info → secator-0.9.1.dist-info}/licenses/LICENSE +0 -0
secator/celery.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import gc
|
|
2
|
+
import json
|
|
2
3
|
import logging
|
|
3
4
|
import sys
|
|
4
5
|
import uuid
|
|
@@ -49,7 +50,7 @@ app.conf.update({
|
|
|
49
50
|
|
|
50
51
|
# Broker config
|
|
51
52
|
'broker_url': CONFIG.celery.broker_url,
|
|
52
|
-
'broker_transport_options': {
|
|
53
|
+
'broker_transport_options': json.loads(CONFIG.celery.broker_transport_options) if CONFIG.celery.broker_transport_options else { # noqa: E501
|
|
53
54
|
'data_folder_in': CONFIG.dirs.celery_data,
|
|
54
55
|
'data_folder_out': CONFIG.dirs.celery_data,
|
|
55
56
|
'control_folder': CONFIG.dirs.celery_data,
|
|
@@ -62,17 +63,17 @@ app.conf.update({
|
|
|
62
63
|
# Result backend config
|
|
63
64
|
'result_backend': CONFIG.celery.result_backend,
|
|
64
65
|
'result_expires': CONFIG.celery.result_expires,
|
|
66
|
+
'result_backend_transport_options': json.loads(CONFIG.celery.result_backend_transport_options) if CONFIG.celery.result_backend_transport_options else {}, # noqa: E501
|
|
65
67
|
'result_extended': True,
|
|
66
68
|
'result_backend_thread_safe': True,
|
|
67
69
|
'result_serializer': 'pickle',
|
|
68
|
-
# 'result_backend_transport_options': {'master_name': 'mymaster'}, # for Redis HA backend
|
|
69
70
|
|
|
70
71
|
# Task config
|
|
71
|
-
'task_acks_late':
|
|
72
|
+
'task_acks_late': CONFIG.celery.task_acks_late,
|
|
72
73
|
'task_compression': 'gzip',
|
|
73
74
|
'task_create_missing_queues': True,
|
|
74
75
|
'task_eager_propagates': False,
|
|
75
|
-
'task_reject_on_worker_lost':
|
|
76
|
+
'task_reject_on_worker_lost': CONFIG.celery.task_reject_on_worker_lost,
|
|
76
77
|
'task_routes': {
|
|
77
78
|
'secator.celery.run_workflow': {'queue': 'celery'},
|
|
78
79
|
'secator.celery.run_scan': {'queue': 'celery'},
|
|
@@ -85,10 +86,10 @@ app.conf.update({
|
|
|
85
86
|
|
|
86
87
|
# Worker config
|
|
87
88
|
# 'worker_direct': True, # TODO: consider enabling this to allow routing to specific workers
|
|
88
|
-
'worker_max_tasks_per_child':
|
|
89
|
+
'worker_max_tasks_per_child': CONFIG.celery.worker_max_tasks_per_child,
|
|
89
90
|
# 'worker_max_memory_per_child': 100000 # TODO: consider enabling this
|
|
90
91
|
'worker_pool_restarts': True,
|
|
91
|
-
'worker_prefetch_multiplier':
|
|
92
|
+
'worker_prefetch_multiplier': CONFIG.celery.worker_prefetch_multiplier,
|
|
92
93
|
# 'worker_send_task_events': True, # TODO: consider enabling this for Flower monitoring
|
|
93
94
|
})
|
|
94
95
|
app.autodiscover_tasks(['secator.hooks.mongodb'], related_name=None)
|
secator/cli.py
CHANGED
|
@@ -20,7 +20,7 @@ from secator.config import CONFIG, ROOT_FOLDER, Config, default_config, config_p
|
|
|
20
20
|
from secator.decorators import OrderedGroup, register_runner
|
|
21
21
|
from secator.definitions import ADDONS_ENABLED, ASCII, DEV_PACKAGE, OPT_NOT_SUPPORTED, VERSION, STATE_COLORS
|
|
22
22
|
from secator.installer import ToolInstaller, fmt_health_table_row, get_health_table, get_version_info, get_distro_config
|
|
23
|
-
from secator.output_types import FINDING_TYPES, Info, Error
|
|
23
|
+
from secator.output_types import FINDING_TYPES, Info, Warning, Error
|
|
24
24
|
from secator.report import Report
|
|
25
25
|
from secator.rich import console
|
|
26
26
|
from secator.runners import Command, Runner
|
|
@@ -1047,7 +1047,8 @@ def install_ruby():
|
|
|
1047
1047
|
|
|
1048
1048
|
@install.command('tools')
|
|
1049
1049
|
@click.argument('cmds', required=False)
|
|
1050
|
-
|
|
1050
|
+
@click.option('--cleanup', is_flag=True, default=False)
|
|
1051
|
+
def install_tools(cmds, cleanup):
|
|
1051
1052
|
"""Install supported tools."""
|
|
1052
1053
|
if CONFIG.offline_mode:
|
|
1053
1054
|
console.print(Error(message='Cannot run this command in offline mode.'))
|
|
@@ -1069,18 +1070,19 @@ def install_tools(cmds):
|
|
|
1069
1070
|
if not status.is_ok():
|
|
1070
1071
|
return_code = 1
|
|
1071
1072
|
console.print()
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1073
|
+
if cleanup:
|
|
1074
|
+
distro = get_distro_config()
|
|
1075
|
+
cleanup_cmds = [
|
|
1076
|
+
'go clean -cache',
|
|
1077
|
+
'go clean -modcache',
|
|
1078
|
+
'pip cache purge',
|
|
1079
|
+
'gem cleanup --user-install',
|
|
1080
|
+
'gem clean --user-install',
|
|
1081
|
+
]
|
|
1082
|
+
if distro.pm_finalizer:
|
|
1083
|
+
cleanup_cmds.append(f'sudo {distro.pm_finalizer}')
|
|
1084
|
+
cmd = ' && '.join(cleanup_cmds)
|
|
1085
|
+
Command.execute(cmd, cls_attributes={'shell': True}, quiet=False)
|
|
1084
1086
|
sys.exit(return_code)
|
|
1085
1087
|
|
|
1086
1088
|
|
|
@@ -1097,7 +1099,7 @@ def update(all):
|
|
|
1097
1099
|
sys.exit(1)
|
|
1098
1100
|
|
|
1099
1101
|
# Check current and latest version
|
|
1100
|
-
info = get_version_info('secator',
|
|
1102
|
+
info = get_version_info('secator', '-version', 'freelabz/secator', version=VERSION)
|
|
1101
1103
|
latest_version = info['latest_version']
|
|
1102
1104
|
do_update = True
|
|
1103
1105
|
|
secator/config.py
CHANGED
|
@@ -62,9 +62,15 @@ class Celery(StrictModel):
|
|
|
62
62
|
broker_pool_limit: int = 10
|
|
63
63
|
broker_connection_timeout: float = 4.0
|
|
64
64
|
broker_visibility_timeout: int = 3600
|
|
65
|
+
broker_transport_options: str = ""
|
|
65
66
|
override_default_logging: bool = True
|
|
66
67
|
result_backend: StrExpandHome = ''
|
|
68
|
+
result_backend_transport_options: str = ""
|
|
67
69
|
result_expires: int = 86400 # 1 day
|
|
70
|
+
task_acks_late: bool = False
|
|
71
|
+
task_reject_on_worker_lost: bool = False
|
|
72
|
+
worker_max_tasks_per_child: int = 20
|
|
73
|
+
worker_prefetch_multiplier: int = 1
|
|
68
74
|
|
|
69
75
|
|
|
70
76
|
class Cli(StrictModel):
|
secator/installer.py
CHANGED
|
@@ -66,6 +66,12 @@ class ToolInstaller:
|
|
|
66
66
|
tool_cls.install_post]):
|
|
67
67
|
return InstallerStatus.INSTALL_NOT_SUPPORTED
|
|
68
68
|
|
|
69
|
+
# Check PATH
|
|
70
|
+
path_var = os.environ.get('PATH', '')
|
|
71
|
+
if not str(CONFIG.dirs.bin) in path_var:
|
|
72
|
+
console.print(Warning(message=f'Bin directory {CONFIG.dirs.bin} not found in PATH ! Binaries installed by secator will not work')) # noqa: E501
|
|
73
|
+
console.print(Warning(message=f'Run "export PATH=$PATH:{CONFIG.dirs.bin}" to add the binaries to your PATH'))
|
|
74
|
+
|
|
69
75
|
# Install pre-required packages
|
|
70
76
|
if tool_cls.install_pre:
|
|
71
77
|
status = PackageInstaller.install(tool_cls.install_pre)
|
secator/output_types/error.py
CHANGED
|
@@ -8,6 +8,7 @@ from secator.utils import rich_to_ansi, traceback_as_string, rich_escape as _s
|
|
|
8
8
|
class Error(OutputType):
|
|
9
9
|
message: str
|
|
10
10
|
traceback: str = field(default='', compare=False)
|
|
11
|
+
traceback_title: str = field(default='', compare=False)
|
|
11
12
|
_source: str = field(default='', repr=True)
|
|
12
13
|
_type: str = field(default='error', repr=True)
|
|
13
14
|
_timestamp: int = field(default_factory=lambda: time.time(), compare=False)
|
|
@@ -31,6 +32,9 @@ class Error(OutputType):
|
|
|
31
32
|
def __repr__(self):
|
|
32
33
|
s = rf"\[[bold red]ERR[/]] {_s(self.message)}"
|
|
33
34
|
if self.traceback:
|
|
34
|
-
|
|
35
|
+
s += ':'
|
|
36
|
+
traceback_pretty = ' ' + _s(self.traceback).replace('\n', '\n ')
|
|
37
|
+
if self.traceback_title:
|
|
38
|
+
traceback_pretty = f' {self.traceback_title}:\n{traceback_pretty}'
|
|
35
39
|
s += f'\n[dim]{_s(traceback_pretty)}[/]'
|
|
36
40
|
return rich_to_ansi(s)
|
secator/rich.py
CHANGED
|
@@ -4,7 +4,7 @@ import yaml
|
|
|
4
4
|
from rich.console import Console
|
|
5
5
|
from rich.table import Table
|
|
6
6
|
|
|
7
|
-
console = Console(stderr=True
|
|
7
|
+
console = Console(stderr=True)
|
|
8
8
|
console_stdout = Console(record=True)
|
|
9
9
|
# handler = RichHandler(rich_tracebacks=True) # TODO: add logging handler
|
|
10
10
|
|
secator/runners/command.py
CHANGED
|
@@ -301,7 +301,7 @@ class Command(Runner):
|
|
|
301
301
|
proxy = CONFIG.http.socks5_proxy
|
|
302
302
|
elif self.proxy in ['auto', 'http'] and self.proxy_http and CONFIG.http.http_proxy:
|
|
303
303
|
proxy = CONFIG.http.http_proxy
|
|
304
|
-
elif self.proxy == 'random':
|
|
304
|
+
elif self.proxy == 'random' and self.proxy_http:
|
|
305
305
|
proxy = FreeProxy(timeout=CONFIG.http.freeproxy_timeout, rand=True, anonym=True).get()
|
|
306
306
|
elif self.proxy.startswith(('http://', 'socks5://')):
|
|
307
307
|
proxy = self.proxy
|
|
@@ -344,7 +344,7 @@ class Command(Runner):
|
|
|
344
344
|
|
|
345
345
|
# Abort if no inputs
|
|
346
346
|
if len(self.inputs) == 0 and self.skip_if_no_inputs:
|
|
347
|
-
yield
|
|
347
|
+
yield Warning(message=f'{self.unique_name} skipped (no inputs)', _source=self.unique_name, _uuid=str(uuid.uuid4()))
|
|
348
348
|
return
|
|
349
349
|
|
|
350
350
|
# Yield targets
|
|
@@ -507,7 +507,7 @@ class Command(Runner):
|
|
|
507
507
|
if self.config.name in str(exc):
|
|
508
508
|
message = 'Executable not found.'
|
|
509
509
|
if self.install_cmd:
|
|
510
|
-
message += f' Install it with
|
|
510
|
+
message += f' Install it with "secator install tools {self.config.name}".'
|
|
511
511
|
error = Error(message=message)
|
|
512
512
|
else:
|
|
513
513
|
error = Error.from_exception(exc)
|
|
@@ -652,12 +652,14 @@ class Command(Runner):
|
|
|
652
652
|
)
|
|
653
653
|
|
|
654
654
|
elif self.return_code != 0:
|
|
655
|
-
error = f'Command failed with return code {self.return_code}
|
|
655
|
+
error = f'Command failed with return code {self.return_code}'
|
|
656
656
|
last_lines = self.output.split('\n')
|
|
657
657
|
last_lines = last_lines[max(0, len(last_lines) - 2):]
|
|
658
|
+
last_lines = [line for line in last_lines if line != '']
|
|
658
659
|
yield Error(
|
|
659
660
|
message=error,
|
|
660
661
|
traceback='\n'.join(last_lines),
|
|
662
|
+
traceback_title='Last stdout lines',
|
|
661
663
|
_source=self.unique_name,
|
|
662
664
|
_uuid=str(uuid.uuid4())
|
|
663
665
|
)
|
secator/tasks/bbot.py
CHANGED
|
@@ -4,7 +4,7 @@ from secator.config import CONFIG
|
|
|
4
4
|
from secator.decorators import task
|
|
5
5
|
from secator.runners import Command
|
|
6
6
|
from secator.serializers import RegexSerializer
|
|
7
|
-
from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Error
|
|
7
|
+
from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Info, Error
|
|
8
8
|
from secator.serializers import JSONSerializer
|
|
9
9
|
|
|
10
10
|
|
|
@@ -194,7 +194,7 @@ class bbot(Command):
|
|
|
194
194
|
'_source': lambda x: 'bbot-' + x['module']
|
|
195
195
|
},
|
|
196
196
|
Port: {
|
|
197
|
-
'port': lambda x: int(x['data']['port']) if 'port' in x['data'] else x['data'].split(':')[-1],
|
|
197
|
+
'port': lambda x: int(x['data']['port']) if 'port' in x['data'] else int(x['data'].split(':')[-1]),
|
|
198
198
|
'ip': lambda x: [_ for _ in x['resolved_hosts'] if not _.startswith('::')][0],
|
|
199
199
|
'state': lambda x: 'OPEN',
|
|
200
200
|
'service_name': lambda x: x['data']['protocol'] if 'protocol' in x['data'] else '',
|
|
@@ -219,7 +219,8 @@ class bbot(Command):
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
install_pre = {
|
|
222
|
-
'
|
|
222
|
+
'apk': ['python3-dev', 'linux-headers', 'musl-dev', 'gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium'],
|
|
223
|
+
'*': ['gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium']
|
|
223
224
|
}
|
|
224
225
|
install_cmd = 'pipx install bbot && pipx upgrade bbot'
|
|
225
226
|
install_post = {
|
|
@@ -234,6 +235,11 @@ class bbot(Command):
|
|
|
234
235
|
yield item
|
|
235
236
|
return
|
|
236
237
|
|
|
238
|
+
# Set scan name and base path for output
|
|
239
|
+
if _type == 'SCAN':
|
|
240
|
+
self.scan_config = item['data']
|
|
241
|
+
return
|
|
242
|
+
|
|
237
243
|
if _type not in BBOT_MAP_TYPES:
|
|
238
244
|
self._print(f'[bold orange3]Found unsupported bbot type: {_type}.[/] [bold green]Skipping.[/]', rich=True)
|
|
239
245
|
return
|
|
@@ -278,9 +284,11 @@ class bbot(Command):
|
|
|
278
284
|
|
|
279
285
|
# If a screenshot was saved, move it to secator output folder
|
|
280
286
|
if item['type'] == 'WEBSCREENSHOT':
|
|
281
|
-
|
|
282
|
-
|
|
287
|
+
from pathlib import Path
|
|
288
|
+
path = Path.home() / '.bbot' / 'scans' / self.scan_config['name'] / item['data']['path']
|
|
289
|
+
name = path.as_posix().split('/')[-1]
|
|
283
290
|
secator_path = f'{self.reports_folder}/.outputs/{name}'
|
|
291
|
+
yield Info(f'Copying screenshot {path} to {secator_path}')
|
|
284
292
|
shutil.copy(path, secator_path)
|
|
285
293
|
item['data']['path'] = secator_path
|
|
286
294
|
|
secator/tasks/httpx.py
CHANGED
|
@@ -65,6 +65,9 @@ class httpx(Http):
|
|
|
65
65
|
}
|
|
66
66
|
item_loaders = [JSONSerializer()]
|
|
67
67
|
output_types = [Url, Subdomain]
|
|
68
|
+
install_pre = {
|
|
69
|
+
'apk': ['chromium']
|
|
70
|
+
}
|
|
68
71
|
install_cmd = 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest'
|
|
69
72
|
install_github_handle = 'projectdiscovery/httpx'
|
|
70
73
|
proxychains = False
|
secator/tasks/naabu.py
CHANGED
|
@@ -34,7 +34,7 @@ class naabu(ReconPort):
|
|
|
34
34
|
# 'health_check': 'hc'
|
|
35
35
|
}
|
|
36
36
|
opt_value_map = {
|
|
37
|
-
TIMEOUT: lambda x: x*1000 if x and x > 0 else None, # convert to milliseconds
|
|
37
|
+
TIMEOUT: lambda x: int(x*1000) if x and x > 0 else None, # convert to milliseconds
|
|
38
38
|
RETRIES: lambda x: 1 if x == 0 else x,
|
|
39
39
|
PROXY: lambda x: x.replace('socks5://', '')
|
|
40
40
|
}
|
secator/tasks/wpscan.py
CHANGED
|
@@ -142,6 +142,7 @@ class wpscan(VulnHttp):
|
|
|
142
142
|
yield Vulnerability(
|
|
143
143
|
matched_at=target,
|
|
144
144
|
name=f'Wordpress theme - {slug} {number} outdated',
|
|
145
|
+
confidence='high',
|
|
145
146
|
severity='info'
|
|
146
147
|
)
|
|
147
148
|
|
|
@@ -171,5 +172,6 @@ class wpscan(VulnHttp):
|
|
|
171
172
|
yield Vulnerability(
|
|
172
173
|
matched_at=target,
|
|
173
174
|
name=f'Wordpress plugin - {slug} {number} outdated',
|
|
175
|
+
confidence='high',
|
|
174
176
|
severity='info'
|
|
175
177
|
)
|
secator/utils.py
CHANGED
|
@@ -373,7 +373,7 @@ def rich_to_ansi(text):
|
|
|
373
373
|
str: Converted text (ANSI).
|
|
374
374
|
"""
|
|
375
375
|
from rich.console import Console
|
|
376
|
-
tmp_console = Console(file=None, highlight=False
|
|
376
|
+
tmp_console = Console(file=None, highlight=False)
|
|
377
377
|
with tmp_console.capture() as capture:
|
|
378
378
|
tmp_console.print(text, end='', soft_wrap=True)
|
|
379
379
|
return capture.get()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: secator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.1
|
|
4
4
|
Summary: The pentester's swiss knife.
|
|
5
5
|
Project-URL: Homepage, https://github.com/freelabz/secator
|
|
6
6
|
Project-URL: Issues, https://github.com/freelabz/secator/issues
|
|
@@ -66,7 +66,6 @@ Requires-Dist: pyinstrument<5; extra == 'trace'
|
|
|
66
66
|
Provides-Extra: worker
|
|
67
67
|
Requires-Dist: eventlet<1; extra == 'worker'
|
|
68
68
|
Requires-Dist: flower<3; extra == 'worker'
|
|
69
|
-
Requires-Dist: gevent<25; extra == 'worker'
|
|
70
69
|
Description-Content-Type: text/markdown
|
|
71
70
|
|
|
72
71
|
<h1 align="center">
|
|
@@ -165,6 +164,7 @@ check that the tool complies with our selection criterias before doing so. If it
|
|
|
165
164
|
```sh
|
|
166
165
|
pipx install secator
|
|
167
166
|
```
|
|
167
|
+
***Note:** Make sure to have [pipx](https://pipx.pypa.io/stable/installation/) installed.*
|
|
168
168
|
|
|
169
169
|
</details>
|
|
170
170
|
|
|
@@ -178,7 +178,7 @@ pip install secator
|
|
|
178
178
|
</details>
|
|
179
179
|
|
|
180
180
|
<details>
|
|
181
|
-
<summary>Bash</summary>
|
|
181
|
+
<summary>Bash (uses apt)</summary>
|
|
182
182
|
|
|
183
183
|
```sh
|
|
184
184
|
wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
|
|
@@ -295,12 +295,23 @@ secator install addons worker
|
|
|
295
295
|
|
|
296
296
|
|
|
297
297
|
<details>
|
|
298
|
-
<summary>
|
|
298
|
+
<summary>gdrive</summary>
|
|
299
299
|
|
|
300
300
|
Add support for Google Drive exporter (`-o gdrive`).
|
|
301
301
|
|
|
302
302
|
```sh
|
|
303
|
-
secator install addons
|
|
303
|
+
secator install addons gdrive
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
</details>
|
|
307
|
+
|
|
308
|
+
<details>
|
|
309
|
+
<summary>gcs</summary>
|
|
310
|
+
|
|
311
|
+
Add support for Google Cloud Storage driver (`-driver gcs`).
|
|
312
|
+
|
|
313
|
+
```sh
|
|
314
|
+
secator install addons gcs
|
|
304
315
|
```
|
|
305
316
|
|
|
306
317
|
</details>
|
|
@@ -360,14 +371,6 @@ secator install addons build
|
|
|
360
371
|
</details>
|
|
361
372
|
|
|
362
373
|
|
|
363
|
-
### Install CVEs
|
|
364
|
-
|
|
365
|
-
`secator` makes remote API calls to https://cve.circl.lu/ to get in-depth information about the CVEs it encounters.
|
|
366
|
-
We provide a subcommand to download all known CVEs locally so that future lookups are made from disk instead:
|
|
367
|
-
```sh
|
|
368
|
-
secator install cves
|
|
369
|
-
```
|
|
370
|
-
|
|
371
374
|
### Checking installation health
|
|
372
375
|
|
|
373
376
|
To figure out which languages or tools are installed on your system (along with their version):
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
secator/.gitignore,sha256=da8MUc3hdb6Mo0WjZu2upn5uZMbXcBGvhdhTQ1L89HI,3093
|
|
2
2
|
secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
secator/celery.py,sha256=
|
|
3
|
+
secator/celery.py,sha256=oXpw480s5aN9NzAkOKumjr1Er58ere-vzcG9eCffH9I,9915
|
|
4
4
|
secator/celery_utils.py,sha256=iIuCn_3YkPXCtpnbaYqpppU2TARzSDyTIYHkrRyt54s,7725
|
|
5
|
-
secator/cli.py,sha256=
|
|
6
|
-
secator/config.py,sha256=
|
|
5
|
+
secator/cli.py,sha256=SX_SNUA6LLdG7ICpUs5iSiNYOp_DkQLGE0uuB_KSrXE,43879
|
|
6
|
+
secator/config.py,sha256=L-4b-PAM_-LyhnyocM1Slvj7ocYNv7kIrvlL8fU46yw,19494
|
|
7
7
|
secator/decorators.py,sha256=tjH7WodxJEBIf2CCbegmvOe8H9DKSFh4iPLEhDNGPCA,13784
|
|
8
8
|
secator/definitions.py,sha256=gFtLT9fjNtX_1qkiCjNfQyCvYq07IhScsQzX4o20_SE,3084
|
|
9
|
-
secator/installer.py,sha256=
|
|
9
|
+
secator/installer.py,sha256=Q5qmGbxGmuhysEA9YovTpy-YY2TxxFskhrzSX44c42E,17971
|
|
10
10
|
secator/report.py,sha256=qJkEdCFttDBXIwUNUzZqFU_sG8l0PvyTSTogZVBv1Rs,3628
|
|
11
|
-
secator/rich.py,sha256=
|
|
11
|
+
secator/rich.py,sha256=owmuLcTTUt8xYBTE3_SqWTkPeAomcU_8bPdW_V-U8VM,3264
|
|
12
12
|
secator/template.py,sha256=Qy4RjcmlifeSA8CleWUBb9fluxuYHzxgEH0H-8qs8R4,4323
|
|
13
13
|
secator/thread.py,sha256=rgRgEtcMgs2wyfLWVlCTUCLWeg6jsMo5iKpyyrON5rY,655
|
|
14
|
-
secator/utils.py,sha256=
|
|
14
|
+
secator/utils.py,sha256=HMw0Q4omL-a5VcbvUhATC30oOSEKxTVLANgVRfWKnkc,21211
|
|
15
15
|
secator/utils_test.py,sha256=ArHwkWW89t0IDqxO4HjJWd_tm7tp1illP4pu3nLq5yo,6559
|
|
16
16
|
secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -51,7 +51,7 @@ secator/hooks/gcs.py,sha256=MIhntyWYz9BZdTXhWl5JznaczSq1_7fl3TVqPufuTSo,1490
|
|
|
51
51
|
secator/hooks/mongodb.py,sha256=HyjtpJSoxvSZ6aG8uBf1RFLNKGXCBDQL5eEh4xzDonA,7545
|
|
52
52
|
secator/output_types/__init__.py,sha256=LxCW0K1f2vdgUapc4pIEsUpBfC0TQVvqo7T57rGuZGk,1159
|
|
53
53
|
secator/output_types/_base.py,sha256=OgS6ICt66TzPsqo1JZwRIIwbng2HRX1i_u5qbUECgNk,2820
|
|
54
|
-
secator/output_types/error.py,sha256=
|
|
54
|
+
secator/output_types/error.py,sha256=QjiJ5RoN3-utHqAyvgL2jlmZp7-u7emgUQpvLpYammU,1405
|
|
55
55
|
secator/output_types/exploit.py,sha256=-BKTqPBg94rVgjw8YSmcYuBCI2x-73WwMd9ITP9qr3Y,1750
|
|
56
56
|
secator/output_types/info.py,sha256=R8xeiD3ocNOsvkJPhrQgsx6q-Ea1G0eTAqyuh5JrAR0,843
|
|
57
57
|
secator/output_types/ip.py,sha256=CyE3qkp55Kmj5YRl0CZGS4XrHX8N5apWrLN3OMzaK0U,1127
|
|
@@ -70,7 +70,7 @@ secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,2
|
|
|
70
70
|
secator/runners/_base.py,sha256=tcTsL35dAHsIMfgcclTtvDk2kQM4Hhu-8IZTyHJgqTs,28973
|
|
71
71
|
secator/runners/_helpers.py,sha256=FGogmmdHfCWmIyq7wRprwU1oOSxesOu3Y0N4GyAgiGw,2000
|
|
72
72
|
secator/runners/celery.py,sha256=bqvDTTdoHiGRCt0FRvlgFHQ_nsjKMP5P0PzGbwfCj_0,425
|
|
73
|
-
secator/runners/command.py,sha256=
|
|
73
|
+
secator/runners/command.py,sha256=fk5JzdrZ_2T2X8BqU7d0MeVfjmteUYtaRM9MJE5HHPw,25081
|
|
74
74
|
secator/runners/scan.py,sha256=tuPuqwL6fIS4UbCoy5WPKthYWm_LL-vCPRD2qK58HZE,1232
|
|
75
75
|
secator/runners/task.py,sha256=JXlwo3DyQnu69RbQ8xvJnXu6y0rDYN-3iT4q4gy39tI,2004
|
|
76
76
|
secator/runners/workflow.py,sha256=vry_MZFx6dRrorTrdsUqvhMZGOLPCdzpxkvN6fnt62w,3783
|
|
@@ -81,7 +81,7 @@ secator/serializers/json.py,sha256=UJwAymRzjF-yBKOgz1MTOyBhQcdQg7fOKRXgmHIu8fo,4
|
|
|
81
81
|
secator/serializers/regex.py,sha256=fh-fE0RGvKSGKByFtwmKsWriRpZR9PXZQsY9JybHBWI,489
|
|
82
82
|
secator/tasks/__init__.py,sha256=yRIZf9E47aS7o6rpgAJLgJUpX2cug1ofZeq8QsxgyjU,192
|
|
83
83
|
secator/tasks/_categories.py,sha256=IWyBprIUBZxflh7QfvK27Ix18M_bnquzlERqfTZohVs,13821
|
|
84
|
-
secator/tasks/bbot.py,sha256=
|
|
84
|
+
secator/tasks/bbot.py,sha256=pvA435toxYBxP-Nr6DB70fe38FGl9tKg2S9dDWUW4Vo,7527
|
|
85
85
|
secator/tasks/bup.py,sha256=4PM123Km3uOkMUwfdLY6J7pyCqIsbwMvOLYx7XYCAZc,3030
|
|
86
86
|
secator/tasks/cariddi.py,sha256=7S92pp7tvihoz9fAiMpmcfPzEvxEJKMlk-IqAvVDISA,2906
|
|
87
87
|
secator/tasks/dalfox.py,sha256=hHQgYuZ7AGQCQtcN8hSM9uPnzeq1DSr_cpOxnn7-660,1850
|
|
@@ -96,20 +96,20 @@ secator/tasks/gf.py,sha256=y8Fc0sRLGqNuwUjTBgLk3HEw3ZOnh09nB_GTufGErNA,962
|
|
|
96
96
|
secator/tasks/gospider.py,sha256=KGINm9kxrq546xi1yN8_OwNCNDxSW9vVRYDAlvNajBs,2303
|
|
97
97
|
secator/tasks/grype.py,sha256=xoOuldnHCrS0O1Y4IzjbSVvoX5eX-fLSZ74THdRC2so,2447
|
|
98
98
|
secator/tasks/h8mail.py,sha256=wNukV-aB-bXPZNq7WL8n1nFgH5b5tGh6vOF80Yna33I,1934
|
|
99
|
-
secator/tasks/httpx.py,sha256=
|
|
99
|
+
secator/tasks/httpx.py,sha256=SyJFjMwl8Z9BpG60wk27-X5nI13cp5BJumYWjb0Sefc,5896
|
|
100
100
|
secator/tasks/katana.py,sha256=A0nnjKKT-A34LBtEuG25lWh5Ria4nwgo4Ti31403E-Q,5256
|
|
101
101
|
secator/tasks/maigret.py,sha256=6anhBzB4lEM90Lk23cAD_ku7I_ghTpj0W0i3h6HARD8,2088
|
|
102
102
|
secator/tasks/mapcidr.py,sha256=56ocbaDmB5_C_ns-773CgZXGOKOtkI9q9xJs2Rlfqio,990
|
|
103
103
|
secator/tasks/msfconsole.py,sha256=TXVrvzSWw9Ncv2h9QJtaEinTMbps_z0zX1PFirERVho,6430
|
|
104
|
-
secator/tasks/naabu.py,sha256=
|
|
104
|
+
secator/tasks/naabu.py,sha256=aAEkQ10ma3Log8OVj8wHY1zUWmjpVQ5pehAMQLJQEV0,2089
|
|
105
105
|
secator/tasks/nmap.py,sha256=Zu24sJHnlOf3NXLj3Ohi07-x7m-5Ajr5ULpNsUF-QT0,12546
|
|
106
106
|
secator/tasks/nuclei.py,sha256=o677F5yv3mfIlYEpKY5_W6CT2Dlt315DuFOsCjHLE5c,4270
|
|
107
107
|
secator/tasks/searchsploit.py,sha256=gvtLZbL2hzAZ07Cf0cSj2Qs0GvWK94XyHvoPFsetXu8,3321
|
|
108
108
|
secator/tasks/subfinder.py,sha256=C6W5NnXT92OUB1aSS9IYseqdI3wDMAz70TOEl8X-o3U,1213
|
|
109
|
-
secator/tasks/wpscan.py,sha256=
|
|
109
|
+
secator/tasks/wpscan.py,sha256=C8eW3vWfbSFrxm5iPzs3MgcagIfSs7u51QZiecYbT2Q,5577
|
|
110
110
|
secator/workflows/__init__.py,sha256=ivpZHiYYlj4JqlXLRmB9cmAPUGdk8QcUrCRL34hIqEA,665
|
|
111
|
-
secator-0.
|
|
112
|
-
secator-0.
|
|
113
|
-
secator-0.
|
|
114
|
-
secator-0.
|
|
115
|
-
secator-0.
|
|
111
|
+
secator-0.9.1.dist-info/METADATA,sha256=4iHzoh0Q7N665XY0GJpv3KfH6G86C0e8S6LsFEHPvIA,14723
|
|
112
|
+
secator-0.9.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
113
|
+
secator-0.9.1.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
|
|
114
|
+
secator-0.9.1.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
|
|
115
|
+
secator-0.9.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|