secator 0.1.0__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.

Files changed (99) hide show
  1. secator/.gitignore +162 -0
  2. secator/__init__.py +0 -0
  3. secator/celery.py +421 -0
  4. secator/cli.py +927 -0
  5. secator/config.py +137 -0
  6. secator/configs/__init__.py +0 -0
  7. secator/configs/profiles/__init__.py +0 -0
  8. secator/configs/profiles/aggressive.yaml +7 -0
  9. secator/configs/profiles/default.yaml +9 -0
  10. secator/configs/profiles/stealth.yaml +7 -0
  11. secator/configs/scans/__init__.py +0 -0
  12. secator/configs/scans/domain.yaml +18 -0
  13. secator/configs/scans/host.yaml +14 -0
  14. secator/configs/scans/network.yaml +17 -0
  15. secator/configs/scans/subdomain.yaml +8 -0
  16. secator/configs/scans/url.yaml +12 -0
  17. secator/configs/workflows/__init__.py +0 -0
  18. secator/configs/workflows/cidr_recon.yaml +28 -0
  19. secator/configs/workflows/code_scan.yaml +11 -0
  20. secator/configs/workflows/host_recon.yaml +41 -0
  21. secator/configs/workflows/port_scan.yaml +34 -0
  22. secator/configs/workflows/subdomain_recon.yaml +33 -0
  23. secator/configs/workflows/url_crawl.yaml +29 -0
  24. secator/configs/workflows/url_dirsearch.yaml +29 -0
  25. secator/configs/workflows/url_fuzz.yaml +35 -0
  26. secator/configs/workflows/url_nuclei.yaml +11 -0
  27. secator/configs/workflows/url_vuln.yaml +55 -0
  28. secator/configs/workflows/user_hunt.yaml +10 -0
  29. secator/configs/workflows/wordpress.yaml +14 -0
  30. secator/decorators.py +346 -0
  31. secator/definitions.py +183 -0
  32. secator/exporters/__init__.py +12 -0
  33. secator/exporters/_base.py +3 -0
  34. secator/exporters/csv.py +29 -0
  35. secator/exporters/gdrive.py +118 -0
  36. secator/exporters/json.py +14 -0
  37. secator/exporters/table.py +7 -0
  38. secator/exporters/txt.py +24 -0
  39. secator/hooks/__init__.py +0 -0
  40. secator/hooks/mongodb.py +212 -0
  41. secator/output_types/__init__.py +24 -0
  42. secator/output_types/_base.py +95 -0
  43. secator/output_types/exploit.py +50 -0
  44. secator/output_types/ip.py +33 -0
  45. secator/output_types/port.py +45 -0
  46. secator/output_types/progress.py +35 -0
  47. secator/output_types/record.py +34 -0
  48. secator/output_types/subdomain.py +42 -0
  49. secator/output_types/tag.py +46 -0
  50. secator/output_types/target.py +30 -0
  51. secator/output_types/url.py +76 -0
  52. secator/output_types/user_account.py +41 -0
  53. secator/output_types/vulnerability.py +97 -0
  54. secator/report.py +95 -0
  55. secator/rich.py +123 -0
  56. secator/runners/__init__.py +12 -0
  57. secator/runners/_base.py +873 -0
  58. secator/runners/_helpers.py +154 -0
  59. secator/runners/command.py +674 -0
  60. secator/runners/scan.py +67 -0
  61. secator/runners/task.py +107 -0
  62. secator/runners/workflow.py +137 -0
  63. secator/serializers/__init__.py +8 -0
  64. secator/serializers/dataclass.py +33 -0
  65. secator/serializers/json.py +15 -0
  66. secator/serializers/regex.py +17 -0
  67. secator/tasks/__init__.py +10 -0
  68. secator/tasks/_categories.py +304 -0
  69. secator/tasks/cariddi.py +102 -0
  70. secator/tasks/dalfox.py +66 -0
  71. secator/tasks/dirsearch.py +88 -0
  72. secator/tasks/dnsx.py +56 -0
  73. secator/tasks/dnsxbrute.py +34 -0
  74. secator/tasks/feroxbuster.py +89 -0
  75. secator/tasks/ffuf.py +85 -0
  76. secator/tasks/fping.py +44 -0
  77. secator/tasks/gau.py +43 -0
  78. secator/tasks/gf.py +34 -0
  79. secator/tasks/gospider.py +71 -0
  80. secator/tasks/grype.py +78 -0
  81. secator/tasks/h8mail.py +80 -0
  82. secator/tasks/httpx.py +104 -0
  83. secator/tasks/katana.py +128 -0
  84. secator/tasks/maigret.py +78 -0
  85. secator/tasks/mapcidr.py +32 -0
  86. secator/tasks/msfconsole.py +176 -0
  87. secator/tasks/naabu.py +52 -0
  88. secator/tasks/nmap.py +341 -0
  89. secator/tasks/nuclei.py +97 -0
  90. secator/tasks/searchsploit.py +53 -0
  91. secator/tasks/subfinder.py +40 -0
  92. secator/tasks/wpscan.py +177 -0
  93. secator/utils.py +404 -0
  94. secator/utils_test.py +183 -0
  95. secator-0.1.0.dist-info/METADATA +379 -0
  96. secator-0.1.0.dist-info/RECORD +99 -0
  97. secator-0.1.0.dist-info/WHEEL +5 -0
  98. secator-0.1.0.dist-info/entry_points.txt +2 -0
  99. secator-0.1.0.dist-info/licenses/LICENSE +60 -0
