souleyez 2.28.0__tar.gz → 2.40.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.40.0/PKG-INFO +265 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/pyproject.toml +2 -2
- souleyez-2.40.0/souleyez/__init__.py +2 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/msf_auto_mapper.py +3 -2
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/tool_chaining.py +77 -11
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/README.md +1 -1
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/__init__.py +2 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/factory.py +26 -5
- souleyez-2.40.0/souleyez/integrations/siem/googlesecops.py +614 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/wazuh/config.py +143 -20
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/main.py +7 -40
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/database.py +59 -20
- souleyez-2.40.0/souleyez/storage/migrations/_027_multi_siem_persistence.py +119 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/__init__.py +6 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/schema.sql +44 -4
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/interactive.py +575 -237
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/tool_setup.py +6 -0
- souleyez-2.40.0/souleyez.egg-info/PKG-INFO +265 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez.egg-info/SOURCES.txt +2 -1
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_config.py +10 -1
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_result_handler_sqlmap.py +11 -4
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_storage.py +5 -4
- souleyez-2.28.0/BETA_README.md +0 -268
- souleyez-2.28.0/PKG-INFO +0 -319
- souleyez-2.28.0/souleyez/__init__.py +0 -1
- souleyez-2.28.0/souleyez.egg-info/PKG-INFO +0 -319
- {souleyez-2.28.0 → souleyez-2.40.0}/LICENSE +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/MANIFEST.in +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/README.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/setup.cfg +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/action_mapper.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/chain_advisor.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/claude_provider.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/context_builder.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/executor.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/feedback_handler.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/llm_factory.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/llm_provider.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/ollama_provider.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/ollama_service.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/path_scorer.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/recommender.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/report_context.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/report_prompts.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/report_service.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/result_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ai/safety.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/assets/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/assets/souleyez-icon.png +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/auth/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/auth/audit.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/auth/engagement_access.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/auth/permissions.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/auth/session_manager.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/auth/user_manager.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/audit.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/auth.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/deliverables.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/engagement.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/license.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/screenshots.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/commands/user.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/config.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/credential_tester.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/cve_mappings.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/cve_matcher.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/msf_chain_engine.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/msf_database.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/msf_integration.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/msf_rpc_client.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/msf_rpc_manager.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/msf_sync_manager.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/network_utils.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/parser_handler.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/pending_chains.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/templates.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/version_utils.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/vuln_correlation.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/core/web_utils.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/README.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/active_directory.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/cis_controls_v8.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/cloud_security.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/cmmc_2.0.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/external_network.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/ffiec_cat.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/gdpr_article32.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/glba_safeguards.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/hipaa_security.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/hitrust_csf.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/internal_network.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/iso27001.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/nerc_cip.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/nist_csf.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/owasp_top10_2021.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/pci_dss_4.0.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/ptes_standard.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/red_team.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/soc2_type2.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/templates/webapp_advanced.json +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/README.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/all_users.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/api_endpoints.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/default_credentials.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/macos_users.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/router_passwords.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/router_users.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/soul_pass.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/soul_users.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/subdomains_common.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/top100.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/top20_quick.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/vnc_passwords.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/web_dirs_common.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/web_extensions.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/data/wordlists/web_files_common.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/detection/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/detection/attack_signatures.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/detection/mitre_mappings.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/detection/validator.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/devtools.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/api-reference/cli-commands.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/api-reference/engagement-api.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/api-reference/integration-guide.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/api-reference/parser-formats.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/architecture/decisions/000-template.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/architecture/decisions/001-local-llm-over-cloud.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/architecture/decisions/002-master-password-approach.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/architecture/decisions/003-database-schema-design.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/architecture/overview.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/database/MIGRATIONS.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/database/SCHEMA.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/database/SCHEMA_ERD.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/developer-guide/test_coverage_plan.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/developer-guide/ui-design-system.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/images/README.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/security/best-practices.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/security/credential-encryption.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/security/password-protected-commands.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/security/secure-defaults.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/security/threat-model.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/ai-integration.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/attack-surface.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/auto-chaining.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/configuration.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/deliverables-screenshots.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/dependencies.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/evidence-vault.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/exploit-suggestions.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/getting-started.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/installation.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/metasploit-integration.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/rbac.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/report-generation.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/scope-management.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/siem-integration.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/tools-reference.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/troubleshooting.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/uninstall.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/worker-management.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/docs/user-guide/workflows.md +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/background.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/base.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/job_status.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/loader.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/log_sanitizer.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/manager.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/result_handler.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/engine/worker_manager.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/export/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/export/evidence_bundle.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/feature_flags/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/feature_flags/features.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/feature_flags.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/history.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/importers/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/importers/msf_importer.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/importers/smart_importer.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/base.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/elastic.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/rule_mappings/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/rule_mappings/wazuh_rules.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/sentinel.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/splunk.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/siem/wazuh.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/wazuh/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/wazuh/client.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/wazuh/host_mapper.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/integrations/wazuh/sync.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/correlation_analyzer.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/exploit_knowledge.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/exploit_suggestions.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/gap_analyzer.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/gap_detector.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/sensitive_tables.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/service_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/surface_analyzer.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/intelligence/target_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/licensing/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/licensing/validator.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/log_config.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/migrations/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/migrations/fix_job_counter.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/bloodhound_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/crackmapexec_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/dalfox_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/dnsrecon_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/enum4linux_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/ffuf_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/gobuster_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/hashcat_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/http_fingerprint_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/hydra_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/impacket_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/john_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/msf_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/nikto_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/nmap_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/nuclei_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/responder_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/searchsploit_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/smbmap_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/sqlmap_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/theharvester_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/whois_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/parsers/wpscan_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/afp.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/afp_brute.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/ard.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/bloodhound.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/crackmapexec.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/dalfox.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/dns_hijack.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/dnsrecon.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/enum4linux.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/ffuf.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/firmware_extract.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/gobuster.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/hashcat.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/http_fingerprint.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/hydra.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/impacket_getnpusers.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/impacket_psexec.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/impacket_secretsdump.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/impacket_smbclient.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/john.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/macos_ssh.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/mdns.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/msf_auxiliary.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/msf_exploit.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/nikto.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/nmap.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/nuclei.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/plugin_base.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/plugin_template.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/responder.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/router_http_brute.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/router_ssh_brute.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/router_telnet_brute.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/routersploit.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/routersploit_exploit.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/searchsploit.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/smbmap.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/sqlmap.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/theharvester.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/tr069.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/upnp.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/upnp_abuse.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/vnc_access.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/vnc_brute.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/whois.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/plugins/wpscan.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/attack_chain.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/charts.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/compliance_mappings.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/detection_report.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/formatters.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/generator.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/reporting/metrics.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/scanner.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/security/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/security/scope_validator.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/security/validation.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/security.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/credentials.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/crypto.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/db.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/deliverable_evidence.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/deliverable_exporter.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/deliverable_templates.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/deliverables.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/engagements.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/evidence.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/execution_log.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/exploit_attempts.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/exploits.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/findings.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/hosts.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrate_to_engagements.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_001_add_credential_enhancements.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_002_add_status_tracking.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_003_add_execution_log.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_005_screenshots.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_006_deliverables.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_007_deliverable_templates.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_008_add_nuclei_table.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_009_add_cme_tables.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_010_evidence_linking.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_011_timeline_tracking.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_012_team_collaboration.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_013_add_host_tags.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_014_exploit_attempts.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_015_add_mac_os_fields.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_016_add_domain_field.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_017_msf_sessions.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_018_add_osint_target.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_019_add_engagement_type.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_020_add_rbac.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_021_wazuh_integration.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_022_wazuh_indexer_columns.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_023_fix_detection_results_fk.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_025_multi_siem_support.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/_026_add_engagement_scope.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/migrations/migration_manager.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/msf_sessions.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/osint.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/recommendation_engine.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/screenshots.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/smb_shares.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/sqlmap_data.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/team_collaboration.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/timeline_tracker.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/wazuh_vulns.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/storage/web_paths.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/testing/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/testing/credential_tester.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/ai_quotes.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/attack_surface.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/chain_rules_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/correlation_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/dashboard.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/deliverables_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/design_system.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/errors.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/evidence_linking_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/evidence_vault.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/exploit_suggestions_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/export_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/gap_analysis_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/help_system.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/intelligence_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/interactive_selector.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/log_formatter.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/menu_components.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/msf_auxiliary_menu.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/pending_chains_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/progress_indicators.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/recommendations_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/rule_builder.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/setup_wizard.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/shortcuts.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/splunk_gap_analysis_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/splunk_vulns_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/team_dashboard.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/template_selector.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/terminal.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/timeline_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/tutorial.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/tutorial_state.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui/wazuh_vulns_view.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/ui.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/utils/__init__.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/utils/tool_checker.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/utils.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez/wordlists.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez.egg-info/dependency_links.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez.egg-info/entry_points.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez.egg-info/requires.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/souleyez.egg-info/top_level.txt +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_config_enhanced.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_crypto.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_database_100_final.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_engagements.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_engagements_simple.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_job_status_tracking.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_logging.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_network_utils.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_ollama_service.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_plugin_base.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_recommender.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_schema.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_scope_integration.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_scope_validator.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_security_hardening.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_security_validation.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_sqlmap_parser.py +0 -0
- {souleyez-2.28.0 → souleyez-2.40.0}/tests/test_version_utils.py +0 -0
souleyez-2.40.0/PKG-INFO
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: souleyez
|
|
3
|
+
Version: 2.40.0
|
|
4
|
+
Summary: AI-Powered Penetration Testing Platform with 40+ integrated tools
|
|
5
|
+
Author-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
6
|
+
Maintainer-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/cyber-soul-security/SoulEyez
|
|
9
|
+
Project-URL: Documentation, https://github.com/cyber-soul-security/SoulEyez#readme
|
|
10
|
+
Project-URL: Repository, https://github.com/cyber-soul-security/SoulEyez.git
|
|
11
|
+
Project-URL: Issues, https://github.com/cyber-soul-security/SoulEyez/issues
|
|
12
|
+
Keywords: pentesting,security,hacking,penetration-testing,cybersecurity,nmap,metasploit
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Environment :: Console :: Curses
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Intended Audience :: Information Technology
|
|
18
|
+
Classifier: Intended Audience :: System Administrators
|
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
21
|
+
Classifier: Operating System :: MacOS
|
|
22
|
+
Classifier: Programming Language :: Python :: 3
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
29
|
+
Classifier: Topic :: Security
|
|
30
|
+
Classifier: Topic :: System :: Networking
|
|
31
|
+
Requires-Python: >=3.8
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
License-File: LICENSE
|
|
34
|
+
Requires-Dist: anthropic>=0.40.0
|
|
35
|
+
Requires-Dist: click>=8.0.0
|
|
36
|
+
Requires-Dist: cryptography>=3.4.0
|
|
37
|
+
Requires-Dist: defusedxml>=0.7.0
|
|
38
|
+
Requires-Dist: impacket>=0.11.0
|
|
39
|
+
Requires-Dist: markdown>=3.4.0
|
|
40
|
+
Requires-Dist: msgpack>=1.0.0
|
|
41
|
+
Requires-Dist: ollama>=0.1.0
|
|
42
|
+
Requires-Dist: psycopg2-binary>=2.9.0
|
|
43
|
+
Requires-Dist: psutil>=5.9.0
|
|
44
|
+
Requires-Dist: python-json-logger>=2.0.0
|
|
45
|
+
Requires-Dist: requests>=2.28.0
|
|
46
|
+
Requires-Dist: rich>=10.0.0
|
|
47
|
+
Requires-Dist: wcwidth>=0.2.0
|
|
48
|
+
Provides-Extra: dev
|
|
49
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
# SoulEyez — AI-Powered Penetration Testing Platform
|
|
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
|
+
|
|
60
|
+
**LEGAL NOTICE — Use Responsibly**
|
|
61
|
+
Only use SoulEyez on systems you own or have explicit written permission to test.
|
|
62
|
+
Unauthorized scanning or exploitation is illegal. The authors are not responsible for misuse.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Features
|
|
67
|
+
|
|
68
|
+
### Core Capabilities
|
|
69
|
+
- 🎯 **Interactive Dashboard** - Real-time engagement monitoring with live updates
|
|
70
|
+
- 🔗 **Smart Tool Chaining** - Automatic follow-up scans based on discoveries
|
|
71
|
+
- 📊 **Findings Management** - Track and categorize vulnerabilities by severity
|
|
72
|
+
- 🔑 **Credential Vault** - Encrypted storage for discovered credentials
|
|
73
|
+
- 🌐 **Network Mapping** - Host discovery and service enumeration
|
|
74
|
+
- 📈 **Progress Tracking** - Monitor scan completion and tool execution
|
|
75
|
+
- 💾 **SQLite Storage** - Local database for all engagement data
|
|
76
|
+
- 🔄 **Background Jobs** - Queue-based tool execution with status monitoring
|
|
77
|
+
|
|
78
|
+
### Integrated Tools (40+)
|
|
79
|
+
- **Reconnaissance**: nmap, masscan, theHarvester, whois, dnsrecon
|
|
80
|
+
- **Web Testing**: nikto, gobuster, ffuf, sqlmap, nuclei, wpscan
|
|
81
|
+
- **Enumeration**: enum4linux-ng, smbmap, crackmapexec, snmpwalk
|
|
82
|
+
- **Exploitation**: Metasploit integration, searchsploit
|
|
83
|
+
- **Password Attacks**: hydra, hashcat, john
|
|
84
|
+
- **Post-Exploitation**: impacket suite, bloodhound
|
|
85
|
+
|
|
86
|
+
### Pentest Workflow & Intelligence
|
|
87
|
+
- 📁 **Evidence Vault** - Unified artifact collection organized by PTES phases
|
|
88
|
+
- 🎯 **Attack Surface Dashboard** - Track what's exploited vs pending with priority scoring
|
|
89
|
+
- 💣 **Exploit Suggestions** - Automatic CVE/Metasploit recommendations for discovered services
|
|
90
|
+
- 🔗 **Correlation Engine** - Cross-phase attack tracking and gap analysis
|
|
91
|
+
- 📝 **Report Generator** - Professional reports in Markdown/HTML/PDF formats
|
|
92
|
+
- ✅ **Deliverable Tracking** - Manage testing requirements and acceptance criteria
|
|
93
|
+
- 📸 **Screenshot Management** - Organized visual evidence by methodology phase
|
|
94
|
+
|
|
95
|
+
### Purple Team / SIEM Integration
|
|
96
|
+
- 🛡️ **Wazuh Integration** - Connect to Wazuh Manager for detection validation
|
|
97
|
+
- 📊 **Splunk Integration** - Query Splunk for alerts and vulnerability data
|
|
98
|
+
- ✓ **Detection Validation** - Verify if your attacks triggered SIEM alerts
|
|
99
|
+
- 🔍 **Vulnerability Management** - View CVEs from Wazuh agents synced to Splunk
|
|
100
|
+
- ⚖️ **Gap Analysis** - Compare passive (SIEM) vs active (scan) findings
|
|
101
|
+
- 🗺️ **MITRE ATT&CK Reports** - Detection coverage heatmaps by technique
|
|
102
|
+
- 📡 **Real-time Alerts** - Monitor SIEM alerts during live engagements
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 🔐 Security & Data Protection
|
|
107
|
+
|
|
108
|
+
### Credential Encryption
|
|
109
|
+
|
|
110
|
+
SoulEyez encrypts all stored credentials using Fernet (AES-128-CBC + HMAC-SHA256) with PBKDF2 key derivation (600k iterations).
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Enable encryption with master password
|
|
114
|
+
souleyez db encrypt
|
|
115
|
+
|
|
116
|
+
# Add credentials (automatically encrypted)
|
|
117
|
+
souleyez creds add --username admin --password secret123 --service ssh --host 10.0.0.82
|
|
118
|
+
|
|
119
|
+
# View credentials (requires master password)
|
|
120
|
+
souleyez creds list
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Key Points:**
|
|
124
|
+
- Master password is never stored (cannot be recovered if lost)
|
|
125
|
+
- Credentials encrypted at rest with industry-standard cryptography
|
|
126
|
+
- Dashboard shows masked values (••••••••) until explicitly revealed
|
|
127
|
+
- Each user should maintain their own database
|
|
128
|
+
|
|
129
|
+
### Data Masking
|
|
130
|
+
|
|
131
|
+
Sensitive data is automatically masked in the UI:
|
|
132
|
+
- Passwords: `Su***********3!`
|
|
133
|
+
- Credit card numbers: `45**************34`
|
|
134
|
+
- Access warning prompts before viewing sensitive data
|
|
135
|
+
|
|
136
|
+
See [SECURITY.md](SECURITY.md) for complete security guidelines.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 📝 Configuration
|
|
141
|
+
|
|
142
|
+
SoulEyez uses a flexible configuration system:
|
|
143
|
+
|
|
144
|
+
1. **Environment Variables** - `SOULEYEZ_*` prefix (highest priority)
|
|
145
|
+
2. **Config File** - `~/.souleyez/config.json` (auto-created)
|
|
146
|
+
3. **Default Values** - Built-in safe defaults
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Edit config file
|
|
150
|
+
nano ~/.souleyez/config.json
|
|
151
|
+
|
|
152
|
+
# Or use environment variables
|
|
153
|
+
export SOULEYEZ_DATABASE_PATH=/custom/path/souleyez.db
|
|
154
|
+
export SOULEYEZ_LOGGING_LEVEL=DEBUG
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
See [docs/CONFIG.md](souleyez/docs/CONFIG.md) for complete configuration options.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Supported Operating Systems
|
|
162
|
+
|
|
163
|
+
| OS | Status | Notes |
|
|
164
|
+
|----|--------|-------|
|
|
165
|
+
| **Kali Linux** | ✅ Recommended | All pentesting tools pre-installed |
|
|
166
|
+
| **Ubuntu 22.04+** | ✅ Supported | Tools installed via `souleyez setup` |
|
|
167
|
+
| **Parrot OS** | ✅ Supported | Security-focused distro |
|
|
168
|
+
| **Debian 12+** | ✅ Supported | Stable base system |
|
|
169
|
+
| **Other Linux** | ⚠️ Unofficial | Manual testing required |
|
|
170
|
+
| **macOS/Windows** | ❌ Not Supported | Use Linux in a VM |
|
|
171
|
+
|
|
172
|
+
**Architectures:** AMD64, ARM64
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## System Requirements
|
|
177
|
+
|
|
178
|
+
| Component | Minimum | Recommended |
|
|
179
|
+
|-----------|---------|-------------|
|
|
180
|
+
| **CPU** | 2 cores | 4+ cores |
|
|
181
|
+
| **RAM** | 4GB | 8GB+ |
|
|
182
|
+
| **Disk** | 10GB | 50GB+ |
|
|
183
|
+
| **GPU** | None | Optional (for hashcat) |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Installation
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# Install pipx if needed
|
|
191
|
+
sudo apt install pipx
|
|
192
|
+
pipx ensurepath
|
|
193
|
+
source ~/.bashrc # Kali Linux: use 'source ~/.zshrc' instead
|
|
194
|
+
|
|
195
|
+
# Install SoulEyez
|
|
196
|
+
pipx install souleyez
|
|
197
|
+
|
|
198
|
+
# Install pentesting tools
|
|
199
|
+
souleyez setup
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
203
|
+
|
|
204
|
+
See [docs/user-guide/installation.md](souleyez/docs/user-guide/installation.md) for detailed instructions.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Usage
|
|
209
|
+
|
|
210
|
+
### Interactive Mode (Recommended)
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
souleyez interactive
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Menu-driven interface with guided workflows, tool selection by phase, and integrated help.
|
|
217
|
+
|
|
218
|
+
### Dashboard
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
souleyez dashboard
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Real-time monitoring with hotkeys: `[h]` Help, `[a]` Auto-chain, `[m]` Menu, `[q]` Quit
|
|
225
|
+
|
|
226
|
+
### Command Line
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Engagement management
|
|
230
|
+
souleyez workspace create <name>
|
|
231
|
+
souleyez workspace use <name>
|
|
232
|
+
|
|
233
|
+
# Run scans
|
|
234
|
+
souleyez run nmap <target>
|
|
235
|
+
souleyez run gobuster <target>
|
|
236
|
+
|
|
237
|
+
# View results
|
|
238
|
+
souleyez findings list
|
|
239
|
+
souleyez creds list
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Documentation
|
|
245
|
+
|
|
246
|
+
- **[Installation Guide](souleyez/docs/user-guide/installation.md)** - Setup instructions
|
|
247
|
+
- **[Getting Started](souleyez/docs/user-guide/getting-started.md)** - Quick start guide
|
|
248
|
+
- **[Workflows](souleyez/docs/user-guide/workflows.md)** - Complete pentesting workflows
|
|
249
|
+
- **[Evidence Vault](souleyez/docs/user-guide/evidence-vault.md)** - Artifact collection
|
|
250
|
+
- **[Report Generation](souleyez/docs/user-guide/report-generation.md)** - Professional reports
|
|
251
|
+
- **[SECURITY.md](SECURITY.md)** - Security best practices
|
|
252
|
+
- **[AUTO_CHAINING_GUIDE.md](AUTO_CHAINING_GUIDE.md)** - Automated workflows
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Support
|
|
257
|
+
|
|
258
|
+
- **GitHub Issues**: https://github.com/cyber-soul-security/SoulEyez/issues
|
|
259
|
+
- **Security Issues**: Report privately (see SECURITY.md)
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## License
|
|
264
|
+
|
|
265
|
+
See [LICENSE](LICENSE) for details.
|
|
@@ -4,9 +4,9 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "souleyez"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.40.0"
|
|
8
8
|
description = "AI-Powered Penetration Testing Platform with 40+ integrated tools"
|
|
9
|
-
readme = "
|
|
9
|
+
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
11
11
|
authors = [{name = "CyberSoul Security", email = "contact@cybersoulsecurity.com"}]
|
|
12
12
|
maintainers = [{name = "CyberSoul Security", email = "contact@cybersoulsecurity.com"}]
|
|
@@ -49,8 +49,9 @@ class MSFAutoMapper:
|
|
|
49
49
|
risk_levels=['safe', 'noisy', 'moderate', 'dangerous']
|
|
50
50
|
)
|
|
51
51
|
|
|
52
|
-
#
|
|
53
|
-
|
|
52
|
+
# Only store services with actual recommendations
|
|
53
|
+
if recommendations:
|
|
54
|
+
service_map[service_id] = recommendations[:10]
|
|
54
55
|
|
|
55
56
|
return service_map
|
|
56
57
|
except Exception as e:
|
|
@@ -1759,6 +1759,20 @@ class ToolChaining:
|
|
|
1759
1759
|
)
|
|
1760
1760
|
)
|
|
1761
1761
|
|
|
1762
|
+
# Database Admin → SQLMap (gentler settings for phpMyAdmin/Adminer)
|
|
1763
|
+
# These panels are slow and easily overwhelmed - use single thread and basic tests
|
|
1764
|
+
self.rules.append(
|
|
1765
|
+
ChainRule(
|
|
1766
|
+
trigger_tool='gobuster',
|
|
1767
|
+
trigger_condition='category:database_admin',
|
|
1768
|
+
target_tool='sqlmap',
|
|
1769
|
+
priority=6, # Lower priority than CVE/exploit scans
|
|
1770
|
+
args_template=['-u', '{target}', '--batch', '--forms', '--threads=1', '--time-sec=10',
|
|
1771
|
+
'--level=1', '--risk=1', '--technique=BEU', '--timeout=30'],
|
|
1772
|
+
description='Database admin panel detected, testing login form for SQL injection (low intensity)'
|
|
1773
|
+
)
|
|
1774
|
+
)
|
|
1775
|
+
|
|
1762
1776
|
# WordPress → WPScan enumeration
|
|
1763
1777
|
self.rules.append(
|
|
1764
1778
|
ChainRule(
|
|
@@ -3958,7 +3972,7 @@ class ToolChaining:
|
|
|
3958
3972
|
# This reduces noise and focuses on high-value targets
|
|
3959
3973
|
from souleyez.intelligence.sensitive_tables import is_sensitive_table, is_system_table
|
|
3960
3974
|
|
|
3961
|
-
MAX_TABLES_FOR_COLUMN_ENUM =
|
|
3975
|
+
MAX_TABLES_FOR_COLUMN_ENUM = 10 # Focused on sensitive tables only
|
|
3962
3976
|
tables_queued = 0
|
|
3963
3977
|
skipped_tables = 0
|
|
3964
3978
|
|
|
@@ -5017,6 +5031,7 @@ class ToolChaining:
|
|
|
5017
5031
|
label=f"Auto-retry: gobuster (wildcard {exclude_length}b)",
|
|
5018
5032
|
engagement_id=engagement_id,
|
|
5019
5033
|
parent_id=job.get('id'),
|
|
5034
|
+
reason=f"Auto-triggered by gobuster: Wildcard response detected, retrying with --exclude-length {exclude_length}",
|
|
5020
5035
|
metadata={'retry_attempt': 1, 'retry_parent_job_id': job.get('id')}
|
|
5021
5036
|
)
|
|
5022
5037
|
|
|
@@ -5116,7 +5131,8 @@ class ToolChaining:
|
|
|
5116
5131
|
args=sqlmap_args,
|
|
5117
5132
|
label=f"Auto-chain: SQLMap testing {endpoint_url}",
|
|
5118
5133
|
engagement_id=engagement_id,
|
|
5119
|
-
parent_id=job.get('id')
|
|
5134
|
+
parent_id=job.get('id'),
|
|
5135
|
+
reason=f"Auto-triggered by ffuf: Database/dynamic endpoint detected ({status_code} response)"
|
|
5120
5136
|
)
|
|
5121
5137
|
|
|
5122
5138
|
job_ids.append(sqlmap_job_id)
|
|
@@ -5144,6 +5160,7 @@ class ToolChaining:
|
|
|
5144
5160
|
label=f"Auto-chain: ffuf recursive {endpoint_url}",
|
|
5145
5161
|
engagement_id=engagement_id,
|
|
5146
5162
|
parent_id=job.get('id'),
|
|
5163
|
+
reason=f"Auto-triggered by ffuf: {status_code} response suggests deeper path, fuzzing recursively",
|
|
5147
5164
|
metadata={'ffuf_depth': current_depth + 1}
|
|
5148
5165
|
)
|
|
5149
5166
|
|
|
@@ -5367,7 +5384,8 @@ class ToolChaining:
|
|
|
5367
5384
|
args=['-m', '18200', '-a', '0', 'data/wordlists/top100.txt'],
|
|
5368
5385
|
label='CRACK_ASREP',
|
|
5369
5386
|
engagement_id=engagement_id,
|
|
5370
|
-
parent_id=job.get('id')
|
|
5387
|
+
parent_id=job.get('id'),
|
|
5388
|
+
reason="Auto-triggered by impacket-getnpusers: AS-REP hash extracted, attempting to crack"
|
|
5371
5389
|
)
|
|
5372
5390
|
|
|
5373
5391
|
job_ids.append(job_id)
|
|
@@ -5412,7 +5430,8 @@ class ToolChaining:
|
|
|
5412
5430
|
args=['-m', '1000', '-a', '0', 'data/wordlists/top100.txt'],
|
|
5413
5431
|
label='CRACK_NTLM',
|
|
5414
5432
|
engagement_id=engagement_id,
|
|
5415
|
-
parent_id=job.get('id')
|
|
5433
|
+
parent_id=job.get('id'),
|
|
5434
|
+
reason="Auto-triggered by impacket-secretsdump: NTLM hash extracted, attempting to crack"
|
|
5416
5435
|
)
|
|
5417
5436
|
|
|
5418
5437
|
job_ids.append(job_id)
|
|
@@ -5452,7 +5471,8 @@ class ToolChaining:
|
|
|
5452
5471
|
args=[cred_str],
|
|
5453
5472
|
label='EXTRACT_CREDS',
|
|
5454
5473
|
engagement_id=engagement_id,
|
|
5455
|
-
parent_id=job.get('id')
|
|
5474
|
+
parent_id=job.get('id'),
|
|
5475
|
+
reason="Auto-triggered by hydra: Valid credentials found, attempting to extract domain secrets"
|
|
5456
5476
|
)
|
|
5457
5477
|
|
|
5458
5478
|
job_ids.append(job_id)
|
|
@@ -5750,6 +5770,17 @@ class ToolChaining:
|
|
|
5750
5770
|
|
|
5751
5771
|
status = existing_job.get('status')
|
|
5752
5772
|
|
|
5773
|
+
# === SQLMAP RULE-BASED DEDUP (check ALL completed jobs, not just recent) ===
|
|
5774
|
+
# For sqlmap: if same rule was already applied to this URL, skip it entirely
|
|
5775
|
+
# This prevents infinite loops where each sqlmap job re-triggers the same rules
|
|
5776
|
+
if cmd['tool'] == 'sqlmap' and status in ['done', 'queued', 'running']:
|
|
5777
|
+
cmd_rule_id = cmd.get('rule_id')
|
|
5778
|
+
existing_rule_id = existing_job.get('rule_id')
|
|
5779
|
+
if cmd_rule_id and existing_rule_id and cmd_rule_id == existing_rule_id:
|
|
5780
|
+
similar_exists = True
|
|
5781
|
+
print(f" ⏭️ Skipping sqlmap for {cmd_target}: rule #{cmd_rule_id} already applied (job #{existing_job['id']} {status})")
|
|
5782
|
+
break
|
|
5783
|
+
|
|
5753
5784
|
# Check if job is active (queued/running)
|
|
5754
5785
|
is_active = status in ['queued', 'running']
|
|
5755
5786
|
|
|
@@ -5764,11 +5795,28 @@ class ToolChaining:
|
|
|
5764
5795
|
current_time = datetime.now(finished_time.tzinfo) if finished_time.tzinfo else datetime.now()
|
|
5765
5796
|
time_delta = (current_time - finished_time).total_seconds()
|
|
5766
5797
|
|
|
5767
|
-
# Only block if
|
|
5798
|
+
# Only block if finished < 5 min ago AND (same args OR same rule_id for sqlmap)
|
|
5768
5799
|
if time_delta < DUPLICATE_WINDOW_SECONDS:
|
|
5769
5800
|
existing_args = existing_job.get('args', [])
|
|
5770
5801
|
cmd_args = cmd.get('args', [])
|
|
5771
|
-
|
|
5802
|
+
|
|
5803
|
+
# For sqlmap: also check rule_id (same rule = duplicate even with different parent)
|
|
5804
|
+
if cmd['tool'] == 'sqlmap':
|
|
5805
|
+
cmd_rule_id = cmd.get('rule_id')
|
|
5806
|
+
existing_rule_id = existing_job.get('rule_id')
|
|
5807
|
+
if cmd_rule_id and existing_rule_id and cmd_rule_id == existing_rule_id:
|
|
5808
|
+
is_recent_duplicate = True
|
|
5809
|
+
minutes_ago = int(time_delta // 60)
|
|
5810
|
+
seconds_ago = int(time_delta % 60)
|
|
5811
|
+
time_str = f"{minutes_ago}m {seconds_ago}s ago" if minutes_ago > 0 else f"{seconds_ago}s ago"
|
|
5812
|
+
print(f" ⏭️ Skipping sqlmap for {cmd_target}: rule #{cmd_rule_id} completed {time_str} (duplicate)")
|
|
5813
|
+
elif existing_args == cmd_args:
|
|
5814
|
+
is_recent_duplicate = True
|
|
5815
|
+
minutes_ago = int(time_delta // 60)
|
|
5816
|
+
seconds_ago = int(time_delta % 60)
|
|
5817
|
+
time_str = f"{minutes_ago}m {seconds_ago}s ago" if minutes_ago > 0 else f"{seconds_ago}s ago"
|
|
5818
|
+
print(f" ⏭️ Skipping sqlmap for {cmd_target}: job #{existing_job['id']} completed {time_str} (duplicate)")
|
|
5819
|
+
elif existing_args == cmd_args:
|
|
5772
5820
|
is_recent_duplicate = True
|
|
5773
5821
|
minutes_ago = int(time_delta // 60)
|
|
5774
5822
|
seconds_ago = int(time_delta % 60)
|
|
@@ -5790,16 +5838,34 @@ class ToolChaining:
|
|
|
5790
5838
|
print(f" ⏭️ Skipping {cmd['tool']} for {cmd_target}: similar job #{existing_job['id']} already exists ({existing_job['status']})")
|
|
5791
5839
|
break
|
|
5792
5840
|
|
|
5793
|
-
# For sqlmap
|
|
5794
|
-
elif cmd['tool']
|
|
5841
|
+
# For sqlmap: check by rule_id to prevent same rule firing twice on same URL
|
|
5842
|
+
elif cmd['tool'] == 'sqlmap':
|
|
5843
|
+
cmd_rule_id = cmd.get('rule_id')
|
|
5844
|
+
existing_rule_id = existing_job.get('rule_id')
|
|
5845
|
+
existing_args = existing_job.get('args', [])
|
|
5846
|
+
cmd_args = cmd.get('args', [])
|
|
5847
|
+
|
|
5848
|
+
# If both have rule_id and they match, it's a duplicate
|
|
5849
|
+
# (same rule already applied to this injection point)
|
|
5850
|
+
if cmd_rule_id and existing_rule_id and cmd_rule_id == existing_rule_id:
|
|
5851
|
+
similar_exists = True
|
|
5852
|
+
print(f" ⏭️ Skipping sqlmap for {cmd_target}: rule #{cmd_rule_id} already applied (job #{existing_job['id']} {existing_job['status']})")
|
|
5853
|
+
break
|
|
5854
|
+
# Also check if exact same args (covers manual/no-rule jobs)
|
|
5855
|
+
elif existing_args == cmd_args:
|
|
5856
|
+
similar_exists = True
|
|
5857
|
+
print(f" ⏭️ Skipping sqlmap for {cmd_target}: similar job #{existing_job['id']} already exists ({existing_job['status']})")
|
|
5858
|
+
break
|
|
5859
|
+
# If different rule_id and different args, allow it (different SQLMap phase)
|
|
5860
|
+
|
|
5861
|
+
# For gobuster: check if args match
|
|
5862
|
+
elif cmd['tool'] == 'gobuster':
|
|
5795
5863
|
existing_args = existing_job.get('args', [])
|
|
5796
5864
|
cmd_args = cmd.get('args', [])
|
|
5797
|
-
# Compare args - if they're the same, it's a duplicate
|
|
5798
5865
|
if existing_args == cmd_args:
|
|
5799
5866
|
similar_exists = True
|
|
5800
5867
|
print(f" ⏭️ Skipping {cmd['tool']} for {cmd_target}: similar job #{existing_job['id']} already exists ({existing_job['status']})")
|
|
5801
5868
|
break
|
|
5802
|
-
# If args are different, allow it (different SQLMap phase)
|
|
5803
5869
|
|
|
5804
5870
|
# For quick lookup tools (whois, dnsrecon), skip 5-min duplicate check
|
|
5805
5871
|
# They're fast and each theHarvester run should trigger them
|
|
@@ -30,6 +30,7 @@ from souleyez.integrations.siem.wazuh import WazuhSIEMClient
|
|
|
30
30
|
from souleyez.integrations.siem.splunk import SplunkSIEMClient
|
|
31
31
|
from souleyez.integrations.siem.elastic import ElasticSIEMClient
|
|
32
32
|
from souleyez.integrations.siem.sentinel import SentinelSIEMClient
|
|
33
|
+
from souleyez.integrations.siem.googlesecops import GoogleSecOpsSIEMClient
|
|
33
34
|
from souleyez.integrations.siem.factory import SIEMFactory
|
|
34
35
|
|
|
35
36
|
__all__ = [
|
|
@@ -45,4 +46,5 @@ __all__ = [
|
|
|
45
46
|
'SplunkSIEMClient',
|
|
46
47
|
'ElasticSIEMClient',
|
|
47
48
|
'SentinelSIEMClient',
|
|
49
|
+
'GoogleSecOpsSIEMClient',
|
|
48
50
|
]
|
|
@@ -11,7 +11,8 @@ from souleyez.integrations.siem.base import SIEMClient, SIEMConnectionStatus
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
# Registry of available SIEM types
|
|
14
|
-
|
|
14
|
+
# Ordered: Open Source first, then Commercial
|
|
15
|
+
SIEM_TYPES = ['wazuh', 'elastic', 'splunk', 'sentinel', 'google_secops']
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
class SIEMFactory:
|
|
@@ -60,6 +61,10 @@ class SIEMFactory:
|
|
|
60
61
|
from souleyez.integrations.siem.sentinel import SentinelSIEMClient
|
|
61
62
|
return SentinelSIEMClient.from_config(config)
|
|
62
63
|
|
|
64
|
+
elif siem_type_lower == 'google_secops':
|
|
65
|
+
from souleyez.integrations.siem.googlesecops import GoogleSecOpsSIEMClient
|
|
66
|
+
return GoogleSecOpsSIEMClient.from_config(config)
|
|
67
|
+
|
|
63
68
|
else:
|
|
64
69
|
raise ValueError(
|
|
65
70
|
f"Unsupported SIEM type: {siem_type}. "
|
|
@@ -114,7 +119,7 @@ class SIEMFactory:
|
|
|
114
119
|
info_map = {
|
|
115
120
|
'wazuh': {
|
|
116
121
|
'name': 'Wazuh',
|
|
117
|
-
'description': 'Open
|
|
122
|
+
'description': '[Open Source] Security monitoring platform (OSSEC fork)',
|
|
118
123
|
'config_fields': [
|
|
119
124
|
{'name': 'api_url', 'label': 'Manager API URL', 'required': True,
|
|
120
125
|
'placeholder': 'https://wazuh.example.com:55000'},
|
|
@@ -130,7 +135,7 @@ class SIEMFactory:
|
|
|
130
135
|
},
|
|
131
136
|
'splunk': {
|
|
132
137
|
'name': 'Splunk',
|
|
133
|
-
'description': 'Enterprise SIEM and log management
|
|
138
|
+
'description': '[Commercial] Enterprise SIEM and log management',
|
|
134
139
|
'config_fields': [
|
|
135
140
|
{'name': 'api_url', 'label': 'REST API URL', 'required': True,
|
|
136
141
|
'placeholder': 'https://splunk.example.com:8089'},
|
|
@@ -144,7 +149,7 @@ class SIEMFactory:
|
|
|
144
149
|
},
|
|
145
150
|
'elastic': {
|
|
146
151
|
'name': 'Elastic Security',
|
|
147
|
-
'description': 'Elastic
|
|
152
|
+
'description': '[Open Source] Elastic Stack security solution (ELK SIEM)',
|
|
148
153
|
'config_fields': [
|
|
149
154
|
{'name': 'elasticsearch_url', 'label': 'Elasticsearch URL', 'required': True,
|
|
150
155
|
'placeholder': 'https://elastic.example.com:9200'},
|
|
@@ -159,7 +164,7 @@ class SIEMFactory:
|
|
|
159
164
|
},
|
|
160
165
|
'sentinel': {
|
|
161
166
|
'name': 'Microsoft Sentinel',
|
|
162
|
-
'description': 'Azure cloud-native SIEM',
|
|
167
|
+
'description': '[Commercial] Azure cloud-native SIEM',
|
|
163
168
|
'config_fields': [
|
|
164
169
|
{'name': 'tenant_id', 'label': 'Azure Tenant ID', 'required': True},
|
|
165
170
|
{'name': 'client_id', 'label': 'App Client ID', 'required': True},
|
|
@@ -170,6 +175,22 @@ class SIEMFactory:
|
|
|
170
175
|
{'name': 'workspace_id', 'label': 'Workspace ID (GUID)', 'required': True},
|
|
171
176
|
],
|
|
172
177
|
},
|
|
178
|
+
'google_secops': {
|
|
179
|
+
'name': 'Google SecOps',
|
|
180
|
+
'description': '[Commercial] Google Cloud security operations (Chronicle)',
|
|
181
|
+
'config_fields': [
|
|
182
|
+
{'name': 'customer_id', 'label': 'Chronicle Customer ID', 'required': True,
|
|
183
|
+
'placeholder': 'Your Chronicle customer ID'},
|
|
184
|
+
{'name': 'region', 'label': 'Chronicle Region', 'required': True,
|
|
185
|
+
'placeholder': 'us, europe, asia-southeast1'},
|
|
186
|
+
{'name': 'project_id', 'label': 'Google Cloud Project ID', 'required': False,
|
|
187
|
+
'placeholder': 'Optional if in service account JSON'},
|
|
188
|
+
{'name': 'credentials_json', 'label': 'Service Account JSON', 'required': True,
|
|
189
|
+
'secret': True, 'type': 'textarea',
|
|
190
|
+
'placeholder': 'Paste service account JSON key'},
|
|
191
|
+
{'name': 'verify_ssl', 'label': 'Verify SSL', 'required': False, 'type': 'boolean'},
|
|
192
|
+
],
|
|
193
|
+
},
|
|
173
194
|
}
|
|
174
195
|
|
|
175
196
|
return info_map.get(siem_type.lower(), {
|