secator 0.2.0__py2.py3-none-any.whl → 0.3.1__py2.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/runners/_base.py CHANGED
@@ -106,7 +106,7 @@ class Runner:
106
106
  self.context = context
107
107
  self.delay = run_opts.get('delay', False)
108
108
  self.uuids = []
109
- self.result = None
109
+ self.celery_result = None
110
110
 
111
111
  # Determine report folder
112
112
  default_reports_folder_base = f'{REPORTS_FOLDER}/{self.workspace_name}/{self.config.type}s'
@@ -159,19 +159,19 @@ class Runner:
159
159
  for key in self.hooks:
160
160
 
161
161
  # Register class specific hooks
162
- instance_func = getattr(self, key, None)
163
- if instance_func:
162
+ class_hook = getattr(self, key, None)
163
+ if class_hook:
164
164
  name = f'{self.__class__.__name__}.{key}'
165
- fun = f'{instance_func.__module__}.{instance_func.__name__}'
165
+ fun = self.get_func_path(class_hook)
166
166
  debug('', obj={name + ' [dim yellow]->[/] ' + fun: 'registered'}, sub='hooks', level=3)
167
- self.hooks[key].append(instance_func)
167
+ self.hooks[key].append(class_hook)
168
168
 
169
169
  # Register user hooks
170
170
  user_hooks = hooks.get(self.__class__, {}).get(key, [])
171
171
  user_hooks.extend(hooks.get(key, []))
172
172
  for hook in user_hooks:
173
173
  name = f'{self.__class__.__name__}.{key}'
174
- fun = f'{hook.__module__}.{hook.__name__}'
174
+ fun = self.get_func_path(hook)
175
175
  debug('', obj={name + ' [dim yellow]->[/] ' + fun: 'registered (user)'}, sub='hooks', level=3)
176
176
  self.hooks[key].extend(user_hooks)
177
177
 
@@ -280,9 +280,9 @@ class Runner:
280
280
 
281
281
  except KeyboardInterrupt:
282
282
  self._print('Process was killed manually (CTRL+C / CTRL+X).', color='bold red', rich=True)
283
- if self.result:
283
+ if self.celery_result:
284
284
  self._print('Revoking remote Celery tasks ...', color='bold red', rich=True)
285
- self.stop_live_tasks(self.result)
285
+ self.stop_live_tasks(self.celery_result)
286
286
 
287
287
  # Filter results and log info
288
288
  self.mark_duplicates()
@@ -291,9 +291,10 @@ class Runner:
291
291
  self.run_hooks('on_end')
292
292
 
293
293
  def mark_duplicates(self):
294
- debug('duplicate check', id=self.config.name, sub='runner.mark_duplicates')
294
+ debug('running duplicate check', id=self.config.name, sub='runner.mark_duplicates')
295
+ dupe_count = 0
295
296
  for item in self.results:
296
- debug('duplicate check', obj=item.toDict(), obj_breaklines=True, sub='runner.mark_duplicates', level=2)
297
+ debug('running duplicate check', obj=item.toDict(), obj_breaklines=True, sub='runner.mark_duplicates', level=5)
297
298
  others = [f for f in self.results if f == item and f._uuid != item._uuid]
298
299
  if others:
299
300
  main = max(item, *others)
@@ -313,13 +314,16 @@ class Runner:
313
314
  if not dupe._duplicate:
314
315
  debug(
315
316
  'found new duplicate', obj=dupe.toDict(), obj_breaklines=True,
316
- sub='runner.mark_duplicates', level=2)
317
+ sub='runner.mark_duplicates', level=5)
318
+ dupe_count += 1
317
319
  dupe._duplicate = True
318
320
  dupe = self.run_hooks('on_duplicate', dupe)
319
321
 
320
- debug('Duplicates:', sub='runner.mark_duplicates', level=2)
321
- debug('\n\t'.join([repr(i) for i in self.results if i._duplicate]), sub='runner.mark_duplicates', level=2)
322
- debug('duplicate check completed', id=self.config.name, sub='runner.mark_duplicates')
322
+ duplicates = [repr(i) for i in self.results if i._duplicate]
323
+ if duplicates:
324
+ duplicates_str = '\n\t'.join(duplicates)
325
+ debug(f'Duplicates ({dupe_count}):\n\t{duplicates_str}', sub='runner.mark_duplicates', level=5)
326
+ debug(f'duplicate check completed: {dupe_count} found', id=self.config.name, sub='runner.mark_duplicates')
323
327
 
324
328
  def yielder(self):
325
329
  raise NotImplementedError()
@@ -356,7 +360,7 @@ class Runner:
356
360
  return result
