secator 0.11.0__py3-none-any.whl → 0.12.0__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/cli.py CHANGED
@@ -119,7 +119,7 @@ for config in sorted(ALL_SCANS, key=lambda x: x['name']):
119
119
  @click.option('-r', '--reload', is_flag=True, help='Autoreload Celery on code changes.')
120
120
  @click.option('-Q', '--queue', type=str, default='', help='Listen to a specific queue.')
121
121
  @click.option('-P', '--pool', type=str, default='eventlet', help='Pool implementation.')
122
- @click.option('--quiet', is_flag=True, help='Quiet mode.')
122
+ @click.option('--quiet', is_flag=True, default=False, help='Quiet mode.')
123
123
  @click.option('--loglevel', type=str, default='INFO', help='Log level.')
124
124
  @click.option('--check', is_flag=True, help='Check if Celery worker is alive.')
125
125
  @click.option('--dev', is_flag=True, help='Start a worker in dev mode (celery multi).')
secator/config.py CHANGED
@@ -94,6 +94,7 @@ class Runners(StrictModel):
94
94
  skip_cve_low_confidence: bool = False
95
95
  remove_duplicates: bool = False
96
96
  show_chunk_progress: bool = False
97
+ show_command_output: bool = False
97
98
 
98
99
 
99
100
  class Security(StrictModel):
@@ -623,8 +624,8 @@ for name, dir in CONFIG.dirs.items():
623
624
  console.print('[bold green]ok.[/]')
624
625
 
625
626
  # Download wordlists and payloads
626
- download_files(CONFIG.wordlists.templates, CONFIG.dirs.wordlists, CONFIG.offline_mode, 'wordlist')
627
- download_files(CONFIG.payloads.templates, CONFIG.dirs.payloads, CONFIG.offline_mode, 'payload')
627
+ # download_files(CONFIG.wordlists.templates, CONFIG.dirs.wordlists, CONFIG.offline_mode, 'wordlist')
628
+ # download_files(CONFIG.payloads.templates, CONFIG.dirs.payloads, CONFIG.offline_mode, 'payload')
628
629
 
629
630
  # Print config
630
631
  if CONFIG.debug.component == 'config':
@@ -11,6 +11,8 @@ tasks:
11
11
  ffuf:
12
12
  description: Fuzz URL params
13
13
  wordlist: https://raw.githubusercontent.com/danielmiessler/SecLists/refs/heads/master/Discovery/Web-Content/burp-parameter-names.txt
14
+ auto_calibration: true
15
+ follow_redirect: true
14
16
  targets_:
15
17
  - type: url
16
18
  field: url
secator/decorators.py CHANGED
@@ -19,11 +19,11 @@ RUNNER_OPTS = {
19
19
  'print_stat': {'is_flag': True, 'short': 'stat', 'default': False, 'help': 'Print runtime statistics'},
20
20
  'print_format': {'default': '', 'short': 'fmt', 'help': 'Output formatting string'},
21
21
  'enable_profiler': {'is_flag': True, 'short': 'prof', 'default': False, 'help': 'Enable runner profiling'},
22
- 'show': {'is_flag': True, 'short': 'sh', 'default': False, 'help': 'Show command that will be run (tasks only)'},
23
22
  'no_process': {'is_flag': True, 'short': 'nps', 'default': False, 'help': 'Disable secator processing'},
24
23
  # 'filter': {'default': '', 'short': 'f', 'help': 'Results filter', 'short': 'of'}, # TODO add this
25
- 'quiet': {'is_flag': True, 'short': 'q', 'default': False, 'help': 'Enable quiet mode'},
24
+ 'quiet': {'is_flag': True, 'short': 'q', 'default': not CONFIG.runners.show_command_output, 'opposite': 'verbose', 'help': 'Enable quiet mode'}, # noqa: E501
26
25
  'dry_run': {'is_flag': True, 'short': 'dr', 'default': False, 'help': 'Enable dry run'},
26
+ 'show': {'is_flag': True, 'short': 'yml', 'default': False, 'help': 'Show runner yaml'},
27
27
  }
