secator 0.8.2__py3-none-any.whl → 0.9.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 +16 -14
- secator/installer.py +6 -0
- secator/output_types/error.py +5 -1
- secator/rich.py +1 -1
- secator/runners/command.py +5 -3
- secator/tasks/bbot.py +12 -4
- secator/tasks/httpx.py +3 -0
- secator/tasks/naabu.py +1 -1
- secator/utils.py +1 -1
- {secator-0.8.2.dist-info → secator-0.9.0.dist-info}/METADATA +3 -3
- {secator-0.8.2.dist-info → secator-0.9.0.dist-info}/RECORD +14 -14
- {secator-0.8.2.dist-info → secator-0.9.0.dist-info}/WHEEL +0 -0
- {secator-0.8.2.dist-info → secator-0.9.0.dist-info}/entry_points.txt +0 -0
- {secator-0.8.2.dist-info → secator-0.9.0.dist-info}/licenses/LICENSE +0 -0
secator/cli.py
CHANGED
|
@@ -1047,7 +1047,8 @@ def install_ruby():
|
|
|
1047
1047
|
|
|
1048
1048
|
@install.command('tools')
|
|
1049
1049
|
@click.argument('cmds', required=False)
|
|
1050
|
-
|
|
1050
|
+
@click.option('--cleanup', is_flag=True, default=False)
|
|
1051
|
+
def install_tools(cmds, cleanup):
|
|
1051
1052
|
"""Install supported tools."""
|
|
1052
1053
|
if CONFIG.offline_mode:
|
|
1053
1054
|
console.print(Error(message='Cannot run this command in offline mode.'))
|
|
@@ -1069,18 +1070,19 @@ def install_tools(cmds):
|
|
|
1069
1070
|
if not status.is_ok():
|
|
1070
1071
|
return_code = 1
|
|
1071
1072
|
console.print()
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1073
|
+
if cleanup:
|
|
1074
|
+
distro = get_distro_config()
|
|
1075
|
+
cleanup_cmds = [
|
|
1076
|
+
'go clean -cache',
|
|
1077
|
+
'go clean -modcache',
|
|
1078
|
+
'pip cache purge',
|
|
1079
|
+
'gem cleanup --user-install',
|
|
1080
|
+
'gem clean --user-install',
|
|
1081
|
+
]
|
|
1082
|
+
if distro.pm_finalizer:
|
|
1083
|
+
cleanup_cmds.append(f'sudo {distro.pm_finalizer}')
|
|
1084
|
+
cmd = ' && '.join(cleanup_cmds)
|
|
1085
|
+
Command.execute(cmd, cls_attributes={'shell': True}, quiet=False)
|
|
1084
1086
|
sys.exit(return_code)
|
|
1085
1087
|
|
|
1086
1088
|
|
|
@@ -1097,7 +1099,7 @@ def update(all):
|
|
|
1097
1099
|
sys.exit(1)
|
|
1098
1100
|
|
|
1099
1101
|
# Check current and latest version
|
|
1100
|
-
info = get_version_info('secator',
|
|
1102
|
+
info = get_version_info('secator', '-version', 'freelabz/secator', version=VERSION)
|
|
1101
1103
|
latest_version = info['latest_version']
|
|
1102
1104
|
do_update = True
|
|
1103
1105
|
|
secator/installer.py
CHANGED
|
@@ -66,6 +66,12 @@ class ToolInstaller:
|
|
|
66
66
|
tool_cls.install_post]):
|
|
67
67
|
return InstallerStatus.INSTALL_NOT_SUPPORTED
|
|
68
68
|
|
|
69
|
+
# Check PATH
|
|
70
|
+
path_var = os.environ.get('PATH', '')
|
|
71
|
+
if not str(CONFIG.dirs.bin) in path_var:
|
|
72
|
+
console.print(Warning(message=f'Bin directory {CONFIG.dirs.bin} not found in PATH ! Binaries installed by secator will not work')) # noqa: E501
|
|
73
|
+
console.print(Warning(message=f'Run "export PATH=$PATH:{CONFIG.dirs.bin}" to add the binaries to your PATH'))
|
|
74
|
+
|
|
69
75
|
# Install pre-required packages
|
|
70
76
|
if tool_cls.install_pre:
|
|
71
77
|
status = PackageInstaller.install(tool_cls.install_pre)
|
secator/output_types/error.py
CHANGED
|
@@ -8,6 +8,7 @@ from secator.utils import rich_to_ansi, traceback_as_string, rich_escape as _s
|
|
|
8
8
|
class Error(OutputType):
|
|
9
9
|
message: str
|
|
10
10
|
traceback: str = field(default='', compare=False)
|
|
11
|
+
traceback_title: str = field(default='', compare=False)
|
|
11
12
|
_source: str = field(default='', repr=True)
|
|
12
13
|
_type: str = field(default='error', repr=True)
|
|
13
14
|
_timestamp: int = field(default_factory=lambda: time.time(), compare=False)
|
|
@@ -31,6 +32,9 @@ class Error(OutputType):
|
|
|
31
32
|
def __repr__(self):
|
|
32
33
|
s = rf"\[[bold red]ERR[/]] {_s(self.message)}"
|
|
33
34
|
if self.traceback:
|
|
34
|
-
|
|
35
|
+
s += ':'
|
|
36
|
+
traceback_pretty = ' ' + _s(self.traceback).replace('\n', '\n ')
|
|
37
|
+
if self.traceback_title:
|
|
38
|
+
traceback_pretty = f' {self.traceback_title}:\n{traceback_pretty}'
|
|
35
39
|
s += f'\n[dim]{_s(traceback_pretty)}[/]'
|
|
36
40
|
return rich_to_ansi(s)
|
secator/rich.py
CHANGED
|
@@ -4,7 +4,7 @@ import yaml
|
|
|
4
4
|
from rich.console import Console
|
|
5
5
|
from rich.table import Table
|
|
6
6
|
|
|
7
|
-
console = Console(stderr=True
|
|
7
|
+
console = Console(stderr=True)
|
|
8
8
|
console_stdout = Console(record=True)
|
|
9
9
|
# handler = RichHandler(rich_tracebacks=True) # TODO: add logging handler
|
|
10
10
|
|
secator/runners/command.py
CHANGED
|
@@ -344,7 +344,7 @@ class Command(Runner):
|
|
|
344
344
|
|
|
345
345
|
# Abort if no inputs
|
|
346
346
|
if len(self.inputs) == 0 and self.skip_if_no_inputs:
|
|
347
|
-
yield
|
|
347
|
+
yield Warning(message=f'{self.unique_name} skipped (no inputs)', _source=self.unique_name, _uuid=str(uuid.uuid4()))
|
|
348
348
|
return
|
|
349
349
|
|
|
350
350
|
# Yield targets
|
|
@@ -507,7 +507,7 @@ class Command(Runner):
|
|
|
507
507
|
if self.config.name in str(exc):
|
|
508
508
|
message = 'Executable not found.'
|
|
509
509
|
if self.install_cmd:
|
|
510
|
-
message += f' Install it with
|
|
510
|
+
message += f' Install it with "secator install tools {self.config.name}".'
|
|
511
511
|
error = Error(message=message)
|
|
512
512
|
else:
|
|
513
513
|
error = Error.from_exception(exc)
|
|
@@ -652,12 +652,14 @@ class Command(Runner):
|
|
|
652
652
|
)
|
|
653
653
|
|
|
654
654
|
elif self.return_code != 0:
|
|
655
|
-
error = f'Command failed with return code {self.return_code}
|
|
655
|
+
error = f'Command failed with return code {self.return_code}'
|
|
656
656
|
last_lines = self.output.split('\n')
|
|
657
657
|
last_lines = last_lines[max(0, len(last_lines) - 2):]
|
|
658
|
+
last_lines = [line for line in last_lines if line != '']
|
|
658
659
|
yield Error(
|
|
659
660
|
message=error,
|
|
660
661
|
traceback='\n'.join(last_lines),
|
|
662
|
+
traceback_title='Last stdout lines',
|
|
661
663
|
_source=self.unique_name,
|
|
662
664
|
_uuid=str(uuid.uuid4())
|
|
663
665
|
)
|
secator/tasks/bbot.py
CHANGED
|
@@ -4,7 +4,7 @@ from secator.config import CONFIG
|
|
|
4
4
|
from secator.decorators import task
|
|
5
5
|
from secator.runners import Command
|
|
6
6
|
from secator.serializers import RegexSerializer
|
|
7
|
-
from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Error
|
|
7
|
+
from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Info, Error
|
|
8
8
|
from secator.serializers import JSONSerializer
|
|
9
9
|
|
|
10
10
|
|
|
@@ -219,7 +219,8 @@ class bbot(Command):
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
install_pre = {
|
|
222
|
-
'
|
|
222
|
+
'apk': ['python3-dev', 'linux-headers', 'musl-dev', 'gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium'],
|
|
223
|
+
'*': ['gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium']
|
|
223
224
|
}
|
|
224
225
|
install_cmd = 'pipx install bbot && pipx upgrade bbot'
|
|
225
226
|
install_post = {
|
|
@@ -234,6 +235,11 @@ class bbot(Command):
|
|
|
234
235
|
yield item
|
|
235
236
|
return
|
|
236
237
|
|
|
238
|
+
# Set scan name and base path for output
|
|
239
|
+
if _type == 'SCAN':
|
|
240
|
+
self.scan_config = item['data']
|
|
241
|
+
return
|
|
242
|
+
|
|
237
243
|
if _type not in BBOT_MAP_TYPES:
|
|
238
244
|
self._print(f'[bold orange3]Found unsupported bbot type: {_type}.[/] [bold green]Skipping.[/]', rich=True)
|
|
239
245
|
return
|
|
@@ -278,9 +284,11 @@ class bbot(Command):
|
|
|
278
284
|
|
|
279
285
|
# If a screenshot was saved, move it to secator output folder
|
|
280
286
|
if item['type'] == 'WEBSCREENSHOT':
|
|
281
|
-
|
|
282
|
-
|
|
287
|
+
from pathlib import Path
|
|
288
|
+
path = Path.home() / '.bbot' / 'scans' / self.scan_config['name'] / item['data']['path']
|
|
289
|
+
name = path.as_posix().split('/')[-1]
|
|
283
290
|
secator_path = f'{self.reports_folder}/.outputs/{name}'
|
|
291
|
+
yield Info(f'Copying screenshot {path} to {secator_path}')
|
|
284
292
|
shutil.copy(path, secator_path)
|
|
285
293
|
item['data']['path'] = secator_path
|
|
286
294
|
|
secator/tasks/httpx.py
CHANGED
|
@@ -65,6 +65,9 @@ class httpx(Http):
|
|
|
65
65
|
}
|
|
66
66
|
item_loaders = [JSONSerializer()]
|
|
67
67
|
output_types = [Url, Subdomain]
|
|
68
|
+
install_pre = {
|
|
69
|
+
'apk': ['chromium']
|
|
70
|
+
}
|
|
68
71
|
install_cmd = 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest'
|
|
69
72
|
install_github_handle = 'projectdiscovery/httpx'
|
|
70
73
|
proxychains = False
|
secator/tasks/naabu.py
CHANGED
|
@@ -34,7 +34,7 @@ class naabu(ReconPort):
|
|
|
34
34
|
# 'health_check': 'hc'
|
|
35
35
|
}
|
|
36
36
|
opt_value_map = {
|
|
37
|
-
TIMEOUT: lambda x: x*1000 if x and x > 0 else None, # convert to milliseconds
|
|
37
|
+
TIMEOUT: lambda x: int(x*1000) if x and x > 0 else None, # convert to milliseconds
|
|
38
38
|
RETRIES: lambda x: 1 if x == 0 else x,
|
|
39
39
|
PROXY: lambda x: x.replace('socks5://', '')
|
|
40
40
|
}
|
secator/utils.py
CHANGED
|
@@ -373,7 +373,7 @@ def rich_to_ansi(text):
|
|
|
373
373
|
str: Converted text (ANSI).
|
|
374
374
|
"""
|
|
375
375
|
from rich.console import Console
|
|
376
|
-
tmp_console = Console(file=None, highlight=False
|
|
376
|
+
tmp_console = Console(file=None, highlight=False)
|
|
377
377
|
with tmp_console.capture() as capture:
|
|
378
378
|
tmp_console.print(text, end='', soft_wrap=True)
|
|
379
379
|
return capture.get()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: secator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.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
|
|
@@ -66,7 +66,6 @@ Requires-Dist: pyinstrument<5; extra == 'trace'
|
|
|
66
66
|
Provides-Extra: worker
|
|
67
67
|
Requires-Dist: eventlet<1; extra == 'worker'
|
|
68
68
|
Requires-Dist: flower<3; extra == 'worker'
|
|
69
|
-
Requires-Dist: gevent<25; extra == 'worker'
|
|
70
69
|
Description-Content-Type: text/markdown
|
|
71
70
|
|
|
72
71
|
<h1 align="center">
|
|
@@ -165,6 +164,7 @@ check that the tool complies with our selection criterias before doing so. If it
|
|
|
165
164
|
```sh
|
|
166
165
|
pipx install secator
|
|
167
166
|
```
|
|
167
|
+
***Note:** Make sure to have [pipx](https://pipx.pypa.io/stable/installation/) installed.*
|
|
168
168
|
|
|
169
169
|
</details>
|
|
170
170
|
|
|
@@ -178,7 +178,7 @@ pip install secator
|
|
|
178
178
|
</details>
|
|
179
179
|
|
|
180
180
|
<details>
|
|
181
|
-
<summary>Bash</summary>
|
|
181
|
+
<summary>Bash (uses apt)</summary>
|
|
182
182
|
|
|
183
183
|
```sh
|
|
184
184
|
wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
|
|
@@ -2,16 +2,16 @@ secator/.gitignore,sha256=da8MUc3hdb6Mo0WjZu2upn5uZMbXcBGvhdhTQ1L89HI,3093
|
|
|
2
2
|
secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
secator/celery.py,sha256=Ry-JYJzN9F4LFHOn4IXpSFgCzpM99esKiQRJh_TkHp8,9578
|
|
4
4
|
secator/celery_utils.py,sha256=iIuCn_3YkPXCtpnbaYqpppU2TARzSDyTIYHkrRyt54s,7725
|
|
5
|
-
secator/cli.py,sha256=
|
|
5
|
+
secator/cli.py,sha256=K6TB619bk8stXHUR_OeNSkD03djWYbvlalRRJvg9R0M,43870
|
|
6
6
|
secator/config.py,sha256=6wm2EErW1DuhrdKSuIEUvc2b3yBxJWyZKnocr7lIeZw,19267
|
|
7
7
|
secator/decorators.py,sha256=tjH7WodxJEBIf2CCbegmvOe8H9DKSFh4iPLEhDNGPCA,13784
|
|
8
8
|
secator/definitions.py,sha256=gFtLT9fjNtX_1qkiCjNfQyCvYq07IhScsQzX4o20_SE,3084
|
|
9
|
-
secator/installer.py,sha256=
|
|
9
|
+
secator/installer.py,sha256=Q5qmGbxGmuhysEA9YovTpy-YY2TxxFskhrzSX44c42E,17971
|
|
10
10
|
secator/report.py,sha256=qJkEdCFttDBXIwUNUzZqFU_sG8l0PvyTSTogZVBv1Rs,3628
|
|
11
|
-
secator/rich.py,sha256=
|
|
11
|
+
secator/rich.py,sha256=owmuLcTTUt8xYBTE3_SqWTkPeAomcU_8bPdW_V-U8VM,3264
|
|
12
12
|
secator/template.py,sha256=Qy4RjcmlifeSA8CleWUBb9fluxuYHzxgEH0H-8qs8R4,4323
|
|
13
13
|
secator/thread.py,sha256=rgRgEtcMgs2wyfLWVlCTUCLWeg6jsMo5iKpyyrON5rY,655
|
|
14
|
-
secator/utils.py,sha256=
|
|
14
|
+
secator/utils.py,sha256=HMw0Q4omL-a5VcbvUhATC30oOSEKxTVLANgVRfWKnkc,21211
|
|
15
15
|
secator/utils_test.py,sha256=ArHwkWW89t0IDqxO4HjJWd_tm7tp1illP4pu3nLq5yo,6559
|
|
16
16
|
secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -51,7 +51,7 @@ secator/hooks/gcs.py,sha256=MIhntyWYz9BZdTXhWl5JznaczSq1_7fl3TVqPufuTSo,1490
|
|
|
51
51
|
secator/hooks/mongodb.py,sha256=HyjtpJSoxvSZ6aG8uBf1RFLNKGXCBDQL5eEh4xzDonA,7545
|
|
52
52
|
secator/output_types/__init__.py,sha256=LxCW0K1f2vdgUapc4pIEsUpBfC0TQVvqo7T57rGuZGk,1159
|
|
53
53
|
secator/output_types/_base.py,sha256=OgS6ICt66TzPsqo1JZwRIIwbng2HRX1i_u5qbUECgNk,2820
|
|
54
|
-
secator/output_types/error.py,sha256=
|
|
54
|
+
secator/output_types/error.py,sha256=QjiJ5RoN3-utHqAyvgL2jlmZp7-u7emgUQpvLpYammU,1405
|
|
55
55
|
secator/output_types/exploit.py,sha256=-BKTqPBg94rVgjw8YSmcYuBCI2x-73WwMd9ITP9qr3Y,1750
|
|
56
56
|
secator/output_types/info.py,sha256=R8xeiD3ocNOsvkJPhrQgsx6q-Ea1G0eTAqyuh5JrAR0,843
|
|
57
57
|
secator/output_types/ip.py,sha256=CyE3qkp55Kmj5YRl0CZGS4XrHX8N5apWrLN3OMzaK0U,1127
|
|
@@ -70,7 +70,7 @@ secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,2
|
|
|
70
70
|
secator/runners/_base.py,sha256=tcTsL35dAHsIMfgcclTtvDk2kQM4Hhu-8IZTyHJgqTs,28973
|
|
71
71
|
secator/runners/_helpers.py,sha256=FGogmmdHfCWmIyq7wRprwU1oOSxesOu3Y0N4GyAgiGw,2000
|
|
72
72
|
secator/runners/celery.py,sha256=bqvDTTdoHiGRCt0FRvlgFHQ_nsjKMP5P0PzGbwfCj_0,425
|
|
73
|
-
secator/runners/command.py,sha256=
|
|
73
|
+
secator/runners/command.py,sha256=fk5JzdrZ_2T2X8BqU7d0MeVfjmteUYtaRM9MJE5HHPw,25081
|
|
74
74
|
secator/runners/scan.py,sha256=tuPuqwL6fIS4UbCoy5WPKthYWm_LL-vCPRD2qK58HZE,1232
|
|
75
75
|
secator/runners/task.py,sha256=JXlwo3DyQnu69RbQ8xvJnXu6y0rDYN-3iT4q4gy39tI,2004
|
|
76
76
|
secator/runners/workflow.py,sha256=vry_MZFx6dRrorTrdsUqvhMZGOLPCdzpxkvN6fnt62w,3783
|
|
@@ -81,7 +81,7 @@ secator/serializers/json.py,sha256=UJwAymRzjF-yBKOgz1MTOyBhQcdQg7fOKRXgmHIu8fo,4
|
|
|
81
81
|
secator/serializers/regex.py,sha256=fh-fE0RGvKSGKByFtwmKsWriRpZR9PXZQsY9JybHBWI,489
|
|
82
82
|
secator/tasks/__init__.py,sha256=yRIZf9E47aS7o6rpgAJLgJUpX2cug1ofZeq8QsxgyjU,192
|
|
83
83
|
secator/tasks/_categories.py,sha256=IWyBprIUBZxflh7QfvK27Ix18M_bnquzlERqfTZohVs,13821
|
|
84
|
-
secator/tasks/bbot.py,sha256=
|
|
84
|
+
secator/tasks/bbot.py,sha256=PXRf3KJBTRhkVirfZQ1BDeEyg33kY9zKk-iXWn3zo3k,7522
|
|
85
85
|
secator/tasks/bup.py,sha256=4PM123Km3uOkMUwfdLY6J7pyCqIsbwMvOLYx7XYCAZc,3030
|
|
86
86
|
secator/tasks/cariddi.py,sha256=7S92pp7tvihoz9fAiMpmcfPzEvxEJKMlk-IqAvVDISA,2906
|
|
87
87
|
secator/tasks/dalfox.py,sha256=hHQgYuZ7AGQCQtcN8hSM9uPnzeq1DSr_cpOxnn7-660,1850
|
|
@@ -96,20 +96,20 @@ secator/tasks/gf.py,sha256=y8Fc0sRLGqNuwUjTBgLk3HEw3ZOnh09nB_GTufGErNA,962
|
|
|
96
96
|
secator/tasks/gospider.py,sha256=KGINm9kxrq546xi1yN8_OwNCNDxSW9vVRYDAlvNajBs,2303
|
|
97
97
|
secator/tasks/grype.py,sha256=xoOuldnHCrS0O1Y4IzjbSVvoX5eX-fLSZ74THdRC2so,2447
|
|
98
98
|
secator/tasks/h8mail.py,sha256=wNukV-aB-bXPZNq7WL8n1nFgH5b5tGh6vOF80Yna33I,1934
|
|
99
|
-
secator/tasks/httpx.py,sha256=
|
|
99
|
+
secator/tasks/httpx.py,sha256=SyJFjMwl8Z9BpG60wk27-X5nI13cp5BJumYWjb0Sefc,5896
|
|
100
100
|
secator/tasks/katana.py,sha256=A0nnjKKT-A34LBtEuG25lWh5Ria4nwgo4Ti31403E-Q,5256
|
|
101
101
|
secator/tasks/maigret.py,sha256=6anhBzB4lEM90Lk23cAD_ku7I_ghTpj0W0i3h6HARD8,2088
|
|
102
102
|
secator/tasks/mapcidr.py,sha256=56ocbaDmB5_C_ns-773CgZXGOKOtkI9q9xJs2Rlfqio,990
|
|
103
103
|
secator/tasks/msfconsole.py,sha256=TXVrvzSWw9Ncv2h9QJtaEinTMbps_z0zX1PFirERVho,6430
|
|
104
|
-
secator/tasks/naabu.py,sha256=
|
|
104
|
+
secator/tasks/naabu.py,sha256=aAEkQ10ma3Log8OVj8wHY1zUWmjpVQ5pehAMQLJQEV0,2089
|
|
105
105
|
secator/tasks/nmap.py,sha256=Zu24sJHnlOf3NXLj3Ohi07-x7m-5Ajr5ULpNsUF-QT0,12546
|
|
106
106
|
secator/tasks/nuclei.py,sha256=o677F5yv3mfIlYEpKY5_W6CT2Dlt315DuFOsCjHLE5c,4270
|
|
107
107
|
secator/tasks/searchsploit.py,sha256=gvtLZbL2hzAZ07Cf0cSj2Qs0GvWK94XyHvoPFsetXu8,3321
|
|
108
108
|
secator/tasks/subfinder.py,sha256=C6W5NnXT92OUB1aSS9IYseqdI3wDMAz70TOEl8X-o3U,1213
|
|
109
109
|
secator/tasks/wpscan.py,sha256=dF6_dw-Qezd8DmpftGc9KpgrvIk3zDdVJW4mKUa7fe0,5527
|
|
110
110
|
secator/workflows/__init__.py,sha256=ivpZHiYYlj4JqlXLRmB9cmAPUGdk8QcUrCRL34hIqEA,665
|
|
111
|
-
secator-0.
|
|
112
|
-
secator-0.
|
|
113
|
-
secator-0.
|
|
114
|
-
secator-0.
|
|
115
|
-
secator-0.
|
|
111
|
+
secator-0.9.0.dist-info/METADATA,sha256=xW3FIft1SHj0C1_tfH0StwEqCBVplqlAu1ZeXuJ12kU,14849
|
|
112
|
+
secator-0.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
113
|
+
secator-0.9.0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
|
|
114
|
+
secator-0.9.0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
|
|
115
|
+
secator-0.9.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|