secator 0.15.0__py3-none-any.whl → 0.16.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.

Files changed (106) hide show
  1. secator/celery.py +40 -24
  2. secator/celery_signals.py +71 -68
  3. secator/celery_utils.py +43 -27
  4. secator/cli.py +520 -280
  5. secator/cli_helper.py +394 -0
  6. secator/click.py +87 -0
  7. secator/config.py +67 -39
  8. secator/configs/profiles/http_headless.yaml +6 -0
  9. secator/configs/profiles/http_record.yaml +6 -0
  10. secator/configs/profiles/tor.yaml +1 -1
  11. secator/configs/scans/domain.yaml +4 -2
  12. secator/configs/scans/host.yaml +1 -1
  13. secator/configs/scans/network.yaml +1 -4
  14. secator/configs/scans/subdomain.yaml +13 -1
  15. secator/configs/scans/url.yaml +1 -2
  16. secator/configs/workflows/cidr_recon.yaml +6 -4
  17. secator/configs/workflows/code_scan.yaml +1 -1
  18. secator/configs/workflows/host_recon.yaml +29 -3
  19. secator/configs/workflows/subdomain_recon.yaml +67 -16
  20. secator/configs/workflows/url_crawl.yaml +44 -15
  21. secator/configs/workflows/url_dirsearch.yaml +4 -4
  22. secator/configs/workflows/url_fuzz.yaml +25 -17
  23. secator/configs/workflows/url_params_fuzz.yaml +7 -0
  24. secator/configs/workflows/url_vuln.yaml +33 -8
  25. secator/configs/workflows/user_hunt.yaml +2 -1
  26. secator/configs/workflows/wordpress.yaml +5 -3
  27. secator/cve.py +718 -0
  28. secator/decorators.py +0 -454
  29. secator/definitions.py +49 -30
  30. secator/exporters/_base.py +2 -2
  31. secator/exporters/console.py +2 -2
  32. secator/exporters/table.py +4 -3
  33. secator/exporters/txt.py +1 -1
  34. secator/hooks/mongodb.py +2 -4
  35. secator/installer.py +77 -49
  36. secator/loader.py +116 -0
  37. secator/output_types/_base.py +3 -0
  38. secator/output_types/certificate.py +63 -63
  39. secator/output_types/error.py +4 -5
  40. secator/output_types/info.py +2 -2
  41. secator/output_types/ip.py +3 -1
  42. secator/output_types/progress.py +5 -9
  43. secator/output_types/state.py +17 -17
  44. secator/output_types/tag.py +3 -0
  45. secator/output_types/target.py +10 -2
  46. secator/output_types/url.py +19 -7
  47. secator/output_types/vulnerability.py +11 -7
  48. secator/output_types/warning.py +2 -2
  49. secator/report.py +27 -15
  50. secator/rich.py +18 -10
  51. secator/runners/_base.py +447 -234
  52. secator/runners/_helpers.py +133 -24
  53. secator/runners/command.py +182 -102
  54. secator/runners/scan.py +33 -5
  55. secator/runners/task.py +13 -7
  56. secator/runners/workflow.py +105 -72
  57. secator/scans/__init__.py +2 -2
  58. secator/serializers/dataclass.py +20 -20
  59. secator/tasks/__init__.py +4 -4
  60. secator/tasks/_categories.py +39 -27
  61. secator/tasks/arjun.py +9 -5
  62. secator/tasks/bbot.py +53 -21
  63. secator/tasks/bup.py +19 -5
  64. secator/tasks/cariddi.py +24 -3
  65. secator/tasks/dalfox.py +26 -7
  66. secator/tasks/dirsearch.py +10 -4
  67. secator/tasks/dnsx.py +70 -25
  68. secator/tasks/feroxbuster.py +11 -3
  69. secator/tasks/ffuf.py +42 -6
  70. secator/tasks/fping.py +20 -8
  71. secator/tasks/gau.py +3 -1
  72. secator/tasks/gf.py +5 -4
  73. secator/tasks/gitleaks.py +2 -2
  74. secator/tasks/gospider.py +7 -1
  75. secator/tasks/grype.py +5 -4
  76. secator/tasks/h8mail.py +2 -1
  77. secator/tasks/httpx.py +18 -5
  78. secator/tasks/katana.py +35 -15
  79. secator/tasks/maigret.py +4 -4
  80. secator/tasks/mapcidr.py +3 -3
  81. secator/tasks/msfconsole.py +4 -4
  82. secator/tasks/naabu.py +5 -4
  83. secator/tasks/nmap.py +12 -14
  84. secator/tasks/nuclei.py +3 -3
  85. secator/tasks/searchsploit.py +6 -5
  86. secator/tasks/subfinder.py +2 -2
  87. secator/tasks/testssl.py +264 -263
  88. secator/tasks/trivy.py +5 -5
  89. secator/tasks/wafw00f.py +21 -3
  90. secator/tasks/wpprobe.py +90 -83
  91. secator/tasks/wpscan.py +6 -5
  92. secator/template.py +218 -104
  93. secator/thread.py +15 -15
  94. secator/tree.py +196 -0
  95. secator/utils.py +131 -123
  96. secator/utils_test.py +60 -19
  97. secator/workflows/__init__.py +2 -2
  98. {secator-0.15.0.dist-info → secator-0.16.0.dist-info}/METADATA +37 -36
  99. secator-0.16.0.dist-info/RECORD +132 -0
  100. secator/configs/profiles/default.yaml +0 -8
  101. secator/configs/workflows/url_nuclei.yaml +0 -11
  102. secator/tasks/dnsxbrute.py +0 -42
  103. secator-0.15.0.dist-info/RECORD +0 -128
  104. {secator-0.15.0.dist-info → secator-0.16.0.dist-info}/WHEEL +0 -0
  105. {secator-0.15.0.dist-info → secator-0.16.0.dist-info}/entry_points.txt +0 -0
  106. {secator-0.15.0.dist-info → secator-0.16.0.dist-info}/licenses/LICENSE +0 -0
secator/utils_test.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import contextlib
2
2
  import json
3
3
  import os
4
+ import re
4
5
  import sys
5
6
  import unittest.mock
6
7
 