28
28
 
29
29
  RUNNER_GLOBAL_OPTS = {
@@ -163,35 +163,39 @@ def get_command_options(config):
163
163
  elif opt in RUNNER_GLOBAL_OPTS:
164
164
  prefix = 'Execution'
165
165
 
166
+ # Get opt value from YAML config
167
+ opt_conf_value = task_config_opts.get(opt)
168
+
166
169
  # Get opt conf
167
170
  conf = opt_conf.copy()
171
+ opt_is_flag = conf.get('is_flag', False)
172
+ opt_default = conf.get('default', False if opt_is_flag else None)
173
+ opt_is_required = conf.get('required', False)
168
174
  conf['show_default'] = True
169
175
  conf['prefix'] = prefix
170
- opt_default = conf.get('default', None)
171
- opt_is_flag = conf.get('is_flag', False)
172
- opt_value_in_config = task_config_opts.get(opt)
176
+ conf['default'] = opt_default
177
+ conf['reverse'] = False
173
178
 
174
- # Check if opt already defined in config
175
- if opt_value_in_config:
176
- if conf.get('required', False):
179
+ # Change CLI opt defaults if opt was overriden in YAML config
180
+ if opt_conf_value:
181
+ if opt_is_required:
177
182
  debug('OPT (skipped: opt is required and defined in config)', obj={'opt': opt}, sub=f'cli.{config.name}', verbose=True) # noqa: E501
178
183
  continue
179
184
  mapped_value = cls.opt_value_map.get(opt)
180
185
  if callable(mapped_value):
181
- opt_value_in_config = mapped_value(opt_value_in_config)
186
+ opt_conf_value = mapped_value(opt_conf_value)
182
187
  elif mapped_value:
183
- opt_value_in_config = mapped_value
184
- if opt_value_in_config != opt_default:
188
+ opt_conf_value = mapped_value
189
+
190
+ # Handle option defaults
191
+ if opt_conf_value != opt_default:
185
192
  if opt in opt_cache:
186
193
  continue
187
194
  if opt_is_flag:
188
- conf['reverse'] = True
189
- conf['default'] = not conf['default']
190
- # print(f'{opt}: change default to {opt_value_in_config}')
191
- conf['default'] = opt_value_in_config
195
+ conf['default'] = opt_default = opt_conf_value
192
196
 
193
- # If opt is a flag but the default is True, add opposite flag
194
- if opt_is_flag and opt_default is True:
197
+ # Add reverse flag
198
+ if opt_default is True:
195
199
  conf['reverse'] = True
196
200
 
197
201
  # Check if opt already processed before
@@ -205,7 +209,7 @@ def get_command_options(config):
205
209
  all_opts[opt] = conf
206
210
 
207
211
  # Debug
208
- debug_conf = OrderedDict({'opt': opt, 'config_val': opt_value_in_config or 'N/A', **conf.copy()})
212
+ debug_conf = OrderedDict({'opt': opt, 'config_val': opt_conf_value or 'N/A', **conf.copy()})
209
213
  debug('OPT', obj=debug_conf, sub=f'cli.{config.name}', verbose=True)
210
214
 
211
215
  return all_opts
@@ -236,11 +240,17 @@ def decorate_command_options(opts):
236
240
  conf.pop('process', None)
237
241
  conf.pop('requires_sudo', None)
238
242
  reverse = conf.pop('reverse', False)
243
+ opposite = conf.pop('opposite', None)
239
244
  long = f'--{opt_name}'
240
245
  short = f'-{short_opt}' if short_opt else f'-{opt_name}'
241
246
  if reverse:
242
- long += f'/--no-{opt_name}'
243
- short += f'/-n{short_opt}' if short else f'/-n{opt_name}'
247
+ if opposite:
248
+ long += f'/--{opposite}'
249
+ short += f'/-{opposite[0]}'
250
+ conf['help'] = conf['help'].replace(opt_name, f'{opt_name} / {opposite}')
251
+ else:
252
+ long += f'/--no-{opt_name}'
253
+ short += f'/-n{short_opt}' if short else f'/-n{opt_name}'
244
254
  f = click.option(long, short, **conf)(f)
245
255
  return f
246
256
  return decorator
@@ -321,9 +331,16 @@ def register_runner(cli_endpoint, config):
321
331
  worker = opts.pop('worker')
322
332
  ws = opts.pop('workspace')
323
333
  driver = opts.pop('driver', '')
334
+ quiet = opts['quiet']
335
+ dry_run = opts['dry_run']
324
336
  show = opts['show']
325
337
  context = {'workspace_name': ws}
326
338
 
339
+ # Show runner yaml
340
+ if show:
341
+ config.print()
342
+ sys.exit(0)
343
+
327
344
  # Remove options whose values are default values
328
345
  for k, v in options.items():
329
346
  opt_name = k.replace('-', '_')
@@ -364,7 +381,7 @@ def register_runner(cli_endpoint, config):
364
381
  hooks = deep_merge_dicts(*hooks)
365
382
 
366
383
  # Enable sync or not
367
- if sync or show:
384
+ if sync or dry_run:
368
385
  sync = True
369
386
  else:
370
387
  from secator.celery import is_celery_worker_alive
@@ -394,6 +411,7 @@ def register_runner(cli_endpoint, config):
394
411
  'piped_output': ctx.obj['piped_output'],
395
412
  'caller': 'cli',
396
413
  'sync': sync,
414
+ 'quiet': quiet
397
415
  })
