souleyez 3.0.0__py3-none-any.whl → 3.0.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of souleyez might be problematic. Click here for more details.
- souleyez/__init__.py +1 -1
- souleyez/ai/__init__.py +7 -7
- souleyez/ai/action_mapper.py +3 -2
- souleyez/ai/chain_advisor.py +2 -1
- souleyez/ai/claude_provider.py +2 -2
- souleyez/ai/context_builder.py +4 -2
- souleyez/ai/executor.py +9 -6
- souleyez/ai/feedback_handler.py +4 -2
- souleyez/ai/llm_provider.py +2 -2
- souleyez/ai/ollama_provider.py +2 -2
- souleyez/ai/ollama_service.py +10 -26
- souleyez/ai/path_scorer.py +2 -1
- souleyez/ai/recommender.py +6 -4
- souleyez/ai/report_context.py +2 -2
- souleyez/ai/report_service.py +5 -5
- souleyez/ai/result_parser.py +3 -2
- souleyez/ai/safety.py +5 -2
- souleyez/auth/__init__.py +6 -6
- souleyez/auth/audit.py +2 -2
- souleyez/auth/engagement_access.py +5 -7
- souleyez/auth/permissions.py +1 -1
- souleyez/auth/session_manager.py +5 -5
- souleyez/auth/user_manager.py +4 -5
- souleyez/commands/audit.py +6 -5
- souleyez/commands/auth.py +6 -5
- souleyez/commands/deliverables.py +2 -3
- souleyez/commands/engagement.py +3 -3
- souleyez/commands/license.py +3 -2
- souleyez/commands/screenshots.py +5 -4
- souleyez/commands/user.py +10 -8
- souleyez/config.py +4 -2
- souleyez/core/credential_tester.py +4 -2
- souleyez/core/cve_mappings.py +2 -1
- souleyez/core/cve_matcher.py +2 -1
- souleyez/core/msf_auto_mapper.py +2 -0
- souleyez/core/msf_chain_engine.py +3 -1
- souleyez/core/msf_database.py +7 -13
- souleyez/core/msf_integration.py +2 -2
- souleyez/core/msf_rpc_client.py +3 -2
- souleyez/core/msf_rpc_manager.py +4 -4
- souleyez/core/msf_sync_manager.py +7 -7
- souleyez/core/network_utils.py +1 -1
- souleyez/core/parser_handler.py +2 -1
- souleyez/core/pending_chains.py +4 -3
- souleyez/core/templates.py +5 -2
- souleyez/core/tool_chaining.py +101 -70
- souleyez/core/version_utils.py +1 -0
- souleyez/core/vuln_correlation.py +3 -2
- souleyez/core/web_utils.py +2 -1
- souleyez/detection/__init__.py +1 -1
- souleyez/detection/attack_signatures.py +1 -1
- souleyez/detection/mitre_mappings.py +1 -2
- souleyez/detection/validator.py +5 -4
- souleyez/devtools.py +4 -2
- souleyez/docs/README.md +2 -2
- souleyez/engine/background.py +168 -7
- souleyez/engine/base.py +2 -1
- souleyez/engine/loader.py +4 -2
- souleyez/engine/log_sanitizer.py +1 -0
- souleyez/engine/manager.py +3 -1
- souleyez/engine/result_handler.py +50 -67
- souleyez/engine/worker_manager.py +6 -4
- souleyez/export/evidence_bundle.py +1 -0
- souleyez/handlers/base.py +1 -0
- souleyez/handlers/bash_handler.py +1 -0
- souleyez/handlers/bloodhound_handler.py +1 -0
- souleyez/handlers/certipy_handler.py +1 -0
- souleyez/handlers/crackmapexec_handler.py +2 -20
- souleyez/handlers/dnsrecon_handler.py +2 -1
- souleyez/handlers/enum4linux_handler.py +65 -37
- souleyez/handlers/evil_winrm_handler.py +1 -0
- souleyez/handlers/ffuf_handler.py +3 -1
- souleyez/handlers/gobuster_handler.py +7 -6
- souleyez/handlers/gpp_extract_handler.py +1 -0
- souleyez/handlers/hashcat_handler.py +1 -0
- souleyez/handlers/hydra_handler.py +5 -2
- souleyez/handlers/impacket_getuserspns_handler.py +1 -0
- souleyez/handlers/impacket_psexec_handler.py +1 -0
- souleyez/handlers/impacket_secretsdump_handler.py +1 -0
- souleyez/handlers/john_handler.py +1 -0
- souleyez/handlers/katana_handler.py +39 -2
- souleyez/handlers/kerbrute_handler.py +1 -0
- souleyez/handlers/ldapsearch_handler.py +90 -17
- souleyez/handlers/lfi_extract_handler.py +1 -0
- souleyez/handlers/msf_auxiliary_handler.py +1 -0
- souleyez/handlers/msf_exploit_handler.py +1 -0
- souleyez/handlers/nikto_handler.py +2 -1
- souleyez/handlers/nmap_handler.py +2 -1
- souleyez/handlers/nuclei_handler.py +2 -1
- souleyez/handlers/nxc_handler.py +3 -18
- souleyez/handlers/rdp_sec_check_handler.py +1 -0
- souleyez/handlers/registry.py +1 -0
- souleyez/handlers/responder_handler.py +1 -0
- souleyez/handlers/service_explorer_handler.py +2 -1
- souleyez/handlers/smbclient_handler.py +1 -0
- souleyez/handlers/smbmap_handler.py +3 -2
- souleyez/handlers/sqlmap_handler.py +6 -4
- souleyez/handlers/theharvester_handler.py +2 -1
- souleyez/handlers/web_login_test_handler.py +1 -0
- souleyez/handlers/whois_handler.py +3 -2
- souleyez/handlers/wpscan_handler.py +2 -1
- souleyez/history.py +4 -3
- souleyez/importers/msf_importer.py +5 -3
- souleyez/importers/smart_importer.py +6 -4
- souleyez/integrations/siem/__init__.py +6 -6
- souleyez/integrations/siem/base.py +1 -1
- souleyez/integrations/siem/elastic.py +3 -3
- souleyez/integrations/siem/factory.py +1 -2
- souleyez/integrations/siem/googlesecops.py +4 -4
- souleyez/integrations/siem/rule_mappings/wazuh_rules.py +1 -1
- souleyez/integrations/siem/sentinel.py +3 -3
- souleyez/integrations/siem/splunk.py +3 -3
- souleyez/integrations/siem/wazuh.py +4 -4
- souleyez/integrations/wazuh/__init__.py +1 -1
- souleyez/integrations/wazuh/client.py +3 -2
- souleyez/integrations/wazuh/config.py +3 -2
- souleyez/integrations/wazuh/host_mapper.py +3 -1
- souleyez/integrations/wazuh/sync.py +4 -1
- souleyez/intelligence/__init__.py +1 -1
- souleyez/intelligence/correlation_analyzer.py +6 -5
- souleyez/intelligence/exploit_knowledge.py +4 -4
- souleyez/intelligence/exploit_suggestions.py +4 -3
- souleyez/intelligence/gap_analyzer.py +5 -3
- souleyez/intelligence/gap_detector.py +2 -0
- souleyez/intelligence/sensitive_tables.py +1 -1
- souleyez/intelligence/service_parser.py +1 -0
- souleyez/intelligence/surface_analyzer.py +9 -9
- souleyez/intelligence/target_parser.py +1 -0
- souleyez/licensing/__init__.py +3 -3
- souleyez/main.py +25 -18
- souleyez/migrations/fix_job_counter.py +2 -1
- souleyez/parsers/bloodhound_parser.py +1 -0
- souleyez/parsers/crackmapexec_parser.py +2 -1
- souleyez/parsers/dalfox_parser.py +3 -2
- souleyez/parsers/dnsrecon_parser.py +2 -1
- souleyez/parsers/enum4linux_parser.py +2 -1
- souleyez/parsers/ffuf_parser.py +2 -1
- souleyez/parsers/gobuster_parser.py +2 -1
- souleyez/parsers/hashcat_parser.py +3 -2
- souleyez/parsers/http_fingerprint_parser.py +2 -1
- souleyez/parsers/hydra_parser.py +2 -1
- souleyez/parsers/impacket_parser.py +2 -1
- souleyez/parsers/john_parser.py +4 -3
- souleyez/parsers/katana_parser.py +134 -2
- souleyez/parsers/msf_parser.py +2 -1
- souleyez/parsers/nikto_parser.py +2 -1
- souleyez/parsers/nmap_parser.py +14 -3
- souleyez/parsers/nuclei_parser.py +3 -2
- souleyez/parsers/responder_parser.py +1 -0
- souleyez/parsers/searchsploit_parser.py +3 -2
- souleyez/parsers/service_explorer_parser.py +1 -0
- souleyez/parsers/smbmap_parser.py +2 -1
- souleyez/parsers/sqlmap_parser.py +36 -2
- souleyez/parsers/theharvester_parser.py +2 -1
- souleyez/parsers/whois_parser.py +2 -1
- souleyez/parsers/wpscan_parser.py +3 -2
- souleyez/plugins/afp.py +3 -1
- souleyez/plugins/afp_brute.py +3 -1
- souleyez/plugins/ard.py +3 -1
- souleyez/plugins/bloodhound.py +3 -2
- souleyez/plugins/certipy.py +1 -0
- souleyez/plugins/crackmapexec.py +11 -7
- souleyez/plugins/dalfox.py +5 -2
- souleyez/plugins/dns_hijack.py +3 -1
- souleyez/plugins/dnsrecon.py +3 -1
- souleyez/plugins/enum4linux.py +3 -1
- souleyez/plugins/evil_winrm.py +1 -0
- souleyez/plugins/ffuf.py +3 -1
- souleyez/plugins/firmware_extract.py +3 -2
- souleyez/plugins/gobuster.py +6 -3
- souleyez/plugins/gpp_extract.py +1 -0
- souleyez/plugins/hashcat.py +2 -1
- souleyez/plugins/http_fingerprint.py +57 -7
- souleyez/plugins/hydra.py +5 -3
- souleyez/plugins/impacket_common.py +40 -0
- souleyez/plugins/impacket_getnpusers.py +19 -2
- souleyez/plugins/impacket_getuserspns.py +158 -0
- souleyez/plugins/impacket_psexec.py +19 -2
- souleyez/plugins/impacket_secretsdump.py +19 -2
- souleyez/plugins/impacket_smbclient.py +19 -2
- souleyez/plugins/john.py +2 -1
- souleyez/plugins/katana.py +48 -6
- souleyez/plugins/kerbrute.py +1 -0
- souleyez/plugins/lfi_extract.py +1 -0
- souleyez/plugins/macos_ssh.py +3 -1
- souleyez/plugins/mdns.py +3 -1
- souleyez/plugins/msf_auxiliary.py +3 -2
- souleyez/plugins/msf_exploit.py +6 -5
- souleyez/plugins/nikto.py +5 -2
- souleyez/plugins/nmap.py +6 -4
- souleyez/plugins/nuclei.py +3 -1
- souleyez/plugins/nxc.py +1 -0
- souleyez/plugins/plugin_base.py +3 -2
- souleyez/plugins/plugin_template.py +3 -2
- souleyez/plugins/rdp_sec_check.py +1 -0
- souleyez/plugins/responder.py +2 -1
- souleyez/plugins/router_http_brute.py +3 -1
- souleyez/plugins/router_ssh_brute.py +3 -1
- souleyez/plugins/router_telnet_brute.py +3 -1
- souleyez/plugins/routersploit.py +5 -3
- souleyez/plugins/routersploit_exploit.py +5 -3
- souleyez/plugins/searchsploit.py +1 -0
- souleyez/plugins/service_explorer.py +2 -1
- souleyez/plugins/smbmap.py +3 -1
- souleyez/plugins/smbpasswd.py +1 -0
- souleyez/plugins/sqlmap.py +3 -1
- souleyez/plugins/theharvester.py +3 -1
- souleyez/plugins/tr069.py +3 -1
- souleyez/plugins/upnp.py +3 -1
- souleyez/plugins/upnp_abuse.py +4 -2
- souleyez/plugins/vnc_access.py +4 -2
- souleyez/plugins/vnc_brute.py +3 -1
- souleyez/plugins/web_login_test.py +1 -0
- souleyez/plugins/whois.py +3 -1
- souleyez/plugins/wpscan.py +3 -1
- souleyez/reporting/attack_chain.py +2 -1
- souleyez/reporting/charts.py +1 -0
- souleyez/reporting/compliance_mappings.py +1 -0
- souleyez/reporting/detection_report.py +10 -10
- souleyez/reporting/formatters.py +7 -12
- souleyez/reporting/generator.py +34 -46
- souleyez/reporting/metrics.py +2 -1
- souleyez/scanner.py +6 -3
- souleyez/security/__init__.py +7 -5
- souleyez/security/scope_validator.py +5 -4
- souleyez/security.py +5 -2
- souleyez/storage/credentials.py +14 -19
- souleyez/storage/crypto.py +7 -4
- souleyez/storage/database.py +6 -6
- souleyez/storage/db.py +8 -8
- souleyez/storage/deliverable_evidence.py +2 -1
- souleyez/storage/deliverable_exporter.py +3 -2
- souleyez/storage/deliverable_templates.py +2 -1
- souleyez/storage/deliverables.py +2 -1
- souleyez/storage/engagements.py +6 -4
- souleyez/storage/evidence.py +5 -4
- souleyez/storage/execution_log.py +4 -2
- souleyez/storage/exploit_attempts.py +3 -2
- souleyez/storage/exploits.py +3 -1
- souleyez/storage/findings.py +3 -1
- souleyez/storage/hosts.py +5 -2
- souleyez/storage/migrate_to_engagements.py +14 -24
- souleyez/storage/migrations/_001_add_credential_enhancements.py +12 -21
- souleyez/storage/migrations/_003_add_execution_log.py +8 -13
- souleyez/storage/migrations/_005_screenshots.py +2 -4
- souleyez/storage/migrations/_006_deliverables.py +2 -4
- souleyez/storage/migrations/_007_deliverable_templates.py +4 -8
- souleyez/storage/migrations/_008_add_nuclei_table.py +2 -4
- souleyez/storage/migrations/_010_evidence_linking.py +6 -12
- souleyez/storage/migrations/_012_team_collaboration.py +12 -24
- souleyez/storage/migrations/_013_add_host_tags.py +2 -4
- souleyez/storage/migrations/_014_exploit_attempts.py +10 -20
- souleyez/storage/migrations/_015_add_mac_os_fields.py +4 -8
- souleyez/storage/migrations/_016_add_domain_field.py +2 -4
- souleyez/storage/migrations/_017_msf_sessions.py +8 -16
- souleyez/storage/migrations/_018_add_osint_target.py +4 -8
- souleyez/storage/migrations/_019_add_engagement_type.py +4 -8
- souleyez/storage/migrations/_020_add_rbac.py +9 -17
- souleyez/storage/migrations/_021_wazuh_integration.py +4 -8
- souleyez/storage/migrations/_023_fix_detection_results_fk.py +2 -4
- souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +4 -8
- souleyez/storage/migrations/_026_add_engagement_scope.py +4 -8
- souleyez/storage/migrations/_027_multi_siem_persistence.py +8 -16
- souleyez/storage/migrations/__init__.py +1 -4
- souleyez/storage/migrations/migration_manager.py +6 -9
- souleyez/storage/msf_sessions.py +1 -1
- souleyez/storage/osint.py +3 -1
- souleyez/storage/recommendation_engine.py +3 -2
- souleyez/storage/screenshots.py +2 -1
- souleyez/storage/smb_shares.py +3 -1
- souleyez/storage/sqlmap_data.py +6 -4
- souleyez/storage/team_collaboration.py +3 -2
- souleyez/storage/timeline_tracker.py +2 -1
- souleyez/storage/wazuh_vulns.py +3 -1
- souleyez/storage/web_paths.py +3 -1
- souleyez/testing/credential_tester.py +2 -0
- souleyez/ui/__init__.py +2 -1
- souleyez/ui/ai_quotes.py +1 -1
- souleyez/ui/attack_surface.py +50 -28
- souleyez/ui/chain_rules_view.py +6 -3
- souleyez/ui/correlation_view.py +3 -2
- souleyez/ui/dashboard.py +85 -139
- souleyez/ui/deliverables_view.py +1 -1
- souleyez/ui/design_system.py +5 -3
- souleyez/ui/errors.py +3 -1
- souleyez/ui/evidence_linking_view.py +2 -1
- souleyez/ui/evidence_vault.py +11 -6
- souleyez/ui/exploit_suggestions_view.py +11 -7
- souleyez/ui/export_view.py +3 -1
- souleyez/ui/gap_analysis_view.py +6 -3
- souleyez/ui/help_system.py +4 -1
- souleyez/ui/intelligence_view.py +7 -3
- souleyez/ui/interactive.py +1280 -558
- souleyez/ui/interactive_selector.py +3 -2
- souleyez/ui/log_formatter.py +1 -0
- souleyez/ui/menu_components.py +3 -1
- souleyez/ui/msf_auxiliary_menu.py +4 -1
- souleyez/ui/pending_chains_view.py +15 -12
- souleyez/ui/progress_indicators.py +5 -2
- souleyez/ui/recommendations_view.py +4 -2
- souleyez/ui/rule_builder.py +4 -1
- souleyez/ui/setup_wizard.py +10 -8
- souleyez/ui/shortcuts.py +1 -1
- souleyez/ui/splunk_gap_analysis_view.py +7 -4
- souleyez/ui/splunk_vulns_view.py +4 -1
- souleyez/ui/team_dashboard.py +7 -5
- souleyez/ui/template_selector.py +2 -1
- souleyez/ui/terminal.py +3 -2
- souleyez/ui/timeline_view.py +2 -1
- souleyez/ui/tool_setup.py +92 -31
- souleyez/ui/tutorial.py +7 -4
- souleyez/ui/tutorial_state.py +3 -2
- souleyez/ui/wazuh_vulns_view.py +5 -2
- souleyez/ui/wordlist_browser.py +4 -3
- souleyez/ui.py +13 -7
- souleyez/utils/tool_checker.py +95 -17
- souleyez/utils.py +4 -4
- souleyez/wordlists.py +1 -0
- {souleyez-3.0.0.dist-info → souleyez-3.0.9.dist-info}/METADATA +1 -1
- souleyez-3.0.9.dist-info/RECORD +445 -0
- souleyez-3.0.0.dist-info/RECORD +0 -443
- {souleyez-3.0.0.dist-info → souleyez-3.0.9.dist-info}/WHEEL +0 -0
- {souleyez-3.0.0.dist-info → souleyez-3.0.9.dist-info}/entry_points.txt +0 -0
- {souleyez-3.0.0.dist-info → souleyez-3.0.9.dist-info}/licenses/LICENSE +0 -0
- {souleyez-3.0.0.dist-info → souleyez-3.0.9.dist-info}/top_level.txt +0 -0
souleyez/ui/attack_surface.py
CHANGED
|
@@ -6,9 +6,11 @@ Unified attack surface dashboard with host-centric analysis and exploitation tra
|
|
|
6
6
|
Host-centric view: Clean main table showing hosts, with drill-down for details.
|
|
7
7
|
Consolidates Intelligence View, Exploit Suggestions, and Attack Correlation.
|
|
8
8
|
"""
|
|
9
|
-
|
|
10
|
-
from typing import Dict, List, Set, Any
|
|
9
|
+
|
|
11
10
|
import shutil
|
|
11
|
+
from typing import Any, Dict, List, Set
|
|
12
|
+
|
|
13
|
+
import click
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
def get_terminal_width() -> int:
|
|
@@ -154,11 +156,12 @@ def view_attack_surface(engagement_id: int):
|
|
|
154
156
|
Args:
|
|
155
157
|
engagement_id: The engagement ID
|
|
156
158
|
"""
|
|
159
|
+
from rich.console import Console
|
|
160
|
+
from rich.table import Table
|
|
161
|
+
|
|
157
162
|
from souleyez.intelligence.surface_analyzer import AttackSurfaceAnalyzer
|
|
158
163
|
from souleyez.storage.engagements import EngagementManager
|
|
159
164
|
from souleyez.ui.design_system import DesignSystem
|
|
160
|
-
from rich.console import Console
|
|
161
|
-
from rich.table import Table
|
|
162
165
|
|
|
163
166
|
em = EngagementManager()
|
|
164
167
|
analyzer = AttackSurfaceAnalyzer()
|
|
@@ -540,14 +543,16 @@ def view_attack_surface(engagement_id: int):
|
|
|
540
543
|
|
|
541
544
|
def _show_host_siem_alerts(engagement_id: int, host_ip: str, siem_type: str):
|
|
542
545
|
"""Show recent SIEM alerts for a specific host."""
|
|
543
|
-
from souleyez.ui.design_system import DesignSystem
|
|
544
|
-
from souleyez.ui.interactive import render_standard_header
|
|
545
|
-
from souleyez.integrations.wazuh.config import WazuhConfig
|
|
546
|
-
from souleyez.integrations.siem.factory import SIEMFactory
|
|
547
546
|
from datetime import datetime, timedelta
|
|
547
|
+
|
|
548
548
|
from rich.console import Console
|
|
549
549
|
from rich.table import Table
|
|
550
550
|
|
|
551
|
+
from souleyez.integrations.siem.factory import SIEMFactory
|
|
552
|
+
from souleyez.integrations.wazuh.config import WazuhConfig
|
|
553
|
+
from souleyez.ui.design_system import DesignSystem
|
|
554
|
+
from souleyez.ui.interactive import render_standard_header
|
|
555
|
+
|
|
551
556
|
DesignSystem.clear_screen()
|
|
552
557
|
click.echo()
|
|
553
558
|
|
|
@@ -850,6 +855,7 @@ def _display_hosts_table(
|
|
|
850
855
|
Returns: (current_page, total_pages)
|
|
851
856
|
"""
|
|
852
857
|
from rich.table import Table
|
|
858
|
+
|
|
853
859
|
from souleyez.ui.design_system import DesignSystem
|
|
854
860
|
|
|
855
861
|
# Show active filter
|
|
@@ -1195,9 +1201,10 @@ def _host_bulk_action_menu(
|
|
|
1195
1201
|
|
|
1196
1202
|
def _view_gap_detail(engagement_id: int, gap: Dict, analysis: Dict):
|
|
1197
1203
|
"""View detailed information for a single exploitation gap."""
|
|
1198
|
-
from souleyez.ui.design_system import DesignSystem
|
|
1199
1204
|
from rich.console import Console
|
|
1200
1205
|
|
|
1206
|
+
from souleyez.ui.design_system import DesignSystem
|
|
1207
|
+
|
|
1201
1208
|
console = Console()
|
|
1202
1209
|
|
|
1203
1210
|
while True:
|
|
@@ -1405,10 +1412,11 @@ def _view_gap_detail(engagement_id: int, gap: Dict, analysis: Dict):
|
|
|
1405
1412
|
|
|
1406
1413
|
def _view_host_detail(engagement_id: int, host_data: Dict, analysis: Dict):
|
|
1407
1414
|
"""View detailed information for a single host with all sections."""
|
|
1408
|
-
from souleyez.ui.design_system import DesignSystem
|
|
1409
1415
|
from rich.console import Console
|
|
1410
1416
|
from rich.table import Table
|
|
1411
1417
|
|
|
1418
|
+
from souleyez.ui.design_system import DesignSystem
|
|
1419
|
+
|
|
1412
1420
|
console = Console()
|
|
1413
1421
|
|
|
1414
1422
|
services = host_data.get("services", [])
|
|
@@ -1965,12 +1973,13 @@ def _view_service_detail(
|
|
|
1965
1973
|
engagement_id: int, host_data: Dict, service: Dict, analysis: Dict
|
|
1966
1974
|
):
|
|
1967
1975
|
"""View detailed information for a single service (Level 3 drill-down)."""
|
|
1968
|
-
from
|
|
1976
|
+
from rich.console import Console
|
|
1977
|
+
from rich.table import Table
|
|
1978
|
+
|
|
1969
1979
|
from souleyez.intelligence.exploit_suggestions import ExploitSuggestionEngine
|
|
1970
1980
|
from souleyez.storage.findings import FindingsManager
|
|
1971
1981
|
from souleyez.storage.hosts import HostManager
|
|
1972
|
-
from
|
|
1973
|
-
from rich.table import Table
|
|
1982
|
+
from souleyez.ui.design_system import DesignSystem
|
|
1974
1983
|
|
|
1975
1984
|
console = Console()
|
|
1976
1985
|
host_ip = host_data["host_ip"]
|
|
@@ -2140,11 +2149,12 @@ def _run_service_exploit(
|
|
|
2140
2149
|
engagement_id: int, host_ip: str, port: int, exploits: List[Dict]
|
|
2141
2150
|
):
|
|
2142
2151
|
"""Run an exploit against a service."""
|
|
2152
|
+
import os
|
|
2153
|
+
import tempfile
|
|
2154
|
+
|
|
2143
2155
|
from souleyez.core.msf_integration import MSFConsoleManager
|
|
2144
2156
|
from souleyez.storage.exploit_attempts import record_attempt
|
|
2145
2157
|
from souleyez.storage.hosts import HostManager
|
|
2146
|
-
import tempfile
|
|
2147
|
-
import os
|
|
2148
2158
|
|
|
2149
2159
|
click.echo()
|
|
2150
2160
|
click.echo("Select exploit to run:")
|
|
@@ -2397,9 +2407,9 @@ def _get_critical_findings_for_host(engagement_id: int, host_ip: str) -> List[Di
|
|
|
2397
2407
|
def _get_wazuh_vulns_for_host(engagement_id: int, host_ip: str) -> List[Dict]:
|
|
2398
2408
|
"""Get Wazuh vulnerabilities for a specific host."""
|
|
2399
2409
|
try:
|
|
2400
|
-
from souleyez.storage.wazuh_vulns import WazuhVulnsManager
|
|
2401
|
-
from souleyez.storage.hosts import HostManager
|
|
2402
2410
|
from souleyez.integrations.wazuh import WazuhConfig
|
|
2411
|
+
from souleyez.storage.hosts import HostManager
|
|
2412
|
+
from souleyez.storage.wazuh_vulns import WazuhVulnsManager
|
|
2403
2413
|
|
|
2404
2414
|
# Check if Wazuh is configured
|
|
2405
2415
|
config = WazuhConfig.get_config(engagement_id)
|
|
@@ -2885,10 +2895,11 @@ def _exploit_host(engagement_id: int, host_ip: str, exploits: List[Dict]):
|
|
|
2885
2895
|
|
|
2886
2896
|
def _view_host_findings(engagement_id: int, host_ip: str):
|
|
2887
2897
|
"""View all findings for a host with interactive selection."""
|
|
2898
|
+
from rich.console import Console
|
|
2899
|
+
|
|
2888
2900
|
from souleyez.storage.findings import FindingsManager
|
|
2889
2901
|
from souleyez.storage.hosts import HostManager
|
|
2890
2902
|
from souleyez.ui.interactive_selector import interactive_select
|
|
2891
|
-
from rich.console import Console
|
|
2892
2903
|
|
|
2893
2904
|
hm = HostManager()
|
|
2894
2905
|
fm = FindingsManager()
|
|
@@ -2974,8 +2985,8 @@ def _view_host_findings(engagement_id: int, host_ip: str):
|
|
|
2974
2985
|
|
|
2975
2986
|
def _view_host_wazuh_vulns(engagement_id: int, host_ip: str, vulns: List[Dict]):
|
|
2976
2987
|
"""View all Wazuh vulnerabilities for a host with interactive selection."""
|
|
2977
|
-
from souleyez.ui.interactive_selector import interactive_select
|
|
2978
2988
|
from souleyez.ui.design_system import DesignSystem
|
|
2989
|
+
from souleyez.ui.interactive_selector import interactive_select
|
|
2979
2990
|
|
|
2980
2991
|
if not vulns:
|
|
2981
2992
|
click.echo(" No Wazuh vulnerabilities for this host")
|
|
@@ -3116,9 +3127,10 @@ def _view_wazuh_vuln_detail(vuln: Dict):
|
|
|
3116
3127
|
|
|
3117
3128
|
def _view_finding_detail(engagement_id: int, host_ip: str, finding: Dict):
|
|
3118
3129
|
"""View detailed information for a single finding (full-page view)."""
|
|
3119
|
-
from souleyez.ui.design_system import DesignSystem
|
|
3120
3130
|
from rich.console import Console
|
|
3121
3131
|
|
|
3132
|
+
from souleyez.ui.design_system import DesignSystem
|
|
3133
|
+
|
|
3122
3134
|
console = Console()
|
|
3123
3135
|
|
|
3124
3136
|
while True:
|
|
@@ -3401,9 +3413,10 @@ def _get_exploit_job_status(host_ip: str, msf_module: str, engagement_id: int) -
|
|
|
3401
3413
|
|
|
3402
3414
|
def _view_all_exploits(engagement_id: int, host_ip: str, exploits: List[Dict]):
|
|
3403
3415
|
"""View all exploit suggestions for a host with interactive selection."""
|
|
3404
|
-
from souleyez.ui.interactive_selector import interactive_select
|
|
3405
3416
|
from rich.console import Console
|
|
3406
3417
|
|
|
3418
|
+
from souleyez.ui.interactive_selector import interactive_select
|
|
3419
|
+
|
|
3407
3420
|
if not exploits:
|
|
3408
3421
|
click.echo(" No exploit suggestions available")
|
|
3409
3422
|
click.pause()
|
|
@@ -3494,9 +3507,10 @@ def _view_all_exploits(engagement_id: int, host_ip: str, exploits: List[Dict]):
|
|
|
3494
3507
|
|
|
3495
3508
|
def _view_exploit_detail(engagement_id: int, host_ip: str, exploit: Dict):
|
|
3496
3509
|
"""View detailed information for a single exploit."""
|
|
3497
|
-
from souleyez.ui.design_system import DesignSystem
|
|
3498
3510
|
from rich.console import Console
|
|
3499
3511
|
|
|
3512
|
+
from souleyez.ui.design_system import DesignSystem
|
|
3513
|
+
|
|
3500
3514
|
console = Console()
|
|
3501
3515
|
|
|
3502
3516
|
while True:
|
|
@@ -3841,9 +3855,10 @@ def _exploit_bulk_action_menu(
|
|
|
3841
3855
|
|
|
3842
3856
|
def _view_gaps_centric(engagement_id: int, analysis: Dict, engagement: Dict):
|
|
3843
3857
|
"""Switch to gap-centric view (the old view)."""
|
|
3844
|
-
from souleyez.ui.design_system import DesignSystem
|
|
3845
3858
|
from rich.console import Console
|
|
3846
3859
|
|
|
3860
|
+
from souleyez.ui.design_system import DesignSystem
|
|
3861
|
+
|
|
3847
3862
|
# State
|
|
3848
3863
|
selected_gap_ids = set()
|
|
3849
3864
|
gap_filter_severity = None
|
|
@@ -4253,6 +4268,7 @@ def display_exploitation_gaps_table(
|
|
|
4253
4268
|
Returns: (current_page, total_pages)
|
|
4254
4269
|
"""
|
|
4255
4270
|
from rich.table import Table
|
|
4271
|
+
|
|
4256
4272
|
from souleyez.ui.design_system import DesignSystem
|
|
4257
4273
|
|
|
4258
4274
|
# Count by severity
|
|
@@ -4265,7 +4281,9 @@ def display_exploitation_gaps_table(
|
|
|
4265
4281
|
|
|
4266
4282
|
click.echo("═" * width)
|
|
4267
4283
|
click.echo(
|
|
4268
|
-
click.style(
|
|
4284
|
+
click.style(
|
|
4285
|
+
f"⚠️ EXPLOITATION GAPS ({len(gaps)} total)", bold=True, fg="yellow"
|
|
4286
|
+
)
|
|
4269
4287
|
)
|
|
4270
4288
|
|
|
4271
4289
|
# Severity breakdown line
|
|
@@ -4881,9 +4899,10 @@ def display_exploit_suggestions(
|
|
|
4881
4899
|
engagement_id: int, top_hosts: List[Dict], width: int, show_all: bool = False
|
|
4882
4900
|
):
|
|
4883
4901
|
"""Display exploit suggestions for top hosts."""
|
|
4884
|
-
from souleyez.intelligence.exploit_suggestions import ExploitSuggestionEngine
|
|
4885
4902
|
from rich.console import Console
|
|
4886
4903
|
|
|
4904
|
+
from souleyez.intelligence.exploit_suggestions import ExploitSuggestionEngine
|
|
4905
|
+
|
|
4887
4906
|
console = Console()
|
|
4888
4907
|
# Disable SearchSploit in dashboard to prevent UI hangs - use manual Exploit Suggestions menu instead
|
|
4889
4908
|
engine = ExploitSuggestionEngine(use_searchsploit=False)
|
|
@@ -5277,6 +5296,7 @@ def view_host_details(engagement_id: int, hosts: List[Dict]):
|
|
|
5277
5296
|
# Show all services in a table
|
|
5278
5297
|
from rich.console import Console
|
|
5279
5298
|
from rich.table import Table
|
|
5299
|
+
|
|
5280
5300
|
from souleyez.ui.design_system import DesignSystem
|
|
5281
5301
|
|
|
5282
5302
|
console = Console(width=width - 4)
|
|
@@ -5485,10 +5505,11 @@ def _view_quick_wins(engagement_id: int, analysis: Dict):
|
|
|
5485
5505
|
Shows services with high-severity CVEs or known MSF modules that are
|
|
5486
5506
|
untried and have high success probability.
|
|
5487
5507
|
"""
|
|
5488
|
-
from
|
|
5508
|
+
from rich.console import Console
|
|
5509
|
+
|
|
5489
5510
|
from souleyez.intelligence.exploit_suggestions import ExploitSuggestionEngine
|
|
5490
5511
|
from souleyez.storage.hosts import HostManager
|
|
5491
|
-
from
|
|
5512
|
+
from souleyez.ui.design_system import DesignSystem
|
|
5492
5513
|
|
|
5493
5514
|
console = Console()
|
|
5494
5515
|
engine = ExploitSuggestionEngine(use_searchsploit=False) # Fast mode
|
|
@@ -5780,10 +5801,11 @@ def _view_quick_wins(engagement_id: int, analysis: Dict):
|
|
|
5780
5801
|
|
|
5781
5802
|
def _show_msf_commands_for_quick_wins(selected_wins: list):
|
|
5782
5803
|
"""Show MSF commands for selected quick wins."""
|
|
5783
|
-
from souleyez.ui.design_system import DesignSystem
|
|
5784
5804
|
from rich.console import Console
|
|
5785
5805
|
from rich.panel import Panel
|
|
5786
5806
|
|
|
5807
|
+
from souleyez.ui.design_system import DesignSystem
|
|
5808
|
+
|
|
5787
5809
|
console = Console()
|
|
5788
5810
|
DesignSystem.clear_screen()
|
|
5789
5811
|
width = get_terminal_width()
|
souleyez/ui/chain_rules_view.py
CHANGED
|
@@ -4,12 +4,15 @@ souleyez.ui.chain_rules_view
|
|
|
4
4
|
|
|
5
5
|
Chain rule management interface for auto-chaining configuration.
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
import math
|
|
8
|
-
import click
|
|
9
9
|
from typing import List
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
|
|
11
|
+
import click
|
|
12
|
+
|
|
13
|
+
from souleyez.core.tool_chaining import CATEGORY_ICONS, ChainRule, ToolChaining
|
|
12
14
|
from souleyez.ui.design_system import DesignSystem
|
|
15
|
+
from souleyez.ui.menu_components import StandardMenu
|
|
13
16
|
|
|
14
17
|
|
|
15
18
|
def manage_chain_rules():
|
souleyez/ui/correlation_view.py
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Correlation view UI for displaying attack correlation and gaps.
|
|
4
4
|
"""
|
|
5
|
+
|
|
5
6
|
import click
|
|
6
7
|
from rich.console import Console
|
|
7
|
-
from rich.table import Table
|
|
8
8
|
from rich.panel import Panel
|
|
9
|
+
from rich.table import Table
|
|
9
10
|
|
|
10
11
|
from souleyez.intelligence.correlation_analyzer import CorrelationAnalyzer
|
|
11
12
|
from souleyez.intelligence.gap_detector import GapDetector
|
|
12
|
-
from souleyez.ui.design_system import DesignSystem
|
|
13
13
|
from souleyez.storage.engagements import EngagementManager
|
|
14
|
+
from souleyez.ui.design_system import DesignSystem
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def show_correlation_view(engagement_id: int):
|