@@ -11,11 +12,11 @@ from secator.definitions import (CIDR_RANGE, DELAY, DEPTH, EMAIL,
11
12
  METHOD, PROXY, RATE_LIMIT, RETRIES,
12
13
  THREADS, TIMEOUT, URL, USER_AGENT, USERNAME, PATH,
13
14
  DOCKER_IMAGE, GIT_REPOSITORY)
14
- from secator.cli import ALL_WORKFLOWS, ALL_TASKS, ALL_SCANS
15
+ from secator.loader import get_configs_by_type
15
16
  from secator.output_types import EXECUTION_TYPES, STAT_TYPES
16
- from secator.runners import Command
17
+ from secator.runners import Command, Task
17
18
  from secator.rich import console
18
- from secator.utils import load_fixture, debug
19
+ from secator.utils import load_fixture, debug, traceback_as_string
19
20
 
20
21
  #---------#
21
22
  # GLOBALS #
@@ -24,33 +25,37 @@ USE_PROXY = bool(int(os.environ.get('USE_PROXY', '0')))
24
25
  TEST_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/tests/'
25
26
  FIXTURES_DIR = f'{TEST_DIR}/fixtures'
26
27
  USE_PROXY = bool(int(os.environ.get('USE_PROXY', '0')))
28
+ TASKS = get_configs_by_type('task')
29
+ WORKFLOWS = get_configs_by_type('workflow')
30
+ SCANS = get_configs_by_type('scan')
31
+
27
32
 
28
33
  #------------#
29
34
  # TEST TASKS #
30
35
  #------------#
31
36
  TEST_TASKS = os.environ.get('TEST_TASKS', '')
32
37
  if TEST_TASKS:
33
- TEST_TASKS = [cls for cls in ALL_TASKS if cls.__name__ in TEST_TASKS.split(',')]
38
+ TEST_TASKS = [config for config in TASKS if config.name in TEST_TASKS.split(',')]
34
39
  else:
35
- TEST_TASKS = ALL_TASKS
40
+ TEST_TASKS = TASKS
36
41
 
37
42
  #----------------#
38
43
  # TEST WORKFLOWS #
39
44
  #----------------#
40
45
  TEST_WORKFLOWS = os.environ.get('TEST_WORKFLOWS', '')
41
46
  if TEST_WORKFLOWS:
42
- TEST_WORKFLOWS = [config for config in ALL_WORKFLOWS if config.name in TEST_WORKFLOWS.split(',')]
47
+ TEST_WORKFLOWS = [config for config in WORKFLOWS if config.name in TEST_WORKFLOWS.split(',')]
43
48
  else:
44
- TEST_WORKFLOWS = ALL_WORKFLOWS
49
+ TEST_WORKFLOWS = WORKFLOWS
45
50
 
46
51
  #------------#
47
52
  # TEST SCANS #
48
53
  #------------#
49
54
  TEST_SCANS = os.environ.get('TEST_SCANS', '')
50
55
  if TEST_SCANS:
51
- TEST_SCANS = [config for config in ALL_SCANS if config.name in TEST_SCANS.split(',')]
56
+ TEST_SCANS = [config for config in SCANS if config.name in TEST_SCANS.split(',')]
52
57
  else:
53
- TEST_SCANS = ALL_SCANS
58
+ TEST_SCANS = SCANS
54
59
 
55
60
  #-------------------#
56
61
  # TEST INPUTS_TASKS #
