secator 0.12.0__py3-none-any.whl → 0.13.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of secator might be problematic. Click here for more details.
- secator/cli.py +174 -65
- secator/configs/workflows/host_recon.yaml +11 -2
- secator/configs/workflows/port_scan.yaml +39 -0
- secator/configs/workflows/url_dirsearch.yaml +5 -0
- secator/definitions.py +0 -4
- secator/installer.py +29 -15
- secator/runners/_base.py +2 -1
- secator/runners/_helpers.py +13 -2
- secator/runners/command.py +2 -1
- secator/tasks/_categories.py +2 -2
- secator/tasks/arjun.py +2 -1
- secator/tasks/bbot.py +30 -4
- secator/tasks/bup.py +2 -1
- secator/tasks/cariddi.py +15 -3
- secator/tasks/dalfox.py +2 -1
- secator/tasks/dirsearch.py +1 -1
- secator/tasks/dnsx.py +2 -1
- secator/tasks/dnsxbrute.py +2 -1
- secator/tasks/feroxbuster.py +3 -2
- secator/tasks/ffuf.py +2 -1
- secator/tasks/gau.py +2 -1
- secator/tasks/gitleaks.py +4 -3
- secator/tasks/gospider.py +3 -2
- secator/tasks/grype.py +1 -0
- secator/tasks/h8mail.py +2 -1
- secator/tasks/httpx.py +3 -2
- secator/tasks/katana.py +4 -3
- secator/tasks/maigret.py +1 -1
- secator/tasks/mapcidr.py +2 -1
- secator/tasks/msfconsole.py +4 -3
- secator/tasks/naabu.py +4 -2
- secator/tasks/nuclei.py +15 -9
- secator/tasks/searchsploit.py +3 -2
- secator/tasks/subfinder.py +2 -1
- secator/tasks/testssl.py +4 -3
- secator/tasks/trivy.py +2 -2
- secator/tasks/wafw00f.py +2 -1
- secator/tasks/wpprobe.py +2 -1
- secator/tasks/wpscan.py +6 -3
- {secator-0.12.0.dist-info → secator-0.13.0.dist-info}/METADATA +1 -1
- {secator-0.12.0.dist-info → secator-0.13.0.dist-info}/RECORD +44 -43
- {secator-0.12.0.dist-info → secator-0.13.0.dist-info}/WHEEL +0 -0
- {secator-0.12.0.dist-info → secator-0.13.0.dist-info}/entry_points.txt +0 -0
- {secator-0.12.0.dist-info → secator-0.13.0.dist-info}/licenses/LICENSE +0 -0
secator/tasks/bbot.py
CHANGED
|
@@ -121,6 +121,29 @@ BBOT_PRESETS = [
|
|
|
121
121
|
'web-screenshots',
|
|
122
122
|
'web-thorough'
|
|
123
123
|
]
|
|
124
|
+
BBOT_FLAGS = [
|
|
125
|
+
'active',
|
|
126
|
+
'affiliates',
|
|
127
|
+
'aggressive',
|
|
128
|
+
'baddns',
|
|
129
|
+
'cloud-enum,'
|
|
130
|
+
'code-enum,deadly',
|
|
131
|
+
'email-enum',
|
|
132
|
+
'iis-shortnames',
|
|
133
|
+
'passive',
|
|
134
|
+
'portscan',
|
|
135
|
+
'report',
|
|
136
|
+
'safe',
|
|
137
|
+
'service-enum',
|
|
138
|
+
'slow',
|
|
139
|
+
'social-enum',
|
|
140
|
+
'subdomain-enum',
|
|
141
|
+
'subdomain-hijack',
|
|
142
|
+
'web-basic',
|
|
143
|
+
'web-paramminer',
|
|
144
|
+
'web-screenshots',
|
|
145
|
+
'web-thorough'
|
|
146
|
+
]
|
|
124
147
|
BBOT_MODULES_STR = ' '.join(BBOT_MODULES)
|
|
125
148
|
BBOT_MAP_TYPES = {
|
|
126
149
|
'IP_ADDRESS': Ip,
|
|
@@ -159,12 +182,14 @@ class bbot(Command):
|
|
|
159
182
|
file_flag = None
|
|
160
183
|
version_flag = '--help'
|
|
161
184
|
opts = {
|
|
162
|
-
'modules': {'type': str, 'short': 'm', '
|
|
163
|
-
'presets': {'type': str, 'short': 'ps', '
|
|
185
|
+
'modules': {'type': str, 'short': 'm', 'help': ','.join(BBOT_MODULES)},
|
|
186
|
+
'presets': {'type': str, 'short': 'ps', 'help': ','.join(BBOT_PRESETS), 'shlex': False},
|
|
187
|
+
'flags': {'type': str, 'short': 'fl', 'help': ','.join(BBOT_FLAGS)}
|
|
164
188
|
}
|
|
165
189
|
opt_key_map = {
|
|
166
190
|
'modules': 'm',
|
|
167
|
-
'presets': 'p'
|
|
191
|
+
'presets': 'p',
|
|
192
|
+
'flags': 'f'
|
|
168
193
|
}
|
|
169
194
|
opt_value_map = {
|
|
170
195
|
'presets': lambda x: ' '.join(x.split(','))
|
|
@@ -222,7 +247,8 @@ class bbot(Command):
|
|
|
222
247
|
'apk': ['python3-dev', 'linux-headers', 'musl-dev', 'gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium'],
|
|
223
248
|
'*': ['gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium']
|
|
224
249
|
}
|
|
225
|
-
|
|
250
|
+
install_version = '2.4.2'
|
|
251
|
+
install_cmd = 'pipx install bbot==[install_version] --force'
|
|
226
252
|
install_post = {
|
|
227
253
|
'*': f'rm -fr {CONFIG.dirs.share}/pipx/venvs/bbot/lib/python3.12/site-packages/ansible_collections/*'
|
|
228
254
|
}
|
secator/tasks/bup.py
CHANGED
|
@@ -63,7 +63,8 @@ class bup(Http):
|
|
|
63
63
|
'stored_response_path': 'response_html_filename',
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
install_version = '0.4.4'
|
|
67
|
+
install_cmd = 'pipx install bypass-url-parser==[install_version] --force'
|
|
67
68
|
|
|
68
69
|
@staticmethod
|
|
69
70
|
def on_init(self):
|
secator/tasks/cariddi.py
CHANGED
|
@@ -13,12 +13,19 @@ from secator.tasks._categories import HttpCrawler
|
|
|
13
13
|
@task()
|
|
14
14
|
class cariddi(HttpCrawler):
|
|
15
15
|
"""Crawl endpoints, secrets, api keys, extensions, tokens..."""
|
|
16
|
-
cmd = 'cariddi
|
|
16
|
+
cmd = 'cariddi'
|
|
17
17
|
input_type = URL
|
|
18
18
|
input_flag = OPT_PIPE_INPUT
|
|
19
19
|
output_types = [Url, Tag]
|
|
20
20
|
file_flag = OPT_PIPE_INPUT
|
|
21
21
|
json_flag = '-json'
|
|
22
|
+
opts = {
|
|
23
|
+
'info': {'is_flag': True, 'short': 'info', 'help': 'Hunt for useful informations in websites.'},
|
|
24
|
+
'secrets': {'is_flag': True, 'short': 'secrets', 'help': 'Hunt for secrets.'},
|
|
25
|
+
'errors': {'is_flag': True, 'short': 'err', 'help': 'Hunt for errors in websites.'},
|
|
26
|
+
'juicy_extensions': {'type': int, 'short': 'jext', 'help': 'Hunt for juicy file extensions. Integer from 1(juicy) to 7(not juicy)'}, # noqa: E501
|
|
27
|
+
'juicy_endpoints': {'is_flag': True, 'short': 'jep', 'help': 'Hunt for juicy endpoints.'}
|
|
28
|
+
}
|
|
22
29
|
opt_key_map = {
|
|
23
30
|
HEADER: 'headers',
|
|
24
31
|
DELAY: 'd',
|
|
@@ -38,10 +45,15 @@ class cariddi(HttpCrawler):
|
|
|
38
45
|
RETRIES: OPT_NOT_SUPPORTED,
|
|
39
46
|
THREADS: 'c',
|
|
40
47
|
TIMEOUT: 't',
|
|
41
|
-
USER_AGENT: 'ua'
|
|
48
|
+
USER_AGENT: 'ua',
|
|
49
|
+
'secrets': 's',
|
|
50
|
+
'errors': 'err',
|
|
51
|
+
'juicy_endpoints': 'e',
|
|
52
|
+
'juicy_extensions': 'ext'
|
|
42
53
|
}
|
|
43
54
|
item_loaders = [JSONSerializer()]
|
|
44
|
-
|
|
55
|
+
install_version = 'v1.3.6'
|
|
56
|
+
install_cmd = 'go install -v github.com/edoardottt/cariddi/cmd/cariddi@[install_version]'
|
|
45
57
|
install_github_handle = 'edoardottt/cariddi'
|
|
46
58
|
encoding = 'ansi'
|
|
47
59
|
proxychains = False
|
secator/tasks/dalfox.py
CHANGED
|
@@ -55,7 +55,8 @@ class dalfox(VulnHttp):
|
|
|
55
55
|
SEVERITY: lambda x: x['severity'].lower()
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
|
|
58
|
+
install_version = 'v2.11.0'
|
|
59
|
+
install_cmd = 'go install -v github.com/hahwul/dalfox/v2@latest'
|
|
59
60
|
install_github_handle = 'hahwul/dalfox'
|
|
60
61
|
encoding = 'ansi'
|
|
61
62
|
proxychains = False
|
secator/tasks/dirsearch.py
CHANGED
|
@@ -52,7 +52,7 @@ class dirsearch(HttpFuzzer):
|
|
|
52
52
|
STATUS_CODE: 'status'
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
install_cmd = 'pipx install
|
|
55
|
+
install_cmd = 'pipx install git+https://github.com/maurosoria/dirsearch.git --force'
|
|
56
56
|
proxychains = True
|
|
57
57
|
proxy_socks5 = True
|
|
58
58
|
proxy_http = True
|
secator/tasks/dnsx.py
CHANGED
|
@@ -26,7 +26,8 @@ class dnsx(ReconDns):
|
|
|
26
26
|
'wildcard_domain': {'type': str, 'short': 'wd', 'help': 'Domain name for wildcard filtering'},
|
|
27
27
|
}
|
|
28
28
|
item_loaders = [JSONSerializer()]
|
|
29
|
-
|
|
29
|
+
install_version = 'v1.2.2'
|
|
30
|
+
install_cmd = 'go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@[install_version]'
|
|
30
31
|
install_github_handle = 'projectdiscovery/dnsx'
|
|
31
32
|
profile = 'io'
|
|
32
33
|
|
secator/tasks/dnsxbrute.py
CHANGED
|
@@ -34,6 +34,7 @@ class dnsxbrute(ReconDns):
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
install_version = 'v1.2.2'
|
|
38
|
+
install_cmd = 'go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@[install_version]'
|
|
38
39
|
install_github_handle = 'projectdiscovery/dnsx'
|
|
39
40
|
profile = 'io'
|
secator/tasks/feroxbuster.py
CHANGED
|
@@ -6,7 +6,7 @@ from secator.definitions import (CONTENT_TYPE, DELAY, DEPTH, FILTER_CODES,
|
|
|
6
6
|
MATCH_REGEX, MATCH_SIZE, MATCH_WORDS, METHOD,
|
|
7
7
|
OPT_NOT_SUPPORTED, OPT_PIPE_INPUT, PROXY,
|
|
8
8
|
RATE_LIMIT, RETRIES, STATUS_CODE,
|
|
9
|
-
THREADS, TIMEOUT, USER_AGENT, WORDLIST, WORDS
|
|
9
|
+
THREADS, TIMEOUT, USER_AGENT, WORDLIST, WORDS)
|
|
10
10
|
from secator.output_types import Url
|
|
11
11
|
from secator.serializers import JSONSerializer
|
|
12
12
|
from secator.tasks._categories import HttpFuzzer
|
|
@@ -15,7 +15,7 @@ from secator.tasks._categories import HttpFuzzer
|
|
|
15
15
|
@task()
|
|
16
16
|
class feroxbuster(HttpFuzzer):
|
|
17
17
|
"""Simple, fast, recursive content discovery tool written in Rust"""
|
|
18
|
-
cmd =
|
|
18
|
+
cmd = 'feroxbuster --auto-bail --no-state'
|
|
19
19
|
input_flag = '--url'
|
|
20
20
|
input_chunk_size = 1
|
|
21
21
|
file_flag = OPT_PIPE_INPUT
|
|
@@ -62,6 +62,7 @@ class feroxbuster(HttpFuzzer):
|
|
|
62
62
|
install_pre = {
|
|
63
63
|
'*': ['curl', 'bash']
|
|
64
64
|
}
|
|
65
|
+
install_version = 'v2.11.0'
|
|
65
66
|
install_cmd = (
|
|
66
67
|
f'cd /tmp && curl -sL https://raw.githubusercontent.com/epi052/feroxbuster/master/install-nix.sh | bash -s {CONFIG.dirs.bin}' # noqa: E501
|
|
67
68
|
)
|
secator/tasks/ffuf.py
CHANGED
|
@@ -71,7 +71,8 @@ class ffuf(HttpFuzzer):
|
|
|
71
71
|
},
|
|
72
72
|
}
|
|
73
73
|
encoding = 'ansi'
|
|
74
|
-
|
|
74
|
+
install_version = 'v2.1.0'
|
|
75
|
+
install_cmd = 'go install -v github.com/ffuf/ffuf/v2@[install_version]'
|
|
75
76
|
install_github_handle = 'ffuf/ffuf'
|
|
76
77
|
proxychains = False
|
|
77
78
|
proxy_socks5 = True
|
secator/tasks/gau.py
CHANGED
|
@@ -44,7 +44,8 @@ class gau(HttpCrawler):
|
|
|
44
44
|
install_pre = {
|
|
45
45
|
'apk': ['libc6-compat']
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
install_version = 'v2.2.4'
|
|
48
|
+
install_cmd = 'go install -v github.com/lc/gau/v2/cmd/gau@[install_version]'
|
|
48
49
|
install_github_handle = 'lc/gau'
|
|
49
50
|
proxychains = False
|
|
50
51
|
proxy_socks5 = True
|
secator/tasks/gitleaks.py
CHANGED
|
@@ -35,10 +35,11 @@ class gitleaks(Command):
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
install_pre = {'*': ['git', 'make']}
|
|
38
|
+
install_version = 'v8.24.3'
|
|
38
39
|
install_cmd = (
|
|
39
|
-
f'git clone https://github.com/gitleaks/gitleaks.git {CONFIG.dirs.share}/
|
|
40
|
-
f'cd {CONFIG.dirs.share}/
|
|
41
|
-
f'mv {CONFIG.dirs.share}/
|
|
40
|
+
f'git clone https://github.com/gitleaks/gitleaks.git {CONFIG.dirs.share}/gitleaks_[install_version] || true &&'
|
|
41
|
+
f'cd {CONFIG.dirs.share}/gitleaks_[install_version] && make build &&'
|
|
42
|
+
f'mv {CONFIG.dirs.share}/gitleaks_[install_version]/gitleaks {CONFIG.dirs.bin}'
|
|
42
43
|
)
|
|
43
44
|
install_github_handle = 'gitleaks/gitleaks'
|
|
44
45
|
|
secator/tasks/gospider.py
CHANGED
|
@@ -15,7 +15,7 @@ from secator.tasks._categories import HttpCrawler
|
|
|
15
15
|
@task()
|
|
16
16
|
class gospider(HttpCrawler):
|
|
17
17
|
"""Fast web spider written in Go."""
|
|
18
|
-
cmd = 'gospider
|
|
18
|
+
cmd = 'gospider'
|
|
19
19
|
file_flag = '-S'
|
|
20
20
|
input_flag = '-s'
|
|
21
21
|
json_flag = '--json'
|
|
@@ -53,7 +53,8 @@ class gospider(HttpCrawler):
|
|
|
53
53
|
CONTENT_LENGTH: 'length',
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
install_version = 'v1.1.6'
|
|
57
|
+
install_cmd = 'go install -v github.com/jaeles-project/gospider@[install_version]'
|
|
57
58
|
install_github_handle = 'jaeles-project/gospider'
|
|
58
59
|
proxychains = False
|
|
59
60
|
proxy_socks5 = True # with leaks... https://github.com/jaeles-project/gospider/issues/61
|
secator/tasks/grype.py
CHANGED
secator/tasks/h8mail.py
CHANGED
|
@@ -21,7 +21,8 @@ class h8mail(OSInt):
|
|
|
21
21
|
'config': {'type': str, 'help': 'Configuration file for API keys'},
|
|
22
22
|
'local_breach': {'type': str, 'short': 'lb', 'help': 'Local breach file'}
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
install_version = '2.5.6'
|
|
25
|
+
install_cmd = 'pipx install h8mail==[install_version] --force'
|
|
25
26
|
|
|
26
27
|
@staticmethod
|
|
27
28
|
def on_start(self):
|
secator/tasks/httpx.py
CHANGED
|
@@ -33,7 +33,7 @@ class httpx(Http):
|
|
|
33
33
|
'system_chrome': {'is_flag': True, 'default': False, 'help': 'Use local installed Chrome for screenshot'},
|
|
34
34
|
'headless_options': {'is_flag': False, 'short': 'ho', 'default': None, 'help': 'Headless Chrome additional options'},
|
|
35
35
|
'follow_host_redirects': {'is_flag': True, 'short': 'fhr', 'default': None, 'help': 'Follow redirects on the same host'}, # noqa: E501
|
|
36
|
-
'tech_detect': {'is_flag': True, 'short': 'td', 'default':
|
|
36
|
+
'tech_detect': {'is_flag': True, 'short': 'td', 'default': False, 'help': 'Tech detection'},
|
|
37
37
|
'tls_grab': {'is_flag': True, 'short': 'tlsg', 'default': False, 'help': 'Grab some informations from the tls certificate'}, # noqa: E501
|
|
38
38
|
'rstr': {'type': int, 'default': CONFIG.http.response_max_size_bytes, 'help': 'Max body size to read (bytes)'},
|
|
39
39
|
'rsts': {'type': int, 'default': CONFIG.http.response_max_size_bytes, 'help': 'Max body size to save (bytes)'}
|
|
@@ -68,7 +68,8 @@ class httpx(Http):
|
|
|
68
68
|
install_pre = {
|
|
69
69
|
'apk': ['chromium']
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
install_version = 'v1.7.0'
|
|
72
|
+
install_cmd = 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@[install_version]'
|
|
72
73
|
install_github_handle = 'projectdiscovery/httpx'
|
|
73
74
|
proxychains = False
|
|
74
75
|
proxy_socks5 = True
|
secator/tasks/katana.py
CHANGED
|
@@ -26,8 +26,8 @@ class katana(HttpCrawler):
|
|
|
26
26
|
'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'},
|
|
27
27
|
'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Store responses'}, # noqa: E501
|
|
28
28
|
'form_fill': {'is_flag': True, 'short': 'ff', 'help': 'Enable form filling'},
|
|
29
|
-
'js_crawl': {'is_flag': True, 'short': 'jc', 'default':
|
|
30
|
-
'jsluice': {'is_flag': True, 'short': 'jsl', 'default':
|
|
29
|
+
'js_crawl': {'is_flag': True, 'short': 'jc', 'default': False, 'help': 'Enable endpoint parsing / crawling in javascript file'}, # noqa: E501
|
|
30
|
+
'jsluice': {'is_flag': True, 'short': 'jsl', 'default': False, 'help': 'Enable jsluice parsing in javascript file (memory intensive)'}, # noqa: E501
|
|
31
31
|
'known_files': {'type': str, 'short': 'kf', 'default': 'all', 'help': 'Enable crawling of known files (all, robotstxt, sitemapxml)'}, # noqa: E501
|
|
32
32
|
'omit_raw': {'is_flag': True, 'short': 'or', 'default': True, 'help': 'Omit raw requests/responses from jsonl output'}, # noqa: E501
|
|
33
33
|
'omit_body': {'is_flag': True, 'short': 'ob', 'default': True, 'help': 'Omit response body from jsonl output'},
|
|
@@ -78,7 +78,8 @@ class katana(HttpCrawler):
|
|
|
78
78
|
install_pre = {
|
|
79
79
|
'apk': ['libc6-compat']
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
install_version = 'v1.1.3'
|
|
82
|
+
install_cmd = 'go install -v github.com/projectdiscovery/katana/cmd/katana@[install_version]'
|
|
82
83
|
install_github_handle = 'projectdiscovery/katana'
|
|
83
84
|
proxychains = False
|
|
84
85
|
proxy_socks5 = True
|
secator/tasks/maigret.py
CHANGED
|
@@ -41,7 +41,7 @@ class maigret(ReconUser):
|
|
|
41
41
|
EXTRA_DATA: lambda x: x['status'].get('ids', {})
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
-
install_cmd = 'pipx install git+https://github.com/soxoj/maigret'
|
|
44
|
+
install_cmd = 'pipx install git+https://github.com/soxoj/maigret --force'
|
|
45
45
|
socks5_proxy = True
|
|
46
46
|
profile = 'io'
|
|
47
47
|
|
secator/tasks/mapcidr.py
CHANGED
|
@@ -16,7 +16,8 @@ class mapcidr(ReconIp):
|
|
|
16
16
|
install_pre = {
|
|
17
17
|
'apk': ['libc6-compat']
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
install_version = 'v1.1.34'
|
|
20
|
+
install_cmd = 'go install -v github.com/projectdiscovery/mapcidr/cmd/mapcidr@[install_version]'
|
|
20
21
|
install_github_handle = 'projectdiscovery/mapcidr'
|
|
21
22
|
input_type = CIDR_RANGE
|
|
22
23
|
output_types = [Ip]
|
secator/tasks/msfconsole.py
CHANGED
|
@@ -48,14 +48,15 @@ class msfconsole(VulnMulti):
|
|
|
48
48
|
'pacman': ['ruby-erb', 'postgresql-libs', 'make'],
|
|
49
49
|
'yum|zypper': ['postgresql-devel', 'make'],
|
|
50
50
|
}
|
|
51
|
+
install_version = '6.4.59'
|
|
51
52
|
install_cmd = (
|
|
52
|
-
f'git clone --depth 1 --single-branch https://github.com/rapid7/metasploit-framework.git {CONFIG.dirs.share}/metasploit-
|
|
53
|
-
f'cd {CONFIG.dirs.share}/metasploit-
|
|
53
|
+
f'git clone --depth 1 --single-branch -b [install_version] https://github.com/rapid7/metasploit-framework.git {CONFIG.dirs.share}/metasploit-framework_[install_version] || true && ' # noqa: E501
|
|
54
|
+
f'cd {CONFIG.dirs.share}/metasploit-framework_[install_version] && '
|
|
54
55
|
f'gem install bundler --user-install -n {CONFIG.dirs.bin} && '
|
|
55
56
|
f'bundle config set --local path "{CONFIG.dirs.share}" && '
|
|
56
57
|
'bundle lock --normalize-platforms &&'
|
|
57
58
|
'bundle install && '
|
|
58
|
-
f'ln -sf $HOME/.local/share/metasploit-
|
|
59
|
+
f'ln -sf $HOME/.local/share/metasploit-framework_[install_version]/msfconsole {CONFIG.dirs.bin}/msfconsole'
|
|
59
60
|
)
|
|
60
61
|
|
|
61
62
|
@staticmethod
|
secator/tasks/naabu.py
CHANGED
|
@@ -10,7 +10,7 @@ from secator.tasks._categories import ReconPort
|
|
|
10
10
|
@task()
|
|
11
11
|
class naabu(ReconPort):
|
|
12
12
|
"""Port scanning tool written in Go."""
|
|
13
|
-
cmd = 'naabu
|
|
13
|
+
cmd = 'naabu'
|
|
14
14
|
input_flag = '-host'
|
|
15
15
|
file_flag = '-list'
|
|
16
16
|
json_flag = '-json'
|
|
@@ -18,6 +18,7 @@ class naabu(ReconPort):
|
|
|
18
18
|
PORTS: {'type': str, 'short': 'p', 'help': 'Ports'},
|
|
19
19
|
TOP_PORTS: {'type': str, 'short': 'tp', 'help': 'Top ports'},
|
|
20
20
|
'scan_type': {'type': str, 'short': 'st', 'help': 'Scan type (SYN (s)/CONNECT(c))'},
|
|
21
|
+
'skip_host_discovery': {'is_flag': True, 'short': 'Pn', 'default': False, 'help': 'Skip host discovery'},
|
|
21
22
|
# 'health_check': {'is_flag': True, 'short': 'hc', 'help': 'Health check'}
|
|
22
23
|
}
|
|
23
24
|
opt_key_map = {
|
|
@@ -47,7 +48,8 @@ class naabu(ReconPort):
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
output_types = [Port]
|
|
50
|
-
|
|
51
|
+
install_version = 'v2.3.3'
|
|
52
|
+
install_cmd = 'go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@[install_version]'
|
|
51
53
|
install_github_handle = 'projectdiscovery/naabu'
|
|
52
54
|
install_pre = {'apt': ['libpcap-dev'], 'apk': ['libpcap-dev', 'libc6-compat'], 'pacman|brew': ['libpcap']}
|
|
53
55
|
install_post = {'arch|alpine': 'sudo ln -sf /usr/lib/libpcap.so /usr/lib/libpcap.so.0.8'}
|
secator/tasks/nuclei.py
CHANGED
|
@@ -18,17 +18,22 @@ class nuclei(VulnMulti):
|
|
|
18
18
|
input_flag = '-u'
|
|
19
19
|
json_flag = '-jsonl'
|
|
20
20
|
opts = {
|
|
21
|
-
'
|
|
22
|
-
'tags': {'type': str, 'help': 'Tags'},
|
|
23
|
-
'exclude_tags': {'type': str, 'short': 'etags', 'help': 'Exclude tags'},
|
|
24
|
-
'exclude_severity': {'type': str, 'short': 'es', 'help': 'Exclude severity'},
|
|
25
|
-
'template_id': {'type': str, 'short': 'tid', 'help': 'Template id'},
|
|
21
|
+
'bulk_size': {'type': int, 'short': 'bs', 'help': 'Maximum number of hosts to be analyzed in parallel per template'}, # noqa: E501
|
|
26
22
|
'debug': {'type': str, 'help': 'Debug mode'},
|
|
23
|
+
'exclude_severity': {'type': str, 'short': 'es', 'help': 'Exclude severity'},
|
|
24
|
+
'exclude_tags': {'type': str, 'short': 'etags', 'help': 'Exclude tags'},
|
|
25
|
+
'input_mode': {'type': str, 'short': 'im', 'help': 'Mode of input file (list, burp, jsonl, yaml, openapi, swagger)'},
|
|
26
|
+
'hang_monitor': {'is_flag': True, 'short': 'hm', 'default': True, 'help': 'Enable nuclei hang monitoring'},
|
|
27
|
+
'headless_bulk_size': {'type': int, 'short': 'hbs', 'help': 'Maximum number of headless hosts to be analzyed in parallel per template'}, # noqa: E501
|
|
28
|
+
'new_templates': {'type': str, 'short': 'nt', 'help': 'Run only new templates added in latest nuclei-templates release'}, # noqa: E501
|
|
29
|
+
'automatic_scan': {'is_flag': True, 'short': 'as', 'help': 'Automatic web scan using wappalyzer technology detection to tags mapping'}, # noqa: E501
|
|
30
|
+
'omit_raw': {'is_flag': True, 'short': 'or', 'default': True, 'help': 'Omit requests/response pairs in the JSON, JSONL, and Markdown outputs (for findings only)'}, # noqa: E501
|
|
27
31
|
'stats': {'is_flag': True, 'short': 'stats', 'default': True, 'help': 'Display statistics about the running scan'},
|
|
28
32
|
'stats_json': {'is_flag': True, 'short': 'sj', 'default': True, 'help': 'Display statistics in JSONL(ines) format'},
|
|
29
|
-
'stats_interval': {'type': str, 'short': 'si', '
|
|
30
|
-
'
|
|
31
|
-
'
|
|
33
|
+
'stats_interval': {'type': str, 'short': 'si', 'help': 'Number of seconds to wait between showing a statistics update'}, # noqa: E501
|
|
34
|
+
'tags': {'type': str, 'help': 'Tags'},
|
|
35
|
+
'templates': {'type': str, 'short': 't', 'help': 'Templates'},
|
|
36
|
+
'template_id': {'type': str, 'short': 'tid', 'help': 'Template id'},
|
|
32
37
|
}
|
|
33
38
|
opt_key_map = {
|
|
34
39
|
HEADER: 'header',
|
|
@@ -76,7 +81,8 @@ class nuclei(VulnMulti):
|
|
|
76
81
|
install_pre = {
|
|
77
82
|
'*': ['git']
|
|
78
83
|
}
|
|
79
|
-
|
|
84
|
+
install_version = 'v3.4.2'
|
|
85
|
+
install_cmd = 'go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@[install_version]'
|
|
80
86
|
install_github_handle = 'projectdiscovery/nuclei'
|
|
81
87
|
install_post = {
|
|
82
88
|
'*': 'nuclei -ut'
|
secator/tasks/searchsploit.py
CHANGED
|
@@ -41,9 +41,10 @@ class searchsploit(Command):
|
|
|
41
41
|
install_pre = {
|
|
42
42
|
'apk': ['ncurses']
|
|
43
43
|
}
|
|
44
|
+
install_version = '2025-04-23'
|
|
44
45
|
install_cmd = (
|
|
45
|
-
f'git clone --depth 1 --single-branch https://gitlab.com/exploit-database/exploitdb.git {CONFIG.dirs.share}/
|
|
46
|
-
f'ln -sf $HOME/.local/share/
|
|
46
|
+
f'git clone --depth 1 --single-branch -b [install_version] https://gitlab.com/exploit-database/exploitdb.git {CONFIG.dirs.share}/exploitdb_[install_version] || true && ' # noqa: E501
|
|
47
|
+
f'ln -sf $HOME/.local/share/exploitdb_[install_version]/searchsploit {CONFIG.dirs.bin}/searchsploit'
|
|
47
48
|
)
|
|
48
49
|
proxychains = False
|
|
49
50
|
proxy_socks5 = False
|
secator/tasks/subfinder.py
CHANGED
|
@@ -31,7 +31,8 @@ class subfinder(ReconDns):
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
output_types = [Subdomain]
|
|
34
|
-
|
|
34
|
+
install_version = 'v2.7.0'
|
|
35
|
+
install_cmd = 'go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@[install_version]'
|
|
35
36
|
install_github_handle = 'projectdiscovery/subfinder'
|
|
36
37
|
proxychains = False
|
|
37
38
|
proxy_http = True
|
secator/tasks/testssl.py
CHANGED
|
@@ -48,13 +48,14 @@ class testssl(Command):
|
|
|
48
48
|
proxy_socks5 = False
|
|
49
49
|
profile = 'io'
|
|
50
50
|
install_pre = {
|
|
51
|
-
'apk': ['hexdump'],
|
|
51
|
+
'apk': ['hexdump', 'coreutils', 'procps'],
|
|
52
52
|
'pacman': ['util-linux'],
|
|
53
53
|
'*': ['bsdmainutils']
|
|
54
54
|
}
|
|
55
|
+
install_version = 'v3.2.0'
|
|
55
56
|
install_cmd = (
|
|
56
|
-
f'git clone --depth 1 https://github.com/drwetter/testssl.sh.git {CONFIG.dirs.share}/testssl.
|
|
57
|
-
f'ln -sf {CONFIG.dirs.share}/testssl.
|
|
57
|
+
f'git clone --depth 1 --single-branch -b [install_version] https://github.com/drwetter/testssl.sh.git {CONFIG.dirs.share}/testssl.sh_[install_version] || true && ' # noqa: E501
|
|
58
|
+
f'ln -sf {CONFIG.dirs.share}/testssl.sh_[install_version]/testssl.sh {CONFIG.dirs.bin}'
|
|
58
59
|
)
|
|
59
60
|
|
|
60
61
|
@staticmethod
|
secator/tasks/trivy.py
CHANGED
|
@@ -31,12 +31,12 @@ class trivy(Vuln):
|
|
|
31
31
|
USER_AGENT: OPT_NOT_SUPPORTED
|
|
32
32
|
}
|
|
33
33
|
output_types = [Tag, Vulnerability]
|
|
34
|
+
install_version = 'v0.61.1'
|
|
34
35
|
install_cmd = (
|
|
35
36
|
'curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh |'
|
|
36
|
-
f'sudo sh -s -- -b {CONFIG.dirs.bin}
|
|
37
|
+
f'sudo sh -s -- -b {CONFIG.dirs.bin} [install_version]'
|
|
37
38
|
)
|
|
38
39
|
install_github_handle = 'aquasecurity/trivy'
|
|
39
|
-
install_github_handle = 'aquasecurity/trivy'
|
|
40
40
|
|
|
41
41
|
@staticmethod
|
|
42
42
|
def on_cmd(self):
|
secator/tasks/wafw00f.py
CHANGED
|
@@ -37,7 +37,8 @@ class wafw00f(Command):
|
|
|
37
37
|
'no_follow_redirects': 'noredirect',
|
|
38
38
|
}
|
|
39
39
|
output_types = [Tag]
|
|
40
|
-
|
|
40
|
+
install_version = 'v2.3.1'
|
|
41
|
+
install_cmd = 'pipx install git+https://github.com/EnableSecurity/wafw00f.git@[install_version] --force'
|
|
41
42
|
install_github_handle = 'EnableSecurity/wafw00f'
|
|
42
43
|
proxy_http = True
|
|
43
44
|
|
secator/tasks/wpprobe.py
CHANGED
|
@@ -27,7 +27,8 @@ class wpprobe(Command):
|
|
|
27
27
|
THREADS: 't'
|
|
28
28
|
}
|
|
29
29
|
output_types = [Vulnerability, Tag]
|
|
30
|
-
|
|
30
|
+
install_version = 'v0.5.6'
|
|
31
|
+
install_cmd = 'go install github.com/Chocapikk/wpprobe@[install_version]'
|
|
31
32
|
install_github_handle = 'Chocapikk/wpprobe'
|
|
32
33
|
install_post = {
|
|
33
34
|
'*': 'wpprobe update && wpprobe update-db'
|
secator/tasks/wpscan.py
CHANGED
|
@@ -16,7 +16,7 @@ from secator.tasks._categories import VulnHttp
|
|
|
16
16
|
@task()
|
|
17
17
|
class wpscan(VulnHttp):
|
|
18
18
|
"""Wordpress security scanner."""
|
|
19
|
-
cmd = 'wpscan --
|
|
19
|
+
cmd = 'wpscan --force --verbose'
|
|
20
20
|
file_flag = None
|
|
21
21
|
input_flag = '--url'
|
|
22
22
|
input_type = URL
|
|
@@ -30,7 +30,9 @@ class wpscan(VulnHttp):
|
|
|
30
30
|
'passwords': {'type': str, 'help': 'List of passwords to use during the password attack.'},
|
|
31
31
|
'usernames': {'type': str, 'help': 'List of usernames to use during the password attack.'},
|
|
32
32
|
'login_uri': {'type': str, 'short': 'lu', 'help': 'URI of the login page if different from /wp-login.php'},
|
|
33
|
-
'detection_mode': {'type': str, 'short': 'dm', 'help': 'Detection mode between mixed, passive, and aggressive'}
|
|
33
|
+
'detection_mode': {'type': str, 'short': 'dm', 'help': 'Detection mode between mixed, passive, and aggressive'},
|
|
34
|
+
'random_user_agent': {'is_flag': True, 'short': 'rua', 'help': 'Random user agent'},
|
|
35
|
+
'disable_tls_checks': {'is_flag': True, 'short': 'dtc', 'help': 'Disable TLS checks'}
|
|
34
36
|
}
|
|
35
37
|
opt_key_map = {
|
|
36
38
|
HEADER: OPT_NOT_SUPPORTED,
|
|
@@ -72,7 +74,8 @@ class wpscan(VulnHttp):
|
|
|
72
74
|
'pacman': ['make', 'ruby-erb'],
|
|
73
75
|
'*': ['make']
|
|
74
76
|
}
|
|
75
|
-
|
|
77
|
+
install_version = '3.8.28'
|
|
78
|
+
install_cmd = f'gem install wpscan -v [install_version] --user-install -n {CONFIG.dirs.bin}'
|
|
76
79
|
install_post = {
|
|
77
80
|
'kali': (
|
|
78
81
|
f'gem uninstall nokogiri --user-install -n {CONFIG.dirs.bin} --force --executables && '
|