secator/utils_test.py ADDED
@@ -0,0 +1,183 @@
1
+ import contextlib
2
+ import json
3
+ import os
4
+ import unittest.mock
5
+
6
+ from fp.fp import FreeProxy
7
+
8
+ from secator.definitions import (CIDR_RANGE, DEBUG, DELAY, DEPTH, EMAIL,
9
+ FOLLOW_REDIRECT, HEADER, HOST, IP, MATCH_CODES,
10
+ METHOD, PROXY, RATE_LIMIT, RETRIES,
11
+ THREADS, TIMEOUT, URL, USER_AGENT, USERNAME)
12
+ from secator.cli import ALL_WORKFLOWS, ALL_TASKS, ALL_SCANS
13
+ from secator.output_types import OutputType
14
+ from secator.rich import console
15
+ from secator.utils import load_fixture
16
+
17
+ #---------#
18
+ # GLOBALS #
19
+ #---------#
20
+ USE_PROXY = bool(int(os.environ.get('USE_PROXY', '0')))
21
+ TEST_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/tests/'
22
+ FIXTURES_DIR = f'{TEST_DIR}/fixtures'
23
+ USE_PROXY = bool(int(os.environ.get('USE_PROXY', '0')))
24
+
25
+ #------------#
26
+ # TEST TASKS #
27
+ #------------#
28
+ TEST_TASKS = os.environ.get('TEST_TASKS', '')
29
+ if TEST_TASKS:
30
+ TEST_TASKS = [cls for cls in ALL_TASKS if cls.__name__ in TEST_TASKS.split(',')]
31
+ else:
32
+ TEST_TASKS = ALL_TASKS
33
+
34
+ #----------------#
35
+ # TEST WORKFLOWS #
36
+ #----------------#
37
+ TEST_WORKFLOWS = os.environ.get('TEST_WORKFLOWS', '')
38
+ if TEST_WORKFLOWS:
39
+ TEST_WORKFLOWS = [config for config in ALL_WORKFLOWS if config.name in TEST_WORKFLOWS.split(',')]
40
+ else:
41
+ TEST_WORKFLOWS = ALL_WORKFLOWS
42
+
43
+ #------------#
44
+ # TEST SCANS #
45
+ #------------#
46
+ TEST_SCANS = os.environ.get('TEST_SCANS', '')
47
+ if TEST_SCANS:
48
+ TEST_SCANS = [config for config in ALL_SCANS if config.name in TEST_SCANS.split(',')]
49
+ else:
50
+ TEST_SCANS = ALL_SCANS
51
+
52
+ #-------------------#
53
+ # TEST INPUTS_TASKS #
54
+ #-------------------#
55
+ INPUTS_TASKS = {
56
+ URL: 'https://fake.com',
57
+ HOST: 'fake.com',
58
+ USERNAME: 'test',
59
+ IP: '192.168.1.23',
60
+ CIDR_RANGE: '192.168.1.0/24',
61
+ EMAIL: 'fake@fake.com'
62
+ }
63
+
64
+ #---------------------#
65
+ # TEST FIXTURES_TASKS #
66
+ #---------------------#
67
+ FIXTURES_TASKS = {
68
+ tool_cls: load_fixture(f'{tool_cls.__name__}_output', FIXTURES_DIR)
69
+ for tool_cls in TEST_TASKS
70
+ }
71
+
72
+ #-----------#
73
+ # TEST OPTS #
74
+ #-----------#
75
+ META_OPTS = {
76
+ HEADER: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1',
77
+ DELAY: 0,
78
+ DEPTH: 2,
79
+ FOLLOW_REDIRECT: True,
80
+ METHOD: 'GET',
81
+ MATCH_CODES: '200',
82
+ PROXY: FreeProxy(timeout=0.5).get() if USE_PROXY else False,
83
+ RATE_LIMIT: 10000,
84
+ RETRIES: 0,
85
+ THREADS: 50,
86
+ TIMEOUT: 1,
87
+ USER_AGENT: 'Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1',
88
+
89
+ # Individual tasks options
90
+ 'gf.pattern': 'xss',
91
+ 'nmap.output_path': load_fixture('nmap_output', FIXTURES_DIR, only_path=True, ext='.xml'), # nmap XML fixture
92
+ 'msfconsole.resource': load_fixture('msfconsole_input', FIXTURES_DIR, only_path=True),
93
+ 'dirsearch.output_path': load_fixture('dirsearch_output', FIXTURES_DIR, only_path=True),
94
+ 'maigret.output_path': load_fixture('maigret_output', FIXTURES_DIR, only_path=True),
95
+ 'wpscan.output_path': load_fixture('wpscan_output', FIXTURES_DIR, only_path=True),
96
+ 'h8mail.output_path': load_fixture('h8mail_output', FIXTURES_DIR, only_path=True),
97
+ 'h8mail.local_breach': load_fixture('h8mail_breach', FIXTURES_DIR, only_path=True)
98
+ }
99
+
100
+
101
+ def mock_subprocess_popen(output_list):
102
+ mock_process = unittest.mock.MagicMock()
103
+ mock_process.wait.return_value = 0
104
+ mock_process.stdout.readline.side_effect = output_list
105
+ mock_process.returncode = 0
106
+
107
+ def mock_popen(*args, **kwargs):
108
+ return mock_process
109
+
110
+ return unittest.mock.patch('subprocess.Popen', mock_popen)
111
+
112
+
113
+ @contextlib.contextmanager
114
+ def mock_command(cls, targets=[], opts={}, fixture=None, method=''):
115
+ mocks = []
116
+ if isinstance(fixture, dict):
117
+ fixture = [fixture]
118
+
119
+ is_list = isinstance(fixture, list)
120
+ if is_list:
121
+ for item in fixture:
122
+ if isinstance(item, dict):
123
+ mocks.append(json.dumps(item))
124
+ else:
125
+ mocks.append(item)
126
+ else:
127
+ mocks.append(fixture)
128
+
129
+ with mock_subprocess_popen(mocks):
130
+ command = cls(targets, **opts)
131
+ if method == 'run':
132
+ yield cls(targets, **opts).run()
133
+ elif method == 'si':
134
+ yield cls.si([], targets, **opts)
135
+ elif method in ['s', 'delay']:
136
+ yield getattr(cls, method)(targets, **opts)
137
+ else:
138
+ yield command
139
+
140
+
141
+ class CommandOutputTester: # Mixin for unittest.TestCase
142
+
143
+ def _test_task_output(
144
+ self,
145
+ results,
146
+ expected_output_keys=[],
147
+ expected_output_types=[],
148
+ expected_results=[],
149
+ empty_results_allowed=False):
150
+
151
+ if not isinstance(results, list):
152
+ results = [results]
153
+
154
+ try:
155
+ if not empty_results_allowed:
156
+ self.assertGreater(len(results), 0)
157
+
158
+ for item in results:
159
+
160
+ if DEBUG > 2:
161
+ console.log('\n', log_locals=True)
162
+
163
+ if DEBUG > 0 and isinstance(item, OutputType):
164
+ print(repr(item))
165
+
166
+ if expected_output_types:
167
+ self.assertIn(type(item), expected_output_types)
168
+
169
+ if expected_output_keys:
170
+ keys = [k for k in list(item.keys()) if not k.startswith('_')]
171
+ self.assertEqual(
172
+ set(keys).difference(set(expected_output_keys)),
173
+ set())
174
+
175
+ if expected_results:
176
+ for result in expected_results:
177
+ self.assertIn(result, results)
178
+
179
+ except Exception:
180
+ console.print('[bold red] failed[/]')
181
+ raise
182
+
183
+ console.print('[bold green] ok[/]')
@@ -0,0 +1,379 @@
1
+ Metadata-Version: 2.3
2
+ Name: secator
3
+ Version: 0.1.0
4
+ Summary: The pentester's swiss knife.
5
+ Project-URL: Homepage, https://github.com/freelabz/secator
6
+ Project-URL: Issues, https://github.com/freelabz/secator/issues
7
+ Author-email: FreeLabz <sales@freelabz.com>
8
+ License-File: LICENSE
9
+ Keywords: automation,cybersecurity,pentest,recon,vulnerability
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Information Technology
13
+ Classifier: License :: Free for non-commercial use
14
+ Classifier: Operating System :: Unix
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Requires-Dist: bs4<1
22
+ Requires-Dist: celery<6
23
+ Requires-Dist: cpe<2
24
+ Requires-Dist: dotmap<2
25
+ Requires-Dist: free-proxy<2
26
+ Requires-Dist: furl<3
27
+ Requires-Dist: humanize<5
28
+ Requires-Dist: ifaddr<1
29
+ Requires-Dist: jinja2<4
30
+ Requires-Dist: python-dotenv<2
31
+ Requires-Dist: pyyaml<7
32
+ Requires-Dist: requests<3
33
+ Requires-Dist: rich-click<1.7
34
+ Requires-Dist: rich<14
35
+ Requires-Dist: validators<1
36
+ Requires-Dist: xmltodict<1
37
+ Provides-Extra: dev
38
+ Requires-Dist: asciinema-automation<1; extra == 'dev'
39
+ Requires-Dist: coverage<8; extra == 'dev'
40
+ Requires-Dist: flake8<8; extra == 'dev'
41
+ Requires-Dist: watchdog<3; extra == 'dev'
42
+ Provides-Extra: google
43
+ Requires-Dist: google-api-python-client<3; extra == 'google'
44
+ Requires-Dist: gspread<7; extra == 'google'
45
+ Provides-Extra: mongodb
46
+ Requires-Dist: pymongo<5; extra == 'mongodb'
47
+ Provides-Extra: redis
48
+ Requires-Dist: redis<6; extra == 'redis'
49
+ Provides-Extra: trace
50
+ Requires-Dist: memray<2; extra == 'trace'
51
+ Requires-Dist: pyinstrument<5; extra == 'trace'
52
+ Provides-Extra: worker
53
+ Requires-Dist: eventlet<1; extra == 'worker'
54
+ Requires-Dist: flower<3; extra == 'worker'
55
+ Requires-Dist: gevent<25; extra == 'worker'
56
+ Description-Content-Type: text/markdown
57
+
58
+ <h1 align="center">
59
+ <img src="https://github.com/freelabz/secator/assets/9629314/ee203af4-e853-439a-af01-edeabfc4bf07/" width="400">
60
+ </h1>
61
+
62
+ <h4 align="center">The pentester's swiss knife.</h4>
63
+
64
+ <p align="center">
65
+ <!-- <a href="https://goreportcard.com/report/github.com/freelabz/secator"><img src="https://goreportcard.com/badge/github.com/freelabz/secator"></a> -->
66
+ <img src="https://img.shields.io/badge/python-3.6-blue.svg">
67
+ <a href="https://github.com/freelabz/secator/releases"><img src="https://img.shields.io/github/release/freelabz/secator"></a>
68
+ <a href="https://github.com/freelabz/secator/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-BSL%201.1-brightgreen.svg"></a>
69
+ <a href="https://pypi.org/project/secator/"><img src="https://img.shields.io/pypi/dm/secator"></a>
70
+ <a href="https://twitter.com/freelabz"><img src="https://img.shields.io/twitter/follow/freelabz.svg?logo=twitter"></a>
71
+ <a href="https://youtube.com/@FreeLabz"><img src="https://img.shields.io/youtube/channel/subscribers/UCu-F6SpU0h2NP18zBBP04cw?style=social&label=Subscribe%20%40FreeLabz"></a>
72
+ <!-- <a href="https://discord.gg/freelabz"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a> -->
73
+ </p>
74
+
75
+
76
+ <p align="center">
77
+ <a href="#features">Features</a> •
78
+ <a href="#supported-commands">Supported commands</a> •
79
+ <a href="#install-secator">Installation</a> •
80
+ <a href="#usage">Usage</a> •
81
+ <a href="https://docs.freelabz.com">Documentation</a>
82
+ </p>
83
+
84
+ `secator` is a task and workflow runner used for security assessments. It supports dozens of well-known security tools
85
+ and it is designed to improve productivity for pentesters and security researchers.
86
+
87
+ # Features
88
+
89
+ ![](images/short_demo.gif)
90
+
91
+ * **Curated list of commands**
92
+
93
+ * **Unified input options**
94
+
95
+ * **Unified output schema**
96
+
97
+ * **CLI and library usage**
98
+
99
+ * **Distributed options with Celery**
100
+
101
+ * **Complexity from simple tasks to complex workflows**
102
+
103
+ * **Customizable**
104
+
105
+
106
+ ## Supported tools
107
+
108
+ `secator` integrates the following tools:
109
+
110
+ | Name | Description | Category |
111
+ |---------------------------------------------------------------|--------------------------------------------------------------------------------|----------------|
112
+ | [httpx](https://github.com/projectdiscovery/httpx) | Fast HTTP prober. | `http` |
113
+ | [cariddi](https://github.com/edoardottt/cariddi) | Fast crawler and endpoint secrets / api keys / tokens matcher. | `http/crawler` |
114
+ | [gau](https://github.com/lc/gau) | Offline URL crawler (Alien Vault, The Wayback Machine, Common Crawl, URLScan). | `http/crawler` |
115
+ | [gospider](https://github.com/jaeles-project/gospider) | Fast web spider written in Go. | `http/crawler` |
116
+ | [katana](https://github.com/projectdiscovery/katana) | Next-generation crawling and spidering framework. | `http/crawler` |
117
+ | [dirsearch](https://github.com/maurosoria/dirsearch) | Web path discovery. | `http/fuzzer` |
118
+ | [feroxbuster](https://github.com/epi052/feroxbuster) | Simple, fast, recursive content discovery tool written in Rust. | `http/fuzzer` |
119
+ | [ffuf](https://github.com/ffuf/ffuf) | Fast web fuzzer written in Go. | `http/fuzzer` |
120
+ | [h8mail](https://github.com/khast3x/h8mail) | Email OSINT and breach hunting tool. | `osint` |
121
+ | [dnsx](https://github.com/projectdiscovery/dnsx) | Fast and multi-purpose DNS toolkit designed for running DNS queries. | `recon/dns` |
122
+ | [dnsxbrute](https://github.com/projectdiscovery/dnsx) | Fast and multi-purpose DNS toolkit designed for running DNS queries (bruteforce mode). | `recon/dns` |
123
+ | [subfinder](https://github.com/projectdiscovery/subfinder) | Fast subdomain finder. | `recon/dns` |
124
+ | [fping](https://fping.org/) | Find alive hosts on local networks. | `recon/ip` |
125
+ | [mapcidr](https://github.com/projectdiscovery/mapcidr) | Expand CIDR ranges into IPs. | `recon/ip` |
126
+ | [naabu](https://github.com/projectdiscovery/naabu) | Fast port discovery tool. | `recon/port` |
127
+ | [maigret](https://github.com/soxoj/maigret) | Hunt for user accounts across many websites. | `recon/user` |
128
+ | [gf](https://github.com/tomnomnom/gf) | A wrapper around grep to avoid typing common patterns. | `tagger` |
129
+ | [grype](https://github.com/anchore/grype) | A vulnerability scanner for container images and filesystems. | `vuln/code` |
130
+ | [dalfox](https://github.com/hahwul/dalfox) | Powerful XSS scanning tool and parameter analyzer. | `vuln/http` |
131
+ | [msfconsole](https://docs.rapid7.com/metasploit/msf-overview) | CLI to access and work with the Metasploit Framework. | `vuln/http` |
132
+ | [wpscan](https://github.com/wpscanteam/wpscan) | WordPress Security Scanner | `vuln/multi` |
133
+ | [nmap](https://github.com/nmap/nmap) | Vulnerability scanner using NSE scripts. | `vuln/multi` |
134
+ | [nuclei](https://github.com/projectdiscovery/nuclei) | Fast and customisable vulnerability scanner based on simple YAML based DSL. | `vuln/multi` |
135
+ | [searchsploit](https://gitlab.com/exploit-database/exploitdb) | Exploit searcher. | `exploit/search` |
136
+
137
+ Feel free to request new tools to be added by opening an issue, but please
138
+ 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)).
139
+
140
+
141
+ ## Installation
142
+
143
+ ### Installing secator
144
+
145
+ <details>
146
+ <summary>Pipx</summary>
147
+
148
+ ```sh
149
+ pipx install secator
150
+ ```
151
+
152
+ </details>
153
+
154
+ <details>
155
+ <summary>Pip</summary>
156
+
157
+ ```sh
158
+ pip install secator
159
+ ```
160
+
161
+ </details>
162
+
163
+ <details>
164
+ <summary>Bash</summary>
165
+
166
+ ```sh
167
+ wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
168
+ ```
169
+
170
+ </details>
171
+
172
+ <details>
173
+ <summary>Docker</summary>
174
+
175
+ ```sh
176
+ docker run -it freelabz/secator --help
177
+ ```
178
+
179
+ </details>
180
+
181
+ <details>
182
+ <summary>Docker Compose</summary>
183
+
184
+ ```sh
185
+ git clone https://github.com/freelabz/secator
186
+ cd secator
187
+ docker-compose up -d
188
+ docker-compose exec secator secator --help
189
+ ```
190
+
191
+ </details>
192
+
193
+ ***Note:*** If you chose the Bash, Docker or Docker Compose installation methods, you can skip the next sections and go straight to [Usage](#usage).
194
+
195
+ ### Installing languages
196
+
197
+ `secator` uses external tools, so you might need to install languages used by those tools assuming they are not already installed on your system.
198
+
199
+ We provide utilities to install required languages if you don't manage them externally:
200
+
201
+ <details>
202
+ <summary>Go</summary>
203
+
204
+ ```sh
205
+ secator install langs go
206
+ ```
207
+
208
+ </details>
209
+
210
+ <details>
211
+ <summary>Ruby</summary>
212
+
213
+ ```sh
214
+ secator install langs ruby
215
+ ```
216
+
217
+ </details>
218
+
219
+ ### Installing tools
220
+
221
+ `secator` does not install any of the external tools it supports by default.
222
+
223
+ We provide utilities to install or update each supported tool which should work on all systems supporting `apt`:
224
+
225
+ <details>
226
+ <summary>All tools</summary>
227
+
228
+ ```sh
229
+ secator install tools
230
+ ```
231
+
232
+ </details>
233
+
234
+ <details>
235
+ <summary>Specific tools</summary>
236
+
237
+ ```sh
238
+ secator install tools <TOOL_NAME>
239
+ ```
240
+
241
+ For instance, to install `httpx`, use:
242
+
243
+ ```sh
244
+ secator install tools httpx
245
+ ```
246
+
247
+ </details>
248
+
249
+ Please make sure you are using the latest available versions for each tool before you run secator or you might run into parsing / formatting issues.
250
+
251
+ ### Installing addons
252
+
253
+ `secator` comes installed with the minimum amount of dependencies.
254
+
255
+ There are several addons available for `secator`:
256
+
257
+ <details>
258
+ <summary>worker</summary>
259
+
260
+ Add support for Celery workers (see [Distributed runs with Celery](https://docs.freelabz.com/in-depth/distributed-runs-with-celery)).
261
+ ```sh
262
+ secator install addons worker
263
+ ```
264
+
265
+ </details>
266
+
267
+
268
+ <details>
269
+ <summary>google</summary>
270
+
271
+ Add support for Google Drive exporter (`-o gdrive`).
272
+
273
+ ```sh
274
+ secator install addons google
275
+ ```
276
+
277
+ </details>
278
+
279
+ <details>
280
+ <summary>mongodb</summary>
281
+
282
+ Add support for MongoDB driver (`-driver mongodb`).
283
+ ```sh
284
+ secator install addons mongodb
285
+ ```
286
+
287
+ </details>
288
+
289
+ <details>
290
+ <summary>redis</summary>
291
+
292
+ Add support for Redis backend (Celery).
293
+
294
+ ```sh
295
+ secator install addons redis
296
+ ```
297
+
298
+ </details>
299
+
300
+ <details>
301
+ <summary>dev</summary>
302
+
303
+ Add development tools like `coverage` and `flake8` required for running tests.
304
+
305
+ ```sh
306
+ secator install addons dev
307
+ ```
308
+
309
+ </details>
310
+
311
+ <details>
312
+ <summary>trace</summary>
313
+
314
+ Add tracing tools like `memray` and `pyinstrument` required for tracing functions.
315
+
316
+ ```sh
317
+ secator install addons trace
318
+ ```
319
+
320
+ </details>
321
+
322
+ ### Checking installation health
323
+
324
+ To figure out which languages or tools are installed on your system (along with their version):
325
+ ```sh
326
+ secator health
327
+ ```
328
+
329
+ ## Usage
330
+ ```sh
331
+ secator --help
332
+ ```
333
+ ![](images/help.png)
334
+
335
+
336
+ ### Usage examples
337
+
338
+ Run a fuzzing task (`ffuf`):
339
+
340
+ ```sh
341
+ secator x ffuf http://testphp.vulnweb.com/FUZZ
342
+ ```
343
+
344
+ Run a url crawl workflow:
345
+
346
+ ```sh
347
+ secator w url_crawl http://testphp.vulnweb.com
348
+ ```
349
+
350
+ Run a host scan:
351
+
352
+ ```sh
353
+ secator s host mydomain.com
354
+ ```
355
+
356
+ and more... to list all tasks / workflows / scans that you can use:
357
+ ```sh
358
+ secator x --help
359
+ secator w --help
360
+ secator s --help
361
+ ```
362
+
363
+ ## Learn more
364
+
365
+ To go deeper with `secator`, check out:
366
+ * Our complete [documentation](https://docs.freelabz.com)
367
+ * Our getting started [tutorial video](https://youtu.be/-JmUTNWQDTQ?si=qpAClDWMXo2zwUK7)
368
+ * Our [Medium post](https://medium.com/p/09333f3d3682)
369
+ * Follow us on social media: [@freelabz](https://twitter.com/freelabz) on Twitter and [@FreeLabz](https://youtube.com/@FreeLabz) on YouTube
370
+
371
+ ## Stats
372
+
373
+ <a href="https://star-history.com/#freelabz/secator&Date">
374
+ <picture>
375
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=freelabz/secator&type=Date&theme=dark" />
376
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=freelabz/secator&type=Date" />
377
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=freelabz/secator&type=Date" />
378
+ </picture>
379
+ </a>
@@ -0,0 +1,99 @@
1
+ secator/.gitignore,sha256=da8MUc3hdb6Mo0WjZu2upn5uZMbXcBGvhdhTQ1L89HI,3093
2
+ secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ secator/celery.py,sha256=zXjg7EKneWjErBTNrJCHOXCJzs-P5jBi5gYqrSqjW4k,12227
4
+ secator/cli.py,sha256=x06YzjuNTvpOQACjKIpTRo3DSHm2CONiXXB74OTPOJY,28170
5
+ secator/config.py,sha256=iOeRzq7u1rvR1-Oq5v9wGxQYB613X0xKGLIcrfhEGc4,3693
6
+ secator/decorators.py,sha256=IRH4CSesOJXKrzpSJ8xM2ZMUAFTk3GcqRI0SYIpIpag,10492
7
+ secator/definitions.py,sha256=EBI_HCf7E8O2UroXicOXrzcOt-Tp25-xiVQJVAW1duw,6044
8
+ 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
12
+ secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ secator/configs/profiles/aggressive.yaml,sha256=JilVySABlSCYEFMjH7V0Oc3dAVlkfHOh1odTGhtm7BQ,108
15
+ secator/configs/profiles/default.yaml,sha256=kDuOF1Qkpv4oz1GZ-OwDxbi5pptAqShsCqdzkBOxXfw,149
16
+ secator/configs/profiles/stealth.yaml,sha256=Ud3EMZ2yRj0AT6w-AfV7fWUBYib9VAFp46GPpof9YaU,107
17
+ secator/configs/scans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ secator/configs/scans/domain.yaml,sha256=Dkm5dU2NdUTInkWD5cmVczvhUH0soaKPtoESeg8BVsQ,265
19
+ secator/configs/scans/host.yaml,sha256=tobz6yGeYlVnGwLVI9RLJT6MDLnGmQVVj8EOwAdksfw,189
20
+ secator/configs/scans/network.yaml,sha256=ghlgIwkWhJKQeT6V5TE51dFL-VRszWJtm4qx4ImjEEY,252
21
+ secator/configs/scans/subdomain.yaml,sha256=I007b1V5Rmm_4R9mODp6jxonHNIjXkQT9sU-AOxLSIo,123
22
+ secator/configs/scans/url.yaml,sha256=zhRiqyHq7BZHtKsmjpMvp3vmt5DRNtmfqW44sZm1tWw,158
23
+ secator/configs/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ secator/configs/workflows/cidr_recon.yaml,sha256=u1QKDKGbpJEez5QqC20Yd_nBLZd_z4nA-XFRQV7pVI4,558
25
+ secator/configs/workflows/code_scan.yaml,sha256=3H8H55NVskiDbBwNueVF8FUYkquEQn2C6evnid9zhB4,207
26
+ secator/configs/workflows/host_recon.yaml,sha256=wHXMycHQpWq8gVc8YSr6Kv-_0CtIfmkr6j7AY6Lah2w,1018
27
+ secator/configs/workflows/port_scan.yaml,sha256=DPXL8m96h3oFdk7Lw_6dP1j0pl_qzi_kWszZvaId5f0,796
28
+ secator/configs/workflows/subdomain_recon.yaml,sha256=qMvvKj0rWO1xzMiaT6VZMysXYGJFrGgGHP0weYEhs2g,798
29
+ secator/configs/workflows/url_crawl.yaml,sha256=h74dvDBNLuY1EHc9FMby3ydr34VH1qFJHQKUaIIYpcw,573
30
+ secator/configs/workflows/url_dirsearch.yaml,sha256=6UiQNge1WkryetOxwqzERra0xmNG0U8Y8CWKFLTyUUQ,677
31
+ secator/configs/workflows/url_fuzz.yaml,sha256=K1RkplXrgc7q2YJVv5A6B5MMkAzIIv31HInhRCKMpyI,774
32
+ secator/configs/workflows/url_nuclei.yaml,sha256=Qigz-hJzM7GeNA_UD46dThVIoqbWlBgiYb_i5fSyJiI,265
33
+ secator/configs/workflows/url_vuln.yaml,sha256=RNeS6o1wworxCznvnAgrfzVnMayD-9hFQ0-W0NbqMJY,1345
34
+ secator/configs/workflows/user_hunt.yaml,sha256=e5b-CkkjhOPE8Yh5LUh0K60GKmxTgn4s-Joo7m9jKrk,180
35
+ secator/configs/workflows/wordpress.yaml,sha256=QgBUNi8Gav_efbmczUGfzlByWsmogTmGtu1MwAlvQts,279
36
+ secator/exporters/__init__.py,sha256=2nBPOOas9Fp4nmo9pjSw3mvklZNHL8BmH88w_i-eaJc,356
37
+ secator/exporters/_base.py,sha256=-RrrwO_qp0ETLLHSta4T-zKtMbWdiEmz1Cw5mNo6USU,77
38
+ secator/exporters/csv.py,sha256=xsPMljzJhoTc8lcfxWBIKH2niK6KeYL7Bx2NzpdsYw0,982
39
+ secator/exporters/gdrive.py,sha256=VI6r1vlChz39myaN4sFvOlHO32SAhZS5_mI5EwGUdq8,4056
40
+ secator/exporters/json.py,sha256=cWkDugUdy-lbcPFKNgBrRFxHspiFhjVbJfdDABjJ9uk,431
41
+ secator/exporters/table.py,sha256=RHQoaFeeyeoBGNucJgrlk2KtmVqe9BGNtAAYee7xJ8Y,210
42
+ secator/exporters/txt.py,sha256=AUvcFp_-IJp55RWYvMHJzcDqcheL6m3-cl4QMUxVgKk,771
43
+ secator/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ secator/hooks/mongodb.py,sha256=GTd6BeiGtWUPWjmXKmalZYNoeGNZfNqEJ6BxRJh1Mr8,7149
45
+ secator/output_types/__init__.py,sha256=uj6AXDeorECPwhwekNVGjQbGv41jHG_8udkuoc4XzW0,854
46
+ secator/output_types/_base.py,sha256=bld1ED0pN1hOvwBV2canrlKrfBCgawzWKPDH6F3jVQE,2469
47
+ secator/output_types/exploit.py,sha256=NIa0mbhm3ZTyV5kyjEvrI5QK2swMpdMCj3f1gIWcsro,1581
48
+ secator/output_types/ip.py,sha256=ySEqH3Gs7U41I1kS8olZ_p3Mk7JryEbXHLyexqlBQNA,995
49
+ secator/output_types/port.py,sha256=1ZmV4FDvwk1dvFXySnz5yIp13hbaRhnunxnETm66Os0,1607
50
+ secator/output_types/progress.py,sha256=u_-4IiECTSCJf-X_RkFOoFyb8mrff2rMcm8GGqLZ8hs,1231
51
+ secator/output_types/record.py,sha256=WnI0yvwzrO2Wt7OWciHMOuIRRLbuSOAJczdNshV7tYU,1192
52
+ secator/output_types/subdomain.py,sha256=lmCoK7_8I4FXWgl9kToRvDn3gr3E3uBTaQzFAOHbswE,1343
53
+ secator/output_types/tag.py,sha256=8AlT0VigsYP04GN8sPCTM07IlL5uMUmFgsNa9IDCoyY,1431
54
+ secator/output_types/target.py,sha256=gJWzzqhal34Cnl9oAKf0m1MSaGxRtUGdA2XbkhD_yd0,848
55
+ secator/output_types/url.py,sha256=yDozBXCuPfuybH1iX_xGmbCJPXO6Ei14C8Hp5CnzNbE,2535
56
+ secator/output_types/user_account.py,sha256=EiT2BFl2LTCdqHF1meoMEKVhjKGroyf8-JoWHPuBOTc,1378
57
+ secator/output_types/vulnerability.py,sha256=p0DTbr5w7Vv5D3dgbdnvsG5qXzqVVk4YPOPWYS1lxmM,2843
58
+ secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,290
59
+ secator/runners/_base.py,sha256=Or9bDSsxcwYTUeW6G7-Pmag82_yGUtREuzSZWj9IgHY,27268
60
+ secator/runners/_helpers.py,sha256=7UUboSsr4b6srIOOHtSSYhJ9Jxq_qaMVbbF2gVEBnR4,3703
61
+ secator/runners/command.py,sha256=NDLcwbOcOu1JpKQbrRAK91phIj-JiTrdbcgXyBjokdA,18982
62
+ 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
65
+ secator/serializers/__init__.py,sha256=OP5cmFl77ovgSCW_IDcZ21St2mUt5UK4QHfrsK2KvH8,248
66
+ secator/serializers/dataclass.py,sha256=g5gMT4NwndjhGcGbFuYEs07AZW_Q_m9orov_edVEGlI,792
67
+ secator/serializers/json.py,sha256=XwuSQOBwrOAs16F5HtY-Q-rAGAxfNvlq3z-Nb2gwigE,304
68
+ secator/serializers/regex.py,sha256=hGJ_1JSOv9xPtfn_umHlsjnR_alnsDFv-UmjYCC3vwU,314
69
+ secator/tasks/__init__.py,sha256=Wp2QF5QS2e_BlVygsIEFbmYPTfTg7v_Vd3LQJeXTC7I,344
70
+ secator/tasks/_categories.py,sha256=RuN483yhmzOPg_eR1-djR8MQe96lH4d8UVvaKvcXmiI,9069
71
+ secator/tasks/cariddi.py,sha256=Np9QPMpuqGtsLGHANfcbNaYjoQaqjkFXX9Dbtbtcgu4,3109
72
+ secator/tasks/dalfox.py,sha256=2P43YOoz5PwHGn5L_9rkJswPopCkJBKs0v1CAOinE_0,1703
73
+ 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=y6vDlxs5fN7rPQjS71wlu4FBwijjTIVbsbRwh3ldOnY,2492
78
+ secator/tasks/fping.py,sha256=P2EAPUGgwEC4Geh2zUbBPKF9bdqrlrdDg-R_TYLTFng,1127
79
+ secator/tasks/gau.py,sha256=YB89dsUVwLaRplIpEiiUA7mwTM7s3vyH4Cs6ZjzcAnY,1357
80
+ 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
83
+ secator/tasks/h8mail.py,sha256=hZBpfV6M1mbpD_PbDHxLI5HMvqAvTeY_W0lbkq3Hugo,2037
84
+ secator/tasks/httpx.py,sha256=MMjg705z49YooEqglZ4J1UqAKQffDPWMV6kv3fjWZS0,3929
85
+ secator/tasks/katana.py,sha256=Vr9YUcooVyIpkaGeC-O4meSqQHnebNze7jy662llR_E,4283
86
+ secator/tasks/maigret.py,sha256=PZDTICJ4LZF3joKe-dXu2alffakD_1sxBuNEUBtJDm4,2098
87
+ secator/tasks/mapcidr.py,sha256=O6zssQMMrg3JGXIhldgOD28WNATAb_wfj0svHr0DRxg,928
88
+ secator/tasks/msfconsole.py,sha256=pCHY9UMU2VXYNza06Nxw7lZpDUMk5nMU-C3P7Z4Nz04,6069
89
+ secator/tasks/naabu.py,sha256=FgrlIuTX-p4FqXNzck2XGXRjFjPH97w04y5M2JkYo_0,1514
90
+ 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
94
+ secator/tasks/wpscan.py,sha256=9SVUM5Bwsm52GvanJPygzKPkOp10b-x7_vGtTV9ZqH4,5377
95
+ secator-0.1.0.dist-info/METADATA,sha256=5qae-jdIDw61K0YpOUFQZYpnlqcDCDpx8OL_a7b7S7o,13065
96
+ secator-0.1.0.dist-info/WHEEL,sha256=wpsUbWzR9la66_V7_eWTdyvs6WD26tazKT2BBEAC-EM,105
97
+ secator-0.1.0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
98
+ secator-0.1.0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
99
+ secator-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.22.5
3
+ Root-Is-Purelib: true
4
+ Tag: py2-none-any
5
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ secator = secator.cli:cli