souleyez 2.17.0__tar.gz → 2.28.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.
- {souleyez-2.17.0 → souleyez-2.28.0}/BETA_README.md +21 -2
- {souleyez-2.17.0/souleyez.egg-info → souleyez-2.28.0}/PKG-INFO +22 -3
- {souleyez-2.17.0 → souleyez-2.28.0}/README.md +9 -1
- {souleyez-2.17.0 → souleyez-2.28.0}/pyproject.toml +2 -2
- souleyez-2.28.0/souleyez/__init__.py +1 -0
- souleyez-2.28.0/souleyez/assets/__init__.py +1 -0
- souleyez-2.28.0/souleyez/assets/souleyez-icon.png +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_sync_manager.py +15 -5
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/tool_chaining.py +257 -41
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/validator.py +4 -2
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/README.md +2 -2
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/configuration.md +1 -1
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/installation.md +14 -1
- souleyez-2.28.0/souleyez/docs/user-guide/scope-management.md +683 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/background.py +666 -155
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/result_handler.py +433 -11
- souleyez-2.28.0/souleyez/engine/worker_manager.py +205 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/splunk.py +58 -11
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/main.py +324 -4
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/crackmapexec_parser.py +101 -43
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/dnsrecon_parser.py +50 -35
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/enum4linux_parser.py +101 -21
- souleyez-2.28.0/souleyez/parsers/http_fingerprint_parser.py +319 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/hydra_parser.py +56 -5
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/impacket_parser.py +123 -44
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/john_parser.py +47 -14
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/msf_parser.py +20 -5
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/nmap_parser.py +48 -27
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/smbmap_parser.py +69 -25
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/sqlmap_parser.py +72 -26
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/theharvester_parser.py +21 -13
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/gobuster.py +96 -3
- souleyez-2.28.0/souleyez/plugins/http_fingerprint.py +598 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/msf_exploit.py +6 -3
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/nuclei.py +43 -18
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/searchsploit.py +21 -18
- souleyez-2.28.0/souleyez/security/scope_validator.py +615 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/hosts.py +87 -2
- souleyez-2.28.0/souleyez/storage/migrations/_026_add_engagement_scope.py +87 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/interactive.py +419 -25
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/setup_wizard.py +424 -58
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/tool_setup.py +52 -52
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/utils/tool_checker.py +75 -13
- {souleyez-2.17.0 → souleyez-2.28.0/souleyez.egg-info}/PKG-INFO +22 -3
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/SOURCES.txt +9 -0
- souleyez-2.28.0/tests/test_scope_integration.py +855 -0
- souleyez-2.28.0/tests/test_scope_validator.py +416 -0
- souleyez-2.17.0/souleyez/__init__.py +0 -1
- souleyez-2.17.0/souleyez/engine/worker_manager.py +0 -109
- {souleyez-2.17.0 → souleyez-2.28.0}/LICENSE +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/MANIFEST.in +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/setup.cfg +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/action_mapper.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/chain_advisor.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/claude_provider.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/context_builder.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/executor.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/feedback_handler.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/llm_factory.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/llm_provider.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/ollama_provider.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/ollama_service.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/path_scorer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/recommender.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/report_context.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/report_prompts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/report_service.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/result_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/safety.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/audit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/engagement_access.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/permissions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/session_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/user_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/audit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/auth.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/deliverables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/engagement.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/license.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/screenshots.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/user.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/credential_tester.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/cve_mappings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/cve_matcher.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_auto_mapper.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_chain_engine.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_database.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_integration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_rpc_client.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_rpc_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/network_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/parser_handler.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/pending_chains.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/templates.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/version_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/vuln_correlation.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/web_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/README.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/active_directory.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/cis_controls_v8.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/cloud_security.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/cmmc_2.0.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/external_network.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/ffiec_cat.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/gdpr_article32.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/glba_safeguards.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/hipaa_security.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/hitrust_csf.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/internal_network.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/iso27001.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/nerc_cip.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/nist_csf.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/owasp_top10_2021.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/pci_dss_4.0.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/ptes_standard.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/red_team.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/soc2_type2.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/webapp_advanced.json +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/README.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/all_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/api_endpoints.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/default_credentials.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/macos_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/router_passwords.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/router_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/soul_pass.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/soul_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/subdomains_common.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/top100.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/top20_quick.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/vnc_passwords.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/web_dirs_common.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/web_extensions.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/web_files_common.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/attack_signatures.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/mitre_mappings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/devtools.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/cli-commands.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/engagement-api.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/integration-guide.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/parser-formats.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/000-template.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/001-local-llm-over-cloud.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/002-master-password-approach.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/003-database-schema-design.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/overview.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/database/MIGRATIONS.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/database/SCHEMA.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/database/SCHEMA_ERD.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/developer-guide/test_coverage_plan.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/developer-guide/ui-design-system.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/images/README.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/best-practices.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/credential-encryption.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/password-protected-commands.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/secure-defaults.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/threat-model.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/ai-integration.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/attack-surface.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/auto-chaining.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/deliverables-screenshots.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/dependencies.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/evidence-vault.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/exploit-suggestions.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/getting-started.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/metasploit-integration.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/rbac.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/report-generation.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/siem-integration.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/tools-reference.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/troubleshooting.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/uninstall.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/worker-management.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/workflows.md +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/job_status.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/loader.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/log_sanitizer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/export/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/export/evidence_bundle.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/feature_flags/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/feature_flags/features.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/feature_flags.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/history.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/importers/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/importers/msf_importer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/importers/smart_importer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/elastic.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/factory.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/rule_mappings/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/rule_mappings/wazuh_rules.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/sentinel.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/wazuh.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/client.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/host_mapper.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/sync.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/correlation_analyzer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/exploit_knowledge.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/exploit_suggestions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/gap_analyzer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/gap_detector.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/sensitive_tables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/service_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/surface_analyzer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/target_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/licensing/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/licensing/validator.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/log_config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/migrations/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/migrations/fix_job_counter.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/bloodhound_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/dalfox_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/ffuf_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/gobuster_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/hashcat_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/nikto_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/nuclei_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/responder_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/searchsploit_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/whois_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/wpscan_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/afp.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/afp_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/ard.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/bloodhound.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/crackmapexec.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/dalfox.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/dns_hijack.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/dnsrecon.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/enum4linux.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/ffuf.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/firmware_extract.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/hashcat.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/hydra.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_getnpusers.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_psexec.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_secretsdump.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_smbclient.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/john.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/macos_ssh.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/mdns.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/msf_auxiliary.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/nikto.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/nmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/plugin_base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/plugin_template.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/responder.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/router_http_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/router_ssh_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/router_telnet_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/routersploit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/routersploit_exploit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/smbmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/sqlmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/theharvester.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/tr069.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/upnp.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/upnp_abuse.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/vnc_access.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/vnc_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/whois.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/wpscan.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/attack_chain.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/charts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/compliance_mappings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/detection_report.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/formatters.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/generator.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/metrics.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/scanner.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/security/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/security/validation.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/security.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/credentials.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/crypto.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/database.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/db.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverable_evidence.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverable_exporter.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverable_templates.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/engagements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/evidence.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/execution_log.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/exploit_attempts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/exploits.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/findings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrate_to_engagements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_001_add_credential_enhancements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_002_add_status_tracking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_003_add_execution_log.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_005_screenshots.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_006_deliverables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_007_deliverable_templates.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_008_add_nuclei_table.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_009_add_cme_tables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_010_evidence_linking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_011_timeline_tracking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_012_team_collaboration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_013_add_host_tags.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_014_exploit_attempts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_015_add_mac_os_fields.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_016_add_domain_field.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_017_msf_sessions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_018_add_osint_target.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_019_add_engagement_type.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_020_add_rbac.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_021_wazuh_integration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_022_wazuh_indexer_columns.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_023_fix_detection_results_fk.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_025_multi_siem_support.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/migration_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/msf_sessions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/osint.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/recommendation_engine.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/schema.sql +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/screenshots.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/smb_shares.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/sqlmap_data.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/team_collaboration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/timeline_tracker.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/wazuh_vulns.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/web_paths.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/testing/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/testing/credential_tester.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/ai_quotes.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/attack_surface.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/chain_rules_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/correlation_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/dashboard.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/deliverables_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/design_system.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/errors.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/evidence_linking_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/evidence_vault.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/exploit_suggestions_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/export_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/gap_analysis_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/help_system.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/intelligence_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/interactive_selector.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/log_formatter.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/menu_components.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/msf_auxiliary_menu.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/pending_chains_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/progress_indicators.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/recommendations_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/rule_builder.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/shortcuts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/splunk_gap_analysis_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/splunk_vulns_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/team_dashboard.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/template_selector.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/terminal.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/timeline_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/tutorial.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/tutorial_state.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/wazuh_vulns_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/utils/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/wordlists.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/dependency_links.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/entry_points.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/requires.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/top_level.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_config_enhanced.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_crypto.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_database_100_final.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_engagements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_engagements_simple.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_job_status_tracking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_logging.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_network_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_ollama_service.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_plugin_base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_recommender.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_result_handler_sqlmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_schema.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_security_hardening.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_security_validation.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_sqlmap_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_storage.py +0 -0
- {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_version_utils.py +0 -0
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# SoulEyez Beta Program
|
|
2
2
|
|
|
3
|
+
[](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml)
|
|
4
|
+
[](https://codecov.io/gh/cyber-soul-security/souleyez)
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
[](https://github.com/psf/black)
|
|
7
|
+
[](https://github.com/PyCQA/bandit)
|
|
8
|
+
|
|
3
9
|
Welcome to the SoulEyez beta! Thank you for helping us test and improve this penetration testing management platform.
|
|
4
10
|
|
|
5
11
|
---
|
|
@@ -21,7 +27,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
21
27
|
|
|
22
28
|
> ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
|
|
23
29
|
|
|
24
|
-
## Version: 2.
|
|
30
|
+
## Version: 2.28.0
|
|
25
31
|
|
|
26
32
|
### What's Included
|
|
27
33
|
|
|
@@ -59,6 +65,17 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
59
65
|
- **Python**: 3.8 or newer
|
|
60
66
|
- **Storage**: ~500MB for SoulEyez + tools
|
|
61
67
|
|
|
68
|
+
> **🐉 Kali Linux Recommended**
|
|
69
|
+
>
|
|
70
|
+
> SoulEyez performs significantly better on **Kali Linux** than other distributions:
|
|
71
|
+
> - All pentesting tools pre-installed and optimized
|
|
72
|
+
> - Metasploit database and RPC already configured
|
|
73
|
+
> - Security-focused kernel and networking stack
|
|
74
|
+
> - No dependency hunting or version conflicts
|
|
75
|
+
> - Wordlists, databases, and tool configs ready to go
|
|
76
|
+
>
|
|
77
|
+
> While Ubuntu and other Debian-based distros are supported, you may experience slower setup times and occasional tool compatibility issues.
|
|
78
|
+
|
|
62
79
|
### Known Issues
|
|
63
80
|
|
|
64
81
|
- Very large scan outputs (>10MB) may slow the interface
|
|
@@ -76,6 +93,8 @@ pipx ensurepath # Add pipx apps to your PATH
|
|
|
76
93
|
source ~/.bashrc # Reload your shell (or close and reopen terminal)
|
|
77
94
|
```
|
|
78
95
|
|
|
96
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
97
|
+
|
|
79
98
|
> 💡 **What's pipx?** It's like `apt` but for Python command-line tools. It keeps each tool isolated so they don't conflict with each other.
|
|
80
99
|
|
|
81
100
|
### Step 2: Install SoulEyez
|
|
@@ -246,4 +265,4 @@ Happy hacking! 🛡️
|
|
|
246
265
|
|
|
247
266
|
---
|
|
248
267
|
|
|
249
|
-
**Version**: 2.
|
|
268
|
+
**Version**: 2.28.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: souleyez
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.28.0
|
|
4
4
|
Summary: AI-Powered Penetration Testing Platform with 40+ integrated tools
|
|
5
5
|
Author-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
6
6
|
Maintainer-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
@@ -51,6 +51,12 @@ Dynamic: license-file
|
|
|
51
51
|
|
|
52
52
|
# SoulEyez Beta Program
|
|
53
53
|
|
|
54
|
+
[](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml)
|
|
55
|
+
[](https://codecov.io/gh/cyber-soul-security/souleyez)
|
|
56
|
+
[](https://www.python.org/downloads/)
|
|
57
|
+
[](https://github.com/psf/black)
|
|
58
|
+
[](https://github.com/PyCQA/bandit)
|
|
59
|
+
|
|
54
60
|
Welcome to the SoulEyez beta! Thank you for helping us test and improve this penetration testing management platform.
|
|
55
61
|
|
|
56
62
|
---
|
|
@@ -72,7 +78,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
72
78
|
|
|
73
79
|
> ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
|
|
74
80
|
|
|
75
|
-
## Version: 2.
|
|
81
|
+
## Version: 2.28.0
|
|
76
82
|
|
|
77
83
|
### What's Included
|
|
78
84
|
|
|
@@ -110,6 +116,17 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
110
116
|
- **Python**: 3.8 or newer
|
|
111
117
|
- **Storage**: ~500MB for SoulEyez + tools
|
|
112
118
|
|
|
119
|
+
> **🐉 Kali Linux Recommended**
|
|
120
|
+
>
|
|
121
|
+
> SoulEyez performs significantly better on **Kali Linux** than other distributions:
|
|
122
|
+
> - All pentesting tools pre-installed and optimized
|
|
123
|
+
> - Metasploit database and RPC already configured
|
|
124
|
+
> - Security-focused kernel and networking stack
|
|
125
|
+
> - No dependency hunting or version conflicts
|
|
126
|
+
> - Wordlists, databases, and tool configs ready to go
|
|
127
|
+
>
|
|
128
|
+
> While Ubuntu and other Debian-based distros are supported, you may experience slower setup times and occasional tool compatibility issues.
|
|
129
|
+
|
|
113
130
|
### Known Issues
|
|
114
131
|
|
|
115
132
|
- Very large scan outputs (>10MB) may slow the interface
|
|
@@ -127,6 +144,8 @@ pipx ensurepath # Add pipx apps to your PATH
|
|
|
127
144
|
source ~/.bashrc # Reload your shell (or close and reopen terminal)
|
|
128
145
|
```
|
|
129
146
|
|
|
147
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
148
|
+
|
|
130
149
|
> 💡 **What's pipx?** It's like `apt` but for Python command-line tools. It keeps each tool isolated so they don't conflict with each other.
|
|
131
150
|
|
|
132
151
|
### Step 2: Install SoulEyez
|
|
@@ -297,4 +316,4 @@ Happy hacking! 🛡️
|
|
|
297
316
|
|
|
298
317
|
---
|
|
299
318
|
|
|
300
|
-
**Version**: 2.
|
|
319
|
+
**Version**: 2.28.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# SoulEyez — AI-Powered Penetration Testing Platform
|
|
2
2
|
|
|
3
|
+
[](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml)
|
|
4
|
+
[](https://codecov.io/gh/cyber-soul-security/souleyez)
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
[](https://github.com/psf/black)
|
|
7
|
+
[](https://github.com/PyCQA/bandit)
|
|
8
|
+
|
|
3
9
|
**LEGAL NOTICE — Use Responsibly**
|
|
4
10
|
Only use SoulEyez on systems you own or have explicit written permission to test.
|
|
5
11
|
Unauthorized scanning or exploitation is illegal. The authors are not responsible for misuse.
|
|
@@ -133,7 +139,7 @@ See [docs/CONFIG.md](souleyez/docs/CONFIG.md) for complete configuration options
|
|
|
133
139
|
# Install pipx if needed
|
|
134
140
|
sudo apt install pipx
|
|
135
141
|
pipx ensurepath
|
|
136
|
-
source ~/.bashrc
|
|
142
|
+
source ~/.bashrc # Kali Linux: use 'source ~/.zshrc' instead
|
|
137
143
|
|
|
138
144
|
# Install SoulEyez
|
|
139
145
|
pipx install souleyez
|
|
@@ -142,6 +148,8 @@ pipx install souleyez
|
|
|
142
148
|
souleyez setup
|
|
143
149
|
```
|
|
144
150
|
|
|
151
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
152
|
+
|
|
145
153
|
See [docs/user-guide/installation.md](souleyez/docs/user-guide/installation.md) for detailed instructions.
|
|
146
154
|
|
|
147
155
|
---
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "souleyez"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.28.0"
|
|
8
8
|
description = "AI-Powered Penetration Testing Platform with 40+ integrated tools"
|
|
9
9
|
readme = "BETA_README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -71,7 +71,7 @@ include = ["souleyez*"]
|
|
|
71
71
|
exclude = ["tests*", "scripts*", "reports*", "venv*", "debian*"]
|
|
72
72
|
|
|
73
73
|
[tool.setuptools.package-data]
|
|
74
|
-
souleyez = ["docs/**/*.md", "data/wordlists/*.txt", "data/wordlists/*.md", "data/templates/*.json", "data/templates/*.md"]
|
|
74
|
+
souleyez = ["docs/**/*.md", "data/wordlists/*.txt", "data/wordlists/*.md", "data/templates/*.json", "data/templates/*.md", "assets/*.png"]
|
|
75
75
|
|
|
76
76
|
[tool.pytest.ini_options]
|
|
77
77
|
testpaths = ["tests"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.28.0'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# SoulEyez assets package
|
|
Binary file
|
|
@@ -29,15 +29,25 @@ logger = logging.getLogger(__name__)
|
|
|
29
29
|
|
|
30
30
|
def get_msf_database_config() -> Optional[Dict[str, Any]]:
|
|
31
31
|
"""
|
|
32
|
-
Get MSF database configuration from ~/.msf4/database.yml
|
|
32
|
+
Get MSF database configuration from ~/.msf4/database.yml or system-wide config.
|
|
33
|
+
|
|
34
|
+
Checks user config first, then falls back to system-wide config (Kali Linux).
|
|
33
35
|
|
|
34
36
|
Returns:
|
|
35
37
|
Dictionary with database config or None if not found/parseable
|
|
36
38
|
"""
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
# Check user config first, then system-wide config (Kali uses system-wide)
|
|
40
|
+
user_db_path = Path.home() / ".msf4" / "database.yml"
|
|
41
|
+
system_db_path = Path('/usr/share/metasploit-framework/config/database.yml')
|
|
42
|
+
|
|
43
|
+
db_yml_path = None
|
|
44
|
+
if user_db_path.exists():
|
|
45
|
+
db_yml_path = user_db_path
|
|
46
|
+
elif system_db_path.exists():
|
|
47
|
+
db_yml_path = system_db_path
|
|
48
|
+
|
|
49
|
+
if not db_yml_path:
|
|
50
|
+
logger.debug("MSF database.yml not found in user or system config")
|
|
41
51
|
return None
|
|
42
52
|
|
|
43
53
|
try:
|
|
@@ -15,6 +15,17 @@ CATEGORY_CTF = "ctf" # Lab/learning scenarios - vulnerable by design
|
|
|
15
15
|
CATEGORY_ENTERPRISE = "enterprise" # Real-world enterprise testing
|
|
16
16
|
CATEGORY_GENERAL = "general" # Standard recon that applies everywhere
|
|
17
17
|
|
|
18
|
+
# Managed hosting platforms - skip CGI enumeration (pointless on these)
|
|
19
|
+
# These are detected from server headers/banners and product names
|
|
20
|
+
MANAGED_HOSTING_PLATFORMS = {
|
|
21
|
+
'squarespace', 'wix', 'shopify', 'webflow', 'weebly',
|
|
22
|
+
'wordpress.com', 'ghost.io', 'medium', 'tumblr', 'blogger',
|
|
23
|
+
'netlify', 'vercel', 'github.io', 'pages.dev', 'cloudflare',
|
|
24
|
+
'heroku', 'railway', 'render.com', 'fly.io',
|
|
25
|
+
'aws cloudfront', 'akamai', 'fastly', 'cloudflare',
|
|
26
|
+
'azure', 'google cloud', 'firebase',
|
|
27
|
+
}
|
|
28
|
+
|
|
18
29
|
# Category display icons
|
|
19
30
|
CATEGORY_ICONS = {
|
|
20
31
|
CATEGORY_CTF: "🎯",
|
|
@@ -140,6 +151,75 @@ def classify_os_device(os_string: str, services: list) -> dict:
|
|
|
140
151
|
return {'os_family': 'unknown', 'device_type': 'unknown', 'vendor': None}
|
|
141
152
|
|
|
142
153
|
|
|
154
|
+
def is_managed_hosting(services: List[Dict[str, Any]], http_fingerprint: Dict[str, Any] = None) -> bool:
|
|
155
|
+
"""
|
|
156
|
+
Detect if target is a managed hosting platform.
|
|
157
|
+
|
|
158
|
+
These platforms don't have CGI directories, so tools like nikto
|
|
159
|
+
should skip CGI enumeration to avoid long, pointless scans.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
services: List of service dicts from nmap parser
|
|
163
|
+
http_fingerprint: Optional fingerprint data from http_fingerprint plugin
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
True if managed hosting detected, False otherwise
|
|
167
|
+
"""
|
|
168
|
+
# Check fingerprint data first (most reliable, comes from actual HTTP headers)
|
|
169
|
+
if http_fingerprint:
|
|
170
|
+
managed = http_fingerprint.get('managed_hosting')
|
|
171
|
+
if managed:
|
|
172
|
+
return True
|
|
173
|
+
|
|
174
|
+
# Fall back to checking services data (less reliable, from nmap banners)
|
|
175
|
+
for service in services:
|
|
176
|
+
# Check product field
|
|
177
|
+
product = (service.get('product') or '').lower()
|
|
178
|
+
raw_version = (service.get('raw_version') or '').lower()
|
|
179
|
+
service_name = (service.get('service') or '').lower()
|
|
180
|
+
|
|
181
|
+
# Combine all fields for matching
|
|
182
|
+
combined = f"{product} {raw_version} {service_name}"
|
|
183
|
+
|
|
184
|
+
# Check against known managed hosting platforms
|
|
185
|
+
for platform in MANAGED_HOSTING_PLATFORMS:
|
|
186
|
+
if platform in combined:
|
|
187
|
+
return True
|
|
188
|
+
|
|
189
|
+
return False
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def get_managed_hosting_platform(services: List[Dict[str, Any]], http_fingerprint: Dict[str, Any] = None) -> Optional[str]:
|
|
193
|
+
"""
|
|
194
|
+
Get the name of the managed hosting platform if detected.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
services: List of service dicts from nmap parser
|
|
198
|
+
http_fingerprint: Optional fingerprint data from http_fingerprint plugin
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
Platform name or None
|
|
202
|
+
"""
|
|
203
|
+
# Check fingerprint data first
|
|
204
|
+
if http_fingerprint:
|
|
205
|
+
managed = http_fingerprint.get('managed_hosting')
|
|
206
|
+
if managed:
|
|
207
|
+
return managed
|
|
208
|
+
|
|
209
|
+
# Fall back to services check
|
|
210
|
+
for service in services:
|
|
211
|
+
product = (service.get('product') or '').lower()
|
|
212
|
+
raw_version = (service.get('raw_version') or '').lower()
|
|
213
|
+
service_name = (service.get('service') or '').lower()
|
|
214
|
+
combined = f"{product} {raw_version} {service_name}"
|
|
215
|
+
|
|
216
|
+
for platform in MANAGED_HOSTING_PLATFORMS:
|
|
217
|
+
if platform in combined:
|
|
218
|
+
return platform.title()
|
|
219
|
+
|
|
220
|
+
return None
|
|
221
|
+
|
|
222
|
+
|
|
143
223
|
# Technology to Nuclei tags mapping
|
|
144
224
|
# Maps detected products/technologies to relevant nuclei template tags
|
|
145
225
|
TECH_TO_NUCLEI_TAGS = {
|
|
@@ -423,6 +503,21 @@ class ChainRule:
|
|
|
423
503
|
result = True
|
|
424
504
|
break
|
|
425
505
|
|
|
506
|
+
elif cond_type == 'svc_version':
|
|
507
|
+
# Simple version string match (e.g., 'svc_version:2.3.4')
|
|
508
|
+
# Matches if any service has this exact version string
|
|
509
|
+
# Useful when nmap doesn't detect product name
|
|
510
|
+
services = context.get('services', [])
|
|
511
|
+
for service in services:
|
|
512
|
+
svc_version = (
|
|
513
|
+
service.get('version', '') or
|
|
514
|
+
service.get('service_version', '') or
|
|
515
|
+
''
|
|
516
|
+
)
|
|
517
|
+
if svc_version and cond_value.lower() in svc_version.lower():
|
|
518
|
+
result = True
|
|
519
|
+
break
|
|
520
|
+
|
|
426
521
|
# Apply negation if needed
|
|
427
522
|
return not result if negated else result
|
|
428
523
|
|
|
@@ -496,6 +591,23 @@ class ChainRule:
|
|
|
496
591
|
if svc_port in group.get('ports', []):
|
|
497
592
|
port = str(svc_port)
|
|
498
593
|
break
|
|
594
|
+
elif 'has:services' in self.trigger_condition:
|
|
595
|
+
# For has:services condition, extract port from the services array
|
|
596
|
+
# Prioritize HTTP services for web tools (gobuster, nuclei, etc.)
|
|
597
|
+
services = context.get('services', [])
|
|
598
|
+
http_ports = {80, 443, 8080, 8443, 8000, 8888, 3000, 5000}
|
|
599
|
+
|
|
600
|
+
# First pass: look for HTTP service by name or common HTTP ports
|
|
601
|
+
for svc in services:
|
|
602
|
+
svc_name = svc.get('service_name', '').lower()
|
|
603
|
+
svc_port = svc.get('port')
|
|
604
|
+
if svc_name == 'http' or svc_name == 'https' or svc_port in http_ports:
|
|
605
|
+
port = str(svc_port)
|
|
606
|
+
break
|
|
607
|
+
|
|
608
|
+
# Second pass: if no HTTP service, use the first service's port
|
|
609
|
+
if not port and services:
|
|
610
|
+
port = str(services[0].get('port', ''))
|
|
499
611
|
|
|
500
612
|
# Calculate subnet for {subnet} placeholder (e.g., 10.0.0.88 → 10.0.0.0/24)
|
|
501
613
|
subnet = ''
|
|
@@ -560,6 +672,25 @@ class ChainRule:
|
|
|
560
672
|
new_args.append(arg)
|
|
561
673
|
args = new_args
|
|
562
674
|
|
|
675
|
+
# For Nikto: Skip CGI enumeration on managed hosting platforms
|
|
676
|
+
# This prevents long, pointless scans on Squarespace, Wix, etc.
|
|
677
|
+
if self.target_tool == 'nikto':
|
|
678
|
+
services = context.get('services', [])
|
|
679
|
+
http_fingerprint = context.get('http_fingerprint', {})
|
|
680
|
+
if is_managed_hosting(services, http_fingerprint):
|
|
681
|
+
# Add -C none to skip CGI dirs (pointless on managed hosting)
|
|
682
|
+
if '-C' not in str(args):
|
|
683
|
+
args.extend(['-C', 'none'])
|
|
684
|
+
# Add -Tuning x6 to skip remote file inclusion tests
|
|
685
|
+
if '-Tuning' not in str(args):
|
|
686
|
+
args.extend(['-Tuning', 'x6'])
|
|
687
|
+
# Log which platform was detected
|
|
688
|
+
platform = get_managed_hosting_platform(services, http_fingerprint)
|
|
689
|
+
if platform:
|
|
690
|
+
from souleyez.log_config import get_logger
|
|
691
|
+
logger = get_logger(__name__)
|
|
692
|
+
logger.info(f"[FINGERPRINT] Managed hosting detected ({platform}) - nikto using optimized scan config")
|
|
693
|
+
|
|
563
694
|
# For SQLMap with POST injections, add --data if we have POST data
|
|
564
695
|
if self.target_tool == 'sqlmap' and post_data and '--data' not in str(args):
|
|
565
696
|
# Insert --data after -u argument
|
|
@@ -627,32 +758,42 @@ class ToolChaining:
|
|
|
627
758
|
|
|
628
759
|
# Web service discovered → run web scanners
|
|
629
760
|
self.rules.extend([
|
|
630
|
-
#
|
|
631
|
-
#
|
|
761
|
+
# HTTP Fingerprinting - runs FIRST to detect WAF/CDN/managed hosting
|
|
762
|
+
# This enables smarter tool configuration for downstream scanners
|
|
632
763
|
ChainRule(
|
|
633
764
|
trigger_tool='nmap',
|
|
634
765
|
trigger_condition='service:http',
|
|
766
|
+
target_tool='http_fingerprint',
|
|
767
|
+
priority=11, # Highest priority - runs before all other web tools
|
|
768
|
+
args_template=[],
|
|
769
|
+
description='Web server detected, fingerprinting for WAF/CDN/platform detection'
|
|
770
|
+
),
|
|
771
|
+
# Nikto triggered by http_fingerprint (uses fingerprint data for smart config)
|
|
772
|
+
ChainRule(
|
|
773
|
+
trigger_tool='http_fingerprint',
|
|
774
|
+
trigger_condition='has:services',
|
|
775
|
+
target_tool='nikto',
|
|
776
|
+
priority=8,
|
|
777
|
+
args_template=['-nointeractive', '-timeout', '10'],
|
|
778
|
+
description='Fingerprinting complete, scanning for server misconfigurations with Nikto'
|
|
779
|
+
),
|
|
780
|
+
# Nuclei triggered by http_fingerprint
|
|
781
|
+
ChainRule(
|
|
782
|
+
trigger_tool='http_fingerprint',
|
|
783
|
+
trigger_condition='has:services',
|
|
635
784
|
target_tool='nuclei',
|
|
636
785
|
priority=9,
|
|
637
786
|
args_template=['-tags', '{nuclei_tags}', '-severity', 'critical,high', '-rate-limit', '50', '-c', '10', '-timeout', '10'],
|
|
638
|
-
description='
|
|
787
|
+
description='Fingerprinting complete, scanning with Nuclei'
|
|
639
788
|
),
|
|
789
|
+
# Gobuster triggered by http_fingerprint
|
|
640
790
|
ChainRule(
|
|
641
|
-
trigger_tool='
|
|
642
|
-
trigger_condition='
|
|
791
|
+
trigger_tool='http_fingerprint',
|
|
792
|
+
trigger_condition='has:services',
|
|
643
793
|
target_tool='gobuster',
|
|
644
794
|
priority=7,
|
|
645
795
|
args_template=['dir', '-u', 'http://{target}:{port}', '-w', 'data/wordlists/web_dirs_common.txt', '-x', 'js,json,php,asp,aspx,html,txt,bak,old,zip', '--no-error', '--timeout', '30s', '-t', '5', '--delay', '20ms'],
|
|
646
|
-
description='
|
|
647
|
-
),
|
|
648
|
-
# Nikto - web server vulnerability scanner (complements nuclei)
|
|
649
|
-
ChainRule(
|
|
650
|
-
trigger_tool='nmap',
|
|
651
|
-
trigger_condition='service:http',
|
|
652
|
-
target_tool='nikto',
|
|
653
|
-
priority=8,
|
|
654
|
-
args_template=['-nointeractive', '-timeout', '10'],
|
|
655
|
-
description='Web server detected, scanning for server misconfigurations with Nikto'
|
|
796
|
+
description='Fingerprinting complete, discovering directories and files'
|
|
656
797
|
),
|
|
657
798
|
# Dalfox - XSS scanner triggered after gobuster finds pages
|
|
658
799
|
ChainRule(
|
|
@@ -731,14 +872,8 @@ class ToolChaining:
|
|
|
731
872
|
args_template=['-a', '{target}'],
|
|
732
873
|
description='SMB service detected, enumerating shares and users (runs after CrackMapExec)'
|
|
733
874
|
),
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
trigger_condition='service:smb',
|
|
737
|
-
target_tool='smbmap',
|
|
738
|
-
priority=7,
|
|
739
|
-
args_template=['-H', '{target}'],
|
|
740
|
-
description='SMB service detected, mapping shares'
|
|
741
|
-
),
|
|
875
|
+
# NOTE: smbmap removed - has upstream impacket pickling bug on Python 3.13+
|
|
876
|
+
# Use crackmapexec/netexec --shares instead (enum4linux rule above)
|
|
742
877
|
])
|
|
743
878
|
|
|
744
879
|
# Active Directory attacks - smart chaining workflow
|
|
@@ -1143,13 +1278,16 @@ class ToolChaining:
|
|
|
1143
1278
|
# )
|
|
1144
1279
|
# )
|
|
1145
1280
|
|
|
1281
|
+
# DISABLED: smbmap has upstream pickling bug - won't produce results
|
|
1146
1282
|
# Writable SMB shares found → check for exploitability
|
|
1283
|
+
# TODO: Add rule triggering from crackmapexec writable shares detection
|
|
1147
1284
|
self.rules.append(
|
|
1148
1285
|
ChainRule(
|
|
1149
1286
|
trigger_tool='smbmap',
|
|
1150
1287
|
trigger_condition='has:writable_shares',
|
|
1151
1288
|
target_tool='msf_auxiliary',
|
|
1152
1289
|
priority=10,
|
|
1290
|
+
enabled=False, # Disabled - smbmap broken
|
|
1153
1291
|
args_template=['auxiliary/scanner/smb/smb_version'],
|
|
1154
1292
|
description='Writable SMB shares found, checking for vulnerabilities'
|
|
1155
1293
|
)
|
|
@@ -1908,28 +2046,42 @@ class ToolChaining:
|
|
|
1908
2046
|
|
|
1909
2047
|
# vsftpd 2.3.4 backdoor (CVE-2011-2523)
|
|
1910
2048
|
# Triggers backdoor shell on port 6200 when username contains :)
|
|
2049
|
+
# Match FTP service with version 2.3.4 (nmap often shows just "ftp" + "2.3.4")
|
|
1911
2050
|
self.rules.append(
|
|
1912
2051
|
ChainRule(
|
|
1913
2052
|
trigger_tool='nmap',
|
|
1914
|
-
trigger_condition='
|
|
2053
|
+
trigger_condition='service:ftp & svc_version:2.3.4',
|
|
1915
2054
|
target_tool='msf_exploit',
|
|
1916
2055
|
priority=10,
|
|
1917
2056
|
args_template=['exploit/unix/ftp/vsftpd_234_backdoor'],
|
|
1918
|
-
description='
|
|
2057
|
+
description='FTP 2.3.4 detected - checking for vsftpd backdoor (CVE-2011-2523)',
|
|
1919
2058
|
category=CATEGORY_CTF
|
|
1920
2059
|
)
|
|
1921
2060
|
)
|
|
1922
2061
|
|
|
1923
2062
|
# Samba 3.0.x usermap_script RCE (CVE-2007-2447)
|
|
1924
2063
|
# Command injection in username field
|
|
2064
|
+
# Match SMB service with version starting with 3 (nmap shows "3.X" or "3.0.x")
|
|
1925
2065
|
self.rules.append(
|
|
1926
2066
|
ChainRule(
|
|
1927
2067
|
trigger_tool='nmap',
|
|
1928
|
-
trigger_condition='
|
|
2068
|
+
trigger_condition='service:smb & svc_version:3.',
|
|
1929
2069
|
target_tool='msf_exploit',
|
|
1930
2070
|
priority=10,
|
|
1931
2071
|
args_template=['exploit/multi/samba/usermap_script'],
|
|
1932
|
-
description='Samba 3.
|
|
2072
|
+
description='Samba 3.x detected - checking for usermap_script RCE (CVE-2007-2447)',
|
|
2073
|
+
category=CATEGORY_CTF
|
|
2074
|
+
)
|
|
2075
|
+
)
|
|
2076
|
+
# Also match netbios-ssn service (common nmap detection for SMB)
|
|
2077
|
+
self.rules.append(
|
|
2078
|
+
ChainRule(
|
|
2079
|
+
trigger_tool='nmap',
|
|
2080
|
+
trigger_condition='service:netbios-ssn & svc_version:3.',
|
|
2081
|
+
target_tool='msf_exploit',
|
|
2082
|
+
priority=10,
|
|
2083
|
+
args_template=['exploit/multi/samba/usermap_script'],
|
|
2084
|
+
description='Samba 3.x detected (netbios-ssn) - checking for usermap_script RCE (CVE-2007-2447)',
|
|
1933
2085
|
category=CATEGORY_CTF
|
|
1934
2086
|
)
|
|
1935
2087
|
)
|
|
@@ -2132,14 +2284,15 @@ class ToolChaining:
|
|
|
2132
2284
|
)
|
|
2133
2285
|
|
|
2134
2286
|
# ProFTPD mod_copy (CVE-2015-3306) - file copy without auth
|
|
2287
|
+
# Match FTP service with version 1.3.x (common ProFTPD versions)
|
|
2135
2288
|
self.rules.append(
|
|
2136
2289
|
ChainRule(
|
|
2137
2290
|
trigger_tool='nmap',
|
|
2138
|
-
trigger_condition='
|
|
2291
|
+
trigger_condition='service:ftp & svc_version:1.3',
|
|
2139
2292
|
target_tool='msf_exploit',
|
|
2140
2293
|
priority=8,
|
|
2141
2294
|
args_template=['exploit/unix/ftp/proftpd_modcopy_exec'],
|
|
2142
|
-
description='
|
|
2295
|
+
description='FTP 1.3.x detected - checking for ProFTPD mod_copy RCE (CVE-2015-3306)',
|
|
2143
2296
|
category=CATEGORY_CTF
|
|
2144
2297
|
)
|
|
2145
2298
|
)
|
|
@@ -4160,6 +4313,40 @@ class ToolChaining:
|
|
|
4160
4313
|
if len(app_databases) > db_limit:
|
|
4161
4314
|
logger.info(f"SQLMap auto-chaining limited to first {db_limit} of {len(app_databases)} application databases")
|
|
4162
4315
|
|
|
4316
|
+
# === Post-exploitation chain rules (is_dba, file_read, os_cmd) ===
|
|
4317
|
+
# Check for post-exploitation flags and fire appropriate chain rules
|
|
4318
|
+
is_dba = parse_results.get('is_dba', False)
|
|
4319
|
+
file_read_success = parse_results.get('file_read_success', False)
|
|
4320
|
+
os_command_success = parse_results.get('os_command_success', False)
|
|
4321
|
+
|
|
4322
|
+
if is_dba or file_read_success or os_command_success:
|
|
4323
|
+
from souleyez.log_config import get_logger
|
|
4324
|
+
logger = get_logger(__name__)
|
|
4325
|
+
|
|
4326
|
+
# Build context with post-exploitation flags using injectable_url
|
|
4327
|
+
post_exploit_context = {
|
|
4328
|
+
'target': injectable_url, # Use the correct injectable URL
|
|
4329
|
+
'tool': tool,
|
|
4330
|
+
'is_dba': is_dba,
|
|
4331
|
+
'file_read_success': file_read_success,
|
|
4332
|
+
'os_command_success': os_command_success,
|
|
4333
|
+
'post_data': post_data, # Preserve POST data for subsequent commands
|
|
4334
|
+
}
|
|
4335
|
+
|
|
4336
|
+
if is_dba:
|
|
4337
|
+
logger.info(f"SQLMap: DBA access confirmed! Evaluating post-exploitation chains...")
|
|
4338
|
+
if file_read_success:
|
|
4339
|
+
logger.info(f"SQLMap: File read successful! Evaluating file read chains...")
|
|
4340
|
+
if os_command_success:
|
|
4341
|
+
logger.info(f"SQLMap: OS command execution successful!")
|
|
4342
|
+
|
|
4343
|
+
# Evaluate chain rules - this will fire rules like has:is_dba
|
|
4344
|
+
commands = self.evaluate_chains(tool, post_exploit_context)
|
|
4345
|
+
if commands:
|
|
4346
|
+
logger.info(f"SQLMap: Matched {len(commands)} post-exploitation chain rule(s)")
|
|
4347
|
+
job_ids.extend(self._enqueue_commands(commands, tool, engagement_id, injectable_url, parent_job_id=job.get('id')))
|
|
4348
|
+
# === END Post-exploitation chain rules ===
|
|
4349
|
+
|
|
4163
4350
|
return job_ids
|
|
4164
4351
|
# === END SQLMap special handling ===
|
|
4165
4352
|
|
|
@@ -4877,6 +5064,28 @@ class ToolChaining:
|
|
|
4877
5064
|
if not endpoint_url:
|
|
4878
5065
|
continue
|
|
4879
5066
|
|
|
5067
|
+
# === Filter out non-injectable files ===
|
|
5068
|
+
path_lower = endpoint_url.lower()
|
|
5069
|
+
filename = path_lower.split('/')[-1] if '/' in path_lower else path_lower
|
|
5070
|
+
|
|
5071
|
+
# Skip Apache/nginx config files
|
|
5072
|
+
if filename.startswith('.ht') or filename.startswith('.nginx'):
|
|
5073
|
+
logger.debug(f"Skipping config file: {endpoint_url}")
|
|
5074
|
+
continue
|
|
5075
|
+
|
|
5076
|
+
# Skip static files that can't have SQL injection
|
|
5077
|
+
static_extensions = (
|
|
5078
|
+
'.html', '.htm', '.txt', '.css', '.js', '.json',
|
|
5079
|
+
'.xml', '.svg', '.png', '.jpg', '.jpeg', '.gif',
|
|
5080
|
+
'.ico', '.woff', '.woff2', '.ttf', '.eot',
|
|
5081
|
+
'.pdf', '.doc', '.docx', '.xls', '.xlsx',
|
|
5082
|
+
'.bak', '.old', '.backup', '.swp', '.orig',
|
|
5083
|
+
'.map', '.md', '.rst', '.log'
|
|
5084
|
+
)
|
|
5085
|
+
if any(filename.endswith(ext) for ext in static_extensions):
|
|
5086
|
+
logger.debug(f"Skipping static file: {endpoint_url}")
|
|
5087
|
+
continue
|
|
5088
|
+
|
|
4880
5089
|
# === SQLMap for testable endpoints ===
|
|
4881
5090
|
if status_code in testable_statuses and created_sqlmap_jobs < max_sqlmap_jobs:
|
|
4882
5091
|
# For API endpoints without parameters, add test parameters
|
|
@@ -5635,18 +5844,25 @@ class ToolChaining:
|
|
|
5635
5844
|
# Auto mode: enqueue immediately
|
|
5636
5845
|
print(f" 🔗 Chaining {cmd['tool']} for {cmd_target}: {cmd['reason']}")
|
|
5637
5846
|
# enqueue_job will acquire _lock again (nested lock is safe - same thread)
|
|
5638
|
-
|
|
5639
|
-
|
|
5640
|
-
|
|
5641
|
-
|
|
5642
|
-
|
|
5643
|
-
|
|
5644
|
-
|
|
5645
|
-
|
|
5646
|
-
|
|
5647
|
-
|
|
5648
|
-
|
|
5649
|
-
|
|
5847
|
+
try:
|
|
5848
|
+
job_id = enqueue_job(
|
|
5849
|
+
tool=cmd['tool'],
|
|
5850
|
+
target=cmd_target,
|
|
5851
|
+
args=resolved_args,
|
|
5852
|
+
label=source_tool,
|
|
5853
|
+
engagement_id=engagement_id,
|
|
5854
|
+
parent_id=parent_job_id,
|
|
5855
|
+
reason=cmd.get('reason', f"Auto-chain from {source_tool}"),
|
|
5856
|
+
metadata=cmd.get('metadata'), # Pass through deduplication metadata
|
|
5857
|
+
rule_id=cmd.get('rule_id') # Pass rule ID for tracking
|
|
5858
|
+
)
|
|
5859
|
+
job_ids.append(job_id)
|
|
5860
|
+
except Exception as scope_err:
|
|
5861
|
+
# Handle scope violations gracefully - skip out-of-scope targets
|
|
5862
|
+
if 'ScopeViolationError' in type(scope_err).__name__ or 'out of scope' in str(scope_err).lower():
|
|
5863
|
+
print(f" ⚠️ Skipped (out of scope): {cmd_target}")
|
|
5864
|
+
else:
|
|
5865
|
+
raise # Re-raise unexpected errors
|
|
5650
5866
|
|
|
5651
5867
|
# Lock released here - next iteration gets fresh lock
|
|
5652
5868
|
|
|
@@ -156,8 +156,10 @@ class DetectionValidator:
|
|
|
156
156
|
job_command = _reconstruct_command(job)
|
|
157
157
|
# Use started_at or finished_at for execution time
|
|
158
158
|
executed_at = job.get('started_at') or job.get('finished_at') or job.get('created_at')
|
|
159
|
-
# Job
|
|
160
|
-
|
|
159
|
+
# Job ran successfully if status is done, no_results, or warning
|
|
160
|
+
# (all of these sent network traffic that should be detectable by SIEM)
|
|
161
|
+
job_status = job.get('status', '')
|
|
162
|
+
success = job_status in ('done', 'no_results', 'warning')
|
|
161
163
|
|
|
162
164
|
# Extract target IP from command (common patterns)
|
|
163
165
|
target_ip = None
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# SoulEyez Documentation
|
|
2
2
|
|
|
3
|
-
**Version:** 2.
|
|
4
|
-
**Last Updated:** January
|
|
3
|
+
**Version:** 2.28.0
|
|
4
|
+
**Last Updated:** January 9, 2026
|
|
5
5
|
**Organization:** CyberSoul Security
|
|
6
6
|
|
|
7
7
|
Welcome to the SoulEyez documentation! This documentation covers architecture, development, user guides, and operational information for the SoulEyez penetration testing platform.
|