souleyez 2.43.26__py3-none-any.whl → 2.43.34__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 -2
- souleyez/ai/__init__.py +21 -15
- souleyez/ai/action_mapper.py +249 -150
- souleyez/ai/chain_advisor.py +116 -100
- souleyez/ai/claude_provider.py +29 -28
- souleyez/ai/context_builder.py +80 -62
- souleyez/ai/executor.py +158 -117
- souleyez/ai/feedback_handler.py +136 -121
- souleyez/ai/llm_factory.py +27 -20
- souleyez/ai/llm_provider.py +4 -2
- souleyez/ai/ollama_provider.py +6 -9
- souleyez/ai/ollama_service.py +44 -37
- souleyez/ai/path_scorer.py +91 -76
- souleyez/ai/recommender.py +176 -144
- souleyez/ai/report_context.py +74 -73
- souleyez/ai/report_service.py +84 -66
- souleyez/ai/result_parser.py +222 -229
- souleyez/ai/safety.py +67 -44
- souleyez/auth/__init__.py +23 -22
- souleyez/auth/audit.py +36 -26
- souleyez/auth/engagement_access.py +65 -48
- souleyez/auth/permissions.py +14 -3
- souleyez/auth/session_manager.py +54 -37
- souleyez/auth/user_manager.py +109 -64
- souleyez/commands/audit.py +40 -43
- souleyez/commands/auth.py +35 -15
- souleyez/commands/deliverables.py +55 -50
- souleyez/commands/engagement.py +47 -28
- souleyez/commands/license.py +32 -23
- souleyez/commands/screenshots.py +36 -32
- souleyez/commands/user.py +82 -36
- souleyez/config.py +52 -44
- souleyez/core/credential_tester.py +87 -81
- souleyez/core/cve_mappings.py +179 -192
- souleyez/core/cve_matcher.py +162 -148
- souleyez/core/msf_auto_mapper.py +100 -83
- souleyez/core/msf_chain_engine.py +294 -256
- souleyez/core/msf_database.py +153 -70
- souleyez/core/msf_integration.py +679 -673
- souleyez/core/msf_rpc_client.py +40 -42
- souleyez/core/msf_rpc_manager.py +77 -79
- souleyez/core/msf_sync_manager.py +241 -181
- souleyez/core/network_utils.py +22 -15
- souleyez/core/parser_handler.py +34 -25
- souleyez/core/pending_chains.py +114 -63
- souleyez/core/templates.py +158 -107
- souleyez/core/tool_chaining.py +9526 -2879
- souleyez/core/version_utils.py +79 -94
- souleyez/core/vuln_correlation.py +136 -89
- souleyez/core/web_utils.py +33 -32
- souleyez/data/wordlists/ad_users.txt +378 -0
- souleyez/data/wordlists/api_endpoints_large.txt +769 -0
- souleyez/data/wordlists/home_dir_sensitive.txt +39 -0
- souleyez/data/wordlists/lfi_payloads.txt +82 -0
- souleyez/data/wordlists/passwords_brute.txt +1548 -0
- souleyez/data/wordlists/passwords_crack.txt +2479 -0
- souleyez/data/wordlists/passwords_spray.txt +386 -0
- souleyez/data/wordlists/subdomains_large.txt +5057 -0
- souleyez/data/wordlists/usernames_common.txt +694 -0
- souleyez/data/wordlists/web_dirs_large.txt +4769 -0
- souleyez/detection/__init__.py +1 -1
- souleyez/detection/attack_signatures.py +12 -17
- souleyez/detection/mitre_mappings.py +61 -55
- souleyez/detection/validator.py +97 -86
- souleyez/devtools.py +23 -10
- souleyez/docs/README.md +4 -4
- souleyez/docs/api-reference/cli-commands.md +2 -2
- souleyez/docs/developer-guide/adding-new-tools.md +562 -0
- souleyez/docs/user-guide/auto-chaining.md +30 -8
- souleyez/docs/user-guide/getting-started.md +1 -1
- souleyez/docs/user-guide/installation.md +26 -3
- souleyez/docs/user-guide/metasploit-integration.md +2 -2
- souleyez/docs/user-guide/rbac.md +1 -1
- souleyez/docs/user-guide/scope-management.md +1 -1
- souleyez/docs/user-guide/siem-integration.md +1 -1
- souleyez/docs/user-guide/tools-reference.md +1 -8
- souleyez/docs/user-guide/worker-management.md +1 -1
- souleyez/engine/background.py +1239 -535
- souleyez/engine/base.py +4 -1
- souleyez/engine/job_status.py +17 -49
- souleyez/engine/log_sanitizer.py +103 -77
- souleyez/engine/manager.py +38 -7
- souleyez/engine/result_handler.py +2200 -1550
- souleyez/engine/worker_manager.py +50 -41
- souleyez/export/evidence_bundle.py +72 -62
- souleyez/feature_flags/features.py +16 -20
- souleyez/feature_flags.py +5 -9
- souleyez/handlers/__init__.py +11 -0
- souleyez/handlers/base.py +188 -0
- souleyez/handlers/bash_handler.py +277 -0
- souleyez/handlers/bloodhound_handler.py +243 -0
- souleyez/handlers/certipy_handler.py +311 -0
- souleyez/handlers/crackmapexec_handler.py +486 -0
- souleyez/handlers/dnsrecon_handler.py +344 -0
- souleyez/handlers/enum4linux_handler.py +400 -0
- souleyez/handlers/evil_winrm_handler.py +493 -0
- souleyez/handlers/ffuf_handler.py +815 -0
- souleyez/handlers/gobuster_handler.py +1114 -0
- souleyez/handlers/gpp_extract_handler.py +334 -0
- souleyez/handlers/hashcat_handler.py +444 -0
- souleyez/handlers/hydra_handler.py +563 -0
- souleyez/handlers/impacket_getuserspns_handler.py +343 -0
- souleyez/handlers/impacket_psexec_handler.py +222 -0
- souleyez/handlers/impacket_secretsdump_handler.py +426 -0
- souleyez/handlers/john_handler.py +286 -0
- souleyez/handlers/katana_handler.py +425 -0
- souleyez/handlers/kerbrute_handler.py +298 -0
- souleyez/handlers/ldapsearch_handler.py +636 -0
- souleyez/handlers/lfi_extract_handler.py +464 -0
- souleyez/handlers/msf_auxiliary_handler.py +408 -0
- souleyez/handlers/msf_exploit_handler.py +380 -0
- souleyez/handlers/nikto_handler.py +413 -0
- souleyez/handlers/nmap_handler.py +821 -0
- souleyez/handlers/nuclei_handler.py +359 -0
- souleyez/handlers/nxc_handler.py +371 -0
- souleyez/handlers/rdp_sec_check_handler.py +353 -0
- souleyez/handlers/registry.py +292 -0
- souleyez/handlers/responder_handler.py +232 -0
- souleyez/handlers/service_explorer_handler.py +434 -0
- souleyez/handlers/smbclient_handler.py +344 -0
- souleyez/handlers/smbmap_handler.py +510 -0
- souleyez/handlers/smbpasswd_handler.py +296 -0
- souleyez/handlers/sqlmap_handler.py +1116 -0
- souleyez/handlers/theharvester_handler.py +601 -0
- souleyez/handlers/web_login_test_handler.py +327 -0
- souleyez/handlers/whois_handler.py +277 -0
- souleyez/handlers/wpscan_handler.py +554 -0
- souleyez/history.py +32 -16
- souleyez/importers/msf_importer.py +106 -75
- souleyez/importers/smart_importer.py +208 -147
- souleyez/integrations/siem/__init__.py +10 -10
- souleyez/integrations/siem/base.py +17 -18
- souleyez/integrations/siem/elastic.py +108 -122
- souleyez/integrations/siem/factory.py +207 -80
- souleyez/integrations/siem/googlesecops.py +146 -154
- souleyez/integrations/siem/rule_mappings/__init__.py +1 -1
- souleyez/integrations/siem/rule_mappings/wazuh_rules.py +8 -5
- souleyez/integrations/siem/sentinel.py +107 -109
- souleyez/integrations/siem/splunk.py +246 -212
- souleyez/integrations/siem/wazuh.py +65 -71
- souleyez/integrations/wazuh/__init__.py +5 -5
- souleyez/integrations/wazuh/client.py +70 -93
- souleyez/integrations/wazuh/config.py +85 -57
- souleyez/integrations/wazuh/host_mapper.py +28 -36
- souleyez/integrations/wazuh/sync.py +78 -68
- souleyez/intelligence/__init__.py +4 -5
- souleyez/intelligence/correlation_analyzer.py +309 -295
- souleyez/intelligence/exploit_knowledge.py +661 -623
- souleyez/intelligence/exploit_suggestions.py +159 -139
- souleyez/intelligence/gap_analyzer.py +132 -97
- souleyez/intelligence/gap_detector.py +251 -214
- souleyez/intelligence/sensitive_tables.py +266 -129
- souleyez/intelligence/service_parser.py +137 -123
- souleyez/intelligence/surface_analyzer.py +407 -268
- souleyez/intelligence/target_parser.py +159 -162
- souleyez/licensing/__init__.py +6 -6
- souleyez/licensing/validator.py +17 -19
- souleyez/log_config.py +79 -54
- souleyez/main.py +1505 -687
- souleyez/migrations/fix_job_counter.py +16 -14
- souleyez/parsers/bloodhound_parser.py +41 -39
- souleyez/parsers/crackmapexec_parser.py +178 -111
- souleyez/parsers/dalfox_parser.py +72 -77
- souleyez/parsers/dnsrecon_parser.py +103 -91
- souleyez/parsers/enum4linux_parser.py +183 -153
- souleyez/parsers/ffuf_parser.py +29 -25
- souleyez/parsers/gobuster_parser.py +301 -41
- souleyez/parsers/hashcat_parser.py +324 -79
- souleyez/parsers/http_fingerprint_parser.py +350 -103
- souleyez/parsers/hydra_parser.py +131 -111
- souleyez/parsers/impacket_parser.py +231 -178
- souleyez/parsers/john_parser.py +98 -86
- souleyez/parsers/katana_parser.py +316 -0
- souleyez/parsers/msf_parser.py +943 -498
- souleyez/parsers/nikto_parser.py +346 -65
- souleyez/parsers/nmap_parser.py +262 -174
- souleyez/parsers/nuclei_parser.py +40 -44
- souleyez/parsers/responder_parser.py +26 -26
- souleyez/parsers/searchsploit_parser.py +74 -74
- souleyez/parsers/service_explorer_parser.py +279 -0
- souleyez/parsers/smbmap_parser.py +180 -124
- souleyez/parsers/sqlmap_parser.py +434 -308
- souleyez/parsers/theharvester_parser.py +75 -57
- souleyez/parsers/whois_parser.py +135 -94
- souleyez/parsers/wpscan_parser.py +278 -190
- souleyez/plugins/afp.py +44 -36
- souleyez/plugins/afp_brute.py +114 -46
- souleyez/plugins/ard.py +48 -37
- souleyez/plugins/bloodhound.py +95 -61
- souleyez/plugins/certipy.py +303 -0
- souleyez/plugins/crackmapexec.py +186 -85
- souleyez/plugins/dalfox.py +120 -59
- souleyez/plugins/dns_hijack.py +146 -41
- souleyez/plugins/dnsrecon.py +97 -61
- souleyez/plugins/enum4linux.py +91 -66
- souleyez/plugins/evil_winrm.py +291 -0
- souleyez/plugins/ffuf.py +166 -90
- souleyez/plugins/firmware_extract.py +133 -29
- souleyez/plugins/gobuster.py +387 -190
- souleyez/plugins/gpp_extract.py +393 -0
- souleyez/plugins/hashcat.py +100 -73
- souleyez/plugins/http_fingerprint.py +854 -267
- souleyez/plugins/hydra.py +566 -200
- souleyez/plugins/impacket_getnpusers.py +117 -69
- souleyez/plugins/impacket_psexec.py +84 -64
- souleyez/plugins/impacket_secretsdump.py +103 -69
- souleyez/plugins/impacket_smbclient.py +89 -75
- souleyez/plugins/john.py +86 -69
- souleyez/plugins/katana.py +313 -0
- souleyez/plugins/kerbrute.py +237 -0
- souleyez/plugins/lfi_extract.py +541 -0
- souleyez/plugins/macos_ssh.py +117 -48
- souleyez/plugins/mdns.py +35 -30
- souleyez/plugins/msf_auxiliary.py +253 -130
- souleyez/plugins/msf_exploit.py +239 -161
- souleyez/plugins/nikto.py +134 -78
- souleyez/plugins/nmap.py +275 -91
- souleyez/plugins/nuclei.py +180 -89
- souleyez/plugins/nxc.py +285 -0
- souleyez/plugins/plugin_base.py +35 -36
- souleyez/plugins/plugin_template.py +13 -5
- souleyez/plugins/rdp_sec_check.py +130 -0
- souleyez/plugins/responder.py +112 -71
- souleyez/plugins/router_http_brute.py +76 -65
- souleyez/plugins/router_ssh_brute.py +118 -41
- souleyez/plugins/router_telnet_brute.py +124 -42
- souleyez/plugins/routersploit.py +91 -59
- souleyez/plugins/routersploit_exploit.py +77 -55
- souleyez/plugins/searchsploit.py +91 -77
- souleyez/plugins/service_explorer.py +1160 -0
- souleyez/plugins/smbmap.py +122 -72
- souleyez/plugins/smbpasswd.py +215 -0
- souleyez/plugins/sqlmap.py +301 -113
- souleyez/plugins/theharvester.py +127 -75
- souleyez/plugins/tr069.py +79 -57
- souleyez/plugins/upnp.py +65 -47
- souleyez/plugins/upnp_abuse.py +73 -55
- souleyez/plugins/vnc_access.py +129 -42
- souleyez/plugins/vnc_brute.py +109 -38
- souleyez/plugins/web_login_test.py +417 -0
- souleyez/plugins/whois.py +77 -58
- souleyez/plugins/wpscan.py +173 -69
- souleyez/reporting/__init__.py +2 -1
- souleyez/reporting/attack_chain.py +411 -346
- souleyez/reporting/charts.py +436 -501
- souleyez/reporting/compliance_mappings.py +334 -201
- souleyez/reporting/detection_report.py +126 -125
- souleyez/reporting/formatters.py +828 -591
- souleyez/reporting/generator.py +386 -302
- souleyez/reporting/metrics.py +72 -75
- souleyez/scanner.py +35 -29
- souleyez/security/__init__.py +37 -11
- souleyez/security/scope_validator.py +175 -106
- souleyez/security/validation.py +223 -149
- souleyez/security.py +22 -6
- souleyez/storage/credentials.py +247 -186
- souleyez/storage/crypto.py +296 -129
- souleyez/storage/database.py +73 -50
- souleyez/storage/db.py +58 -36
- souleyez/storage/deliverable_evidence.py +177 -128
- souleyez/storage/deliverable_exporter.py +282 -246
- souleyez/storage/deliverable_templates.py +134 -116
- souleyez/storage/deliverables.py +135 -130
- souleyez/storage/engagements.py +109 -56
- souleyez/storage/evidence.py +181 -152
- souleyez/storage/execution_log.py +31 -17
- souleyez/storage/exploit_attempts.py +93 -57
- souleyez/storage/exploits.py +67 -36
- souleyez/storage/findings.py +48 -61
- souleyez/storage/hosts.py +176 -144
- souleyez/storage/migrate_to_engagements.py +43 -19
- souleyez/storage/migrations/_001_add_credential_enhancements.py +22 -12
- souleyez/storage/migrations/_002_add_status_tracking.py +10 -7
- souleyez/storage/migrations/_003_add_execution_log.py +14 -8
- souleyez/storage/migrations/_005_screenshots.py +13 -5
- souleyez/storage/migrations/_006_deliverables.py +13 -5
- souleyez/storage/migrations/_007_deliverable_templates.py +12 -7
- souleyez/storage/migrations/_008_add_nuclei_table.py +10 -4
- souleyez/storage/migrations/_010_evidence_linking.py +17 -10
- souleyez/storage/migrations/_011_timeline_tracking.py +20 -13
- souleyez/storage/migrations/_012_team_collaboration.py +34 -21
- souleyez/storage/migrations/_013_add_host_tags.py +12 -6
- souleyez/storage/migrations/_014_exploit_attempts.py +22 -10
- souleyez/storage/migrations/_015_add_mac_os_fields.py +15 -7
- souleyez/storage/migrations/_016_add_domain_field.py +10 -4
- souleyez/storage/migrations/_017_msf_sessions.py +16 -8
- souleyez/storage/migrations/_018_add_osint_target.py +10 -6
- souleyez/storage/migrations/_019_add_engagement_type.py +10 -6
- souleyez/storage/migrations/_020_add_rbac.py +36 -15
- souleyez/storage/migrations/_021_wazuh_integration.py +20 -8
- souleyez/storage/migrations/_022_wazuh_indexer_columns.py +6 -4
- souleyez/storage/migrations/_023_fix_detection_results_fk.py +16 -6
- souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +26 -10
- souleyez/storage/migrations/_025_multi_siem_support.py +3 -5
- souleyez/storage/migrations/_026_add_engagement_scope.py +31 -12
- souleyez/storage/migrations/_027_multi_siem_persistence.py +32 -15
- souleyez/storage/migrations/__init__.py +26 -26
- souleyez/storage/migrations/migration_manager.py +19 -19
- souleyez/storage/msf_sessions.py +100 -65
- souleyez/storage/osint.py +17 -24
- souleyez/storage/recommendation_engine.py +269 -235
- souleyez/storage/screenshots.py +33 -32
- souleyez/storage/smb_shares.py +136 -92
- souleyez/storage/sqlmap_data.py +183 -128
- souleyez/storage/team_collaboration.py +135 -141
- souleyez/storage/timeline_tracker.py +122 -94
- souleyez/storage/wazuh_vulns.py +64 -66
- souleyez/storage/web_paths.py +33 -37
- souleyez/testing/credential_tester.py +221 -205
- souleyez/ui/__init__.py +1 -1
- souleyez/ui/ai_quotes.py +12 -12
- souleyez/ui/attack_surface.py +2439 -1516
- souleyez/ui/chain_rules_view.py +914 -382
- souleyez/ui/correlation_view.py +312 -230
- souleyez/ui/dashboard.py +2382 -1130
- souleyez/ui/deliverables_view.py +148 -62
- souleyez/ui/design_system.py +13 -13
- souleyez/ui/errors.py +49 -49
- souleyez/ui/evidence_linking_view.py +284 -179
- souleyez/ui/evidence_vault.py +393 -285
- souleyez/ui/exploit_suggestions_view.py +555 -349
- souleyez/ui/export_view.py +100 -66
- souleyez/ui/gap_analysis_view.py +315 -171
- souleyez/ui/help_system.py +105 -97
- souleyez/ui/intelligence_view.py +436 -293
- souleyez/ui/interactive.py +23434 -10286
- souleyez/ui/interactive_selector.py +75 -68
- souleyez/ui/log_formatter.py +47 -39
- souleyez/ui/menu_components.py +22 -13
- souleyez/ui/msf_auxiliary_menu.py +184 -133
- souleyez/ui/pending_chains_view.py +336 -172
- souleyez/ui/progress_indicators.py +5 -3
- souleyez/ui/recommendations_view.py +195 -137
- souleyez/ui/rule_builder.py +343 -225
- souleyez/ui/setup_wizard.py +678 -284
- souleyez/ui/shortcuts.py +217 -165
- souleyez/ui/splunk_gap_analysis_view.py +452 -270
- souleyez/ui/splunk_vulns_view.py +139 -86
- souleyez/ui/team_dashboard.py +498 -335
- souleyez/ui/template_selector.py +196 -105
- souleyez/ui/terminal.py +6 -6
- souleyez/ui/timeline_view.py +198 -127
- souleyez/ui/tool_setup.py +264 -164
- souleyez/ui/tutorial.py +202 -72
- souleyez/ui/tutorial_state.py +40 -40
- souleyez/ui/wazuh_vulns_view.py +235 -141
- souleyez/ui/wordlist_browser.py +260 -107
- souleyez/ui.py +464 -312
- souleyez/utils/tool_checker.py +427 -367
- souleyez/utils.py +33 -29
- souleyez/wordlists.py +134 -167
- {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/METADATA +1 -1
- souleyez-2.43.34.dist-info/RECORD +443 -0
- {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/WHEEL +1 -1
- souleyez-2.43.26.dist-info/RECORD +0 -379
- {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/entry_points.txt +0 -0
- {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/licenses/LICENSE +0 -0
- {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/top_level.txt +0 -0
souleyez/ui/help_system.py
CHANGED
|
@@ -10,6 +10,7 @@ from typing import Dict, List, Optional
|
|
|
10
10
|
|
|
11
11
|
class HelpContext:
|
|
12
12
|
"""Enum-like class for help contexts."""
|
|
13
|
+
|
|
13
14
|
MAIN_MENU = "main_menu"
|
|
14
15
|
ENGAGEMENT_MENU = "engagement_menu"
|
|
15
16
|
TOOLS_MENU = "tools_menu"
|
|
@@ -32,16 +33,15 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
32
33
|
"shortcuts": {
|
|
33
34
|
"1-9": "Select a menu option",
|
|
34
35
|
"q": "Quit / Go back",
|
|
35
|
-
"?": "Show this help"
|
|
36
|
+
"?": "Show this help",
|
|
36
37
|
},
|
|
37
38
|
"tips": [
|
|
38
39
|
"Start by creating or selecting an engagement",
|
|
39
40
|
"Use 'Run Tools' to queue scans against your target",
|
|
40
41
|
"Check 'Dashboard' to monitor active scans",
|
|
41
|
-
"View 'Findings' to see discovered vulnerabilities"
|
|
42
|
-
]
|
|
42
|
+
"View 'Findings' to see discovered vulnerabilities",
|
|
43
|
+
],
|
|
43
44
|
},
|
|
44
|
-
|
|
45
45
|
HelpContext.ENGAGEMENT_MENU: {
|
|
46
46
|
"title": "Engagement Management Help",
|
|
47
47
|
"description": "Engagements keep your pentest data organized and isolated.",
|
|
@@ -49,39 +49,37 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
49
49
|
"1-9": "Select an engagement",
|
|
50
50
|
"+": "Create new engagement",
|
|
51
51
|
"-": "Delete an engagement",
|
|
52
|
-
"q": "Go back"
|
|
52
|
+
"q": "Go back",
|
|
53
53
|
},
|
|
54
54
|
"tips": [
|
|
55
55
|
"Each engagement is like a project folder",
|
|
56
56
|
"All hosts, findings, and credentials are scoped to the engagement",
|
|
57
57
|
"Use presets for quick setup (Web, Network, AD)",
|
|
58
|
-
"You can have multiple engagements active"
|
|
59
|
-
]
|
|
58
|
+
"You can have multiple engagements active",
|
|
59
|
+
],
|
|
60
60
|
},
|
|
61
|
-
|
|
62
61
|
HelpContext.TOOLS_MENU: {
|
|
63
62
|
"title": "Tools Menu Help",
|
|
64
63
|
"description": "Run pentesting tools against your targets.",
|
|
65
64
|
"shortcuts": {
|
|
66
65
|
"1-9": "Select a tool category",
|
|
67
66
|
"s": "Search for a tool",
|
|
68
|
-
"q": "Go back"
|
|
67
|
+
"q": "Go back",
|
|
69
68
|
},
|
|
70
69
|
"tips": [
|
|
71
70
|
"Tools are organized by category (Recon, Enum, Exploit, etc.)",
|
|
72
71
|
"Tool chaining automatically queues follow-up scans",
|
|
73
72
|
"Check 'souleyez setup' if tools are missing",
|
|
74
|
-
"View tool output in the Dashboard"
|
|
73
|
+
"View tool output in the Dashboard",
|
|
75
74
|
],
|
|
76
75
|
"tool_categories": {
|
|
77
76
|
"Reconnaissance": "nmap, masscan, whatweb - Discover hosts and services",
|
|
78
77
|
"Enumeration": "enum4linux, smbclient, snmpwalk - Gather details",
|
|
79
78
|
"Web Testing": "nikto, gobuster, sqlmap - Web vulnerabilities",
|
|
80
79
|
"Exploitation": "metasploit, searchsploit - Exploit vulns",
|
|
81
|
-
"Password Attacks": "hydra, john, hashcat - Crack credentials"
|
|
82
|
-
}
|
|
80
|
+
"Password Attacks": "hydra, john, hashcat - Crack credentials",
|
|
81
|
+
},
|
|
83
82
|
},
|
|
84
|
-
|
|
85
83
|
HelpContext.DASHBOARD: {
|
|
86
84
|
"title": "Dashboard Help",
|
|
87
85
|
"description": "Real-time monitoring of scans and results.",
|
|
@@ -91,16 +89,15 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
91
89
|
"f": "Findings view - See vulnerabilities",
|
|
92
90
|
"l": "Logs view - See tool output",
|
|
93
91
|
"r": "Refresh data",
|
|
94
|
-
"q": "Quit dashboard"
|
|
92
|
+
"q": "Quit dashboard",
|
|
95
93
|
},
|
|
96
94
|
"tips": [
|
|
97
95
|
"Dashboard auto-refreshes every few seconds",
|
|
98
96
|
"Jobs show real-time progress of running scans",
|
|
99
97
|
"Findings are color-coded by severity",
|
|
100
|
-
"Use 'l' to see raw tool output for debugging"
|
|
101
|
-
]
|
|
98
|
+
"Use 'l' to see raw tool output for debugging",
|
|
99
|
+
],
|
|
102
100
|
},
|
|
103
|
-
|
|
104
101
|
HelpContext.CREDENTIALS: {
|
|
105
102
|
"title": "Credential Vault Help",
|
|
106
103
|
"description": "Securely store discovered credentials.",
|
|
@@ -108,21 +105,20 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
108
105
|
"+": "Add a credential",
|
|
109
106
|
"-": "Delete a credential",
|
|
110
107
|
"e": "Export credentials",
|
|
111
|
-
"q": "Go back"
|
|
108
|
+
"q": "Go back",
|
|
112
109
|
},
|
|
113
110
|
"tips": [
|
|
114
111
|
"Credentials are encrypted with AES-256-GCM",
|
|
115
112
|
"Each credential is scoped to its engagement",
|
|
116
113
|
"Test credentials with 'hydra' or 'crackmapexec'",
|
|
117
|
-
"Export to use with other tools"
|
|
114
|
+
"Export to use with other tools",
|
|
118
115
|
],
|
|
119
116
|
"security": [
|
|
120
117
|
"Never store production credentials in test environments",
|
|
121
118
|
"Use strong master password for encryption",
|
|
122
|
-
"Credentials cannot be recovered if password is lost"
|
|
123
|
-
]
|
|
119
|
+
"Credentials cannot be recovered if password is lost",
|
|
120
|
+
],
|
|
124
121
|
},
|
|
125
|
-
|
|
126
122
|
HelpContext.FINDINGS: {
|
|
127
123
|
"title": "Findings Help",
|
|
128
124
|
"description": "View and manage discovered vulnerabilities.",
|
|
@@ -131,23 +127,22 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
131
127
|
"c": "Change severity",
|
|
132
128
|
"n": "Add notes",
|
|
133
129
|
"e": "Export findings",
|
|
134
|
-
"q": "Go back"
|
|
130
|
+
"q": "Go back",
|
|
135
131
|
},
|
|
136
132
|
"severity_levels": {
|
|
137
133
|
"Critical": "Immediate exploitation risk (CVSS 9.0-10.0)",
|
|
138
134
|
"High": "Significant vulnerability (CVSS 7.0-8.9)",
|
|
139
135
|
"Medium": "Moderate risk (CVSS 4.0-6.9)",
|
|
140
136
|
"Low": "Minor issue (CVSS 0.1-3.9)",
|
|
141
|
-
"Info": "Informational finding"
|
|
137
|
+
"Info": "Informational finding",
|
|
142
138
|
},
|
|
143
139
|
"tips": [
|
|
144
140
|
"Verify findings manually before reporting",
|
|
145
141
|
"Add notes with reproduction steps",
|
|
146
142
|
"Link findings to evidence screenshots",
|
|
147
|
-
"Export to include in final report"
|
|
148
|
-
]
|
|
143
|
+
"Export to include in final report",
|
|
144
|
+
],
|
|
149
145
|
},
|
|
150
|
-
|
|
151
146
|
HelpContext.HOSTS: {
|
|
152
147
|
"title": "Hosts Help",
|
|
153
148
|
"description": "View discovered hosts and their services.",
|
|
@@ -155,39 +150,37 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
155
150
|
"1-9": "Select a host",
|
|
156
151
|
"s": "Show services for host",
|
|
157
152
|
"n": "Add notes",
|
|
158
|
-
"q": "Go back"
|
|
153
|
+
"q": "Go back",
|
|
159
154
|
},
|
|
160
155
|
"tips": [
|
|
161
156
|
"Hosts are discovered by nmap and other recon tools",
|
|
162
157
|
"Each host shows open ports and services",
|
|
163
158
|
"Click on a host to see detailed information",
|
|
164
|
-
"Services link to potential vulnerabilities"
|
|
165
|
-
]
|
|
159
|
+
"Services link to potential vulnerabilities",
|
|
160
|
+
],
|
|
166
161
|
},
|
|
167
|
-
|
|
168
162
|
HelpContext.METASPLOIT: {
|
|
169
163
|
"title": "Metasploit Integration Help",
|
|
170
164
|
"description": "Use Metasploit Framework for exploitation.",
|
|
171
165
|
"shortcuts": {
|
|
172
166
|
"1-9": "Select an option",
|
|
173
167
|
"c": "Open msfconsole",
|
|
174
|
-
"q": "Go back"
|
|
168
|
+
"q": "Go back",
|
|
175
169
|
},
|
|
176
170
|
"tips": [
|
|
177
171
|
"Database is shared between SoulEyez and MSF",
|
|
178
172
|
"Hosts and services sync automatically",
|
|
179
173
|
"Use 'search' in msfconsole to find exploits",
|
|
180
|
-
"Run 'db_nmap' to import nmap results"
|
|
174
|
+
"Run 'db_nmap' to import nmap results",
|
|
181
175
|
],
|
|
182
176
|
"common_commands": {
|
|
183
177
|
"search": "Find modules (search type:exploit name:smb)",
|
|
184
178
|
"use": "Select a module (use exploit/windows/smb/ms17_010_eternalblue)",
|
|
185
179
|
"set": "Set options (set RHOSTS 192.168.1.1)",
|
|
186
180
|
"run": "Execute the module",
|
|
187
|
-
"sessions": "List active sessions"
|
|
188
|
-
}
|
|
181
|
+
"sessions": "List active sessions",
|
|
182
|
+
},
|
|
189
183
|
},
|
|
190
|
-
|
|
191
184
|
HelpContext.CHAIN_RULES: {
|
|
192
185
|
"title": "Tool Chaining Help",
|
|
193
186
|
"description": "Automatic follow-up scans based on discoveries.",
|
|
@@ -195,21 +188,20 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
195
188
|
"+": "Create new rule",
|
|
196
189
|
"-": "Delete a rule",
|
|
197
190
|
"t": "Toggle rule on/off",
|
|
198
|
-
"q": "Go back"
|
|
191
|
+
"q": "Go back",
|
|
199
192
|
},
|
|
200
193
|
"tips": [
|
|
201
194
|
"Rules trigger when specific conditions are met",
|
|
202
195
|
"Example: HTTP found -> auto-queue nikto scan",
|
|
203
196
|
"Priorities control which rules run first",
|
|
204
|
-
"Disable rules to prevent unwanted scans"
|
|
197
|
+
"Disable rules to prevent unwanted scans",
|
|
205
198
|
],
|
|
206
199
|
"examples": [
|
|
207
200
|
"nmap finds HTTP (80/443) -> nikto, gobuster",
|
|
208
201
|
"nmap finds SMB (445) -> enum4linux",
|
|
209
|
-
"nmap finds MySQL (3306) -> hydra with mysql module"
|
|
210
|
-
]
|
|
202
|
+
"nmap finds MySQL (3306) -> hydra with mysql module",
|
|
203
|
+
],
|
|
211
204
|
},
|
|
212
|
-
|
|
213
205
|
HelpContext.EVIDENCE: {
|
|
214
206
|
"title": "Evidence & Artifacts Help",
|
|
215
207
|
"description": "Collect screenshots and artifacts for reporting.",
|
|
@@ -217,16 +209,15 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
217
209
|
"+": "Add evidence",
|
|
218
210
|
"s": "Take screenshot",
|
|
219
211
|
"e": "Export evidence",
|
|
220
|
-
"q": "Go back"
|
|
212
|
+
"q": "Go back",
|
|
221
213
|
},
|
|
222
214
|
"tips": [
|
|
223
215
|
"Screenshots are organized by pentesting phase",
|
|
224
216
|
"Add descriptions for context in reports",
|
|
225
217
|
"Link evidence to specific findings",
|
|
226
|
-
"Export includes all metadata"
|
|
227
|
-
]
|
|
218
|
+
"Export includes all metadata",
|
|
219
|
+
],
|
|
228
220
|
},
|
|
229
|
-
|
|
230
221
|
HelpContext.EXPORT: {
|
|
231
222
|
"title": "Export Help",
|
|
232
223
|
"description": "Export data for reporting and integration.",
|
|
@@ -234,15 +225,14 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
234
225
|
"CSV": "Excel-compatible, good for data analysis",
|
|
235
226
|
"JSON": "API integration, programmatic access",
|
|
236
227
|
"Markdown": "Documentation, reports",
|
|
237
|
-
"HTML": "Standalone report viewing"
|
|
228
|
+
"HTML": "Standalone report viewing",
|
|
238
229
|
},
|
|
239
230
|
"tips": [
|
|
240
231
|
"CSV is best for importing into other tools",
|
|
241
232
|
"JSON preserves all data fields",
|
|
242
|
-
"Markdown is great for including in reports"
|
|
243
|
-
]
|
|
233
|
+
"Markdown is great for including in reports",
|
|
234
|
+
],
|
|
244
235
|
},
|
|
245
|
-
|
|
246
236
|
HelpContext.GENERAL: {
|
|
247
237
|
"title": "SoulEyez Help",
|
|
248
238
|
"description": "AI-Powered Penetration Testing Platform",
|
|
@@ -252,18 +242,18 @@ HELP_CONTENT: Dict[str, Dict] = {
|
|
|
252
242
|
"souleyez setup": "Install pentesting tools",
|
|
253
243
|
"souleyez doctor": "Diagnose issues",
|
|
254
244
|
"souleyez tutorial": "Guided walkthrough",
|
|
255
|
-
"souleyez run <tool>": "Run a specific tool"
|
|
245
|
+
"souleyez run <tool>": "Run a specific tool",
|
|
256
246
|
},
|
|
257
247
|
"tips": [
|
|
258
248
|
"Start with 'souleyez tutorial' if you're new",
|
|
259
249
|
"Use 'souleyez doctor' to fix common issues",
|
|
260
|
-
"Press '?' in any menu for context help"
|
|
250
|
+
"Press '?' in any menu for context help",
|
|
261
251
|
],
|
|
262
252
|
"resources": [
|
|
263
253
|
"Docs: https://github.com/cyber-soul-security/SoulEyez",
|
|
264
|
-
"Issues: https://github.com/cyber-soul-security/SoulEyez/issues"
|
|
265
|
-
]
|
|
266
|
-
}
|
|
254
|
+
"Issues: https://github.com/cyber-soul-security/SoulEyez/issues",
|
|
255
|
+
],
|
|
256
|
+
},
|
|
267
257
|
}
|
|
268
258
|
|
|
269
259
|
|
|
@@ -277,11 +267,12 @@ def get_template_tips(engagement_type: Optional[str] = None) -> List[str]:
|
|
|
277
267
|
Returns:
|
|
278
268
|
List of preset-specific tips
|
|
279
269
|
"""
|
|
280
|
-
if not engagement_type or engagement_type ==
|
|
270
|
+
if not engagement_type or engagement_type == "custom":
|
|
281
271
|
return []
|
|
282
272
|
|
|
283
273
|
try:
|
|
284
274
|
from souleyez.core.templates import get_template
|
|
275
|
+
|
|
285
276
|
template = get_template(engagement_type)
|
|
286
277
|
if template and template.tips:
|
|
287
278
|
return template.tips
|
|
@@ -290,8 +281,11 @@ def get_template_tips(engagement_type: Optional[str] = None) -> List[str]:
|
|
|
290
281
|
return []
|
|
291
282
|
|
|
292
283
|
|
|
293
|
-
def show_help(
|
|
294
|
-
|
|
284
|
+
def show_help(
|
|
285
|
+
context: str = HelpContext.GENERAL,
|
|
286
|
+
clear_screen: bool = True,
|
|
287
|
+
engagement_type: Optional[str] = None,
|
|
288
|
+
) -> None:
|
|
295
289
|
"""
|
|
296
290
|
Display context-sensitive help.
|
|
297
291
|
|
|
@@ -302,6 +296,7 @@ def show_help(context: str = HelpContext.GENERAL, clear_screen: bool = True,
|
|
|
302
296
|
"""
|
|
303
297
|
import shutil
|
|
304
298
|
from souleyez.ui.design_system import DesignSystem
|
|
299
|
+
|
|
305
300
|
help_data = HELP_CONTENT.get(context, HELP_CONTENT[HelpContext.GENERAL])
|
|
306
301
|
width = shutil.get_terminal_size().columns
|
|
307
302
|
|
|
@@ -311,29 +306,35 @@ def show_help(context: str = HelpContext.GENERAL, clear_screen: bool = True,
|
|
|
311
306
|
# Header box (like docs menu)
|
|
312
307
|
click.echo()
|
|
313
308
|
click.echo("┌" + "─" * (width - 2) + "┐")
|
|
314
|
-
title = help_data[
|
|
309
|
+
title = help_data["title"].upper()
|
|
315
310
|
padding = (width - len(title) - 2) // 2
|
|
316
|
-
click.echo(
|
|
311
|
+
click.echo(
|
|
312
|
+
"│"
|
|
313
|
+
+ " " * padding
|
|
314
|
+
+ click.style(title, bold=True, fg="cyan")
|
|
315
|
+
+ " " * (width - len(title) - padding - 2)
|
|
316
|
+
+ "│"
|
|
317
|
+
)
|
|
317
318
|
click.echo("└" + "─" * (width - 2) + "┘")
|
|
318
319
|
click.echo()
|
|
319
320
|
|
|
320
321
|
# Description
|
|
321
|
-
click.echo(click.style(f" {help_data['description']}", fg=
|
|
322
|
+
click.echo(click.style(f" {help_data['description']}", fg="white"))
|
|
322
323
|
click.echo()
|
|
323
324
|
click.echo(" " + "─" * (width - 4))
|
|
324
325
|
click.echo()
|
|
325
326
|
|
|
326
327
|
# Keyboard shortcuts
|
|
327
|
-
if
|
|
328
|
-
click.echo(click.style(" Keyboard Shortcuts:", fg=
|
|
329
|
-
for key, desc in help_data[
|
|
328
|
+
if "shortcuts" in help_data:
|
|
329
|
+
click.echo(click.style(" Keyboard Shortcuts:", fg="yellow", bold=True))
|
|
330
|
+
for key, desc in help_data["shortcuts"].items():
|
|
330
331
|
click.echo(f" [{click.style(key, fg='cyan')}] {desc}")
|
|
331
332
|
click.echo()
|
|
332
333
|
|
|
333
334
|
# Tips
|
|
334
|
-
if
|
|
335
|
-
click.echo(click.style(" Tips:", fg=
|
|
336
|
-
for tip in help_data[
|
|
335
|
+
if "tips" in help_data:
|
|
336
|
+
click.echo(click.style(" Tips:", fg="yellow", bold=True))
|
|
337
|
+
for tip in help_data["tips"]:
|
|
337
338
|
click.echo(f" - {tip}")
|
|
338
339
|
click.echo()
|
|
339
340
|
|
|
@@ -342,78 +343,85 @@ def show_help(context: str = HelpContext.GENERAL, clear_screen: bool = True,
|
|
|
342
343
|
if template_tips:
|
|
343
344
|
try:
|
|
344
345
|
from souleyez.core.templates import get_template
|
|
346
|
+
|
|
345
347
|
template = get_template(engagement_type)
|
|
346
348
|
template_name = template.name if template else engagement_type
|
|
347
349
|
except Exception:
|
|
348
350
|
template_name = engagement_type
|
|
349
351
|
|
|
350
|
-
click.echo(click.style(f" {template_name} Tips:", fg=
|
|
352
|
+
click.echo(click.style(f" {template_name} Tips:", fg="magenta", bold=True))
|
|
351
353
|
for tip in template_tips[:5]: # Show up to 5 preset tips
|
|
352
354
|
click.echo(f" - {tip}")
|
|
353
355
|
click.echo()
|
|
354
356
|
|
|
355
357
|
# Tool categories (for tools menu)
|
|
356
|
-
if
|
|
357
|
-
click.echo(click.style(" Tool Categories:", fg=
|
|
358
|
-
for category, tools in help_data[
|
|
358
|
+
if "tool_categories" in help_data:
|
|
359
|
+
click.echo(click.style(" Tool Categories:", fg="yellow", bold=True))
|
|
360
|
+
for category, tools in help_data["tool_categories"].items():
|
|
359
361
|
click.echo(f" {click.style(category, fg='green')}: {tools}")
|
|
360
362
|
click.echo()
|
|
361
363
|
|
|
362
364
|
# Severity levels (for findings)
|
|
363
|
-
if
|
|
364
|
-
click.echo(click.style(" Severity Levels:", fg=
|
|
365
|
-
colors = {
|
|
366
|
-
|
|
367
|
-
|
|
365
|
+
if "severity_levels" in help_data:
|
|
366
|
+
click.echo(click.style(" Severity Levels:", fg="yellow", bold=True))
|
|
367
|
+
colors = {
|
|
368
|
+
"Critical": "red",
|
|
369
|
+
"High": "red",
|
|
370
|
+
"Medium": "yellow",
|
|
371
|
+
"Low": "blue",
|
|
372
|
+
"Info": "white",
|
|
373
|
+
}
|
|
374
|
+
for level, desc in help_data["severity_levels"].items():
|
|
375
|
+
color = colors.get(level, "white")
|
|
368
376
|
click.echo(f" {click.style(level, fg=color, bold=True)}: {desc}")
|
|
369
377
|
click.echo()
|
|
370
378
|
|
|
371
379
|
# Common commands (for MSF)
|
|
372
|
-
if
|
|
373
|
-
click.echo(click.style(" Common Commands:", fg=
|
|
374
|
-
for cmd, desc in help_data[
|
|
380
|
+
if "common_commands" in help_data:
|
|
381
|
+
click.echo(click.style(" Common Commands:", fg="yellow", bold=True))
|
|
382
|
+
for cmd, desc in help_data["common_commands"].items():
|
|
375
383
|
click.echo(f" {click.style(cmd, fg='green')}: {desc}")
|
|
376
384
|
click.echo()
|
|
377
385
|
|
|
378
386
|
# Examples (for chain rules)
|
|
379
|
-
if
|
|
380
|
-
click.echo(click.style(" Examples:", fg=
|
|
381
|
-
for example in help_data[
|
|
387
|
+
if "examples" in help_data:
|
|
388
|
+
click.echo(click.style(" Examples:", fg="yellow", bold=True))
|
|
389
|
+
for example in help_data["examples"]:
|
|
382
390
|
click.echo(f" {example}")
|
|
383
391
|
click.echo()
|
|
384
392
|
|
|
385
393
|
# Export formats
|
|
386
|
-
if
|
|
387
|
-
click.echo(click.style(" Export Formats:", fg=
|
|
388
|
-
for fmt, desc in help_data[
|
|
394
|
+
if "formats" in help_data:
|
|
395
|
+
click.echo(click.style(" Export Formats:", fg="yellow", bold=True))
|
|
396
|
+
for fmt, desc in help_data["formats"].items():
|
|
389
397
|
click.echo(f" {click.style(fmt, fg='green')}: {desc}")
|
|
390
398
|
click.echo()
|
|
391
399
|
|
|
392
400
|
# Quick commands (for general)
|
|
393
|
-
if
|
|
394
|
-
click.echo(click.style(" Quick Commands:", fg=
|
|
395
|
-
for cmd, desc in help_data[
|
|
401
|
+
if "quick_commands" in help_data:
|
|
402
|
+
click.echo(click.style(" Quick Commands:", fg="yellow", bold=True))
|
|
403
|
+
for cmd, desc in help_data["quick_commands"].items():
|
|
396
404
|
click.echo(f" {click.style(cmd, fg='green')}: {desc}")
|
|
397
405
|
click.echo()
|
|
398
406
|
|
|
399
407
|
# Resources (for general)
|
|
400
|
-
if
|
|
401
|
-
click.echo(click.style(" Resources:", fg=
|
|
402
|
-
for resource in help_data[
|
|
408
|
+
if "resources" in help_data:
|
|
409
|
+
click.echo(click.style(" Resources:", fg="yellow", bold=True))
|
|
410
|
+
for resource in help_data["resources"]:
|
|
403
411
|
click.echo(f" {resource}")
|
|
404
412
|
click.echo()
|
|
405
413
|
|
|
406
414
|
# Security notes
|
|
407
|
-
if
|
|
408
|
-
click.echo(click.style(" Security Notes:", fg=
|
|
409
|
-
for note in help_data[
|
|
415
|
+
if "security" in help_data:
|
|
416
|
+
click.echo(click.style(" Security Notes:", fg="red", bold=True))
|
|
417
|
+
for note in help_data["security"]:
|
|
410
418
|
click.echo(f" ! {note}")
|
|
411
419
|
click.echo()
|
|
412
420
|
|
|
413
421
|
# Footer (like docs menu)
|
|
414
422
|
click.echo(" " + "─" * (width - 4))
|
|
415
423
|
click.echo()
|
|
416
|
-
click.echo(click.style(" [q] ← Back", fg=
|
|
424
|
+
click.echo(click.style(" [q] ← Back", fg="bright_black"))
|
|
417
425
|
click.echo()
|
|
418
426
|
click.echo(" " + "─" * (width - 4))
|
|
419
427
|
|
|
@@ -430,14 +438,14 @@ def show_tooltip(key: str, context: str = HelpContext.GENERAL) -> Optional[str]:
|
|
|
430
438
|
Tooltip string or None if not found
|
|
431
439
|
"""
|
|
432
440
|
help_data = HELP_CONTENT.get(context, {})
|
|
433
|
-
shortcuts = help_data.get(
|
|
441
|
+
shortcuts = help_data.get("shortcuts", {})
|
|
434
442
|
return shortcuts.get(key)
|
|
435
443
|
|
|
436
444
|
|
|
437
445
|
def show_quick_help() -> None:
|
|
438
446
|
"""Show a quick help overlay (minimal version)."""
|
|
439
447
|
click.echo()
|
|
440
|
-
click.echo(click.style(" Quick Help:", fg=
|
|
448
|
+
click.echo(click.style(" Quick Help:", fg="cyan", bold=True))
|
|
441
449
|
click.echo(" [?] Show full help")
|
|
442
450
|
click.echo(" [q] Go back / Quit")
|
|
443
451
|
click.echo(" [1-9] Select option")
|
|
@@ -460,6 +468,6 @@ def get_feature_tip(feature: str) -> str:
|
|
|
460
468
|
"credentials": "Tip: Credentials are encrypted - never store production creds in test DBs",
|
|
461
469
|
"dashboard": "Tip: Press 'j' for jobs, 'h' for hosts, 'f' for findings",
|
|
462
470
|
"metasploit": "Tip: Use 'db_nmap' in msfconsole to import scan results",
|
|
463
|
-
"export": "Tip: CSV format works great with Excel and other analysis tools"
|
|
471
|
+
"export": "Tip: CSV format works great with Excel and other analysis tools",
|
|
464
472
|
}
|
|
465
473
|
return feature_tips.get(feature, "Tip: Press '?' for help in any menu")
|