secator 0.5.1__tar.gz → 0.6.0__tar.gz
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-0.5.1 → secator-0.6.0}/CHANGELOG.md +21 -0
- {secator-0.5.1 → secator-0.6.0}/Dockerfile +4 -2
- {secator-0.5.1 → secator-0.6.0}/PKG-INFO +2 -2
- secator-0.6.0/helm/.helmignore +23 -0
- secator-0.6.0/helm/Chart.yaml +7 -0
- secator-0.6.0/helm/templates/redis-service.yaml +12 -0
- secator-0.6.0/helm/templates/redis.yaml +22 -0
- secator-0.6.0/helm/templates/secator-manager.yaml +18 -0
- secator-0.6.0/helm/templates/secator-worker.yaml +24 -0
- secator-0.6.0/helm/values.yaml +34 -0
- {secator-0.5.1 → secator-0.6.0}/pyproject.toml +2 -2
- {secator-0.5.1 → secator-0.6.0}/secator/hooks/mongodb.py +1 -1
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/progress.py +1 -1
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/_categories.py +1 -1
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/httpx.py +17 -13
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/katana.py +13 -7
- {secator-0.5.1 → secator-0.6.0}/tests/integration/outputs.py +2 -2
- {secator-0.5.1 → secator-0.6.0}/.flake8 +0 -0
- {secator-0.5.1 → secator-0.6.0}/.gitignore +0 -0
- {secator-0.5.1 → secator-0.6.0}/CONTRIBUTING.md +0 -0
- {secator-0.5.1 → secator-0.6.0}/LICENSE +0 -0
- {secator-0.5.1 → secator-0.6.0}/README.md +0 -0
- {secator-0.5.1 → secator-0.6.0}/SECURITY.md +0 -0
- {secator-0.5.1 → secator-0.6.0}/cloudbuild.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/aliases.cast +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/aliases.gif +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/demo.gif +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/demo.tap +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/fmt.cast +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/fmt.gif +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/help.png +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/input.cast +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/input.gif +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/pipe.cast +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/pipe.gif +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/short_demo.cast +0 -0
- {secator-0.5.1 → secator-0.6.0}/images/short_demo.gif +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/download_cves.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/install.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/install_asciinema.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/install_go.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/install_ruby.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/msf/exploit_cve.rc +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/msf/ftp_anonymous.rc +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/msf/ftp_version.rc +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/msf/redis.rc +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/msfinstall.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/stories/STORY.md +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/stories/aliases.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/stories/demo.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/stories/fmt.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/stories/input.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/stories/pipe.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/scripts/stories/short_demo.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/.gitignore +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/celery.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/cli.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/config.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/aggressive.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/default.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/stealth.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/domain.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/host.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/network.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/subdomain.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/url.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/cidr_recon.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/code_scan.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/host_recon.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/port_scan.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/subdomain_recon.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_crawl.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_dirsearch.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_fuzz.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_nuclei.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_vuln.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/user_hunt.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/wordpress.yaml +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/decorators.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/definitions.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/exporters/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/exporters/_base.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/exporters/csv.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/exporters/gdrive.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/exporters/json.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/exporters/table.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/exporters/txt.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/hooks/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/installer.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/_base.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/exploit.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/ip.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/port.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/record.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/subdomain.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/tag.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/target.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/url.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/user_account.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/output_types/vulnerability.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/report.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/rich.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/runners/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/runners/_base.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/runners/_helpers.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/runners/command.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/runners/scan.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/runners/task.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/runners/workflow.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/serializers/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/serializers/dataclass.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/serializers/json.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/serializers/regex.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/cariddi.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/dalfox.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/dirsearch.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/dnsx.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/dnsxbrute.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/feroxbuster.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/ffuf.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/fping.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/gau.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/gf.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/gospider.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/grype.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/h8mail.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/maigret.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/mapcidr.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/msfconsole.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/naabu.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/nmap.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/nuclei.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/searchsploit.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/subfinder.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/tasks/wpscan.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/template.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/utils.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/secator/utils_test.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/fixtures/h8mail_breach.txt +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/fixtures/ls.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/fixtures/msfconsole_input.rc +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/fixtures/nmap_output.xml +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/inputs.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/setup.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/teardown.sh +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/test_scans.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/test_tasks.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/test_worker.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/test_workflows.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/wordlist.txt +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/wordlist_dns.txt +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/integration/wordpress_toolbox/Makefile +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/performance/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/performance/loadtester.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/__init__.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_celery.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_config.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_offline.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_scans.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_serializers.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_tasks.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_template.py +0 -0
- {secator-0.5.1 → secator-0.6.0}/tests/unit/test_workflows.py +0 -0
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.0](https://github.com/freelabz/secator/compare/v0.5.2...v0.6.0) (2024-07-25)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add duplicate finder to mongodb hooks ([#409](https://github.com/freelabz/secator/issues/409)) ([fb0e11c](https://github.com/freelabz/secator/commit/fb0e11cd2b64bf51bc862f47243c8c0602d3d5e9))
|
|
9
|
+
* basic helm chart ([#408](https://github.com/freelabz/secator/issues/408)) ([6b2f84f](https://github.com/freelabz/secator/commit/6b2f84f61bd8eccf2cdd61b6ffdc2eb4489240bc))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* Dockerfile broken apt install ([#407](https://github.com/freelabz/secator/issues/407)) ([c023279](https://github.com/freelabz/secator/commit/c02327968ecea816004636801684b336735df439))
|
|
15
|
+
* **tasks:** duplicate meta opt entry ([#401](https://github.com/freelabz/secator/issues/401)) ([ae56aa6](https://github.com/freelabz/secator/commit/ae56aa62f5a18936a1787547e37bbe636e6e43c3))
|
|
16
|
+
|
|
17
|
+
## [0.5.2](https://github.com/freelabz/secator/compare/v0.5.1...v0.5.2) (2024-05-07)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **nuclei,katana:** add -sr flag and write http responses and screenshot to correct folder ([#395](https://github.com/freelabz/secator/issues/395)) ([1a51790](https://github.com/freelabz/secator/commit/1a51790c9231f593631c2780b6d5e0fa89f1aa55))
|
|
23
|
+
|
|
3
24
|
## [0.5.1](https://github.com/freelabz/secator/compare/v0.5.0...v0.5.1) (2024-05-06)
|
|
4
25
|
|
|
5
26
|
|
|
@@ -22,8 +22,7 @@ RUN apt update -y && \
|
|
|
22
22
|
jq \
|
|
23
23
|
openssl \
|
|
24
24
|
proxychains \
|
|
25
|
-
proxychains-ng
|
|
26
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
25
|
+
proxychains-ng
|
|
27
26
|
|
|
28
27
|
# Install Metasploit framework
|
|
29
28
|
RUN curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
|
|
@@ -43,5 +42,8 @@ RUN secator install addons mongodb
|
|
|
43
42
|
RUN secator install addons redis
|
|
44
43
|
RUN secator install addons dev
|
|
45
44
|
|
|
45
|
+
# Cleanup
|
|
46
|
+
RUN rm -rf /var/lib/apt/lists/*
|
|
47
|
+
|
|
46
48
|
# Set entrypoint
|
|
47
49
|
ENTRYPOINT ["secator"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: secator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.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
|
|
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Requires-Python: >=3.8
|
|
22
|
-
Requires-Dist:
|
|
22
|
+
Requires-Dist: beautifulsoup4<=5
|
|
23
23
|
Requires-Dist: celery<6
|
|
24
24
|
Requires-Dist: cpe<2
|
|
25
25
|
Requires-Dist: dotmap<2
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Patterns to ignore when building packages.
|
|
2
|
+
# This supports shell glob matching, relative path matching, and
|
|
3
|
+
# negation (prefixed with !). Only one pattern per line.
|
|
4
|
+
.DS_Store
|
|
5
|
+
# Common VCS dirs
|
|
6
|
+
.git/
|
|
7
|
+
.gitignore
|
|
8
|
+
.bzr/
|
|
9
|
+
.bzrignore
|
|
10
|
+
.hg/
|
|
11
|
+
.hgignore
|
|
12
|
+
.svn/
|
|
13
|
+
# Common backup files
|
|
14
|
+
*.swp
|
|
15
|
+
*.bak
|
|
16
|
+
*.tmp
|
|
17
|
+
*.orig
|
|
18
|
+
*~
|
|
19
|
+
# Various IDEs
|
|
20
|
+
.project
|
|
21
|
+
.idea/
|
|
22
|
+
*.tmproj
|
|
23
|
+
.vscode/
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
apiVersion: apps/v1
|
|
2
|
+
kind: StatefulSet
|
|
3
|
+
metadata:
|
|
4
|
+
name: {{ .Values.redis.name }}
|
|
5
|
+
namespace: {{ .Values.namespace }}
|
|
6
|
+
spec:
|
|
7
|
+
selector:
|
|
8
|
+
matchLabels:
|
|
9
|
+
app: redis
|
|
10
|
+
serviceName: {{ .Values.redis.name }}
|
|
11
|
+
replicas: {{ .Values.redis.replicas }}
|
|
12
|
+
template:
|
|
13
|
+
metadata:
|
|
14
|
+
labels:
|
|
15
|
+
app: redis
|
|
16
|
+
spec:
|
|
17
|
+
containers:
|
|
18
|
+
- name: {{ .Values.redis.name }}
|
|
19
|
+
image: {{ .Values.redis.image }}
|
|
20
|
+
ports:
|
|
21
|
+
- containerPort: {{ .Values.redis.port }}
|
|
22
|
+
name: client
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
apiVersion: v1
|
|
2
|
+
kind: Pod
|
|
3
|
+
metadata:
|
|
4
|
+
name: {{ .Values.secatorManager.name }}
|
|
5
|
+
namespace: {{ .Values.namespace }}
|
|
6
|
+
labels:
|
|
7
|
+
name: secator-manager
|
|
8
|
+
spec:
|
|
9
|
+
containers:
|
|
10
|
+
- name: secator-manager
|
|
11
|
+
image: {{ .Values.secatorManager.image }}
|
|
12
|
+
command: ["tail"]
|
|
13
|
+
args: ["-F", "anything"]
|
|
14
|
+
env:
|
|
15
|
+
- name: SECATOR_CELERY_BROKER_URL
|
|
16
|
+
value: "redis://{{ .Values.redis.name }}:6379/0"
|
|
17
|
+
- name: SECATOR_CELERY_RESULT_BACKEND
|
|
18
|
+
value: "redis://{{ .Values.redis.name }}:6379/0"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
apiVersion: apps/v1
|
|
2
|
+
kind: Deployment
|
|
3
|
+
metadata:
|
|
4
|
+
name: {{ .Values.secatorWorker.name }}
|
|
5
|
+
namespace: {{ .Values.namespace }}
|
|
6
|
+
spec:
|
|
7
|
+
selector:
|
|
8
|
+
matchLabels:
|
|
9
|
+
app: secator-worker
|
|
10
|
+
template:
|
|
11
|
+
metadata:
|
|
12
|
+
labels:
|
|
13
|
+
app: secator-worker
|
|
14
|
+
spec:
|
|
15
|
+
containers:
|
|
16
|
+
- name: {{ .Values.secatorWorker.name }}
|
|
17
|
+
image: {{ .Values.secatorWorker.image }}
|
|
18
|
+
command: ["secator"]
|
|
19
|
+
args: ["worker"]
|
|
20
|
+
env:
|
|
21
|
+
- name: SECATOR_CELERY_BROKER_URL
|
|
22
|
+
value: "redis://{{ .Values.redis.name }}:6379/0"
|
|
23
|
+
- name: SECATOR_CELERY_RESULT_BACKEND
|
|
24
|
+
value: "redis://{{ .Values.redis.name }}:6379/0"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Default values for Secator
|
|
2
|
+
# This is a YAML-formatted file.
|
|
3
|
+
# Declare variables to be passed into your templates.
|
|
4
|
+
|
|
5
|
+
namespace: secator
|
|
6
|
+
|
|
7
|
+
secatorManager:
|
|
8
|
+
name: secator-manager
|
|
9
|
+
image: "freelabz/secator"
|
|
10
|
+
|
|
11
|
+
# Empty if using default repository
|
|
12
|
+
repository:
|
|
13
|
+
# Empty if using tag "latest"
|
|
14
|
+
tag:
|
|
15
|
+
|
|
16
|
+
secatorWorker:
|
|
17
|
+
name: secator-worker
|
|
18
|
+
image: "freelabz/secator"
|
|
19
|
+
|
|
20
|
+
# Empty if using default repository
|
|
21
|
+
repository:
|
|
22
|
+
# Empty if using tag "latest"
|
|
23
|
+
tag:
|
|
24
|
+
|
|
25
|
+
redis:
|
|
26
|
+
name: redis
|
|
27
|
+
image: "redis"
|
|
28
|
+
|
|
29
|
+
# Empty if using default repository
|
|
30
|
+
repository:
|
|
31
|
+
# Empty if using tag "latest"
|
|
32
|
+
tag:
|
|
33
|
+
replicas: 1
|
|
34
|
+
port: 6379
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "secator"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.6.0"
|
|
8
8
|
authors = [{ name = "FreeLabz", email = "sales@freelabz.com" }]
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
description = "The pentester's swiss knife."
|
|
@@ -30,7 +30,7 @@ classifiers = [
|
|
|
30
30
|
"Programming Language :: Python :: 3.11",
|
|
31
31
|
]
|
|
32
32
|
dependencies = [
|
|
33
|
-
"
|
|
33
|
+
"beautifulsoup4 <= 5",
|
|
34
34
|
'celery < 6',
|
|
35
35
|
"cpe < 2",
|
|
36
36
|
"dotmap < 2",
|
|
@@ -8,7 +8,7 @@ from secator.utils import rich_to_ansi
|
|
|
8
8
|
@dataclass
|
|
9
9
|
class Progress(OutputType):
|
|
10
10
|
duration: str
|
|
11
|
-
percent: int
|
|
11
|
+
percent: int = 0
|
|
12
12
|
errors: list = field(default_factory=list)
|
|
13
13
|
extra_data: dict = field(default_factory=dict)
|
|
14
14
|
_source: str = field(default='', repr=True)
|
|
@@ -44,7 +44,7 @@ OPTS_HTTP = [
|
|
|
44
44
|
]
|
|
45
45
|
|
|
46
46
|
OPTS_HTTP_CRAWLERS = OPTS_HTTP + [
|
|
47
|
-
DEPTH, MATCH_REGEX, MATCH_SIZE, MATCH_WORDS, FILTER_REGEX, FILTER_CODES, FILTER_SIZE, FILTER_WORDS,
|
|
47
|
+
DEPTH, MATCH_REGEX, MATCH_SIZE, MATCH_WORDS, FILTER_REGEX, FILTER_CODES, FILTER_SIZE, FILTER_WORDS,
|
|
48
48
|
MATCH_CODES
|
|
49
49
|
]
|
|
50
50
|
|
|
@@ -31,6 +31,7 @@ class httpx(Http):
|
|
|
31
31
|
'cdn': {'is_flag': True, 'default': False, 'help': 'CDN detection'},
|
|
32
32
|
'debug_resp': {'is_flag': True, 'default': False, 'help': 'Debug response'},
|
|
33
33
|
'vhost': {'is_flag': True, 'default': False, 'help': 'Probe and display server supporting VHOST'},
|
|
34
|
+
'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Save HTTP responses'}, # noqa: E501
|
|
34
35
|
'screenshot': {'is_flag': True, 'short': 'ss', 'default': False, 'help': 'Screenshot response'},
|
|
35
36
|
'system_chrome': {'is_flag': True, 'default': False, 'help': 'Use local installed Chrome for screenshot'},
|
|
36
37
|
'headless_options': {'is_flag': False, 'short': 'ho', 'default': None, 'help': 'Headless Chrome additional options'},
|
|
@@ -55,6 +56,7 @@ class httpx(Http):
|
|
|
55
56
|
THREADS: 'threads',
|
|
56
57
|
TIMEOUT: 'timeout',
|
|
57
58
|
USER_AGENT: OPT_NOT_SUPPORTED,
|
|
59
|
+
'store_responses': 'sr',
|
|
58
60
|
}
|
|
59
61
|
opt_value_map = {
|
|
60
62
|
DELAY: lambda x: str(x) + 's' if x else None,
|
|
@@ -71,15 +73,10 @@ class httpx(Http):
|
|
|
71
73
|
debug_resp = self.get_opt_value('debug_resp')
|
|
72
74
|
if debug_resp:
|
|
73
75
|
self.cmd = self.cmd.replace('-silent', '')
|
|
74
|
-
if CONFIG.http.store_responses:
|
|
75
|
-
self.output_response_path = f'{self.reports_folder}/response'
|
|
76
|
-
self.output_screenshot_path = f'{self.reports_folder}/screenshot'
|
|
77
|
-
os.makedirs(self.output_response_path, exist_ok=True)
|
|
78
|
-
os.makedirs(self.output_screenshot_path, exist_ok=True)
|
|
79
|
-
self.cmd += f' -sr -srd {self.reports_folder}'
|
|
80
|
-
|
|
81
|
-
# Remove screenshot bytes and body bytes when screenshot
|
|
82
76
|
screenshot = self.get_opt_value('screenshot')
|
|
77
|
+
store_responses = self.get_opt_value('store_responses')
|
|
78
|
+
if store_responses or screenshot:
|
|
79
|
+
self.cmd += f' -srd {self.reports_folder}/.outputs'
|
|
83
80
|
if screenshot:
|
|
84
81
|
self.cmd += ' -esb -ehb'
|
|
85
82
|
|
|
@@ -98,8 +95,15 @@ class httpx(Http):
|
|
|
98
95
|
|
|
99
96
|
@staticmethod
|
|
100
97
|
def on_end(self):
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
store_responses = self.get_opt_value('store_responses')
|
|
99
|
+
response_dir = f'{self.reports_folder}/.outputs'
|
|
100
|
+
if store_responses:
|
|
101
|
+
index_rpath = f'{response_dir}/response/index.txt'
|
|
102
|
+
index_spath = f'{response_dir}/screenshot/index_screenshot.txt'
|
|
103
|
+
index_spath2 = f'{response_dir}/screenshot/screenshot.html'
|
|
104
|
+
if os.path.exists(index_rpath):
|
|
105
|
+
os.remove(index_rpath)
|
|
106
|
+
if os.path.exists(index_spath):
|
|
107
|
+
os.remove(index_spath)
|
|
108
|
+
if os.path.exists(index_spath2):
|
|
109
|
+
os.remove(index_spath2)
|
|
@@ -29,7 +29,8 @@ class katana(HttpCrawler):
|
|
|
29
29
|
opts = {
|
|
30
30
|
'headless': {'is_flag': True, 'short': 'hl', 'help': 'Headless mode'},
|
|
31
31
|
'system_chrome': {'is_flag': True, 'short': 'sc', 'help': 'Use local installed chrome browser'},
|
|
32
|
-
'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'}
|
|
32
|
+
'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'},
|
|
33
|
+
'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Store responses'}
|
|
33
34
|
}
|
|
34
35
|
opt_key_map = {
|
|
35
36
|
HEADER: 'headers',
|
|
@@ -50,7 +51,8 @@ class katana(HttpCrawler):
|
|
|
50
51
|
RETRIES: 'retry',
|
|
51
52
|
THREADS: 'concurrency',
|
|
52
53
|
TIMEOUT: 'timeout',
|
|
53
|
-
USER_AGENT: OPT_NOT_SUPPORTED
|
|
54
|
+
USER_AGENT: OPT_NOT_SUPPORTED,
|
|
55
|
+
'store_responses': 'sr'
|
|
54
56
|
}
|
|
55
57
|
opt_value_map = {
|
|
56
58
|
DELAY: lambda x: int(x) if isinstance(x, float) else x
|
|
@@ -107,14 +109,16 @@ class katana(HttpCrawler):
|
|
|
107
109
|
debug_resp = self.get_opt_value('debug_resp')
|
|
108
110
|
if debug_resp:
|
|
109
111
|
self.cmd = self.cmd.replace('-silent', '')
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
store_responses = self.get_opt_value('store_responses')
|
|
113
|
+
if store_responses:
|
|
114
|
+
self.cmd += f' -srd {self.reports_folder}/.outputs'
|
|
112
115
|
|
|
113
116
|
@staticmethod
|
|
114
117
|
def on_item(self, item):
|
|
115
118
|
if not isinstance(item, Url):
|
|
116
119
|
return item
|
|
117
|
-
|
|
120
|
+
store_responses = self.get_opt_value('store_responses')
|
|
121
|
+
if store_responses and os.path.exists(item.stored_response_path):
|
|
118
122
|
with open(item.stored_response_path, 'r', encoding='latin-1') as fin:
|
|
119
123
|
data = fin.read().splitlines(True)
|
|
120
124
|
first_line = data[0]
|
|
@@ -126,5 +130,7 @@ class katana(HttpCrawler):
|
|
|
126
130
|
|
|
127
131
|
@staticmethod
|
|
128
132
|
def on_end(self):
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
store_responses = self.get_opt_value('store_responses')
|
|
134
|
+
index_rpath = f'{self.reports_folder}/.outputs/index.txt'
|
|
135
|
+
if store_responses and os.path.exists(index_rpath):
|
|
136
|
+
os.remove(index_rpath)
|
|
@@ -59,7 +59,7 @@ OUTPUTS_TASKS = {
|
|
|
59
59
|
_source='dnsx'
|
|
60
60
|
),
|
|
61
61
|
Record(
|
|
62
|
-
name='v=spf1 include:wikimedia.org ~all',
|
|
62
|
+
name='v=spf1 include:_cidrs.wikimedia.org ~all',
|
|
63
63
|
type='TXT',
|
|
64
64
|
host='wikipedia.org',
|
|
65
65
|
_source='dnsx'
|
|
@@ -217,7 +217,7 @@ OUTPUTS_TASKS = {
|
|
|
217
217
|
],
|
|
218
218
|
'wpscan': [
|
|
219
219
|
Tag(
|
|
220
|
-
name='Wordpress theme - twentytwentyfour 1.
|
|
220
|
+
name='Wordpress theme - twentytwentyfour 1.2',
|
|
221
221
|
match='http://localhost:8000/',
|
|
222
222
|
_source='wpscan'),
|
|
223
223
|
Vulnerability(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|