357
361
  for hook in self.hooks[hook_type]:
358
362
  name = f'{self.__class__.__name__}.{hook_type}'
359
- fun = f'{hook.__module__}.{hook.__name__}'
363
+ fun = self.get_func_path(hook)
360
364
  try:
361
365
  _id = self.context.get('task_id', '') or self.context.get('workflow_id', '') or self.context.get('scan_id', '')
362
366
  debug('', obj={name + ' [dim yellow]->[/] ' + fun: 'started'}, id=_id, sub='hooks', level=3)
@@ -871,3 +875,31 @@ class Runner:
871
875
  elif isinstance(item, OutputType):
872
876
  item = repr(item)
873
877
  return item
878
+
879
+ @classmethod
880
+ def get_func_path(cls, func):
881
+ """
882
+ Get the full symbolic path of a function or method, including staticmethods,
883
+ using function and method attributes.
884
+
885
+ Args:
886
+ func (function, method, or staticmethod): A function or method object.
887
+ """
888
+ if hasattr(func, '__self__'):
889
+ if func.__self__ is not None:
890
+ # It's a method bound to an instance
891
+ class_name = func.__self__.__class__.__name__
892
+ return f"{func.__module__}.{class_name}.{func.__name__}"
893
+ else:
894
+ # It's a method bound to a class (class method)
895
+ class_name = func.__qualname__.rsplit('.', 1)[0]
896
+ return f"{func.__module__}.{class_name}.{func.__name__}"
897
+ else:
898
+ # Handle static and regular functions
899
+ if '.' in func.__qualname__:
900
+ # Static method or a function defined inside a class
901
+ class_name, func_name = func.__qualname__.rsplit('.', 1)
902
+ return f"{func.__module__}.{class_name}.{func_name}"
903
+ else:
904
+ # Regular function not attached to a class
905
+ return f"{func.__module__}.{func.__name__}"
@@ -16,7 +16,6 @@ from secator.definitions import (DEFAULT_HTTP_PROXY,
16
16
  DEFAULT_PROXYCHAINS_COMMAND,
17
17
  DEFAULT_SOCKS5_PROXY, OPT_NOT_SUPPORTED,
18
18
  OPT_PIPE_INPUT, DEFAULT_INPUT_CHUNK_SIZE)
19
- from secator.rich import console
20
19
  from secator.runners import Runner
21
20
  from secator.serializers import JSONSerializer
22
21
  from secator.utils import debug
@@ -81,8 +80,9 @@ class Command(Runner):
81
80
  # Flag to show version
82
81
  version_flag = None
83
82
 
84
- # Install command
83
+ # Install
85
84
  install_cmd = None
85
+ install_github_handle = None
86
86
 
87
87
  # Serializer
88
88
  item_loader = None
@@ -252,20 +252,6 @@ class Command(Runner):
252
252
  # Class methods #
253
253
  #---------------#
254
254
 
255
- @classmethod
256
- def install(cls):
257
- """Install command by running the content of cls.install_cmd."""
258
- console.print(f':heavy_check_mark: Installing {cls.__name__}...', style='bold yellow')
259
- if not cls.install_cmd:
260
- console.print(f'{cls.__name__} install is not supported yet. Please install it manually.', style='bold red')
261
- return
262
- ret = cls.execute(cls.install_cmd, name=cls.__name__, cls_attributes={'shell': True})
263
- if ret.return_code != 0:
264
- console.print(f':exclamation_mark: Failed to install {cls.__name__}.', style='bold red')
265
- else:
266
- console.print(f':tada: {cls.__name__} installed successfully !', style='bold green')
267
- return ret
268
-
269
255
  @classmethod
270
256
  def execute(cls, cmd, name=None, cls_attributes={}, **kwargs):