@@ -71,15 +76,16 @@ INPUTS_TASKS = {
71
76
  # TEST FIXTURES_TASKS #
72
77
  #---------------------#
73
78
  FIXTURES_TASKS = {
74
- tool_cls: load_fixture(f'{tool_cls.__name__}_output', FIXTURES_DIR)
75
- for tool_cls in TEST_TASKS
79
+ Task.get_task_class(task.name): load_fixture(f'{task.name}_output', FIXTURES_DIR)
80
+ for task in TASKS
81
+ if task.name in [t.name for t in TEST_TASKS]
76
82
  }
77
83
 
78
84
  #-----------#
79
85
  # TEST OPTS #
80
86
  #-----------#
81
87
  META_OPTS = {
82
- HEADER: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1',
88
+ HEADER: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1;; Hello: World',
83
89
  DELAY: 0,
84
90
  DEPTH: 2,
85
91
  FOLLOW_REDIRECT: True,
@@ -159,6 +165,10 @@ def mock_command(cls, inputs=[], opts={}, fixture=None, method=''):
159
165
 
160
166
  class CommandOutputTester: # Mixin for unittest.TestCase
161
167
 
168
+ @staticmethod
169
+ def get_item_str(item):
170
+ return f"Item: {repr(item)}\nItem dict: {json.dumps(item.toDict(), default=str, indent=2)}"
171
+
162
172
  def _test_runner_output(
163
173
  self,
164
174
  runner,
@@ -166,10 +176,12 @@ class CommandOutputTester: # Mixin for unittest.TestCase
166
176
  expected_output_types=[],
167
177
  expected_results=[],
168
178
  expected_status='SUCCESS',
169
- empty_results_allowed=False):
179
+ empty_results_allowed=False,
180
+ additional_checks=[]):
170
181
 
171
182
  console.print(f'\t[dim]Testing {runner.config.type} {runner.name} ...[/]', end='')
172
183
  debug('', sub='unittest')
184
+ debug('-' * 10 + f' RUNNER {runner.name} STARTING ' + '-' * 10, sub='unittest')
173
185
 
174
186
  if not runner.inputs:
175
187
  console.print('[dim gold3] skipped (no inputs defined).[/]')
@@ -183,8 +195,11 @@ class CommandOutputTester: # Mixin for unittest.TestCase
183
195
 
184
196
  # Run runner
185
197
  results = runner.run()
186
- for result in results:
187
- debug(result.toDict(), sub='unittest')
198
+ results_str = "\n".join([repr(r) for r in results])
199
+ debug(f'{runner.name} yielded results\n{results_str}', sub='unittest')
200
+ debug(f'{runner.name} yielded results\n{json.dumps([r.toDict() for r in results], default=str, indent=2)}', sub='unittest.dict', verbose=True) # noqa: E501
201
+
202
+ debug('-' * 10 + f' RUNNER {runner.name} TESTS ' + '-' * 10, sub='unittest')
188
203
 
189
204
  # Add execution types to allowed output types
190
205
  expected_output_types.extend(EXECUTION_TYPES + STAT_TYPES)
@@ -205,13 +220,17 @@ class CommandOutputTester: # Mixin for unittest.TestCase
205
220
  self.assertEqual(runner.status, expected_status, f'{runner.name} should have the status {expected_status}. Errors: {runner.errors}') # noqa: E501
206
221
 
207
222
  # Check results
223
+ failures = []
224
+ debug('-' * 10 + f' RUNNER {runner.name} ITEM TESTS ' + '-' * 10, sub='unittest')
208
225
  for item in results:
209
- debug(f'{runner.name} yielded {repr(item)}', sub='unittest')
210
- debug(f'{runner.name} yielded (JSON): {json.dumps(item.toDict(), default=str)}', sub='unittest.dict', verbose=True)
226
+ item_str = self.get_item_str(item)
227
+ debug('--' * 5, sub='unittest')
228
+ debug(f'{runner.name} item {repr(item)}', sub='unittest')
229
+ debug(f'{runner.name} item [{item.toDict()}]', sub='unittest.item', verbose=True)
211
230
 
212
231
  if expected_output_types:
213
232
  debug(f'{runner.name} item should have an output type in {[_._type for _ in expected_output_types]}', sub='unittest') # noqa: E501
214
- self.assertIn(type(item), expected_output_types, f'{runner.name}: item has an unexpected output type "{type(item)}"') # noqa: E501
233
+ self.assertIn(type(item), expected_output_types, f'{runner.name}: item has an unexpected output type "{type(item)}". Expected types: {expected_output_types}.\n{item_str}') # noqa: E501
215
234
 
216
235
  if expected_output_keys:
217
236
  keys = [k for k in list(item.keys()) if not k.startswith('_')]
@@ -219,7 +238,29 @@ class CommandOutputTester: # Mixin for unittest.TestCase
219
238
  self.assertEqual(
220
239
  set(keys).difference(set(expected_output_keys)),
221
240
  set(),
222
- f'{runner.name}: item is missing expected keys {set(expected_output_keys)}. Item keys: {keys}') # noqa: E501
241
+ f'{runner.name}: item is missing expected keys {set(expected_output_keys)}.\nItem keys: {keys}.\n{item_str}') # noqa: E501
242
+
243
+ if additional_checks and item.__class__ in additional_checks.get('output_types', {}):
244
+ config = additional_checks['output_types'][item.__class__]
245
+ runner_regex = config.get('runner', '*')
246
+ if not re.match(runner_regex, runner.name):
247
+ continue
248
+ checks = config.get('checks', [])
249
+ for check in checks:
250
+ error = check['error']
251
+ info = check['info']
252
+ func = check['function']
253
+ debug(f'{runner.name} item {info}', sub='unittest')
254
+ try:
255
+ result = func(item)
256
+ if not result:
257
+ failures.append(f'ERROR ({runner.name}): {error}.\n{item_str}')
258
+ except Exception as e:
259
+ failures.append(f'ERROR ({runner.name}): {error}.\n{item_str}\n{traceback_as_string(e)}')
260
+
261
+ # Additional checks failures
262
+ if failures:
263
+ self.fail("\n\n" + "\n\n".join(failures))
223
264
 
224
265
  # Check if runner results in expected results
225
266
  if expected_results:
@@ -1,4 +1,4 @@
1
- from secator.cli import ALL_WORKFLOWS
1
+ from secator.loader import get_configs_by_type
2
2
  from secator.runners import Workflow
3
3
 
4
4
 
@@ -21,7 +21,7 @@ class DynamicWorkflow(Workflow):
21
21
 
22
22
 
23
23
  DYNAMIC_WORKFLOWS = {}
24
- for workflow in ALL_WORKFLOWS:
24
+ for workflow in get_configs_by_type('workflow'):
25
25
  instance = DynamicWorkflow(workflow)
26
26
  DYNAMIC_WORKFLOWS[workflow.name] = instance
27
27
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secator
3
- Version: 0.15.0
3
+ Version: 0.16.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
@@ -21,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.11
21
21
  Requires-Python: >=3.8
22
22
  Requires-Dist: beautifulsoup4<=5
23
23
  Requires-Dist: celery<6
24
+ Requires-Dist: click<8.2.0
24
25
  Requires-Dist: cpe<2
25
26
  Requires-Dist: distro<2
26
27
  Requires-Dist: dotmap<2
@@ -121,41 +122,41 @@ and it is designed to improve productivity for pentesters and security researche
121
122
 
122
123
  `secator` integrates the following tools:
123
124
 
