souleyez 2.17.0__tar.gz → 2.23.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.23.0}/BETA_README.md +4 -2
- {souleyez-2.17.0/souleyez.egg-info → souleyez-2.23.0}/PKG-INFO +5 -3
- {souleyez-2.17.0 → souleyez-2.23.0}/README.md +3 -1
- {souleyez-2.17.0 → souleyez-2.23.0}/pyproject.toml +1 -1
- souleyez-2.23.0/souleyez/__init__.py +1 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/tool_chaining.py +99 -7
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/detection/validator.py +4 -2
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/README.md +2 -2
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/installation.md +3 -1
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/background.py +9 -1
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/result_handler.py +4 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/splunk.py +58 -11
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/main.py +1 -1
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/smbmap_parser.py +30 -2
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/sqlmap_parser.py +54 -17
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/gobuster.py +96 -3
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/msf_exploit.py +6 -3
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/interactive.py +34 -16
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/setup_wizard.py +353 -58
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/tool_setup.py +49 -52
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/utils/tool_checker.py +33 -11
- {souleyez-2.17.0 → souleyez-2.23.0/souleyez.egg-info}/PKG-INFO +5 -3
- souleyez-2.17.0/souleyez/__init__.py +0 -1
- {souleyez-2.17.0 → souleyez-2.23.0}/LICENSE +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/MANIFEST.in +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/setup.cfg +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/action_mapper.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/chain_advisor.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/claude_provider.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/context_builder.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/executor.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/feedback_handler.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/llm_factory.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/llm_provider.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/ollama_provider.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/ollama_service.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/path_scorer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/recommender.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/report_context.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/report_prompts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/report_service.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/result_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ai/safety.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/auth/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/auth/audit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/auth/engagement_access.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/auth/permissions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/auth/session_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/auth/user_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/audit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/auth.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/deliverables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/engagement.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/license.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/screenshots.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/commands/user.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/credential_tester.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/cve_mappings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/cve_matcher.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/msf_auto_mapper.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/msf_chain_engine.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/msf_database.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/msf_integration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/msf_rpc_client.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/msf_rpc_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/msf_sync_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/network_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/parser_handler.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/pending_chains.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/templates.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/version_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/vuln_correlation.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/core/web_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/README.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/active_directory.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/cis_controls_v8.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/cloud_security.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/cmmc_2.0.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/external_network.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/ffiec_cat.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/gdpr_article32.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/glba_safeguards.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/hipaa_security.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/hitrust_csf.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/internal_network.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/iso27001.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/nerc_cip.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/nist_csf.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/owasp_top10_2021.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/pci_dss_4.0.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/ptes_standard.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/red_team.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/soc2_type2.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/templates/webapp_advanced.json +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/README.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/all_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/api_endpoints.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/default_credentials.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/macos_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/router_passwords.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/router_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/soul_pass.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/soul_users.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/subdomains_common.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/top100.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/top20_quick.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/vnc_passwords.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/web_dirs_common.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/web_extensions.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/data/wordlists/web_files_common.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/detection/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/detection/attack_signatures.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/detection/mitre_mappings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/devtools.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/api-reference/cli-commands.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/api-reference/engagement-api.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/api-reference/integration-guide.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/api-reference/parser-formats.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/architecture/decisions/000-template.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/architecture/decisions/001-local-llm-over-cloud.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/architecture/decisions/002-master-password-approach.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/architecture/decisions/003-database-schema-design.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/architecture/overview.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/database/MIGRATIONS.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/database/SCHEMA.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/database/SCHEMA_ERD.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/developer-guide/test_coverage_plan.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/developer-guide/ui-design-system.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/images/README.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/security/best-practices.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/security/credential-encryption.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/security/password-protected-commands.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/security/secure-defaults.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/security/threat-model.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/ai-integration.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/attack-surface.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/auto-chaining.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/configuration.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/deliverables-screenshots.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/dependencies.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/evidence-vault.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/exploit-suggestions.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/getting-started.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/metasploit-integration.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/rbac.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/report-generation.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/siem-integration.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/tools-reference.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/troubleshooting.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/uninstall.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/worker-management.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/docs/user-guide/workflows.md +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/job_status.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/loader.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/log_sanitizer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/engine/worker_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/export/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/export/evidence_bundle.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/feature_flags/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/feature_flags/features.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/feature_flags.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/history.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/importers/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/importers/msf_importer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/importers/smart_importer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/elastic.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/factory.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/rule_mappings/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/rule_mappings/wazuh_rules.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/sentinel.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/siem/wazuh.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/wazuh/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/wazuh/client.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/wazuh/config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/wazuh/host_mapper.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/integrations/wazuh/sync.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/correlation_analyzer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/exploit_knowledge.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/exploit_suggestions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/gap_analyzer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/gap_detector.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/sensitive_tables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/service_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/surface_analyzer.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/intelligence/target_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/licensing/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/licensing/validator.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/log_config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/migrations/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/migrations/fix_job_counter.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/bloodhound_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/crackmapexec_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/dalfox_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/dnsrecon_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/enum4linux_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/ffuf_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/gobuster_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/hashcat_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/hydra_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/impacket_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/john_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/msf_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/nikto_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/nmap_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/nuclei_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/responder_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/searchsploit_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/theharvester_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/whois_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/parsers/wpscan_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/afp.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/afp_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/ard.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/bloodhound.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/crackmapexec.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/dalfox.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/dns_hijack.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/dnsrecon.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/enum4linux.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/ffuf.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/firmware_extract.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/hashcat.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/hydra.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/impacket_getnpusers.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/impacket_psexec.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/impacket_secretsdump.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/impacket_smbclient.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/john.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/macos_ssh.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/mdns.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/msf_auxiliary.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/nikto.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/nmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/nuclei.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/plugin_base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/plugin_template.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/responder.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/router_http_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/router_ssh_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/router_telnet_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/routersploit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/routersploit_exploit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/searchsploit.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/smbmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/sqlmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/theharvester.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/tr069.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/upnp.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/upnp_abuse.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/vnc_access.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/vnc_brute.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/whois.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/plugins/wpscan.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/attack_chain.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/charts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/compliance_mappings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/detection_report.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/formatters.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/generator.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/reporting/metrics.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/scanner.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/security/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/security/validation.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/security.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/credentials.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/crypto.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/database.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/db.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/deliverable_evidence.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/deliverable_exporter.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/deliverable_templates.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/deliverables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/engagements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/evidence.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/execution_log.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/exploit_attempts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/exploits.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/findings.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/hosts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrate_to_engagements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_001_add_credential_enhancements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_002_add_status_tracking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_003_add_execution_log.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_005_screenshots.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_006_deliverables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_007_deliverable_templates.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_008_add_nuclei_table.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_009_add_cme_tables.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_010_evidence_linking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_011_timeline_tracking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_012_team_collaboration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_013_add_host_tags.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_014_exploit_attempts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_015_add_mac_os_fields.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_016_add_domain_field.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_017_msf_sessions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_018_add_osint_target.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_019_add_engagement_type.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_020_add_rbac.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_021_wazuh_integration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_022_wazuh_indexer_columns.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_023_fix_detection_results_fk.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/_025_multi_siem_support.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/migrations/migration_manager.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/msf_sessions.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/osint.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/recommendation_engine.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/schema.sql +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/screenshots.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/smb_shares.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/sqlmap_data.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/team_collaboration.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/timeline_tracker.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/wazuh_vulns.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/storage/web_paths.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/testing/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/testing/credential_tester.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/ai_quotes.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/attack_surface.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/chain_rules_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/correlation_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/dashboard.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/deliverables_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/design_system.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/errors.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/evidence_linking_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/evidence_vault.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/exploit_suggestions_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/export_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/gap_analysis_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/help_system.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/intelligence_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/interactive_selector.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/log_formatter.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/menu_components.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/msf_auxiliary_menu.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/pending_chains_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/progress_indicators.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/recommendations_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/rule_builder.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/shortcuts.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/splunk_gap_analysis_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/splunk_vulns_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/team_dashboard.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/template_selector.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/terminal.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/timeline_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/tutorial.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/tutorial_state.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui/wazuh_vulns_view.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/ui.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/utils/__init__.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez/wordlists.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez.egg-info/SOURCES.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez.egg-info/dependency_links.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez.egg-info/entry_points.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez.egg-info/requires.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/souleyez.egg-info/top_level.txt +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_config.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_config_enhanced.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_crypto.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_database_100_final.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_engagements.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_engagements_simple.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_job_status_tracking.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_logging.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_network_utils.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_ollama_service.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_plugin_base.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_recommender.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_result_handler_sqlmap.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_schema.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_security_hardening.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_security_validation.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_sqlmap_parser.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_storage.py +0 -0
- {souleyez-2.17.0 → souleyez-2.23.0}/tests/test_version_utils.py +0 -0
|
@@ -21,7 +21,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
21
21
|
|
|
22
22
|
> ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
|
|
23
23
|
|
|
24
|
-
## Version: 2.
|
|
24
|
+
## Version: 2.23.0
|
|
25
25
|
|
|
26
26
|
### What's Included
|
|
27
27
|
|
|
@@ -76,6 +76,8 @@ pipx ensurepath # Add pipx apps to your PATH
|
|
|
76
76
|
source ~/.bashrc # Reload your shell (or close and reopen terminal)
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
80
|
+
|
|
79
81
|
> 💡 **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
82
|
|
|
81
83
|
### Step 2: Install SoulEyez
|
|
@@ -246,4 +248,4 @@ Happy hacking! 🛡️
|
|
|
246
248
|
|
|
247
249
|
---
|
|
248
250
|
|
|
249
|
-
**Version**: 2.
|
|
251
|
+
**Version**: 2.23.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.23.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>
|
|
@@ -72,7 +72,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
72
72
|
|
|
73
73
|
> ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
|
|
74
74
|
|
|
75
|
-
## Version: 2.
|
|
75
|
+
## Version: 2.23.0
|
|
76
76
|
|
|
77
77
|
### What's Included
|
|
78
78
|
|
|
@@ -127,6 +127,8 @@ pipx ensurepath # Add pipx apps to your PATH
|
|
|
127
127
|
source ~/.bashrc # Reload your shell (or close and reopen terminal)
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
131
|
+
|
|
130
132
|
> 💡 **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
133
|
|
|
132
134
|
### Step 2: Install SoulEyez
|
|
@@ -297,4 +299,4 @@ Happy hacking! 🛡️
|
|
|
297
299
|
|
|
298
300
|
---
|
|
299
301
|
|
|
300
|
-
**Version**: 2.
|
|
302
|
+
**Version**: 2.23.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
|
|
@@ -133,7 +133,7 @@ See [docs/CONFIG.md](souleyez/docs/CONFIG.md) for complete configuration options
|
|
|
133
133
|
# Install pipx if needed
|
|
134
134
|
sudo apt install pipx
|
|
135
135
|
pipx ensurepath
|
|
136
|
-
source ~/.bashrc
|
|
136
|
+
source ~/.bashrc # Kali Linux: use 'source ~/.zshrc' instead
|
|
137
137
|
|
|
138
138
|
# Install SoulEyez
|
|
139
139
|
pipx install souleyez
|
|
@@ -142,6 +142,8 @@ pipx install souleyez
|
|
|
142
142
|
souleyez setup
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
146
|
+
|
|
145
147
|
See [docs/user-guide/installation.md](souleyez/docs/user-guide/installation.md) for detailed instructions.
|
|
146
148
|
|
|
147
149
|
---
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.23.0'
|
|
@@ -423,6 +423,21 @@ class ChainRule:
|
|
|
423
423
|
result = True
|
|
424
424
|
break
|
|
425
425
|
|
|
426
|
+
elif cond_type == 'svc_version':
|
|
427
|
+
# Simple version string match (e.g., 'svc_version:2.3.4')
|
|
428
|
+
# Matches if any service has this exact version string
|
|
429
|
+
# Useful when nmap doesn't detect product name
|
|
430
|
+
services = context.get('services', [])
|
|
431
|
+
for service in services:
|
|
432
|
+
svc_version = (
|
|
433
|
+
service.get('version', '') or
|
|
434
|
+
service.get('service_version', '') or
|
|
435
|
+
''
|
|
436
|
+
)
|
|
437
|
+
if svc_version and cond_value.lower() in svc_version.lower():
|
|
438
|
+
result = True
|
|
439
|
+
break
|
|
440
|
+
|
|
426
441
|
# Apply negation if needed
|
|
427
442
|
return not result if negated else result
|
|
428
443
|
|
|
@@ -731,13 +746,16 @@ class ToolChaining:
|
|
|
731
746
|
args_template=['-a', '{target}'],
|
|
732
747
|
description='SMB service detected, enumerating shares and users (runs after CrackMapExec)'
|
|
733
748
|
),
|
|
749
|
+
# DISABLED: smbmap has upstream pickling bug with impacket (affects all versions)
|
|
750
|
+
# Use crackmapexec/netexec --shares instead (rule #10 above)
|
|
734
751
|
ChainRule(
|
|
735
752
|
trigger_tool='nmap',
|
|
736
753
|
trigger_condition='service:smb',
|
|
737
754
|
target_tool='smbmap',
|
|
738
755
|
priority=7,
|
|
756
|
+
enabled=False, # Disabled due to impacket pickling bug
|
|
739
757
|
args_template=['-H', '{target}'],
|
|
740
|
-
description='SMB service detected, mapping shares'
|
|
758
|
+
description='SMB service detected, mapping shares (DISABLED - use netexec)'
|
|
741
759
|
),
|
|
742
760
|
])
|
|
743
761
|
|
|
@@ -1143,13 +1161,16 @@ class ToolChaining:
|
|
|
1143
1161
|
# )
|
|
1144
1162
|
# )
|
|
1145
1163
|
|
|
1164
|
+
# DISABLED: smbmap has upstream pickling bug - won't produce results
|
|
1146
1165
|
# Writable SMB shares found → check for exploitability
|
|
1166
|
+
# TODO: Add rule triggering from crackmapexec writable shares detection
|
|
1147
1167
|
self.rules.append(
|
|
1148
1168
|
ChainRule(
|
|
1149
1169
|
trigger_tool='smbmap',
|
|
1150
1170
|
trigger_condition='has:writable_shares',
|
|
1151
1171
|
target_tool='msf_auxiliary',
|
|
1152
1172
|
priority=10,
|
|
1173
|
+
enabled=False, # Disabled - smbmap broken
|
|
1153
1174
|
args_template=['auxiliary/scanner/smb/smb_version'],
|
|
1154
1175
|
description='Writable SMB shares found, checking for vulnerabilities'
|
|
1155
1176
|
)
|
|
@@ -1908,28 +1929,42 @@ class ToolChaining:
|
|
|
1908
1929
|
|
|
1909
1930
|
# vsftpd 2.3.4 backdoor (CVE-2011-2523)
|
|
1910
1931
|
# Triggers backdoor shell on port 6200 when username contains :)
|
|
1932
|
+
# Match FTP service with version 2.3.4 (nmap often shows just "ftp" + "2.3.4")
|
|
1911
1933
|
self.rules.append(
|
|
1912
1934
|
ChainRule(
|
|
1913
1935
|
trigger_tool='nmap',
|
|
1914
|
-
trigger_condition='
|
|
1936
|
+
trigger_condition='service:ftp & svc_version:2.3.4',
|
|
1915
1937
|
target_tool='msf_exploit',
|
|
1916
1938
|
priority=10,
|
|
1917
1939
|
args_template=['exploit/unix/ftp/vsftpd_234_backdoor'],
|
|
1918
|
-
description='
|
|
1940
|
+
description='FTP 2.3.4 detected - checking for vsftpd backdoor (CVE-2011-2523)',
|
|
1919
1941
|
category=CATEGORY_CTF
|
|
1920
1942
|
)
|
|
1921
1943
|
)
|
|
1922
1944
|
|
|
1923
1945
|
# Samba 3.0.x usermap_script RCE (CVE-2007-2447)
|
|
1924
1946
|
# Command injection in username field
|
|
1947
|
+
# Match SMB service with version starting with 3 (nmap shows "3.X" or "3.0.x")
|
|
1948
|
+
self.rules.append(
|
|
1949
|
+
ChainRule(
|
|
1950
|
+
trigger_tool='nmap',
|
|
1951
|
+
trigger_condition='service:smb & svc_version:3.',
|
|
1952
|
+
target_tool='msf_exploit',
|
|
1953
|
+
priority=10,
|
|
1954
|
+
args_template=['exploit/multi/samba/usermap_script'],
|
|
1955
|
+
description='Samba 3.x detected - checking for usermap_script RCE (CVE-2007-2447)',
|
|
1956
|
+
category=CATEGORY_CTF
|
|
1957
|
+
)
|
|
1958
|
+
)
|
|
1959
|
+
# Also match netbios-ssn service (common nmap detection for SMB)
|
|
1925
1960
|
self.rules.append(
|
|
1926
1961
|
ChainRule(
|
|
1927
1962
|
trigger_tool='nmap',
|
|
1928
|
-
trigger_condition='
|
|
1963
|
+
trigger_condition='service:netbios-ssn & svc_version:3.',
|
|
1929
1964
|
target_tool='msf_exploit',
|
|
1930
1965
|
priority=10,
|
|
1931
1966
|
args_template=['exploit/multi/samba/usermap_script'],
|
|
1932
|
-
description='Samba 3.
|
|
1967
|
+
description='Samba 3.x detected (netbios-ssn) - checking for usermap_script RCE (CVE-2007-2447)',
|
|
1933
1968
|
category=CATEGORY_CTF
|
|
1934
1969
|
)
|
|
1935
1970
|
)
|
|
@@ -2132,14 +2167,15 @@ class ToolChaining:
|
|
|
2132
2167
|
)
|
|
2133
2168
|
|
|
2134
2169
|
# ProFTPD mod_copy (CVE-2015-3306) - file copy without auth
|
|
2170
|
+
# Match FTP service with version 1.3.x (common ProFTPD versions)
|
|
2135
2171
|
self.rules.append(
|
|
2136
2172
|
ChainRule(
|
|
2137
2173
|
trigger_tool='nmap',
|
|
2138
|
-
trigger_condition='
|
|
2174
|
+
trigger_condition='service:ftp & svc_version:1.3',
|
|
2139
2175
|
target_tool='msf_exploit',
|
|
2140
2176
|
priority=8,
|
|
2141
2177
|
args_template=['exploit/unix/ftp/proftpd_modcopy_exec'],
|
|
2142
|
-
description='
|
|
2178
|
+
description='FTP 1.3.x detected - checking for ProFTPD mod_copy RCE (CVE-2015-3306)',
|
|
2143
2179
|
category=CATEGORY_CTF
|
|
2144
2180
|
)
|
|
2145
2181
|
)
|
|
@@ -4160,6 +4196,40 @@ class ToolChaining:
|
|
|
4160
4196
|
if len(app_databases) > db_limit:
|
|
4161
4197
|
logger.info(f"SQLMap auto-chaining limited to first {db_limit} of {len(app_databases)} application databases")
|
|
4162
4198
|
|
|
4199
|
+
# === Post-exploitation chain rules (is_dba, file_read, os_cmd) ===
|
|
4200
|
+
# Check for post-exploitation flags and fire appropriate chain rules
|
|
4201
|
+
is_dba = parse_results.get('is_dba', False)
|
|
4202
|
+
file_read_success = parse_results.get('file_read_success', False)
|
|
4203
|
+
os_command_success = parse_results.get('os_command_success', False)
|
|
4204
|
+
|
|
4205
|
+
if is_dba or file_read_success or os_command_success:
|
|
4206
|
+
from souleyez.log_config import get_logger
|
|
4207
|
+
logger = get_logger(__name__)
|
|
4208
|
+
|
|
4209
|
+
# Build context with post-exploitation flags using injectable_url
|
|
4210
|
+
post_exploit_context = {
|
|
4211
|
+
'target': injectable_url, # Use the correct injectable URL
|
|
4212
|
+
'tool': tool,
|
|
4213
|
+
'is_dba': is_dba,
|
|
4214
|
+
'file_read_success': file_read_success,
|
|
4215
|
+
'os_command_success': os_command_success,
|
|
4216
|
+
'post_data': post_data, # Preserve POST data for subsequent commands
|
|
4217
|
+
}
|
|
4218
|
+
|
|
4219
|
+
if is_dba:
|
|
4220
|
+
logger.info(f"SQLMap: DBA access confirmed! Evaluating post-exploitation chains...")
|
|
4221
|
+
if file_read_success:
|
|
4222
|
+
logger.info(f"SQLMap: File read successful! Evaluating file read chains...")
|
|
4223
|
+
if os_command_success:
|
|
4224
|
+
logger.info(f"SQLMap: OS command execution successful!")
|
|
4225
|
+
|
|
4226
|
+
# Evaluate chain rules - this will fire rules like has:is_dba
|
|
4227
|
+
commands = self.evaluate_chains(tool, post_exploit_context)
|
|
4228
|
+
if commands:
|
|
4229
|
+
logger.info(f"SQLMap: Matched {len(commands)} post-exploitation chain rule(s)")
|
|
4230
|
+
job_ids.extend(self._enqueue_commands(commands, tool, engagement_id, injectable_url, parent_job_id=job.get('id')))
|
|
4231
|
+
# === END Post-exploitation chain rules ===
|
|
4232
|
+
|
|
4163
4233
|
return job_ids
|
|
4164
4234
|
# === END SQLMap special handling ===
|
|
4165
4235
|
|
|
@@ -4877,6 +4947,28 @@ class ToolChaining:
|
|
|
4877
4947
|
if not endpoint_url:
|
|
4878
4948
|
continue
|
|
4879
4949
|
|
|
4950
|
+
# === Filter out non-injectable files ===
|
|
4951
|
+
path_lower = endpoint_url.lower()
|
|
4952
|
+
filename = path_lower.split('/')[-1] if '/' in path_lower else path_lower
|
|
4953
|
+
|
|
4954
|
+
# Skip Apache/nginx config files
|
|
4955
|
+
if filename.startswith('.ht') or filename.startswith('.nginx'):
|
|
4956
|
+
logger.debug(f"Skipping config file: {endpoint_url}")
|
|
4957
|
+
continue
|
|
4958
|
+
|
|
4959
|
+
# Skip static files that can't have SQL injection
|
|
4960
|
+
static_extensions = (
|
|
4961
|
+
'.html', '.htm', '.txt', '.css', '.js', '.json',
|
|
4962
|
+
'.xml', '.svg', '.png', '.jpg', '.jpeg', '.gif',
|
|
4963
|
+
'.ico', '.woff', '.woff2', '.ttf', '.eot',
|
|
4964
|
+
'.pdf', '.doc', '.docx', '.xls', '.xlsx',
|
|
4965
|
+
'.bak', '.old', '.backup', '.swp', '.orig',
|
|
4966
|
+
'.map', '.md', '.rst', '.log'
|
|
4967
|
+
)
|
|
4968
|
+
if any(filename.endswith(ext) for ext in static_extensions):
|
|
4969
|
+
logger.debug(f"Skipping static file: {endpoint_url}")
|
|
4970
|
+
continue
|
|
4971
|
+
|
|
4880
4972
|
# === SQLMap for testable endpoints ===
|
|
4881
4973
|
if status_code in testable_statuses and created_sqlmap_jobs < max_sqlmap_jobs:
|
|
4882
4974
|
# For API endpoints without parameters, add test parameters
|
|
@@ -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.23.0
|
|
4
|
+
**Last Updated:** January 7, 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.
|
|
@@ -40,12 +40,14 @@ pipx is the Python community's recommended way to install CLI applications. It h
|
|
|
40
40
|
# One-time setup
|
|
41
41
|
sudo apt install pipx
|
|
42
42
|
pipx ensurepath
|
|
43
|
-
source ~/.bashrc
|
|
43
|
+
source ~/.bashrc # Kali Linux: use 'source ~/.zshrc' instead
|
|
44
44
|
|
|
45
45
|
# Install SoulEyez
|
|
46
46
|
pipx install souleyez
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
> **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
|
|
50
|
+
|
|
49
51
|
On first run, SoulEyez will prompt you to install pentesting tools (nmap, sqlmap, gobuster, etc.).
|
|
50
52
|
|
|
51
53
|
```bash
|
|
@@ -711,7 +711,14 @@ def _run_rpc_exploit(cmd_spec: Dict[str, Any], log_path: str, jid: int = None, p
|
|
|
711
711
|
)
|
|
712
712
|
|
|
713
713
|
return 0
|
|
714
|
+
elif result.get('no_session'):
|
|
715
|
+
# Exploit ran but no session opened - this is "no results", not an error
|
|
716
|
+
# Return 1 but let parser set status to no_results
|
|
717
|
+
reason = result.get('reason', 'No session opened')
|
|
718
|
+
_append_worker_log(f"job {jid}: exploit completed - {reason}")
|
|
719
|
+
return 1
|
|
714
720
|
else:
|
|
721
|
+
# True error (connection failed, RPC error, etc.)
|
|
715
722
|
error = result.get('error', 'Unknown error')
|
|
716
723
|
_append_worker_log(f"job {jid}: RPC exploit failed - {error}")
|
|
717
724
|
return 1
|
|
@@ -1031,7 +1038,8 @@ def _is_true_error_exit_code(rc: int, tool: str) -> bool:
|
|
|
1031
1038
|
|
|
1032
1039
|
# Tools that use non-zero exit codes for non-error conditions
|
|
1033
1040
|
# Parser will determine the actual status based on output
|
|
1034
|
-
|
|
1041
|
+
# msf_exploit returns 1 when no session opened (exploit ran but target not vulnerable)
|
|
1042
|
+
tools_with_nonzero_success = ['gobuster', 'hydra', 'medusa', 'msf_exploit']
|
|
1035
1043
|
|
|
1036
1044
|
if tool.lower() in tools_with_nonzero_success:
|
|
1037
1045
|
# Let parser determine status
|
|
@@ -305,6 +305,8 @@ def parse_nmap_job(engagement_id: int, log_path: str, job: Dict[str, Any]) -> Di
|
|
|
305
305
|
# Import into database
|
|
306
306
|
hm = HostManager()
|
|
307
307
|
result = hm.import_nmap_results(engagement_id, parsed)
|
|
308
|
+
logger.info(f"Nmap import: {result['hosts_added']} hosts, {result['services_added']} services in engagement {engagement_id}")
|
|
309
|
+
logger.debug(f"Info scripts to process: {len(parsed.get('info_scripts', []))}")
|
|
308
310
|
|
|
309
311
|
# Check for CVEs and common issues
|
|
310
312
|
fm = FindingsManager()
|
|
@@ -436,11 +438,13 @@ def parse_nmap_job(engagement_id: int, log_path: str, job: Dict[str, Any]) -> Di
|
|
|
436
438
|
for info in parsed.get('info_scripts', []):
|
|
437
439
|
host_ip = info.get('host_ip')
|
|
438
440
|
if not host_ip:
|
|
441
|
+
logger.warning(f"Info script missing host_ip: {info.get('script')}")
|
|
439
442
|
continue
|
|
440
443
|
|
|
441
444
|
# Find host ID
|
|
442
445
|
host = hm.get_host_by_ip(engagement_id, host_ip)
|
|
443
446
|
if not host:
|
|
447
|
+
logger.warning(f"Host not found for info script: {host_ip} in engagement {engagement_id}")
|
|
444
448
|
continue
|
|
445
449
|
|
|
446
450
|
host_id = host['id']
|
|
@@ -348,7 +348,15 @@ class SplunkSIEMClient(SIEMClient):
|
|
|
348
348
|
# HEC wraps in 'event' key, or data might be at top level
|
|
349
349
|
event_data = parsed.get('event', parsed) if isinstance(parsed, dict) else {}
|
|
350
350
|
except (json_lib.JSONDecodeError, TypeError):
|
|
351
|
-
|
|
351
|
+
# Try to extract embedded JSON from syslog lines
|
|
352
|
+
# Format: "Jan 7 14:23:38 host program {json...}"
|
|
353
|
+
import re
|
|
354
|
+
json_match = re.search(r'\{.*\}', raw_str)
|
|
355
|
+
if json_match:
|
|
356
|
+
try:
|
|
357
|
+
event_data = json_lib.loads(json_match.group())
|
|
358
|
+
except (json_lib.JSONDecodeError, TypeError):
|
|
359
|
+
pass
|
|
352
360
|
|
|
353
361
|
# Helper to get field from event_data first, then raw_result
|
|
354
362
|
def get_field(*keys, default=''):
|
|
@@ -370,10 +378,15 @@ class SplunkSIEMClient(SIEMClient):
|
|
|
370
378
|
rule_id = get_field('rule_id', 'rule_name', 'savedsearch_name', 'alert')
|
|
371
379
|
rule_name = get_field('rule_name', 'search_name') or rule_id
|
|
372
380
|
|
|
373
|
-
# For plain log events (no alert fields), use
|
|
381
|
+
# For plain log events (no alert fields), use event_type or sourcetype
|
|
374
382
|
if not rule_id:
|
|
383
|
+
# Prefer Suricata event_type over generic sourcetype
|
|
384
|
+
event_type = get_field('event_type')
|
|
375
385
|
sourcetype = raw_result.get('sourcetype', '')
|
|
376
|
-
if
|
|
386
|
+
if event_type:
|
|
387
|
+
rule_id = event_type
|
|
388
|
+
rule_name = f"Suricata: {event_type}"
|
|
389
|
+
elif sourcetype:
|
|
377
390
|
rule_id = sourcetype
|
|
378
391
|
rule_name = f"Log: {sourcetype}"
|
|
379
392
|
|
|
@@ -389,19 +402,53 @@ class SplunkSIEMClient(SIEMClient):
|
|
|
389
402
|
if not source_ip:
|
|
390
403
|
source_ip = raw_result.get('host', '')
|
|
391
404
|
|
|
392
|
-
# Extract description
|
|
405
|
+
# Extract description - try multiple sources
|
|
393
406
|
description = get_field('description', 'signature', 'message')
|
|
407
|
+
|
|
408
|
+
# Suricata-specific: check nested alert object
|
|
409
|
+
if not description and event_data.get('alert'):
|
|
410
|
+
alert_obj = event_data['alert']
|
|
411
|
+
if isinstance(alert_obj, dict):
|
|
412
|
+
description = alert_obj.get('signature', alert_obj.get('category', ''))
|
|
413
|
+
|
|
414
|
+
# Suricata event_type with context
|
|
394
415
|
if not description:
|
|
395
|
-
# Fallback: use event_type as description
|
|
396
416
|
event_type = get_field('event_type', 'category')
|
|
397
417
|
if event_type:
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
418
|
+
# Add context based on event type
|
|
419
|
+
if event_type == 'dns' and event_data.get('dns'):
|
|
420
|
+
dns = event_data['dns']
|
|
421
|
+
rrname = dns.get('rrname', '') if isinstance(dns, dict) else ''
|
|
422
|
+
description = f"DNS: {rrname}" if rrname else f"DNS query"
|
|
423
|
+
elif event_type == 'http' and event_data.get('http'):
|
|
424
|
+
http = event_data['http']
|
|
425
|
+
hostname = http.get('hostname', '') if isinstance(http, dict) else ''
|
|
426
|
+
description = f"HTTP: {hostname}" if hostname else "HTTP request"
|
|
427
|
+
elif event_type == 'flow':
|
|
428
|
+
app_proto = get_field('app_proto', default='')
|
|
429
|
+
description = f"Flow: {app_proto}" if app_proto else "Network flow"
|
|
430
|
+
elif event_type == 'alert':
|
|
431
|
+
description = "Suricata alert"
|
|
432
|
+
else:
|
|
433
|
+
description = f"{event_type}: {get_field('action', default='detected')}"
|
|
434
|
+
|
|
435
|
+
# For plain log events, try to extract something useful from _raw
|
|
401
436
|
if not description and raw_str:
|
|
402
|
-
#
|
|
403
|
-
|
|
404
|
-
|
|
437
|
+
# Skip syslog header to get actual message
|
|
438
|
+
# Format: "Mon DD HH:MM:SS hostname program: message"
|
|
439
|
+
import re
|
|
440
|
+
# Try to extract message after "program:" or "program["
|
|
441
|
+
msg_match = re.search(r'^\w+\s+\d+\s+[\d:]+\s+\S+\s+\S+[:\[]\s*(.+)', raw_str)
|
|
442
|
+
if msg_match:
|
|
443
|
+
description = msg_match.group(1).strip()[:150]
|
|
444
|
+
else:
|
|
445
|
+
# Fallback: clean up raw log
|
|
446
|
+
clean_raw = raw_str.replace('\n', ' ').strip()
|
|
447
|
+
# Skip if it's just timestamps/IPs with no real content
|
|
448
|
+
if len(clean_raw) > 50:
|
|
449
|
+
description = clean_raw[:150] + ('...' if len(clean_raw) > 150 else '')
|
|
450
|
+
else:
|
|
451
|
+
description = clean_raw if clean_raw else 'No details available'
|
|
405
452
|
|
|
406
453
|
# Extract MITRE info - check event_data first
|
|
407
454
|
mitre_tactics = []
|
|
@@ -173,7 +173,7 @@ def _check_privileged_tools():
|
|
|
173
173
|
|
|
174
174
|
|
|
175
175
|
@click.group()
|
|
176
|
-
@click.version_option(version='2.
|
|
176
|
+
@click.version_option(version='2.23.0')
|
|
177
177
|
def cli():
|
|
178
178
|
"""SoulEyez - AI-Powered Pentesting Platform by CyberSoul Security"""
|
|
179
179
|
from souleyez.log_config import init_logging
|
|
@@ -49,16 +49,44 @@ def parse_smbmap_output(output: str, target: str = "") -> Dict[str, Any]:
|
|
|
49
49
|
'timestamp': str
|
|
50
50
|
},
|
|
51
51
|
...
|
|
52
|
-
]
|
|
52
|
+
],
|
|
53
|
+
'smb_detected': bool, # True if SMB service was detected
|
|
54
|
+
'hosts_count': int, # Number of hosts serving SMB
|
|
55
|
+
'error': str # Error message if tool crashed
|
|
53
56
|
}
|
|
54
57
|
"""
|
|
55
58
|
result = {
|
|
56
59
|
'target': target,
|
|
57
60
|
'status': None,
|
|
58
61
|
'shares': [],
|
|
59
|
-
'files': []
|
|
62
|
+
'files': [],
|
|
63
|
+
'smb_detected': False,
|
|
64
|
+
'hosts_count': 0,
|
|
65
|
+
'error': None
|
|
60
66
|
}
|
|
61
67
|
|
|
68
|
+
# Check for SMB detection (even if tool crashes later)
|
|
69
|
+
# [*] Detected 1 hosts serving SMB
|
|
70
|
+
smb_detected_match = re.search(r'\[\*\]\s*Detected\s+(\d+)\s+hosts?\s+serving\s+SMB', output)
|
|
71
|
+
if smb_detected_match:
|
|
72
|
+
result['smb_detected'] = True
|
|
73
|
+
result['hosts_count'] = int(smb_detected_match.group(1))
|
|
74
|
+
|
|
75
|
+
# Check for Python traceback (tool crash)
|
|
76
|
+
if 'Traceback (most recent call last):' in output:
|
|
77
|
+
# Extract error message from traceback
|
|
78
|
+
error_match = re.search(r'(?:Error|Exception).*?[\'"]([^\'"]+)[\'"]', output, re.DOTALL)
|
|
79
|
+
if error_match:
|
|
80
|
+
result['error'] = error_match.group(1)
|
|
81
|
+
else:
|
|
82
|
+
# Try to get the last line of the traceback
|
|
83
|
+
traceback_lines = output.split('Traceback (most recent call last):')[-1].strip().split('\n')
|
|
84
|
+
for line in reversed(traceback_lines):
|
|
85
|
+
line = line.strip()
|
|
86
|
+
if line and not line.startswith('File') and not line.startswith('raise'):
|
|
87
|
+
result['error'] = line[:200] # Limit length
|
|
88
|
+
break
|
|
89
|
+
|
|
62
90
|
lines = output.split('\n')
|
|
63
91
|
in_share_table = False
|
|
64
92
|
current_share = None
|