398
416
 
399
417
  # Start runner
@@ -372,6 +372,7 @@ class Command(Runner):
372
372
 
373
373
  # Abort if dry run
374
374
  if self.dry_run:
375
+ self._print('')
375
376
  self.print_command()
376
377
  return
377
378
 
@@ -393,11 +393,11 @@ class Vuln(Command):
393
393
 
394
394
  @cache
395
395
  @staticmethod
396
- def lookup_ghsa(ghsa_id):
396
+ def lookup_cve_from_ghsa(ghsa_id):
397
397
  """Search for a GHSA on Github and and return associated CVE vulnerability data.
398
398
 
399
399
  Args:
400
- ghsa (str): CVE ID in the form GHSA-*
400
+ ghsa (str): GHSA ID in the form GHSA-*
401
401
 
402
402
  Returns:
403
403
  dict: vulnerability data.
@@ -410,7 +410,10 @@ class Vuln(Command):
410
410
  return None
411
411
  soup = BeautifulSoup(resp.text, 'lxml')
412
412
  sidebar_items = soup.find_all('div', {'class': 'discussion-sidebar-item'})
413
- cve_id = sidebar_items[2].find('div').text.strip()
413
+ cve_id = sidebar_items[3].find('div').text.strip()
414
+ if not cve_id.startswith('CVE'):
415
+ debug(f'{ghsa_id}: No CVE_ID extracted from https://github.com/advisories/{ghsa_id}', sub='cve')
416
+ return None
414
417
  vuln = Vuln.lookup_cve(cve_id)
415
418
  if vuln:
416
419
  vuln[TAGS].append('ghsa')
secator/tasks/arjun.py CHANGED
@@ -2,7 +2,8 @@ import os
2
2
  import yaml
3
3
 
4
4
  from secator.decorators import task
5
- from secator.definitions import (OUTPUT_PATH, RATE_LIMIT, THREADS, DELAY, TIMEOUT, METHOD, WORDLIST, HEADER, URL)
5
+ from secator.definitions import (OUTPUT_PATH, RATE_LIMIT, THREADS, DELAY, TIMEOUT, METHOD, WORDLIST,
6
+ HEADER, URL, FOLLOW_REDIRECT)
6
7
  from secator.output_types import Info, Url, Warning, Error
7
8
  from secator.runners import Command
8
9
  from secator.tasks._categories import OPTS
@@ -31,6 +32,7 @@ class arjun(Command):
31
32
  RATE_LIMIT: OPTS[RATE_LIMIT],
32
33
  METHOD: OPTS[METHOD],
33
34
  HEADER: OPTS[HEADER],
35
+ FOLLOW_REDIRECT: OPTS[FOLLOW_REDIRECT],
34
36
  }
35
37
  opt_key_map = {
36
38
  THREADS: 't',
@@ -44,6 +46,7 @@ class arjun(Command):
44
46
  'stable': '--stable',
45
47
  'passive': '--passive',
46
48
  'casing': '--casing',
49
+ 'follow_redirect': '--follow-redirect',
47
50
  }
48
51
  output_types = [Url]
49
52
  install_cmd = 'pipx install arjun && pipx upgrade arjun'
@@ -57,6 +60,11 @@ class arjun(Command):
57
60
 
58
61
  @staticmethod
59
62
  def on_cmd(self):
63
+ follow_redirect = self.get_opt_value(FOLLOW_REDIRECT)
64
+ self.cmd = self.cmd.replace(' --follow-redirect', '')
65
+ if not follow_redirect:
66
+ self.cmd += ' --disable-redirects'
67
+
60
68
  self.output_path = self.get_opt_value(OUTPUT_PATH)
61
69
  if not self.output_path:
62
70
  self.output_path = f'{self.reports_folder}/.outputs/{self.unique_name}.json'
secator/tasks/fping.py CHANGED
@@ -29,6 +29,7 @@ class fping(ReconIp):
29
29
  input_type = IP
30
30
  output_types = [Ip]
31
31
  install_pre = {'*': ['fping']}
32
+ ignore_return_code = True
32
33
 
33
34
  @staticmethod
34
35
  def item_loader(self, line):
secator/tasks/grype.py CHANGED
@@ -66,7 +66,7 @@ class grype(VulnCode):
66
66
  if vuln_id.startswith('GHSA'):
67
67
  data['provider'] = 'github.com'
68
68
  data['references'] = [f'https://github.com/advisories/{vuln_id}']
69
- vuln = VulnCode.lookup_ghsa(vuln_id)
69
+ vuln = VulnCode.lookup_cve_from_ghsa(vuln_id)
70
70
  if vuln:
71
71
  data.update(vuln)
72
72
  data['severity'] = data['severity'] or severity.lower()
secator/template.py CHANGED
@@ -30,6 +30,7 @@ class TemplateLoader(DotMap):
30
30
  config = input
31
31
  elif isinstance(input, Path) or Path(input).exists():
32
32
  config = self._load_from_path(input)
33
+ config['_path'] = str(input)
33
34
  elif isinstance(input, str):
34
35
  config = self._load(input)
35
36
  super().__init__(config, **kwargs)
@@ -57,6 +58,17 @@ class TemplateLoader(DotMap):
57
58
  """Property to access tasks easily."""
58
59
  return self._extract_tasks()
59
60
 
61
+ def print(self):
62
+ """Print config as highlighted yaml."""
63
+ config = self.toDict()
64
+ _path = config.pop('_path', None)
65
+ if _path:
66
+ console.print(f'[italic green]{_path}[/]\n')
67
+ yaml_str = yaml.dump(config, indent=4)
68
+ from rich.syntax import Syntax
69
+ yaml_highlight = Syntax(yaml_str, 'yaml', line_numbers=True)
70
+ console.print(yaml_highlight)
71
+
60
72
  def _collect_supported_opts(self):
61
73
  """Collect supported options from the tasks extracted from the config."""
62
74
  tasks = self._extract_tasks()
secator/utils.py CHANGED
@@ -781,8 +781,9 @@ def process_wordlist(val):
781
781
  val = default_wordlist
782
782
  template_wordlist = getattr(CONFIG.wordlists.templates, val)
783
783
  if template_wordlist:
784
- return template_wordlist
785
- elif Path(val).exists():
784
+ val = template_wordlist
785
+
786
+ if Path(val).exists():
786
787
  return val
787
788
  else:
788
789
  return download_file(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secator
3
- Version: 0.11.0
3
+ Version: 0.12.0
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
@@ -3,16 +3,16 @@ secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  secator/celery.py,sha256=Xg8e0zpQu4_-jlsZeC65NZtkopHGsGIyQ3SiW5fyH4E,9771
4
4
  secator/celery_signals.py,sha256=hG62Gr34xKJYZTgZFn_wZcsAlMgKuTazQhx55FC5cDA,4259
5
5
  secator/celery_utils.py,sha256=_wcUC42VPUotPhh9YYqbuq0dkARI8_RoCklDlhQL9Jg,8903
6
- secator/cli.py,sha256=f_ySIOXyHmFwH3cSElxdXlnDGAYH72VXPFDhx0q9pnY,48866
7
- secator/config.py,sha256=CdVBh6d4k13SpkQKyHQfMFHgkLypUH07kAKLmCJJO1w,19688
8
- secator/decorators.py,sha256=Ac926Sxt7HvR5JTvpy5uqa4oxKWBXzx5VpeAOHJevJ4,14197
6
+ secator/cli.py,sha256=oYC6KrdtYSsdLp-pONRUjQap4AhEBWD5kBhmfKEQ6rw,48881
7
+ secator/config.py,sha256=t3RJhfVKIoEcfDWBsYlFzz29BM3dsvJtGFzwTYL0Cfc,19727
8
+ secator/decorators.py,sha256=sI1bbWm5g2SOb3EfHlvG37aY0SRK7EUzIiHLK0deACw,14583
9
9
  secator/definitions.py,sha256=f8Otl2MLo2XAVcl-CqbZ1PP4fAi-WXCTq5YfDhOzCR8,3201
10
10
  secator/installer.py,sha256=mxtt-TK1rr6uuw7nECZgrw3031rac5P2wWtXBUeuD4c,18937
11
11
  secator/report.py,sha256=55xKvYY0MKNPaEgTrx66mj-Siohx3drLbTX2LpEx6zs,3627
12
12
  secator/rich.py,sha256=0P6TECNePsfivc5h1JsJoAqKmpFnME5m8k29ZJjvbwM,3277
13
- secator/template.py,sha256=8EVsRRDAzNeALqTMzO9cNtxiXSbpSi0Nw7uSBb2Hbs0,4167
13
+ secator/template.py,sha256=tDXpC02h6F9-_5YXlQK_nDkGde9LM6yRf7dEyJzHFps,4550
14
14
  secator/thread.py,sha256=rgRgEtcMgs2wyfLWVlCTUCLWeg6jsMo5iKpyyrON5rY,655
15
- secator/utils.py,sha256=H8sDfZsyvW817osa9IWpddjmIVYCFDDjbMWTrb5S9k0,22057
15
+ secator/utils.py,sha256=kaBqWgBmUZohlvn6nFY805tG26viIu_LdJysNfZWMY4,22055
16
16
  secator/utils_test.py,sha256=jiCvgL4JMhIC1-ZGe6j9umNRZreSDp6nlkMgEJhf5ho,7996
17
17
  secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -35,7 +35,7 @@ secator/configs/workflows/url_crawl.yaml,sha256=h74dvDBNLuY1EHc9FMby3ydr34VH1qFJ
35
35
  secator/configs/workflows/url_dirsearch.yaml,sha256=wiiVY3RK0s8DYxg7UWcxLjkxMdIIINWefG1mhps2E-0,627
36
36
  secator/configs/workflows/url_fuzz.yaml,sha256=K1RkplXrgc7q2YJVv5A6B5MMkAzIIv31HInhRCKMpyI,774
37
37
  secator/configs/workflows/url_nuclei.yaml,sha256=Qigz-hJzM7GeNA_UD46dThVIoqbWlBgiYb_i5fSyJiI,265
38
- secator/configs/workflows/url_params_fuzz.yaml,sha256=ooOMxQDtuYq3jR2GOU6e-69H4bLvsq-CzemGFvmktjY,647
38
+ secator/configs/workflows/url_params_fuzz.yaml,sha256=Kc87pZ3w2GQeZl1QVxKeebaTDMOtYlTk-mlOfe-uOBM,700
39
39
  secator/configs/workflows/url_vuln.yaml,sha256=_nX_D96NbD8fHU4wXov7ZHD1cmiFgKc86Mh0enWGS7s,1354
40
40
  secator/configs/workflows/user_hunt.yaml,sha256=e5b-CkkjhOPE8Yh5LUh0K60GKmxTgn4s-Joo7m9jKrk,180
41
41
  secator/configs/workflows/wordpress.yaml,sha256=m80JdK2G9O5TGxk_BTiRjzhrXrLJQz0a1foIOQTKp3U,341
@@ -73,7 +73,7 @@ secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,2
73
73
  secator/runners/_base.py,sha256=bd_k3xn1DMxt7RaWhiaSI9zN_qbN_sTUrmwh7j2_xmk,31657
74
74
  secator/runners/_helpers.py,sha256=_2pyPgDK0obqlOEYJRDrqJgvDntz_zL483spFLtGSXs,2514
75
75
  secator/runners/celery.py,sha256=bqvDTTdoHiGRCt0FRvlgFHQ_nsjKMP5P0PzGbwfCj_0,425
76
- secator/runners/command.py,sha256=rb1g7Sj-GfA5T4klz1ClgQWSY0Ut_wBqBFbLSwVq158,26847
76
+ secator/runners/command.py,sha256=uJyPZJCR55owbiP-vR0MyjfnDShO47asW9XfNDIcn8o,26867
77
77
  secator/runners/scan.py,sha256=n8RL9vXPmNqukdB2a5wcPhSmxsZB4KFaqtZt0wfa8dU,1622
78
78
  secator/runners/task.py,sha256=LIgcBqORVPG5Kfx6g6RnEni1kgWchMfa3Oo2JEZri1Y,2037
79
79
  secator/runners/workflow.py,sha256=sO3B9GcndQLgGPnDz-A6XKnBmYO_ABAU_UXpW-q1K1A,3890
@@ -83,8 +83,8 @@ secator/serializers/dataclass.py,sha256=RqICpfsYWGjHAACAA2h2jZ_69CFHim4VZwcBqowG
83
83
  secator/serializers/json.py,sha256=UJwAymRzjF-yBKOgz1MTOyBhQcdQg7fOKRXgmHIu8fo,411
84
84
  secator/serializers/regex.py,sha256=fh-fE0RGvKSGKByFtwmKsWriRpZR9PXZQsY9JybHBWI,489
85
85
  secator/tasks/__init__.py,sha256=yRIZf9E47aS7o6rpgAJLgJUpX2cug1ofZeq8QsxgyjU,192
86
- secator/tasks/_categories.py,sha256=OIGZe-I8WFxg11KwuDCSof7kOh8QZv7qoL3nLKWH6PM,14227
87
- secator/tasks/arjun.py,sha256=viuFJtSk1-UBLQF_5Yl5dJEcx_-JDKs2eHAcn8NdBrg,2581
86
+ secator/tasks/_categories.py,sha256=kpFyTsFlcFlf4Veqa5CfLvODODGKP8VKsYgCfFg5iUI,14387
87
+ secator/tasks/arjun.py,sha256=33c5S3j9muD6L5WKO9If-HuUQa86k9RmG0FsVcJLaYA,2868
88
88
  secator/tasks/bbot.py,sha256=pvA435toxYBxP-Nr6DB70fe38FGl9tKg2S9dDWUW4Vo,7527
89
89
  secator/tasks/bup.py,sha256=4PM123Km3uOkMUwfdLY6J7pyCqIsbwMvOLYx7XYCAZc,3030
90
90
  secator/tasks/cariddi.py,sha256=7S92pp7tvihoz9fAiMpmcfPzEvxEJKMlk-IqAvVDISA,2906
@@ -94,12 +94,12 @@ secator/tasks/dnsx.py,sha256=nK14_DeyX0QTpAMdIP0LSSEOEu5_tQemyFW0XPjA2f8,2266
94
94
  secator/tasks/dnsxbrute.py,sha256=5VnSpd5ken7vWxFX1bcsGcUN8LpaVhcjafnuETzkMGs,1422
95
95
  secator/tasks/feroxbuster.py,sha256=3bKolPIdDBhdJ2fu4BP3w1cOlxDyI8WmtM-_2pDQ0AM,2773
96
96
  secator/tasks/ffuf.py,sha256=YmMBttdInDLsOGNeDM17c0POQLNxILHdYkLiGeKO9wY,2551
97
- secator/tasks/fping.py,sha256=9nMIahBMizRwsos9py-ltXMEffIiyx1reVytj9sTyKU,1089
97
+ secator/tasks/fping.py,sha256=OFF_uR3YzXhQJcb-ObdY178cHHjnJBPXtjMjdzVSlGI,1116
98
98
  secator/tasks/gau.py,sha256=1Qt0I_FqTh-QyJ0YR8I7i_T80HehWSvem_SS-TQKVm0,1648
99
99
  secator/tasks/gf.py,sha256=y8Fc0sRLGqNuwUjTBgLk3HEw3ZOnh09nB_GTufGErNA,962
100
100
  secator/tasks/gitleaks.py,sha256=Y8q3rOTvuvfmZ4tG3awng2vG7NJLxkLZBzE0mLFat6o,2500
101
101
  secator/tasks/gospider.py,sha256=mpoBq2VQXUqgwWPLz41fzdW85hJeo8mn9FUUJj_DrUw,2275
102
- secator/tasks/grype.py,sha256=xoOuldnHCrS0O1Y4IzjbSVvoX5eX-fLSZ74THdRC2so,2447
102
+ secator/tasks/grype.py,sha256=ay85FlOyWeYGwQR-O0_qMTatHmfjrdzub1WeLFDnRng,2456
103
103
  secator/tasks/h8mail.py,sha256=wNukV-aB-bXPZNq7WL8n1nFgH5b5tGh6vOF80Yna33I,1934
104
104
  secator/tasks/httpx.py,sha256=ONfCdAOV7ARCM9tSnlucIAM3UQeWcMUm8QZX8F7u9Pg,5895
105
105
  secator/tasks/katana.py,sha256=J0HKPT4QIrDj4uW2gZe7ByW6iEwPortSszqaHDvziwY,5355
@@ -117,8 +117,8 @@ secator/tasks/wafw00f.py,sha256=sjjaDSch5gfo6vRFJ0j4ccdGHGda9YodHwuIHBEIWY8,2717
117
117
  secator/tasks/wpprobe.py,sha256=wDwpbA4OvLB-APDyRMSsLZbfgOZ60c0BiYj5f7zHQg8,3983
118
118
  secator/tasks/wpscan.py,sha256=cSRwRfJEsZlqt1pVP3jWQ-7XhFfwR3i7FuL1PDRyWBQ,5594
119
119
  secator/workflows/__init__.py,sha256=R_TTyjg9f2Ph2_LYiF0lL07IjTrfRE_zqJzy-N7_WCk,675
120
- secator-0.11.0.dist-info/METADATA,sha256=-5eLxoaPdpcSlP449fvtpGRhi8YAMC6oaRD1-eC-_LQ,14724
121
- secator-0.11.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
122
- secator-0.11.0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
123
- secator-0.11.0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
124
- secator-0.11.0.dist-info/RECORD,,
120
+ secator-0.12.0.dist-info/METADATA,sha256=1utKUFGrYmBU8P1yrGBeumMCrOLENCw6NYt2CXITuMA,14724
121
+ secator-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
122
+ secator-0.12.0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
123
+ secator-0.12.0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
124
+ secator-0.12.0.dist-info/RECORD,,