secator 0.16.3__tar.gz → 0.16.5__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.16.3 → secator-0.16.5}/CHANGELOG.md +18 -0
- {secator-0.16.3 → secator-0.16.5}/PKG-INFO +1 -1
- {secator-0.16.3 → secator-0.16.5}/cloudbuild.yaml +6 -3
- {secator-0.16.3 → secator-0.16.5}/pyproject.toml +1 -1
- {secator-0.16.3 → secator-0.16.5}/secator/celery.py +31 -3
- {secator-0.16.3 → secator-0.16.5}/secator/hooks/gcs.py +5 -3
- {secator-0.16.3 → secator-0.16.5}/secator/hooks/mongodb.py +30 -3
- {secator-0.16.3 → secator-0.16.5}/secator/runners/_base.py +8 -4
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/_categories.py +14 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/dalfox.py +1 -0
- {secator-0.16.3 → secator-0.16.5}/.coderabbit.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/.docker/Dockerfile.alpine +0 -0
- {secator-0.16.3 → secator-0.16.5}/.docker/Dockerfile.arch +0 -0
- {secator-0.16.3 → secator-0.16.5}/.docker/Dockerfile.debian +0 -0
- {secator-0.16.3 → secator-0.16.5}/.docker/Dockerfile.kali +0 -0
- {secator-0.16.3 → secator-0.16.5}/.docker/Dockerfile.osx +0 -0
- {secator-0.16.3 → secator-0.16.5}/.docker/Dockerfile.ubuntu +0 -0
- {secator-0.16.3 → secator-0.16.5}/.docker/build_all.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/.dockerignore +0 -0
- {secator-0.16.3 → secator-0.16.5}/.flake8 +0 -0
- {secator-0.16.3 → secator-0.16.5}/.gitignore +0 -0
- {secator-0.16.3 → secator-0.16.5}/CONTRIBUTING.md +0 -0
- {secator-0.16.3 → secator-0.16.5}/Dockerfile +0 -0
- {secator-0.16.3 → secator-0.16.5}/LICENSE +0 -0
- {secator-0.16.3 → secator-0.16.5}/README.md +0 -0
- {secator-0.16.3 → secator-0.16.5}/SECURITY.md +0 -0
- {secator-0.16.3 → secator-0.16.5}/helm/.helmignore +0 -0
- {secator-0.16.3 → secator-0.16.5}/helm/Chart.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/helm/templates/redis-service.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/helm/templates/redis.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/helm/templates/secator-manager.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/helm/templates/secator-worker.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/helm/values.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/download_cves.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/generate_tools_md_table.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/install.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/install_asciinema.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/install_go.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/install_ruby.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/msf/exploit_cve.rc +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/msf/ftp_anonymous.rc +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/msf/ftp_version.rc +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/msf/redis.rc +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/stories/STORY.md +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/stories/aliases.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/stories/demo.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/stories/fmt.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/stories/input.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/stories/pipe.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/stories/short_demo.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/scripts/update_tools.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/.gitignore +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/celery_signals.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/celery_utils.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/cli.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/cli_helper.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/click.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/config.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/aggressive.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/http_headless.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/http_record.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/insane.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/paranoid.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/polite.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/sneaky.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/profiles/tor.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/scans/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/scans/domain.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/scans/host.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/scans/network.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/scans/subdomain.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/scans/url.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/cidr_recon.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/code_scan.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/host_recon.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/subdomain_recon.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/url_bypass.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/url_crawl.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/url_dirsearch.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/url_fuzz.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/url_params_fuzz.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/url_vuln.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/user_hunt.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/configs/workflows/wordpress.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/cve.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/decorators.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/definitions.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/_base.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/console.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/csv.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/gdrive.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/json.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/table.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/exporters/txt.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/hooks/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/installer.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/loader.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/_base.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/certificate.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/error.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/exploit.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/info.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/ip.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/port.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/progress.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/record.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/stat.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/state.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/subdomain.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/tag.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/target.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/url.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/user_account.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/vulnerability.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/output_types/warning.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/report.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/rich.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/runners/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/runners/_helpers.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/runners/celery.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/runners/command.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/runners/scan.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/runners/task.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/runners/workflow.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/scans/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/serializers/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/serializers/dataclass.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/serializers/json.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/serializers/regex.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/arjun.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/bbot.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/bup.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/cariddi.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/dirsearch.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/dnsx.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/feroxbuster.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/ffuf.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/fping.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/gau.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/gf.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/gitleaks.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/gospider.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/grype.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/h8mail.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/httpx.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/katana.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/maigret.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/mapcidr.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/msfconsole.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/naabu.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/nmap.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/nuclei.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/searchsploit.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/subfinder.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/testssl.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/trivy.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/wafw00f.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/wpprobe.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tasks/wpscan.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/template.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/thread.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/tree.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/utils.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/utils_test.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/secator/workflows/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/fixtures/h8mail_breach.txt +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/fixtures/ls.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/fixtures/msfconsole_input.rc +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/fixtures/nmap_output.xml +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/all.yaml +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/inputs.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/outputs.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/setup.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/teardown.sh +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/test_addons.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/test_celery.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/test_scans.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/test_tasks.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/test_tasks_categories.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/test_worker.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/test_workflows.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/wordlist.txt +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/wordlist_dns.txt +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/integration/wordpress_toolbox/Makefile +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/performance/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/performance/loadtester.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/performance/test_worker.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/template/test_templates.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/__init__.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_celery.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_cli.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_command.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_config.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_offline.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_runners.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_runners_helpers.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_scans.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_serializers.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_tasks.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_tasks_categories.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_template.py +0 -0
- {secator-0.16.3 → secator-0.16.5}/tests/unit/test_utils.py +0 -0
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.16.5](https://github.com/freelabz/secator/compare/v0.16.4...v0.16.5) (2025-06-25)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **celery:** pass mongodb uuids when enabled ([#701](https://github.com/freelabz/secator/issues/701)) ([64b43e8](https://github.com/freelabz/secator/commit/64b43e88659c963a0c526829a2f72ee75348edef))
|
|
9
|
+
* **ci:** add apt update in ci ([261d1e8](https://github.com/freelabz/secator/commit/261d1e8bdbca06e85adf3df7a9489bff7ba445ab))
|
|
10
|
+
* prod optimizations (GCS ValueError, dynamic profile for fuzzers with big wordlists) ([#707](https://github.com/freelabz/secator/issues/707)) ([bcd6024](https://github.com/freelabz/secator/commit/bcd6024d91362ca141b71a49c4f80c759e1801ca))
|
|
11
|
+
|
|
12
|
+
## [0.16.4](https://github.com/freelabz/secator/compare/v0.16.3...v0.16.4) (2025-06-13)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **dalfox:** reduce chunk size for dalfox ([#700](https://github.com/freelabz/secator/issues/700)) ([c14be68](https://github.com/freelabz/secator/commit/c14be68427d18072cf75c61fb6ae966f97515d15))
|
|
18
|
+
* **gcs:** add stored_response_path to sent items ([#697](https://github.com/freelabz/secator/issues/697)) ([7c6f992](https://github.com/freelabz/secator/commit/7c6f992b6c7898e956436e169b64af1d9f1d8934))
|
|
19
|
+
* mongodb optimizations ([#699](https://github.com/freelabz/secator/issues/699)) ([c0497a6](https://github.com/freelabz/secator/commit/c0497a67c293680dafdc052eff510ffd17edafe6))
|
|
20
|
+
|
|
3
21
|
## [0.16.3](https://github.com/freelabz/secator/compare/v0.16.2...v0.16.3) (2025-06-11)
|
|
4
22
|
|
|
5
23
|
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
steps:
|
|
2
2
|
- name: 'gcr.io/cloud-builders/docker'
|
|
3
3
|
entrypoint: 'bash'
|
|
4
|
-
args: ['-c', 'docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator
|
|
4
|
+
args: ['-c', 'docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION} || exit 0']
|
|
5
5
|
- name: 'gcr.io/cloud-builders/docker'
|
|
6
|
-
args: ['build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator', '--cache-from', '
|
|
6
|
+
args: ['build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION}', '--build-arg', 'flavor=${_FLAVOR}', '--cache-from', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION}', '.']
|
|
7
|
+
|
|
7
8
|
substitutions:
|
|
8
9
|
_REPOSITORY: secator
|
|
9
10
|
_LOCATION: europe-west1
|
|
11
|
+
_VERSION: dev
|
|
12
|
+
_FLAVOR: full
|
|
10
13
|
|
|
11
14
|
images:
|
|
12
|
-
- '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator'
|
|
15
|
+
- '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION}'
|
|
@@ -214,11 +214,21 @@ def run_command(self, results, name, targets, opts={}):
|
|
|
214
214
|
update_state(self, task)
|
|
215
215
|
update_state(self, task, force=True)
|
|
216
216
|
|
|
217
|
+
if CONFIG.addons.mongodb.enabled:
|
|
218
|
+
return [r._uuid for r in task.results]
|
|
217
219
|
return task.results
|
|
218
220
|
|
|
219
221
|
|
|
220
222
|
@app.task
|
|
221
223
|
def forward_results(results):
|
|
224
|
+
"""Forward results to the next task (bridge task).
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
results (list): Results to forward.
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
list: List of uuids.
|
|
231
|
+
"""
|
|
222
232
|
if isinstance(results, list):
|
|
223
233
|
for ix, item in enumerate(results):
|
|
224
234
|
if isinstance(item, dict) and 'results' in item:
|
|
@@ -227,10 +237,16 @@ def forward_results(results):
|
|
|
227
237
|
results = results['results']
|
|
228
238
|
|
|
229
239
|
if IN_CELERY_WORKER_PROCESS:
|
|
230
|
-
console.print(Info(message=f'
|
|
240
|
+
console.print(Info(message=f'Deduplicating {len(results)} results'))
|
|
231
241
|
|
|
232
242
|
results = flatten(results)
|
|
233
|
-
|
|
243
|
+
if IN_CELERY_WORKER_PROCESS and CONFIG.addons.mongodb.enabled:
|
|
244
|
+
console.print(Info(message=f'Extracting uuids from {len(results)} results'))
|
|
245
|
+
uuids = [r._uuid for r in results if hasattr(r, '_uuid')]
|
|
246
|
+
uuids.extend([r for r in results if isinstance(r, str)])
|
|
247
|
+
results = list(set(uuids))
|
|
248
|
+
else:
|
|
249
|
+
results = deduplicate(results, attr='_uuid')
|
|
234
250
|
|
|
235
251
|
if IN_CELERY_WORKER_PROCESS:
|
|
236
252
|
console.print(Info(message=f'Forwarded {len(results)} flattened and deduplicated results'))
|
|
@@ -254,9 +270,16 @@ def mark_runner_started(results, runner, enable_hooks=True):
|
|
|
254
270
|
console.print(Info(message=f'Runner {runner.unique_name} has started, running mark_started'))
|
|
255
271
|
debug(f'Runner {runner.unique_name} has started, running mark_started', sub='celery')
|
|
256
272
|
if results:
|
|
257
|
-
|
|
273
|
+
results = forward_results(results)
|
|
258
274
|
runner.enable_hooks = enable_hooks
|
|
275
|
+
if IN_CELERY_WORKER_PROCESS and CONFIG.addons.mongodb.enabled:
|
|
276
|
+
from secator.hooks.mongodb import get_results
|
|
277
|
+
results = get_results(results)
|
|
278
|
+
for item in results:
|
|
279
|
+
runner.add_result(item, print=False)
|
|
259
280
|
runner.mark_started()
|
|
281
|
+
if IN_CELERY_WORKER_PROCESS and CONFIG.addons.mongodb.enabled:
|
|
282
|
+
return [r._uuid for r in runner.results]
|
|
260
283
|
return runner.results
|
|
261
284
|
|
|
262
285
|
|
|
@@ -277,9 +300,14 @@ def mark_runner_completed(results, runner, enable_hooks=True):
|
|
|
277
300
|
debug(f'Runner {runner.unique_name} has finished, running mark_completed', sub='celery')
|
|
278
301
|
results = forward_results(results)
|
|
279
302
|
runner.enable_hooks = enable_hooks
|
|
303
|
+
if IN_CELERY_WORKER_PROCESS and CONFIG.addons.mongodb.enabled:
|
|
304
|
+
from secator.hooks.mongodb import get_results
|
|
305
|
+
results = get_results(results)
|
|
280
306
|
for item in results:
|
|
281
307
|
runner.add_result(item, print=False)
|
|
282
308
|
runner.mark_completed()
|
|
309
|
+
if IN_CELERY_WORKER_PROCESS and CONFIG.addons.mongodb.enabled:
|
|
310
|
+
return [r._uuid for r in runner.results]
|
|
283
311
|
return runner.results
|
|
284
312
|
|
|
285
313
|
|
|
@@ -11,7 +11,7 @@ from secator.utils import debug
|
|
|
11
11
|
|
|
12
12
|
GCS_BUCKET_NAME = CONFIG.addons.gcs.bucket_name
|
|
13
13
|
ITEMS_TO_SEND = {
|
|
14
|
-
'url': ['screenshot_path']
|
|
14
|
+
'url': ['screenshot_path', 'stored_response_path']
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
|
|
@@ -42,10 +42,12 @@ def upload_blob(bucket_name, source_file_name, destination_blob_name):
|
|
|
42
42
|
storage_client = storage.Client()
|
|
43
43
|
bucket = storage_client.bucket(bucket_name)
|
|
44
44
|
blob = bucket.blob(destination_blob_name)
|
|
45
|
-
|
|
45
|
+
with open(source_file_name, 'rb') as f:
|
|
46
|
+
f.seek(0)
|
|
47
|
+
blob.upload_from_file(f)
|
|
46
48
|
end_time = time()
|
|
47
49
|
elapsed = end_time - start_time
|
|
48
|
-
debug(f'in {elapsed:.4f}s', obj={'blob': '
|
|
50
|
+
debug(f'in {elapsed:.4f}s', obj={'blob': 'UPLOADED', 'blob_name': destination_blob_name, 'bucket': bucket_name}, obj_after=False, sub='hooks.gcs', verbose=True) # noqa: E501
|
|
49
51
|
|
|
50
52
|
|
|
51
53
|
HOOKS = {
|
|
@@ -30,7 +30,8 @@ def get_mongodb_client():
|
|
|
30
30
|
_mongodb_client = pymongo.MongoClient(
|
|
31
31
|
escape_mongodb_url(MONGODB_URL),
|
|
32
32
|
maxPoolSize=MONGODB_MAX_POOL_SIZE,
|
|
33
|
-
serverSelectionTimeoutMS=MONGODB_CONNECT_TIMEOUT
|
|
33
|
+
serverSelectionTimeoutMS=MONGODB_CONNECT_TIMEOUT,
|
|
34
|
+
connect=False
|
|
34
35
|
)
|
|
35
36
|
return _mongodb_client
|
|
36
37
|
|
|
@@ -46,6 +47,28 @@ def get_runner_dbg(runner):
|
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
|
|
50
|
+
def get_results(uuids):
|
|
51
|
+
"""Get results from MongoDB based on a list of uuids.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
uuids (list[str | Output]): List of uuids, but can also be a mix of uuids and output types.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Generator of findings.
|
|
58
|
+
"""
|
|
59
|
+
client = get_mongodb_client()
|
|
60
|
+
db = client.main
|
|
61
|
+
del_uuids = []
|
|
62
|
+
for r in uuids:
|
|
63
|
+
if isinstance(r, tuple(OUTPUT_TYPES)):
|
|
64
|
+
yield r
|
|
65
|
+
del_uuids.append(r)
|
|
66
|
+
uuids = [ObjectId(u) for u in uuids if u not in del_uuids and ObjectId.is_valid(u)]
|
|
67
|
+
for r in db.findings.find({'_id': {'$in': uuids}}):
|
|
68
|
+
finding = load_finding(r)
|
|
69
|
+
yield finding
|
|
70
|
+
|
|
71
|
+
|
|
49
72
|
def update_runner(self):
|
|
50
73
|
client = get_mongodb_client()
|
|
51
74
|
db = client.main
|
|
@@ -135,19 +158,23 @@ def load_findings(objs):
|
|
|
135
158
|
|
|
136
159
|
|
|
137
160
|
@shared_task
|
|
138
|
-
def tag_duplicates(ws_id: str = None):
|
|
161
|
+
def tag_duplicates(ws_id: str = None, full_scan: bool = False):
|
|
139
162
|
"""Tag duplicates in workspace.
|
|
140
163
|
|
|
141
164
|
Args:
|
|
142
165
|
ws_id (str): Workspace id.
|
|
166
|
+
full_scan (bool): If True, scan all findings, otherwise only untagged findings.
|
|
143
167
|
"""
|
|
144
168
|
debug(f'running duplicate check on workspace {ws_id}', sub='hooks.mongodb')
|
|
145
169
|
client = get_mongodb_client()
|
|
146
170
|
db = client.main
|
|
147
171
|
workspace_query = list(
|
|
148
172
|
db.findings.find({'_context.workspace_id': str(ws_id), '_tagged': True}).sort('_timestamp', -1))
|
|
173
|
+
untagged_query = {'_context.workspace_id': str(ws_id)}
|
|
174
|
+
if not full_scan:
|
|
175
|
+
untagged_query['_tagged'] = {'$ne': True}
|
|
149
176
|
untagged_query = list(
|
|
150
|
-
db.findings.find(
|
|
177
|
+
db.findings.find(untagged_query).sort('_timestamp', -1))
|
|
151
178
|
if not untagged_query:
|
|
152
179
|
debug('no untagged findings. Skipping.', id=ws_id, sub='hooks.mongodb')
|
|
153
180
|
return
|
|
@@ -178,6 +178,10 @@ class Runner:
|
|
|
178
178
|
|
|
179
179
|
# Add prior results to runner results
|
|
180
180
|
self.debug(f'adding {len(results)} prior results to runner', sub='init')
|
|
181
|
+
if CONFIG.addons.mongodb.enabled:
|
|
182
|
+
self.debug('adding prior results from MongoDB', sub='init')
|
|
183
|
+
from secator.hooks.mongodb import get_results
|
|
184
|
+
results = get_results(results)
|
|
181
185
|
for result in results:
|
|
182
186
|
self.add_result(result, print=False, output=False, hooks=False, queue=not self.has_parent)
|
|
183
187
|
|
|
@@ -189,8 +193,8 @@ class Runner:
|
|
|
189
193
|
for target in targets:
|
|
190
194
|
self.add_result(target, print=False, output=False)
|
|
191
195
|
|
|
192
|
-
# Run extractors on results
|
|
193
|
-
self._run_extractors(
|
|
196
|
+
# Run extractors on results
|
|
197
|
+
self._run_extractors()
|
|
194
198
|
self.debug(f'inputs ({len(self.inputs)})', obj=self.inputs, sub='init')
|
|
195
199
|
self.debug(f'run opts ({len(self.resolved_opts)})', obj=self.resolved_opts, sub='init')
|
|
196
200
|
self.debug(f'print opts ({len(self.resolved_print_opts)})', obj=self.resolved_print_opts, sub='init')
|
|
@@ -430,12 +434,12 @@ class Runner:
|
|
|
430
434
|
if error:
|
|
431
435
|
self.add_result(error)
|
|
432
436
|
|
|
433
|
-
def _run_extractors(self
|
|
437
|
+
def _run_extractors(self):
|
|
434
438
|
"""Run extractors on results and targets."""
|
|
435
439
|
self.debug('running extractors', sub='init')
|
|
436
440
|
ctx = {'opts': DotMap(self.run_opts), 'targets': self.inputs, 'ancestor_id': self.ancestor_id}
|
|
437
441
|
inputs, run_opts, errors = run_extractors(
|
|
438
|
-
results,
|
|
442
|
+
self.results,
|
|
439
443
|
self.run_opts,
|
|
440
444
|
self.inputs,
|
|
441
445
|
ctx=ctx,
|
|
@@ -96,6 +96,20 @@ class HttpFuzzer(Command):
|
|
|
96
96
|
meta_opts = {k: OPTS[k] for k in OPTS_HTTP_FUZZERS}
|
|
97
97
|
input_types = [URL]
|
|
98
98
|
output_types = [Url]
|
|
99
|
+
profile = lambda opts: HttpFuzzer.dynamic_profile(opts) # noqa: E731
|
|
100
|
+
|
|
101
|
+
@staticmethod
|
|
102
|
+
def dynamic_profile(opts):
|
|
103
|
+
wordlist = HttpFuzzer._get_opt_value(
|
|
104
|
+
opts,
|
|
105
|
+
'wordlist',
|
|
106
|
+
opts_conf=dict(HttpFuzzer.opts, **HttpFuzzer.meta_opts),
|
|
107
|
+
opt_aliases=opts.get('aliases', []),
|
|
108
|
+
preprocess=True,
|
|
109
|
+
process=True,
|
|
110
|
+
)
|
|
111
|
+
wordlist_size_mb = os.path.getsize(wordlist) / (1024 * 1024)
|
|
112
|
+
return 'cpu' if wordlist_size_mb > 5 else 'io'
|
|
99
113
|
|
|
100
114
|
|
|
101
115
|
#----------------#
|
|
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
|
|
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
|