124
- | Name | Description | Category |
125
- |---------------------------------------------------------------|--------------------------------------------------------------------------------|-----------------|
126
- | [arjun](https://github.com/s0md3v/Arjun) | HTTP Parameter Discovery Suite. | |
127
- | [gitleaks](https://github.com/gitleaks/gitleaks) | Tool for detecting secrets like passwords, API keys, tokens, etc. | |
128
- | [testssl](https://github.com/testssl/testssl.sh) | SSL/TLS security scanner, including ciphers, protocols and cryptographic flaws.| |
129
- | [wafw00f](https://github.com/EnableSecurity/wafw00f) | Web Application Firewall Fingerprinting tool. | |
130
- | [wpprobe](https://github.com/Chocapikk/wpprobe) | Fast wordpress plugin enumeration tool. | |
131
- | [httpx](https://github.com/projectdiscovery/httpx) | Fast HTTP prober. | `http` |
132
- | [cariddi](https://github.com/edoardottt/cariddi) | Fast crawler and endpoint secrets / api keys / tokens matcher. | `http/crawler` |
133
- | [gau](https://github.com/lc/gau) | Offline URL crawler (Alien Vault, The Wayback Machine, Common Crawl, URLScan). | `http/crawler` |
134
- | [gospider](https://github.com/jaeles-project/gospider) | Fast web spider written in Go. | `http/crawler` |
135
- | [katana](https://github.com/projectdiscovery/katana) | Next-generation crawling and spidering framework. | `http/crawler` |
136
- | [dirsearch](https://github.com/maurosoria/dirsearch) | Web path discovery. | `http/fuzzer` |
137
- | [feroxbuster](https://github.com/epi052/feroxbuster) | Simple, fast, recursive content discovery tool written in Rust. | `http/fuzzer` |
138
- | [ffuf](https://github.com/ffuf/ffuf) | Fast web fuzzer written in Go. | `http/fuzzer` |
139
- | [h8mail](https://github.com/khast3x/h8mail) | Email OSINT and breach hunting tool. | `osint` |
140
- | [dnsx](https://github.com/projectdiscovery/dnsx) | Fast and multi-purpose DNS toolkit. | `recon/dns` |
141
- | [dnsxbrute](https://github.com/projectdiscovery/dnsx) | Fast and multi-purpose DNS toolkit (bruteforce mode). | `recon/dns` |
142
- | [subfinder](https://github.com/projectdiscovery/subfinder) | Fast subdomain finder. | `recon/dns` |
143
- | [fping](https://fping.org/) | Find alive hosts on local networks. | `recon/ip` |
144
- | [mapcidr](https://github.com/projectdiscovery/mapcidr) | Expand CIDR ranges into IPs. | `recon/ip` |
145
- | [naabu](https://github.com/projectdiscovery/naabu) | Fast port discovery tool. | `recon/port` |
146
- | [maigret](https://github.com/soxoj/maigret) | Hunt for user accounts across many websites. | `recon/user` |
147
- | [gf](https://github.com/tomnomnom/gf) | A wrapper around grep to avoid typing common patterns. | `tagger` |
148
- | [trivy](https://github.com/aquasecurity/trivy) | Comprehensive and versatile security scanner. | `vuln` |
149
- | [grype](https://github.com/anchore/grype) | A vulnerability scanner for container images and filesystems. | `vuln/code` |
150
- | [dalfox](https://github.com/hahwul/dalfox) | Powerful XSS scanning tool and parameter analyzer. | `vuln/http` |
151
- | [msfconsole](https://docs.rapid7.com/metasploit/msf-overview) | CLI to access and work with the Metasploit Framework. | `vuln/http` |
152
- | [wpscan](https://github.com/wpscanteam/wpscan) | WordPress Security Scanner | `vuln/multi` |
153
- | [nmap](https://github.com/nmap/nmap) | Vulnerability scanner using NSE scripts. | `vuln/multi` |
154
- | [nuclei](https://github.com/projectdiscovery/nuclei) | Fast and customisable vulnerability scanner based on simple YAML based DSL. | `vuln/multi` |
155
- | [bbot](https://github.com/blacklanternsecurity/bbot) | Multipurpose scanner. | `multi` |
156
- | [searchsploit](https://gitlab.com/exploit-database/exploitdb) | Exploit searcher based on ExploitDB. | `exploit/search`|
157
- | [bup](https://github.com/laluka/bypass-url-parser) | 40X bypasser. | `http` |
158
-
125
+ <!-- START_TOOLS_TABLE -->
126
+ | Name | Description | Category |
127
+ |-----------------------------------------------------------------|----------------------------------------------------------------------------------|-------------------|
128
+ | [arjun](https://github.com/s0md3v/Arjun) | HTTP Parameter Discovery Suite. | `url/fuzz/params` |
129
+ | [bbot](https://github.com/blacklanternsecurity/bbot) | Multipurpose scanner. | `vuln/scan` |
130
+ | [bup](https://github.com/laluka/bypass-url-parser) | 40X bypasser. | `url/bypass` |
131
+ | [cariddi](https://github.com/edoardottt/cariddi) | Crawl endpoints, secrets, api keys, extensions, tokens... | `url/crawl` |
132
+ | [dalfox](https://github.com/hahwul/dalfox) | Powerful open source XSS scanning tool. | `url/fuzz` |
133
+ | [dirsearch](https://github.com/maurosoria/dirsearch) | Advanced web path brute-forcer. | `url/fuzz` |
134
+ | [dnsx](https://github.com/projectdiscovery/dnsx) | dnsx is a fast and multi-purpose DNS toolkit designed for running various retryabledns library. | `dns/fuzz` |
135
+ | [feroxbuster](https://github.com/epi052/feroxbuster) | Simple, fast, recursive content discovery tool written in Rust | `url/fuzz` |
136
+ | [ffuf](https://github.com/ffuf/ffuf) | Fast web fuzzer written in Go. | `url/fuzz` |
137
+ | [fping](https://github.com/schweikert/fping) | Send ICMP echo probes to network hosts, similar to ping, but much better. | `ip/recon` |
138
+ | [gau](https://github.com/lc/gau) | Fetch known URLs from AlienVault's Open Threat Exchange, the Wayback Machine, Common Crawl, and URLScan. | `pattern/scan` |
139
+ | [gf](https://github.com/tomnomnom/gf) | Wrapper around grep, to help you grep for things. | `pattern/scan` |
140
+ | [gitleaks](https://github.com/gitleaks/gitleaks) | Tool for detecting secrets like passwords, API keys, and tokens in git repos, files, and stdin. | `secret/scan` |
141
+ | [gospider](https://github.com/jaeles-project/gospider) | Fast web spider written in Go. | `url/crawl` |
142
+ | [grype](https://github.com/anchore/grype) | Vulnerability scanner for container images and filesystems. | `vuln/scan` |
143
+ | [h8mail](https://github.com/khast3x/h8mail) | Email information and password lookup tool. | `user/recon/email` |
144
+ | [httpx](https://github.com/projectdiscovery/httpx) | Fast and multi-purpose HTTP toolkit. | `url/probe` |
145
+ | [katana](https://github.com/projectdiscovery/katana) | Next-generation crawling and spidering framework. | `url/crawl` |
146
+ | [maigret](https://github.com/soxoj/maigret) | Collect a dossier on a person by username. | `user/recon/username` |
147
+ | [mapcidr](https://github.com/projectdiscovery/mapcidr) | Utility program to perform multiple operations for a given subnet/cidr ranges. | `ip/recon` |
148
+ | [msfconsole](https://docs.rapid7.com/metasploit/msf-overview/) | CLI to access and work with the Metasploit Framework. | `exploit/attack` |
149
+ | [naabu](https://github.com/projectdiscovery/naabu) | Port scanning tool written in Go. | `port/scan` |
150
+ | [nmap](https://github.com/nmap/nmap) | Network Mapper is a free and open source utility for network discovery and security auditing. | `port/scan` |
151
+ | [nuclei](https://github.com/projectdiscovery/nuclei) | Fast and customisable vulnerability scanner based on simple YAML based DSL. | `vuln/scan` |
152
+ | [searchsploit](https://gitlab.com/exploit-database/exploitdb) | Exploit searcher based on ExploitDB. | `exploit/recon` |
153
+ | [subfinder](https://github.com/projectdiscovery/subfinder) | Fast passive subdomain enumeration tool. | `dns/recon` |
154
+ | [testssl](https://github.com/testssl/testssl.sh) | SSL/TLS security scanner, including ciphers, protocols and cryptographic flaws. | `dns/recon/tls` |
155
+ | [trivy](https://github.com/aquasecurity/trivy) | Comprehensive and versatile security scanner. | `vuln/scan` |
156
+ | [wafw00f](https://github.com/EnableSecurity/wafw00f) | Web Application Firewall Fingerprinting tool. | `waf/scan` |
157
+ | [wpprobe](https://github.com/Chocapikk/wpprobe) | Fast wordpress plugin enumeration tool. | `vuln/scan/wordpress` |
158
+ | [wpscan](https://github.com/wpscanteam/wpscan) | Wordpress security scanner. | `vuln/scan/wordpress` |
159
+ <!-- END_TOOLS_TABLE -->
159
160
 
160
161
  Feel free to request new tools to be added by opening an issue, but please
161
162
  check that the tool complies with our selection criterias before doing so. If it doesn't but you still want to integrate it into `secator`, you can plug it in (see the [dev guide](https://docs.freelabz.com/for-developers/writing-custom-tasks)).
@@ -0,0 +1,132 @@
1
+ secator/.gitignore,sha256=da8MUc3hdb6Mo0WjZu2upn5uZMbXcBGvhdhTQ1L89HI,3093
2
+ secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ secator/celery.py,sha256=9sdgWHg1AgIu_RrqWffjBLSVFL0cbS71n4pjhmnFYiM,10037
4
+ secator/celery_signals.py,sha256=R4ZNBPKSxUvesGCvZ7MXoRkWNOTMS5hraZzjLh5sQ0o,4191
5
+ secator/celery_utils.py,sha256=vhL5ZxXDn3ODvyVxMijKyUTJ1dOisMDjF_PhFUyOVSA,9451
6
+ secator/cli.py,sha256=lzgttr8-Hib1X6bGi8PCOfX90incum7ZFR5x46cDZ34,60887
7
+ secator/cli_helper.py,sha256=EJFl80fd1HcgMYbmiddMZssCD32YDiFLnr-UbLp61aQ,13720
8
+ secator/click.py,sha256=pg7XPI7-wAhhEhd4aeAC8vHSqKi-H0zeFRlh0T-ayYg,2662
9
+ secator/config.py,sha256=4bZ5i5NuAhLDv4hYr9tXwnwavAZMd_P8YAt8_4YB6gQ,20778
10
+ secator/cve.py,sha256=j47VOGyZjOvCY_xwVYS9fiXQPKHL5bPRtCnVAmbQthE,21356
11
+ secator/decorators.py,sha256=uygU8MguxEO0BKXRvF4Nn2QEDnjqdIer8ReBj_j9ALg,88
12
+ secator/definitions.py,sha256=sJaR9e_4aEgAo7cVzYQcD2lotXQPN_3lze_qWhKvo1M,3275
13
+ secator/installer.py,sha256=oWHzUXrEp8D6oPiFHjWcOvDjqMLRhftB7kG-OcCg7PY,21120
14
+ secator/loader.py,sha256=gXtjbn5f-890M7fI5ZWjBlli7eBrNpQt8o8I0C4LuS8,3870
15
+ secator/report.py,sha256=4lEjW_GzDgsPBe1eQHX4ntcHWs0nsAMIbrNMw0UfWHc,4025
16
+ secator/rich.py,sha256=jITAXV_Wgj32Q7FfkssDN-DMD8TxK1wwlrIlkaCNc70,3960
17
+ secator/template.py,sha256=vLp-4cmg05YDKyvqmPtKoclH-b_NamRKvr_qprIPSGA,9905
18
+ secator/thread.py,sha256=EqilUiqunUmVLHvZQiPl7GUYXHXVneDpI8crhqKKT_4,562
19
+ secator/tree.py,sha256=zxZ1rXE5jzipyNNUVuTDoeq35qA-7h5yAZ4mE230ZUQ,7000
20
+ secator/utils.py,sha256=TUVUjVNbKfp1vCItP8-PjWIUi1DBrCDr_kJXWFbZocg,21929
21
+ secator/utils_test.py,sha256=cI8JRhKhgq9X5c8Lvvhs-T_C2UxxHY1wexVo4qBStS4,10131
22
+ secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ secator/configs/profiles/aggressive.yaml,sha256=CXsCD76zrS93Iy47H-SUeEm3Ofl58H12dOr6rhm5sUg,159
25
+ secator/configs/profiles/http_headless.yaml,sha256=b-2VtoNWOgNLLX9P61syFtMpYRX4Qi_tfZPFJk4U1OU,121
26
+ secator/configs/profiles/http_record.yaml,sha256=C6kUqiJI_8bENBRRtgGdLf6_rtKoeR1LNN2g1iGelMg,154
27
+ secator/configs/profiles/insane.yaml,sha256=t3Z0fSy-tJkasMoPPViqxicTo0So5gnF3kfCBWIsR6Q,152
28
+ secator/configs/profiles/paranoid.yaml,sha256=P3jONEyS9qIU5OPhBpEmlzc1AMJVC6ncIBR3GwJIr8Q,128
29
+ secator/configs/profiles/polite.yaml,sha256=yZ2rtUMpSf-xMD7ZBFd6QS7XfYPEOSZ0Sn65lVF9M54,138
30
+ secator/configs/profiles/sneaky.yaml,sha256=TOouDi-JQ3ZGZW9t7xbax-UvB-r2IsTr9sONwSRGo88,147
31
+ secator/configs/profiles/tor.yaml,sha256=qQNUqKS236jHp_IuQlWRL6k9w4lMqvaaLmhjVxjgPbY,92
32
+ secator/configs/scans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ secator/configs/scans/domain.yaml,sha256=n0UJgnu8dAeSPnYSJW6xWr5AQI_kDNeXoeJf7goX19E,324
34
+ secator/configs/scans/host.yaml,sha256=9O_fMcZSvy-FpFat2N5OWMUc-Nc2V0VKC7hx1_2Bd38,190
35
+ secator/configs/scans/network.yaml,sha256=vfzboKoTiS3pNz-efxb2PgQGmp_6YuQVAwgqoGQrN3o,211
36
+ secator/configs/scans/subdomain.yaml,sha256=brYaBbdnVVvSDiz6eVahKChxOUG0GBi806fR_tUaunk,330
37
+ secator/configs/scans/url.yaml,sha256=xJwGADKMvFGxMgp_xnsUbSjSFBCeFoAXL7wBwtyFFz4,145
38
+ secator/configs/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ secator/configs/workflows/cidr_recon.yaml,sha256=A5wg3bImdC8H1SoCSFYsgnrLm9FMD7GcQgKacGCmAOE,529
40
+ secator/configs/workflows/code_scan.yaml,sha256=7mJi7Z42tr6vGG2j2Xy-nl5arITk9NyrRaQZeh7qC3Y,208
41
+ secator/configs/workflows/host_recon.yaml,sha256=HKDAkBZXT3m5SzKovs8dJdJEn5uFHCVZq-0fFovZRKg,1571
42
+ secator/configs/workflows/subdomain_recon.yaml,sha256=VOYcjYjHRRebe1TAYphh-zpSq8W5_q-6DDeMja2dlek,1896
43
+ secator/configs/workflows/url_bypass.yaml,sha256=_uBzDhevJ2DOD9UkE25n7ZrmnjjfdU3lV3mnUudgdU0,180
44
+ secator/configs/workflows/url_crawl.yaml,sha256=JqpTNw11NLsLCcHFHllTYSqQ9ingO1uwDoZ7c3YqxJI,1121
45
+ secator/configs/workflows/url_dirsearch.yaml,sha256=_4TdMSVLt2lIbx8ucn0R04tkMUqhG2i-m3JxCofx4mo,670
46
+ secator/configs/workflows/url_fuzz.yaml,sha256=a-ZvZrcPBaeVhRrxox8fq25SKMJflyAkKWLqJeC3xD4,911
47
+ secator/configs/workflows/url_params_fuzz.yaml,sha256=ufGbW4GUtEZee0M1WPVo0w6ZCEH6xmuDO6VCjPaw8AQ,796
48
+ secator/configs/workflows/url_vuln.yaml,sha256=35uY0SpQGgaPulkBkQUcy0AdVwjslEJfVGhM9DQAXkk,1817
49
+ secator/configs/workflows/user_hunt.yaml,sha256=f6LpXcPrFFy615n9FUfoRa3HOeE0IYCHvGvLwUcGDYc,182
50
+ secator/configs/workflows/wordpress.yaml,sha256=n-I1uNZEPS6oVmF7Rn996K85csSenTtoVycJt0PWnzk,340
51
+ secator/exporters/__init__.py,sha256=PnT9Ra4ArHt9VQTK5Cpc4CPY89XRwLLUGtZ8nUcknm0,415
52
+ secator/exporters/_base.py,sha256=wM1UT1PsSP1gX4gylvpQjBeAsk59F2Q2eFrt7AFU7jM,68
53
+ secator/exporters/console.py,sha256=vbmSln4UrIpzjCQCs6JdZ2VRxjX8qQ1gznCPx89xbX0,263
54
+ secator/exporters/csv.py,sha256=gvwS0dgYhUKjjyNX-jal8SvKQrkjiUEwzDzC4zN8UO4,1068
55
+ secator/exporters/gdrive.py,sha256=6Nj9RTOhraBOalm2H8Fp1tItD2ZrSfgtY4SiXViefcQ,4201
56
+ secator/exporters/json.py,sha256=1ZtDf8RksPO_V0zIvnwDUxMUb630DCElAMM8_RQvyAo,474
57
+ secator/exporters/table.py,sha256=zYNmwNGEyB6dTJ1ATVkrv-AOuPjrW6tvk1_4naLQo8Q,1114
58
+ secator/exporters/txt.py,sha256=t_FykaJOxs4UUlqiH4k6HCccEqYqc8e3iNZndL_CKPg,739
59
+ secator/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ secator/hooks/gcs.py,sha256=MIhntyWYz9BZdTXhWl5JznaczSq1_7fl3TVqPufuTSo,1490
61
+ secator/hooks/mongodb.py,sha256=5Rbmjd6JuLNH_1GgkumMX1TeuMuU88gzYxoDMkHh1OY,7638
62
+ secator/output_types/__init__.py,sha256=CJcYy2_Ek-opKiBz4wFlDHQBTm3t0JVwZ4w_2Jxoeuw,1291
63
+ secator/output_types/_base.py,sha256=9iBqPdtlfJBldBiuC729KamHHGbKhwo69P-2UNwz-3Q,2874
64
+ secator/output_types/certificate.py,sha256=IXW3GN0JRmuDgoedr8NV8ccuRQOuoInNZWnAKL8zeqY,3040
65
+ secator/output_types/error.py,sha256=lA7DDNUb8iuw3nbanzMD0BjQjOEwUEQPAMZy_9sRs9o,1540
66
+ secator/output_types/exploit.py,sha256=-BKTqPBg94rVgjw8YSmcYuBCI2x-73WwMd9ITP9qr3Y,1750
67
+ secator/output_types/info.py,sha256=HcOwdF4OPw3Qni_X0c8bDSLqq2LZLMjIwwLgtEwBwHE,820
68
+ secator/output_types/ip.py,sha256=wH06b0-_F4_7g0Bcfdh7EpDW50IdjESQoqZHPuVK0hg,1217
69
+ secator/output_types/port.py,sha256=JdqXnEF8XuwaWFMT8Vghj7fKLwtsImuUdRfMmITgmWM,1879
70
+ secator/output_types/progress.py,sha256=alRcuEUv-2_ExmYOEa0p2f6GIp-DerGglgI4JLdowjQ,1213
71
+ secator/output_types/record.py,sha256=HnsKxlIhkgswA_Yjz7BZ1vDjP53l6OJ0BCOtCSDwCSY,1250
72
+ secator/output_types/stat.py,sha256=7ZNWgfrJWONKeJx931eEFngEV4WhJaHs38AUUxxhZC8,1248
73
+ secator/output_types/state.py,sha256=TofrVIL1oPTnq8-x6pATVVLEa7Z4GGYtUSqWmrcGxF4,981
74
+ secator/output_types/subdomain.py,sha256=ivJ_2kmrJ8hdB8wmvRJYlKV1BcE3Cds_vAI_5wL7ES4,1344
75
+ secator/output_types/tag.py,sha256=6oNyDWydngLt5Rj7ZIcUNbJV6EfRsw0lrPDHRdZYFKA,1641
76
+ secator/output_types/target.py,sha256=8XTxV3YcJUb7cDSBOqtTk5e9_pf-vIQArXeJPDik5Ic,1052
77
+ secator/output_types/url.py,sha256=rPbDek2zmvGK2mcjQfQoi6Ij7gKTyItIaDxMT04f2TE,3628
78
+ secator/output_types/user_account.py,sha256=EvF3Ebg9eXS_-iDguU1dSHZ9wAsJimEJznDvpSt_RSY,1417
79
+ secator/output_types/vulnerability.py,sha256=eWJDFCYf3sP5-hPKQT-4Kd5id9bJzTW2u-O_d_4P6EA,2849
80
+ secator/output_types/warning.py,sha256=iy949Aj5OXJLWif7HFB5EvjcYrgKHAzIP9ffyLTV7LA,830
81
+ secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,290
82
+ secator/runners/_base.py,sha256=dy07vXC4STyLepktW4WFpH4tBiyiJfe_MLxgGu555v0,40466
83
+ secator/runners/_helpers.py,sha256=TeebZnpo4cp-9tpgPlDoFm_gmr00_CERAC1aOYhTzA4,6281
84
+ secator/runners/celery.py,sha256=bqvDTTdoHiGRCt0FRvlgFHQ_nsjKMP5P0PzGbwfCj_0,425
85
+ secator/runners/command.py,sha256=5fmwmqkUkomceLUSp2rtJvn_ydE2gI95rqS4WKWciYI,30200
86
+ secator/runners/scan.py,sha256=axT_OmGhixogCPMUS1OUeMLnFtk8PxY7zL9NYCugFVU,2578
87
+ secator/runners/task.py,sha256=PrkVns8UAGht2JbCmCUWycA6B39Z5oeMmAMq69KtXKI,2199
88
+ secator/runners/workflow.py,sha256=YnpTSdmp54d55vORe4khWLSx2J7gtDFNryKfZXYAWnY,6076
89
+ secator/scans/__init__.py,sha256=Tr-plKBxdv_QNqOGe63-UZwz_-GzGGJrLuPMmjFKwao,654
90
+ secator/serializers/__init__.py,sha256=OP5cmFl77ovgSCW_IDcZ21St2mUt5UK4QHfrsK2KvH8,248
91
+ secator/serializers/dataclass.py,sha256=Fo2ZVsVjSF0KMq81JT8mGZxsKsxyueShlDsh9PgwWHE,896
92
+ secator/serializers/json.py,sha256=UJwAymRzjF-yBKOgz1MTOyBhQcdQg7fOKRXgmHIu8fo,411
93
+ secator/serializers/regex.py,sha256=fh-fE0RGvKSGKByFtwmKsWriRpZR9PXZQsY9JybHBWI,489
94
+ secator/tasks/__init__.py,sha256=Op0O0Aa8c124AfDG-cEB9VLRsXZ1wXTpVrT3g-wxMNg,184
95
+ secator/tasks/_categories.py,sha256=yns_5PBKStp6TJEeaYB6yFUjkFMmLh7LEuxcNcADNro,14962
96
+ secator/tasks/arjun.py,sha256=WdRZtTCd2Ejbv5HlLS_FoWVKgGpMsR6RCDekV2kR788,3061
97
+ secator/tasks/bbot.py,sha256=moIkwd52jCKaeg1v6Nv4Gfmd4GPObo9c9nwOzQvf-2M,9236
98
+ secator/tasks/bup.py,sha256=bl5NzoPr_YLy9Ei7JU9CM0-bW9iZsuFe3Ft8KJjN9ws,3849
99
+ secator/tasks/cariddi.py,sha256=iT-2Aryw2PPrzPedc-N_E--DxKFz_gSrcJj4z5PGQf8,4142
100
+ secator/tasks/dalfox.py,sha256=v-TI5B-PCZRe6dU9caQfGJPyAPSbRRCohdIlIFvNAq8,2551
101
+ secator/tasks/dirsearch.py,sha256=_6xPZYpNsbwR4d9NFQw3NXxQKn5zyfO1lyrWzl5p7NY,2469
102
+ secator/tasks/dnsx.py,sha256=2qNC-wSjS33geuHMOwuBapLwKEvWTlDgnmvM67ZSJVA,4220
103
+ secator/tasks/feroxbuster.py,sha256=dz_DGw_CbVGw9AeFjtrAEQwoxDgKzYC-KT9VLwE5UlE,3022
104
+ secator/tasks/ffuf.py,sha256=UjSnbbbeBE8fIOiy98akBqaO9gBtZWb7vYrNs9DjUX8,4119
105
+ secator/tasks/fping.py,sha256=uTOq24DcNQpNgpXQlFV4xxBdn8P9gJWM5mmhkobqW-Y,1575
106
+ secator/tasks/gau.py,sha256=SJaza2yQoMeJeE6TOCRrRv0udbwRIoiXX4gRE64GXoU,1804
107
+ secator/tasks/gf.py,sha256=svNRzaBr_DYW3QGFoPmUBWZh0Xm07XDS2bbNH-tfcA4,1028
108
+ secator/tasks/gitleaks.py,sha256=cajL0NDm7dRFpcq4fJOCSkQMpquUiOy9HODq93h36Xg,2638
109
+ secator/tasks/gospider.py,sha256=5cEgBCCGWIGE05XfAkjMhTap9V-MwLK2lm1iqxcbj-M,2513
110
+ secator/tasks/grype.py,sha256=OasQs5WQwgt--o6M2_uh3RYZZaA3-difweCS46Uc5-w,2573
111
+ secator/tasks/h8mail.py,sha256=XsDnL8LPk_jIHfJhqeYMj2423epk0NADorjd_JhBa9o,2033
112
+ secator/tasks/httpx.py,sha256=0Umt2ouL36TELxmoaZ4dKSGXgipN3ve__IQFgUKrWZQ,6498
113
+ secator/tasks/katana.py,sha256=NQimtCi7qgIIK6npzzm8OKZSVsBWxuj950W_4VNUa8U,6164
114
+ secator/tasks/maigret.py,sha256=QuQcRUghVx1PmXhZFVUD4-PGiWWN5niYOh2FJyviP6s,2161
115
+ secator/tasks/mapcidr.py,sha256=tMTHQspHSs92F4R-9HVYjFBpiu9ZhxoJSNvpd8KwKKc,1057
116
+ secator/tasks/msfconsole.py,sha256=3VjAEpwEAFDcGxyYMhKyDLHRObXELYFx_H306fzmtMw,6566
117
+ secator/tasks/naabu.py,sha256=dI-NNb4MQzyCgnvfkstkn3IyjUpW0ORbftcsVFmx994,2443
118
+ secator/tasks/nmap.py,sha256=bGfPrB_JD_XaVccUJTvMAN81cNfmWo2gI4Hd6P_ZRLI,16986
119
+ secator/tasks/nuclei.py,sha256=F5r7DQu8XBGHn518QWs8DSKoRVEGSGGMMDTcOW5bEHk,5010
120
+ secator/tasks/searchsploit.py,sha256=gwP05nLdu3yBnpMrAVu7S2CIjgCtcS3w9_1K0Tp9WBM,3503
121
+ secator/tasks/subfinder.py,sha256=Q7YIBSyFxHWXSskmn2dEWPxU_HZ9rZCMU3Kl4sdvPwc,1297
122
+ secator/tasks/testssl.py,sha256=rrpKerOYcNA4NJr9RQ_uAtAbl3W50FRp3bPo3yD8EEg,8787
123
+ secator/tasks/trivy.py,sha256=loIVQeHlYzz-_mVI6-HrL1O3H-22LA0vl4J9Ja_fy2I,3307
124
+ secator/tasks/wafw00f.py,sha256=9CnV9F7ZrykO27F3PAb5HtwULDMYEKGSTbz-jh0kc2g,3189
125
+ secator/tasks/wpprobe.py,sha256=1QPJ-7JvhL7LFvjUTAmqpH2Krp-Qmi079lonso16YPQ,3229
126
+ secator/tasks/wpscan.py,sha256=dBkbG9EODHDUBAA8uNVULX4SdVgTCAi_F1T1oCfRbsI,5852
127
+ secator/workflows/__init__.py,sha256=XOviyjSylZ4cuVmmQ76yuqZRdmvOEghqAnuw_4cLmfk,702
128
+ secator-0.16.0.dist-info/METADATA,sha256=BkmXHua4U9TX3HC4MeFAFGDDiyAtohXv-SCbW3giboE,17253
129
+ secator-0.16.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
130
+ secator-0.16.0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
131
+ secator-0.16.0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
132
+ secator-0.16.0.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- type: profile
2
- name: default
3
- description: "General scanning"
4
- opts:
5
- rate_limit: 1000
6
- delay: 0
7
- timeout: 5
8
- retries: 3
@@ -1,11 +0,0 @@
1
- type: workflow
2
- name: url_nuclei
3
- alias: url_nuclei
4
- description: URL vulnerability scan (nuclei)
5
- tags: [http, nuclei]
6
- input_types:
7
- - url
8
- tasks:
9
- nuclei:
10
- description: Search for HTTP vulns
11
- exclude_tags: [network, ssl, file, dns, osint, token-spray, headers]
@@ -1,42 +0,0 @@
1
- from secator.decorators import task
2
- from secator.definitions import (DOMAIN, HOST, RATE_LIMIT, RETRIES, THREADS, WORDLIST, EXTRA_DATA)
3
- from secator.config import CONFIG
4
- from secator.output_types import Subdomain
5
- from secator.serializers import JSONSerializer
6
- from secator.tasks._categories import ReconDns
7
- from secator.utils import process_wordlist
8
-
9
-
10
- @task()
11
- class dnsxbrute(ReconDns):
12
- """dnsx is a fast and multi-purpose DNS toolkit designed for running various library."""
13
- cmd = 'dnsx'
14
- tags = ['dns', 'fuzz']
15
- json_flag = '-json'
16
- input_flag = '-domain'
17
- input_types = [HOST]
18
- file_flag = '-domain'
19
- opt_key_map = {
20
- RATE_LIMIT: 'rate-limit',
21
- RETRIES: 'retry',
22
- THREADS: 'threads',
23
- }
24
- opts = {
25
- WORDLIST: {'type': str, 'short': 'w', 'default': CONFIG.wordlists.defaults.dns, 'process': process_wordlist, 'help': 'Wordlist to use'}, # noqa: E501
26
- 'trace': {'is_flag': True, 'default': False, 'help': 'Perform dns tracing'},
27
- }
28
- item_loaders = [JSONSerializer()]
29
- output_map = {
30
- Subdomain: {
31
- HOST: 'host',
32
- DOMAIN: lambda x: ".".join(x['host'].split('.')[1:]),
33
- EXTRA_DATA: lambda x: {
34
- 'resolver': x['resolver'],
35
- 'status_code': x['status_code']
36
- }
37
- }
38
- }
39
- install_version = 'v1.2.2'
40
- install_cmd = 'go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@[install_version]'
41
- install_github_handle = 'projectdiscovery/dnsx'
42
- profile = 'io'