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 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': False,
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': False,
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': 10,
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': 1,
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
- def install_tools(cmds):
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
- distro = get_distro_config()
1073
- cleanup_cmds = [
1074
- 'go clean -cache',
1075
- 'go clean -modcache',
1076
- 'pip cache purge',
1077
- 'gem cleanup --user-install',
1078
- 'gem clean --user-install',
1079
- ]
1080
- if distro.pm_finalizer:
1081
- cleanup_cmds.append(f'sudo {distro.pm_finalizer}')
1082
- cmd = ' && '.join(cleanup_cmds)
1083
- Command.execute(cmd, cls_attributes={'shell': True}, quiet=False)
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', github_handle='freelabz/secator', version=VERSION)
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)
@@ -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
- traceback_pretty = ' ' + self.traceback.replace('\n', '\n ')
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, color_system='truecolor')
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
 
@@ -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 Info(message=f'{self.unique_name} skipped (no inputs)', _source=self.unique_name, _uuid=str(uuid.uuid4()))
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 [bold green4]secator install tools {self.config.name}[/].'
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
- '*': ['git', 'openssl', 'unzip', 'tar', 'chromium']
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
- path = item['data']['path']
282
- name = path.split('/')[-1]
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, color_system='truecolor')
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.8.2a0
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>google</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 google
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=Ry-JYJzN9F4LFHOn4IXpSFgCzpM99esKiQRJh_TkHp8,9578
3
+ secator/celery.py,sha256=oXpw480s5aN9NzAkOKumjr1Er58ere-vzcG9eCffH9I,9915
4
4
  secator/celery_utils.py,sha256=iIuCn_3YkPXCtpnbaYqpppU2TARzSDyTIYHkrRyt54s,7725
5
- secator/cli.py,sha256=rBExC1Lfzkgepwbhvad3XAlY8L_X5s_2uDw-w0kl1_0,43782
6
- secator/config.py,sha256=6wm2EErW1DuhrdKSuIEUvc2b3yBxJWyZKnocr7lIeZw,19267
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=3Ay9BTxdpOFOBxZud6bv7ozrTJi5ckZra4S0Qv0dLjo,17611
9
+ secator/installer.py,sha256=Q5qmGbxGmuhysEA9YovTpy-YY2TxxFskhrzSX44c42E,17971
10
10
  secator/report.py,sha256=qJkEdCFttDBXIwUNUzZqFU_sG8l0PvyTSTogZVBv1Rs,3628
11
- secator/rich.py,sha256=3ugCkgai7UNylQGUuOVAd7ghYWDSc73aSomrfKgKVxo,3290
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=mwRZWSoYDskleNvDBHjRIGoygK2DsBMeIdllABvD4vw,21237
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=A2m4YUAAf8z42MMew9XtM24OOZYoYKJzcfB2RWsQmlc,1231
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=w-N7weWh5FYeUNHMZAk9jT7_4x4D0KSKhJGUzm1GxBo,24972
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=EBLOsI79nRxOdqL57OKJUTY9QXKKHOeqWA3gbQsMyWA,7128
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=5oI8vK7w94nsQlKs9Ve4yZsCmogbsiB5PqGarR3eIIM,5854
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=29qFob5NOmoFC9gedG03Ogi7uc0dAXgl3azmcWlMbcI,2084
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=dF6_dw-Qezd8DmpftGc9KpgrvIk3zDdVJW4mKUa7fe0,5527
109
+ secator/tasks/wpscan.py,sha256=C8eW3vWfbSFrxm5iPzs3MgcagIfSs7u51QZiecYbT2Q,5577
110
110
  secator/workflows/__init__.py,sha256=ivpZHiYYlj4JqlXLRmB9cmAPUGdk8QcUrCRL34hIqEA,665
111
- secator-0.8.2a0.dist-info/METADATA,sha256=LrPzsi4I2g9aLRQVUco3ewBuhFrgzUjFRFcHvLHvero,14793
112
- secator-0.8.2a0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
113
- secator-0.8.2a0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
114
- secator-0.8.2a0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
115
- secator-0.8.2a0.dist-info/RECORD,,
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,,