271
257
  """Execute an ad-hoc command.
secator/runners/task.py CHANGED
@@ -39,7 +39,8 @@ class Task(Runner):
39
39
  'print_input_file': DEBUG > 0,
40
40
  'print_item': True,
41
41
  'print_item_count': not self.sync and not dry_run,
42
- 'print_line': self.sync and not self.output_quiet,
42
+ 'print_line': True
43
+ # 'print_line': self.sync and not self.output_quiet,
43
44
  }
44
45
  # self.print_item = not self.sync # enable print_item for base Task only if running remote
45
46
  run_opts.update(fmt_opts)
@@ -59,9 +60,9 @@ class Task(Runner):
59
60
  if dry_run: # don't run
60
61
  return
61
62
  else:
62
- result = task_cls.delay(self.targets, **run_opts)
63
+ self.celery_result = task_cls.delay(self.targets, **run_opts)
63
64
  task = self.process_live_tasks(
64
- result,
65
+ self.celery_result,
65
66
  description=False,
66
67
  results_only=True,
67
68
  print_remote_status=self.print_remote_status)
@@ -58,7 +58,7 @@ class Workflow(Runner):
58
58
  results = workflow.apply().get()
59
59
  else:
60
60
  result = workflow()
61
- self.result = result
61
+ self.celery_result = result
62
62
  results = self.process_live_tasks(result, results_only=True, print_remote_status=self.print_remote_status)
63
63
 
64
64
  # Get workflow results
@@ -6,17 +6,12 @@ import requests
6
6
  from bs4 import BeautifulSoup
7
7
  from cpe import CPE
8
8
 
9
- from secator.definitions import (CIDR_RANGE, CONFIDENCE, CVSS_SCORE,
10
- DEFAULT_HTTP_WORDLIST, DEFAULT_SKIP_CVE_SEARCH, DELAY, DEPTH, DESCRIPTION,
11
- FILTER_CODES, FILTER_REGEX, FILTER_SIZE,
12
- FILTER_WORDS, FOLLOW_REDIRECT, HEADER, HOST, ID,
13
- MATCH_CODES, MATCH_REGEX, MATCH_SIZE,
14
- MATCH_WORDS, METHOD, NAME, PATH, PROVIDER,
15
- PROXY, RATE_LIMIT, REFERENCES, RETRIES,
16
- SEVERITY, TAGS, DATA_FOLDER, THREADS, TIMEOUT,
17
- URL, USER_AGENT, USERNAME, WORDLIST)
18
- from secator.output_types import (Ip, Port, Subdomain, Tag, Url, UserAccount,
19
- Vulnerability)
9
+ from secator.definitions import (CIDR_RANGE, CONFIDENCE, CVSS_SCORE, DATA_FOLDER, DEFAULT_HTTP_WORDLIST,
10
+ DEFAULT_SKIP_CVE_SEARCH, DELAY, DEPTH, DESCRIPTION, FILTER_CODES, FILTER_REGEX,
11
+ FILTER_SIZE, FILTER_WORDS, FOLLOW_REDIRECT, HEADER, HOST, ID, MATCH_CODES, MATCH_REGEX,
12
+ MATCH_SIZE, MATCH_WORDS, METHOD, NAME, PATH, PROVIDER, PROXY, RATE_LIMIT, REFERENCES,
13
+ RETRIES, SEVERITY, TAGS, THREADS, TIMEOUT, URL, USER_AGENT, USERNAME, WORDLIST)
14
+ from secator.output_types import Ip, Port, Subdomain, Tag, Url, UserAccount, Vulnerability
20
15
  from secator.rich import console
21
16
  from secator.runners import Command
22
17
 
secator/tasks/dalfox.py CHANGED
@@ -53,6 +53,7 @@ class dalfox(VulnHttp):
53
53
  }
54
54
  }
55
55
  install_cmd = 'go install -v github.com/hahwul/dalfox/v2@latest'
56
+ install_github_handle = 'hahwul/dalfox'
56
57
  encoding = 'ansi'
57
58
  proxychains = False
58
59
  proxychains_flavor = 'proxychains4'
secator/tasks/dnsx.py CHANGED
@@ -25,6 +25,7 @@ class dnsx(ReconDns):
25
25
  }
26
26
 
27
27
  install_cmd = 'go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest'
28
+ install_github_handle = 'projectdiscovery/dnsx'
28
29
  profile = 'io'
29
30
 
30
31
  @staticmethod
@@ -31,4 +31,5 @@ class dnsxbrute(ReconDns):
31
31
  }
32
32
  }
33
33
  install_cmd = 'go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest'
34
+ install_github_handle = 'projectdiscovery/dnsx'
34
35
  profile = 'cpu'
@@ -64,6 +64,7 @@ class feroxbuster(HttpFuzzer):
64
64
  'curl -sL https://raw.githubusercontent.com/epi052/feroxbuster/master/install-nix.sh | '
65
65
  'bash && sudo mv feroxbuster /usr/local/bin'
66
66
  )
67
+ install_github_handle = 'epi052/feroxbuster'
67
68
  proxychains = False
68
69
  proxy_socks5 = True
69
70
  proxy_http = True
secator/tasks/ffuf.py CHANGED
@@ -71,6 +71,7 @@ class ffuf(HttpFuzzer):
71
71
  }
72
72
  encoding = 'ansi'
73
73
  install_cmd = f'go install -v github.com/ffuf/ffuf@latest && sudo git clone https://github.com/danielmiessler/SecLists {WORDLISTS_FOLDER}/seclists || true' # noqa: E501
74
+ install_github_handle = 'ffuf/ffuf'
74
75
  proxychains = False
75
76
  proxy_socks5 = True
76
77
  proxy_http = True
secator/tasks/gau.py CHANGED
@@ -37,6 +37,7 @@ class gau(HttpCrawler):
37
37
  USER_AGENT: OPT_NOT_SUPPORTED,
38
38
  }
39
39
  install_cmd = 'go install -v github.com/lc/gau/v2/cmd/gau@latest'
40
+ install_github_handle = 'lc/gau'
40
41
  proxychains = False
41
42
  proxy_socks5 = True
42
43
  proxy_http = True
secator/tasks/gospider.py CHANGED
@@ -52,6 +52,7 @@ class gospider(HttpCrawler):
52
52
  }
53
53
  }
54
54
  install_cmd = 'go install -v github.com/jaeles-project/gospider@latest'
55
+ install_github_handle = 'jaeles-project/gospider'
55
56
  ignore_return_code = True
56
57
  proxychains = False
57
58
  proxy_socks5 = True # with leaks... https://github.com/jaeles-project/gospider/issues/61
secator/tasks/grype.py CHANGED
@@ -30,6 +30,7 @@ class grype(VulnCode):
30
30
  install_cmd = (
31
31
  'curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sudo sh -s -- -b /usr/local/bin'
32
32
  )
33
+ install_github_handle = 'anchore/grype'
33
34
 
34
35
  @staticmethod
35
36
  def item_loader(self, line):
secator/tasks/httpx.py CHANGED
@@ -60,6 +60,7 @@ class httpx(Http):
60
60
  DELAY: lambda x: str(x) + 's' if x else None,
61
61
  }
62
62
  install_cmd = 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest'
63
+ install_github_handle = 'projectdiscovery/httpx'
63
64
  proxychains = False
64
65
  proxy_socks5 = True
65
66
  proxy_http = True
secator/tasks/katana.py CHANGED
@@ -71,6 +71,7 @@ class katana(HttpCrawler):
71
71
  }
72
72
  item_loaders = []
73
73
  install_cmd = 'sudo apt install build-essential && go install -v github.com/projectdiscovery/katana/cmd/katana@latest'
74
+ install_github_handle = 'projectdiscovery/katana'
74
75
  proxychains = False
75
76
  proxy_socks5 = True
76
77
  proxy_http = True
secator/tasks/mapcidr.py CHANGED
@@ -14,6 +14,7 @@ class mapcidr(ReconIp):
14
14
  input_flag = '-cidr'
15
15
  file_flag = '-cl'
16
16
  install_cmd = 'go install -v github.com/projectdiscovery/mapcidr/cmd/mapcidr@latest'
17
+ install_github_handle = 'projectdiscovery/mapcidr'
17
18
  input_type = CIDR_RANGE
18
19
  output_types = [Ip]
19
20
  opt_key_map = {
secator/tasks/naabu.py CHANGED
@@ -46,6 +46,7 @@ class naabu(ReconPort):
46
46
  }
47
47
  output_types = [Port]
48
48
  install_cmd = 'sudo apt install -y build-essential libpcap-dev && go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest' # noqa: E501
49
+ install_github_handle = 'projectdiscovery/naabu'
49
50
  proxychains = False
50
51
  proxy_socks5 = True
51
52
  proxy_http = False
secator/tasks/nuclei.py CHANGED
@@ -68,6 +68,7 @@ class nuclei(VulnMulti):
68
68
  }
69
69
  ignore_return_code = True
70
70
  install_cmd = 'go install -v github.com/projectdiscovery/nuclei/v2/cmd/nuclei@latest && nuclei update-templates'
71
+ install_github_handle = 'projectdiscovery/nuclei'
71
72
  proxychains = False
72
73
  proxy_socks5 = True # kind of, leaks data when running network / dns templates
73
74
  proxy_http = True # same
@@ -28,6 +28,7 @@ class searchsploit(Command):
28
28
  }
29
29
  }
30
30
  install_cmd = 'sudo git clone https://gitlab.com/exploit-database/exploitdb.git /opt/exploitdb || true && sudo ln -sf /opt/exploitdb/searchsploit /usr/local/bin/searchsploit' # noqa: E501
31
+ install_github_handle = 'rad10/SearchSploit.py'
31
32
  proxychains = False
32
33
  proxy_socks5 = False
33
34
  proxy_http = False
@@ -30,6 +30,7 @@ class subfinder(ReconDns):
30
30
  }
31
31
  output_types = [Subdomain]
32
32
  install_cmd = 'go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest'
33
+ install_github_handle = 'projectdiscovery/subfinder'
33
34
  proxychains = False
34
35
  proxy_http = True
35
36
  proxy_socks5 = False
secator/utils.py CHANGED
@@ -15,11 +15,13 @@ from pathlib import Path
15
15
  from pkgutil import iter_modules
16
16
  from urllib.parse import urlparse, quote
17
17
 
18
+
18
19
  import ifaddr
19
20
  import yaml
20
21
  from rich.markdown import Markdown
21
22
 
22
- from secator.definitions import DEBUG, DEBUG_COMPONENT, DEFAULT_STDIN_TIMEOUT
23
+ from secator.definitions import (DEBUG, DEBUG_COMPONENT, DEFAULT_STDIN_TIMEOUT, VERSION, DEV_PACKAGE, ROOT_FOLDER,
24
+ LIB_FOLDER)
23
25
  from secator.rich import console
24
26
 
25
27
  logger = logging.getLogger(__name__)
@@ -402,3 +404,23 @@ def escape_mongodb_url(url):
402
404
  user, password = quote(user), quote(password)
403
405
  return f'mongodb://{user}:{password}@{url}'
404
406
  return url
407
+
408
+
409
+ def print_version():
410
+ """Print secator version information."""
411
+ from secator.installer import get_version_info
412
+ console.print(f'[bold gold3]Current version[/]: {VERSION}', highlight=False, end='')
413
+ info = get_version_info('secator', github_handle='freelabz/secator', version=VERSION)
414
+ latest_version = info['latest_version']
415
+ status = info['status']
416
+ location = info['location']
417
+ if status == 'outdated':
418
+ console.print('[bold red] (outdated)[/]')
419
+ console.print(f'[bold gold3]Latest version[/]: {latest_version}', highlight=False)
420
+ console.print(f'[bold gold3]Location[/]: {location}')
421
+ console.print(f'[bold gold3]Python binary[/]: {sys.executable}')
422
+ if DEV_PACKAGE:
423
+ console.print(f'[bold gold3]Root folder[/]: {ROOT_FOLDER}')
424
+ console.print(f'[bold gold3]Lib folder[/]: {LIB_FOLDER}')
425
+ if status == 'outdated':
426
+ console.print('[bold red]secator is outdated, run "secator update" to install the latest version.')
secator/utils_test.py CHANGED
@@ -92,6 +92,7 @@ META_OPTS = {
92
92
  'msfconsole.resource': load_fixture('msfconsole_input', FIXTURES_DIR, only_path=True),
93
93
  'dirsearch.output_path': load_fixture('dirsearch_output', FIXTURES_DIR, only_path=True),
94
94
  'maigret.output_path': load_fixture('maigret_output', FIXTURES_DIR, only_path=True),
95
+ 'nuclei.template_id': 'prometheus-metrics',
95
96
  'wpscan.output_path': load_fixture('wpscan_output', FIXTURES_DIR, only_path=True),
96
97
  'h8mail.output_path': load_fixture('h8mail_output', FIXTURES_DIR, only_path=True),
97
98
  'h8mail.local_breach': load_fixture('h8mail_breach', FIXTURES_DIR, only_path=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: secator
3
- Version: 0.2.0
3
+ Version: 0.3.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
@@ -1,14 +1,15 @@
1
1
  secator/.gitignore,sha256=da8MUc3hdb6Mo0WjZu2upn5uZMbXcBGvhdhTQ1L89HI,3093
2
2
  secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- secator/celery.py,sha256=zXjg7EKneWjErBTNrJCHOXCJzs-P5jBi5gYqrSqjW4k,12227
4
- secator/cli.py,sha256=T-Sv82THpBjzHu5xOfMLNCL7AyGMYgzqp3K1Ot9fb0w,31798
3
+ secator/celery.py,sha256=QQlDblcCMfs7r2l0DhB2X8miLCtHE5MdC-XiGMK8IcA,12226
4
+ secator/cli.py,sha256=ipkIGc5NBY-SLWENhdeueYmpOnDP2eGURX4xBIcSNic,31531
5
5
  secator/config.py,sha256=iOeRzq7u1rvR1-Oq5v9wGxQYB613X0xKGLIcrfhEGc4,3693
6
- secator/decorators.py,sha256=IRH4CSesOJXKrzpSJ8xM2ZMUAFTk3GcqRI0SYIpIpag,10492
7
- secator/definitions.py,sha256=hORMT71MLn8buGdSj7PC23sDQTgAuBachPo8OVqlU5Q,6507
6
+ secator/decorators.py,sha256=ZlrdUQ5kpisaNRI4-csQWwbrB4oXs6SXijramNMVqfE,10490
7
+ secator/definitions.py,sha256=JxoqbhkFH6jj5UwaMnrueimZOb6Zi3qksWuLC5O15oI,7636
8
+ secator/installer.py,sha256=pvyTVoG3prZm9V48CFCnIPjJQF7SdV9yU3sARnI12sI,9321
8
9
  secator/report.py,sha256=g0stVCcx9klbUS01uKvWcxNE9MJfNFMexYA2SoDIWJU,2596
9
- secator/rich.py,sha256=7-uKJrQWiCKM0gPNIr_cr1c9KrcJSVd2ht-DgLXhBro,3392
10
- secator/utils.py,sha256=oJEEls4Z8SfTxiG6keCfqLMMWA97ftS5aiABhBPRduU,9964
11
- secator/utils_test.py,sha256=htfIqtbvvi7-8hduZaq9SjAvBeTIqwkA_4EZkYDXqaE,4998
10
+ secator/rich.py,sha256=W4PipeZfIVnERfW3ySeWSvnZ90jhCFiABBoERYy_6kM,3177
11
+ secator/utils.py,sha256=i9nnkOuRQIZbWRfyOS1dsT4wfJ7vvaJeZ3IZPwX3vKM,10945
12
+ secator/utils_test.py,sha256=xVF9RH1-p3X0TdmODJi4k62H7Xth96Ib7qnUZ4vAJs8,5043
12
13
  secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
14
  secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
15
  secator/configs/profiles/aggressive.yaml,sha256=JilVySABlSCYEFMjH7V0Oc3dAVlkfHOh1odTGhtm7BQ,108
@@ -39,7 +40,7 @@ secator/exporters/csv.py,sha256=xsPMljzJhoTc8lcfxWBIKH2niK6KeYL7Bx2NzpdsYw0,982
39
40
  secator/exporters/gdrive.py,sha256=VI6r1vlChz39myaN4sFvOlHO32SAhZS5_mI5EwGUdq8,4056
40
41
  secator/exporters/json.py,sha256=cWkDugUdy-lbcPFKNgBrRFxHspiFhjVbJfdDABjJ9uk,431
41
42
  secator/exporters/table.py,sha256=RHQoaFeeyeoBGNucJgrlk2KtmVqe9BGNtAAYee7xJ8Y,210
42
- secator/exporters/txt.py,sha256=AUvcFp_-IJp55RWYvMHJzcDqcheL6m3-cl4QMUxVgKk,771
43
+ secator/exporters/txt.py,sha256=QbiwWYGgHpITGw1sL2TX-S3AfmBdJ-VOWkPJzuBvOu4,785
43
44
  secator/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  secator/hooks/mongodb.py,sha256=GTd6BeiGtWUPWjmXKmalZYNoeGNZfNqEJ6BxRJh1Mr8,7149
45
46
  secator/output_types/__init__.py,sha256=uj6AXDeorECPwhwekNVGjQbGv41jHG_8udkuoc4XzW0,854
@@ -56,44 +57,44 @@ secator/output_types/url.py,sha256=yDozBXCuPfuybH1iX_xGmbCJPXO6Ei14C8Hp5CnzNbE,2
56
57
  secator/output_types/user_account.py,sha256=EiT2BFl2LTCdqHF1meoMEKVhjKGroyf8-JoWHPuBOTc,1378
57
58
  secator/output_types/vulnerability.py,sha256=p0DTbr5w7Vv5D3dgbdnvsG5qXzqVVk4YPOPWYS1lxmM,2843
58
59
  secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,290
59
- secator/runners/_base.py,sha256=Or9bDSsxcwYTUeW6G7-Pmag82_yGUtREuzSZWj9IgHY,27268
60
+ secator/runners/_base.py,sha256=wPCGBNEbTLSeFhYgQvTglo7gLA9ptM5Qa_vQSfe23Xk,28372
60
61
  secator/runners/_helpers.py,sha256=7UUboSsr4b6srIOOHtSSYhJ9Jxq_qaMVbbF2gVEBnR4,3703
61
- secator/runners/command.py,sha256=eKrQY34m-EpEDqo9Rqr_9k2dp1xIg7JVjVt34c55aKs,19402
62
+ secator/runners/command.py,sha256=JzdwhbvsDujOyE-i_XgBGH-g6jaEoDNwL7CU2BIZ-Ng,18737
62
63
  secator/runners/scan.py,sha256=FjmlL_zkraqhS3rBwy5jHnGsKt2n7Hb2gi4qhgeGenw,1727
63
- secator/runners/task.py,sha256=JS8JPCW6v3_f_jbFV1-robR53epPPDj0PdxqAtXKmEs,2775
64
- secator/runners/workflow.py,sha256=Mz8Q4OT48B-o-iQHgZ84WpZfwaECQOp8KRdIirg3He0,3766
64
+ secator/runners/task.py,sha256=PWFRFaI_GdKtgyNx9f7iiCUUUtl0XiinHD7rurspTvc,2823
65
+ secator/runners/workflow.py,sha256=90QvSJXNXTIS3_RecCnzMWYplG6gT-wc82b214XIivE,3773
65
66
  secator/serializers/__init__.py,sha256=OP5cmFl77ovgSCW_IDcZ21St2mUt5UK4QHfrsK2KvH8,248
66
67
  secator/serializers/dataclass.py,sha256=g5gMT4NwndjhGcGbFuYEs07AZW_Q_m9orov_edVEGlI,792
67
68
  secator/serializers/json.py,sha256=XwuSQOBwrOAs16F5HtY-Q-rAGAxfNvlq3z-Nb2gwigE,304
68
69
  secator/serializers/regex.py,sha256=hGJ_1JSOv9xPtfn_umHlsjnR_alnsDFv-UmjYCC3vwU,314
69
70
  secator/tasks/__init__.py,sha256=Wp2QF5QS2e_BlVygsIEFbmYPTfTg7v_Vd3LQJeXTC7I,344
70
- secator/tasks/_categories.py,sha256=RuN483yhmzOPg_eR1-djR8MQe96lH4d8UVvaKvcXmiI,9069
71
+ secator/tasks/_categories.py,sha256=w4vxKffTQFJEHNzi6BV5DslGpnSAlKEN0K7H6slG3Vg,9015
71
72
  secator/tasks/cariddi.py,sha256=Np9QPMpuqGtsLGHANfcbNaYjoQaqjkFXX9Dbtbtcgu4,3109
72
- secator/tasks/dalfox.py,sha256=2P43YOoz5PwHGn5L_9rkJswPopCkJBKs0v1CAOinE_0,1703
73
+ secator/tasks/dalfox.py,sha256=nrLkIbTNz_J7LgUy_3kBgzhTUbQi3RmiSJhc9HWa05c,1744
73
74
  secator/tasks/dirsearch.py,sha256=2hJeJZJwaAl3-UAjBwlmjW1w9bxjVWxxwfcaTTxqClc,2387
74
- secator/tasks/dnsx.py,sha256=6v2ttbycLLt6p-1B05P5662QNdFgS-ozrKjzN3w8hSk,1722
75
- secator/tasks/dnsxbrute.py,sha256=_wjanOvxKsxZzuSPGiBOsd7TRrbshQgyEEZUCP0tVN4,1172
76
- secator/tasks/feroxbuster.py,sha256=400i6Egj9jn_Ap_zRfca2RG8c1P30CZBAYLC8UzyW-g,2965
77
- secator/tasks/ffuf.py,sha256=1qICKOdvcFfiqtPS2dk6TfIIpc77STjnAvZADksKKZY,2521
75
+ secator/tasks/dnsx.py,sha256=H_3z87KAK-ndAQgCwS8TRWaUX_Hh54qEeuKQCS4rjBw,1771
76
+ secator/tasks/dnsxbrute.py,sha256=obr2SsxIJlO2KckxrCOPHvvzyfequFW6-D4ZAUq4Egk,1224
77
+ secator/tasks/feroxbuster.py,sha256=9QQpd8T0CSMfXf_BMmCX4LeIogyvsc_ccXFJnEocxVo,3011
78
+ secator/tasks/ffuf.py,sha256=ocmFfJJoV4zF8zkhUxHqUyDuJe9flmuijHCq_xk2pa4,2558
78
79
  secator/tasks/fping.py,sha256=P2EAPUGgwEC4Geh2zUbBPKF9bdqrlrdDg-R_TYLTFng,1127
79
- secator/tasks/gau.py,sha256=YB89dsUVwLaRplIpEiiUA7mwTM7s3vyH4Cs6ZjzcAnY,1357
80
+ secator/tasks/gau.py,sha256=Sq5l277cGxpT2bB5s1RqrggP804RKbC6xxgLDZZzLFs,1391
80
81
  secator/tasks/gf.py,sha256=WlhoEyL6xE79w6nE5XNSXHs-jVeO10njqJxBF8w20sA,945
81
- secator/tasks/gospider.py,sha256=-zIttWmabtt5qWkxCFSeCKmC2swUhv038j3rbFReXSE,2121
82
- secator/tasks/grype.py,sha256=Q8VJbLt6YLYUqlsbR1OxzGDAqEVaDS_nNQ0klOm53O0,2372
82
+ secator/tasks/gospider.py,sha256=_UlTb9G5Ss8D68NT53s0_rI6TnG00Ph0yxWyHic7cKs,2172
83
+ secator/tasks/grype.py,sha256=n60Zs9d1NWJFHQ0DwIZib5wu3xH-tV2RzgLYwuQSTo4,2413
83
84
  secator/tasks/h8mail.py,sha256=hZBpfV6M1mbpD_PbDHxLI5HMvqAvTeY_W0lbkq3Hugo,2037
84
- secator/tasks/httpx.py,sha256=MMjg705z49YooEqglZ4J1UqAKQffDPWMV6kv3fjWZS0,3929
85
- secator/tasks/katana.py,sha256=zOoPjJLTRdBqvTLJ4fU_VWstqpRUc7YTFoLuDz3qJ3I,4319
85
+ secator/tasks/httpx.py,sha256=NuycnbPejEZoUdFYFXyahYiZnzhz1cPJarHdP7WyP6c,3979
86
+ secator/tasks/katana.py,sha256=Xa03zP2-78Ns59unUPrR_MHSd1DugTQlThxl8cL6pX4,4370
86
87
  secator/tasks/maigret.py,sha256=PZDTICJ4LZF3joKe-dXu2alffakD_1sxBuNEUBtJDm4,2098
87
- secator/tasks/mapcidr.py,sha256=O6zssQMMrg3JGXIhldgOD28WNATAb_wfj0svHr0DRxg,928
88
+ secator/tasks/mapcidr.py,sha256=7aa2WXQATWgIQo5oA12URjAg80L6MFMGdxScxls8DuA,980
88
89
  secator/tasks/msfconsole.py,sha256=VlhEzsdYMHb6eJy4HBRdXMtRKhdzf5KtQGh7qZqO9Rs,6073
89
- secator/tasks/naabu.py,sha256=6XfERGS5ywDBMho9Bp7v7W_Ke2BQSFqJuawEOuMWwEk,1544
90
+ secator/tasks/naabu.py,sha256=RNs4NCZXgKhPqzR78l6l61tau0mGHuj6C3If7fimpgs,1594
90
91
  secator/tasks/nmap.py,sha256=LS5FBo-vFxbHVK4DxF5x-O2cAvAK3zL1pROT1GddX9E,9459
91
- secator/tasks/nuclei.py,sha256=iOBKsEY9kkytp_cenYx6061kcEUCjqyT_c3PwoYkHPY,3292
92
- secator/tasks/searchsploit.py,sha256=RD2uv3GFI3Eb-DiTzJp59jyXnvAZRACq-WjDI1NgFM0,1664
93
- secator/tasks/subfinder.py,sha256=_T7erWmfriqLeN5kquO3-L9DlR0mEjYPPC7NMzwTqwg,1033
92
+ secator/tasks/nuclei.py,sha256=7MlTygHd4EVz81ndrVwP5y6PZ-4j-Y8Oxuk3G3ayHPI,3343
93
+ secator/tasks/searchsploit.py,sha256=l0uNj5Jzax3lVMiMDxC8V3-bQ05y-FPaOhVdro1ibV4,1713
94
+ secator/tasks/subfinder.py,sha256=cpFyFCpVaDZ3QAjNId26ezOwntn3CA5Uk-AC2l0mo0E,1087
94
95
  secator/tasks/wpscan.py,sha256=OgFCWEPOjOVdFreBXZDLBRc-PrFmTUv97UaXmaAS9yc,5413
95
- secator-0.2.0.dist-info/METADATA,sha256=m1I9y0Z8qy8ySO5_WHvtQWApNsFgf_tMG5TvpKRd8ds,13553
96
- secator-0.2.0.dist-info/WHEEL,sha256=wpsUbWzR9la66_V7_eWTdyvs6WD26tazKT2BBEAC-EM,105
97
- secator-0.2.0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
98
- secator-0.2.0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
99
- secator-0.2.0.dist-info/RECORD,,
96
+ secator-0.3.1.dist-info/METADATA,sha256=-y1zHhBhLVGECVIisVgjr7FEJQ_nIlrRGGJ0XxKZQ4s,13553
97
+ secator-0.3.1.dist-info/WHEEL,sha256=wpsUbWzR9la66_V7_eWTdyvs6WD26tazKT2BBEAC-EM,105
98
+ secator-0.3.1.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
99
+ secator-0.3.1.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
100
+ secator-0.3.1.dist-info/RECORD,,