souleyez 2.43.34__py3-none-any.whl → 3.0.7__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.
Files changed (326) hide show
  1. souleyez/__init__.py +1 -1
  2. souleyez/ai/__init__.py +7 -7
  3. souleyez/ai/action_mapper.py +3 -2
  4. souleyez/ai/chain_advisor.py +2 -1
  5. souleyez/ai/claude_provider.py +2 -2
  6. souleyez/ai/context_builder.py +4 -2
  7. souleyez/ai/executor.py +9 -6
  8. souleyez/ai/feedback_handler.py +4 -2
  9. souleyez/ai/llm_provider.py +2 -2
  10. souleyez/ai/ollama_provider.py +2 -2
  11. souleyez/ai/ollama_service.py +10 -26
  12. souleyez/ai/path_scorer.py +2 -1
  13. souleyez/ai/recommender.py +6 -4
  14. souleyez/ai/report_context.py +2 -2
  15. souleyez/ai/report_service.py +5 -5
  16. souleyez/ai/result_parser.py +3 -2
  17. souleyez/ai/safety.py +5 -2
  18. souleyez/auth/__init__.py +6 -6
  19. souleyez/auth/audit.py +2 -2
  20. souleyez/auth/engagement_access.py +5 -7
  21. souleyez/auth/permissions.py +1 -1
  22. souleyez/auth/session_manager.py +5 -5
  23. souleyez/auth/user_manager.py +4 -5
  24. souleyez/commands/audit.py +6 -5
  25. souleyez/commands/auth.py +6 -5
  26. souleyez/commands/deliverables.py +2 -3
  27. souleyez/commands/engagement.py +3 -3
  28. souleyez/commands/license.py +3 -2
  29. souleyez/commands/screenshots.py +5 -4
  30. souleyez/commands/user.py +10 -8
  31. souleyez/config.py +4 -2
  32. souleyez/core/credential_tester.py +4 -2
  33. souleyez/core/cve_mappings.py +2 -1
  34. souleyez/core/cve_matcher.py +2 -1
  35. souleyez/core/msf_auto_mapper.py +2 -0
  36. souleyez/core/msf_chain_engine.py +3 -1
  37. souleyez/core/msf_database.py +7 -13
  38. souleyez/core/msf_integration.py +2 -2
  39. souleyez/core/msf_rpc_client.py +3 -2
  40. souleyez/core/msf_rpc_manager.py +4 -4
  41. souleyez/core/msf_sync_manager.py +7 -7
  42. souleyez/core/network_utils.py +1 -1
  43. souleyez/core/parser_handler.py +2 -1
  44. souleyez/core/pending_chains.py +4 -3
  45. souleyez/core/templates.py +5 -2
  46. souleyez/core/tool_chaining.py +297 -230
  47. souleyez/core/version_utils.py +1 -0
  48. souleyez/core/vuln_correlation.py +3 -2
  49. souleyez/core/web_utils.py +2 -1
  50. souleyez/detection/__init__.py +1 -1
  51. souleyez/detection/attack_signatures.py +1 -1
  52. souleyez/detection/mitre_mappings.py +1 -2
  53. souleyez/detection/validator.py +5 -4
  54. souleyez/devtools.py +4 -2
  55. souleyez/docs/README.md +2 -2
  56. souleyez/engine/background.py +168 -7
  57. souleyez/engine/base.py +2 -1
  58. souleyez/engine/loader.py +4 -2
  59. souleyez/engine/log_sanitizer.py +1 -0
  60. souleyez/engine/manager.py +3 -1
  61. souleyez/engine/result_handler.py +50 -67
  62. souleyez/engine/worker_manager.py +6 -4
  63. souleyez/export/evidence_bundle.py +1 -0
  64. souleyez/handlers/base.py +1 -0
  65. souleyez/handlers/bash_handler.py +1 -0
  66. souleyez/handlers/bloodhound_handler.py +1 -0
  67. souleyez/handlers/certipy_handler.py +1 -0
  68. souleyez/handlers/crackmapexec_handler.py +2 -20
  69. souleyez/handlers/dnsrecon_handler.py +2 -1
  70. souleyez/handlers/enum4linux_handler.py +65 -37
  71. souleyez/handlers/evil_winrm_handler.py +1 -0
  72. souleyez/handlers/ffuf_handler.py +3 -1
  73. souleyez/handlers/gobuster_handler.py +7 -6
  74. souleyez/handlers/gpp_extract_handler.py +1 -0
  75. souleyez/handlers/hashcat_handler.py +1 -0
  76. souleyez/handlers/hydra_handler.py +5 -1
  77. souleyez/handlers/impacket_getuserspns_handler.py +1 -0
  78. souleyez/handlers/impacket_psexec_handler.py +1 -0
  79. souleyez/handlers/impacket_secretsdump_handler.py +1 -0
  80. souleyez/handlers/john_handler.py +1 -0
  81. souleyez/handlers/katana_handler.py +39 -2
  82. souleyez/handlers/kerbrute_handler.py +1 -0
  83. souleyez/handlers/ldapsearch_handler.py +90 -17
  84. souleyez/handlers/lfi_extract_handler.py +1 -0
  85. souleyez/handlers/msf_auxiliary_handler.py +2 -0
  86. souleyez/handlers/msf_exploit_handler.py +1 -0
  87. souleyez/handlers/nikto_handler.py +2 -1
  88. souleyez/handlers/nmap_handler.py +2 -1
  89. souleyez/handlers/nuclei_handler.py +2 -1
  90. souleyez/handlers/nxc_handler.py +50 -19
  91. souleyez/handlers/rdp_sec_check_handler.py +1 -0
  92. souleyez/handlers/registry.py +1 -0
  93. souleyez/handlers/responder_handler.py +1 -0
  94. souleyez/handlers/service_explorer_handler.py +2 -1
  95. souleyez/handlers/smbclient_handler.py +1 -0
  96. souleyez/handlers/smbmap_handler.py +3 -2
  97. souleyez/handlers/sqlmap_handler.py +6 -4
  98. souleyez/handlers/theharvester_handler.py +2 -1
  99. souleyez/handlers/web_login_test_handler.py +1 -0
  100. souleyez/handlers/whois_handler.py +3 -2
  101. souleyez/handlers/wpscan_handler.py +2 -1
  102. souleyez/history.py +4 -3
  103. souleyez/importers/msf_importer.py +5 -3
  104. souleyez/importers/smart_importer.py +6 -4
  105. souleyez/integrations/siem/__init__.py +6 -6
  106. souleyez/integrations/siem/base.py +1 -1
  107. souleyez/integrations/siem/elastic.py +3 -3
  108. souleyez/integrations/siem/factory.py +1 -2
  109. souleyez/integrations/siem/googlesecops.py +4 -4
  110. souleyez/integrations/siem/rule_mappings/wazuh_rules.py +1 -1
  111. souleyez/integrations/siem/sentinel.py +3 -3
  112. souleyez/integrations/siem/splunk.py +3 -3
  113. souleyez/integrations/siem/wazuh.py +4 -4
  114. souleyez/integrations/wazuh/__init__.py +1 -1
  115. souleyez/integrations/wazuh/client.py +3 -2
  116. souleyez/integrations/wazuh/config.py +3 -2
  117. souleyez/integrations/wazuh/host_mapper.py +3 -1
  118. souleyez/integrations/wazuh/sync.py +4 -1
  119. souleyez/intelligence/__init__.py +1 -1
  120. souleyez/intelligence/correlation_analyzer.py +6 -5
  121. souleyez/intelligence/exploit_knowledge.py +4 -4
  122. souleyez/intelligence/exploit_suggestions.py +4 -3
  123. souleyez/intelligence/gap_analyzer.py +5 -3
  124. souleyez/intelligence/gap_detector.py +2 -0
  125. souleyez/intelligence/sensitive_tables.py +1 -1
  126. souleyez/intelligence/service_parser.py +1 -0
  127. souleyez/intelligence/surface_analyzer.py +9 -9
  128. souleyez/intelligence/target_parser.py +1 -0
  129. souleyez/licensing/__init__.py +3 -3
  130. souleyez/main.py +25 -18
  131. souleyez/migrations/fix_job_counter.py +2 -1
  132. souleyez/parsers/bloodhound_parser.py +1 -0
  133. souleyez/parsers/crackmapexec_parser.py +2 -1
  134. souleyez/parsers/dalfox_parser.py +3 -2
  135. souleyez/parsers/dnsrecon_parser.py +2 -1
  136. souleyez/parsers/enum4linux_parser.py +2 -1
  137. souleyez/parsers/ffuf_parser.py +2 -1
  138. souleyez/parsers/gobuster_parser.py +2 -1
  139. souleyez/parsers/hashcat_parser.py +3 -2
  140. souleyez/parsers/http_fingerprint_parser.py +2 -1
  141. souleyez/parsers/hydra_parser.py +2 -1
  142. souleyez/parsers/impacket_parser.py +2 -1
  143. souleyez/parsers/john_parser.py +4 -3
  144. souleyez/parsers/katana_parser.py +134 -2
  145. souleyez/parsers/msf_parser.py +2 -1
  146. souleyez/parsers/nikto_parser.py +2 -1
  147. souleyez/parsers/nmap_parser.py +14 -3
  148. souleyez/parsers/nuclei_parser.py +3 -2
  149. souleyez/parsers/responder_parser.py +1 -0
  150. souleyez/parsers/searchsploit_parser.py +3 -2
  151. souleyez/parsers/service_explorer_parser.py +1 -0
  152. souleyez/parsers/smbmap_parser.py +2 -1
  153. souleyez/parsers/sqlmap_parser.py +36 -2
  154. souleyez/parsers/theharvester_parser.py +2 -1
  155. souleyez/parsers/whois_parser.py +2 -1
  156. souleyez/parsers/wpscan_parser.py +3 -2
  157. souleyez/plugins/afp.py +3 -1
  158. souleyez/plugins/afp_brute.py +3 -1
  159. souleyez/plugins/ard.py +3 -1
  160. souleyez/plugins/bloodhound.py +3 -2
  161. souleyez/plugins/certipy.py +1 -0
  162. souleyez/plugins/crackmapexec.py +11 -7
  163. souleyez/plugins/dalfox.py +5 -2
  164. souleyez/plugins/dns_hijack.py +3 -1
  165. souleyez/plugins/dnsrecon.py +3 -1
  166. souleyez/plugins/enum4linux.py +3 -1
  167. souleyez/plugins/evil_winrm.py +1 -0
  168. souleyez/plugins/ffuf.py +3 -1
  169. souleyez/plugins/firmware_extract.py +3 -2
  170. souleyez/plugins/gobuster.py +6 -3
  171. souleyez/plugins/gpp_extract.py +1 -0
  172. souleyez/plugins/hashcat.py +2 -1
  173. souleyez/plugins/http_fingerprint.py +149 -40
  174. souleyez/plugins/hydra.py +5 -3
  175. souleyez/plugins/impacket_common.py +40 -0
  176. souleyez/plugins/impacket_getnpusers.py +19 -2
  177. souleyez/plugins/impacket_getuserspns.py +158 -0
  178. souleyez/plugins/impacket_psexec.py +19 -2
  179. souleyez/plugins/impacket_secretsdump.py +19 -2
  180. souleyez/plugins/impacket_smbclient.py +19 -2
  181. souleyez/plugins/john.py +2 -1
  182. souleyez/plugins/katana.py +48 -6
  183. souleyez/plugins/kerbrute.py +1 -0
  184. souleyez/plugins/lfi_extract.py +1 -0
  185. souleyez/plugins/macos_ssh.py +3 -1
  186. souleyez/plugins/mdns.py +3 -1
  187. souleyez/plugins/msf_auxiliary.py +3 -2
  188. souleyez/plugins/msf_exploit.py +6 -5
  189. souleyez/plugins/nikto.py +5 -2
  190. souleyez/plugins/nmap.py +6 -4
  191. souleyez/plugins/nuclei.py +3 -1
  192. souleyez/plugins/nxc.py +1 -0
  193. souleyez/plugins/plugin_base.py +3 -2
  194. souleyez/plugins/plugin_template.py +3 -2
  195. souleyez/plugins/rdp_sec_check.py +1 -0
  196. souleyez/plugins/responder.py +2 -1
  197. souleyez/plugins/router_http_brute.py +3 -1
  198. souleyez/plugins/router_ssh_brute.py +3 -1
  199. souleyez/plugins/router_telnet_brute.py +3 -1
  200. souleyez/plugins/routersploit.py +5 -3
  201. souleyez/plugins/routersploit_exploit.py +5 -3
  202. souleyez/plugins/searchsploit.py +1 -0
  203. souleyez/plugins/service_explorer.py +2 -1
  204. souleyez/plugins/smbmap.py +3 -1
  205. souleyez/plugins/smbpasswd.py +1 -0
  206. souleyez/plugins/sqlmap.py +3 -1
  207. souleyez/plugins/theharvester.py +3 -1
  208. souleyez/plugins/tr069.py +3 -1
  209. souleyez/plugins/upnp.py +3 -1
  210. souleyez/plugins/upnp_abuse.py +4 -2
  211. souleyez/plugins/vnc_access.py +4 -2
  212. souleyez/plugins/vnc_brute.py +3 -1
  213. souleyez/plugins/web_login_test.py +1 -0
  214. souleyez/plugins/whois.py +3 -1
  215. souleyez/plugins/wpscan.py +49 -1
  216. souleyez/reporting/attack_chain.py +2 -1
  217. souleyez/reporting/charts.py +1 -0
  218. souleyez/reporting/compliance_mappings.py +1 -0
  219. souleyez/reporting/detection_report.py +10 -10
  220. souleyez/reporting/formatters.py +7 -12
  221. souleyez/reporting/generator.py +34 -46
  222. souleyez/reporting/metrics.py +2 -1
  223. souleyez/scanner.py +6 -3
  224. souleyez/security/__init__.py +7 -5
  225. souleyez/security/scope_validator.py +5 -4
  226. souleyez/security/validation.py +14 -0
  227. souleyez/security.py +5 -2
  228. souleyez/storage/credentials.py +14 -19
  229. souleyez/storage/crypto.py +7 -4
  230. souleyez/storage/database.py +6 -6
  231. souleyez/storage/db.py +8 -8
  232. souleyez/storage/deliverable_evidence.py +2 -1
  233. souleyez/storage/deliverable_exporter.py +3 -2
  234. souleyez/storage/deliverable_templates.py +2 -1
  235. souleyez/storage/deliverables.py +2 -1
  236. souleyez/storage/engagements.py +6 -4
  237. souleyez/storage/evidence.py +5 -4
  238. souleyez/storage/execution_log.py +4 -2
  239. souleyez/storage/exploit_attempts.py +3 -2
  240. souleyez/storage/exploits.py +3 -1
  241. souleyez/storage/findings.py +3 -1
  242. souleyez/storage/hosts.py +5 -2
  243. souleyez/storage/migrate_to_engagements.py +14 -24
  244. souleyez/storage/migrations/_001_add_credential_enhancements.py +12 -21
  245. souleyez/storage/migrations/_003_add_execution_log.py +8 -13
  246. souleyez/storage/migrations/_005_screenshots.py +2 -4
  247. souleyez/storage/migrations/_006_deliverables.py +2 -4
  248. souleyez/storage/migrations/_007_deliverable_templates.py +4 -8
  249. souleyez/storage/migrations/_008_add_nuclei_table.py +2 -4
  250. souleyez/storage/migrations/_010_evidence_linking.py +6 -12
  251. souleyez/storage/migrations/_012_team_collaboration.py +12 -24
  252. souleyez/storage/migrations/_013_add_host_tags.py +2 -4
  253. souleyez/storage/migrations/_014_exploit_attempts.py +10 -20
  254. souleyez/storage/migrations/_015_add_mac_os_fields.py +4 -8
  255. souleyez/storage/migrations/_016_add_domain_field.py +2 -4
  256. souleyez/storage/migrations/_017_msf_sessions.py +8 -16
  257. souleyez/storage/migrations/_018_add_osint_target.py +4 -8
  258. souleyez/storage/migrations/_019_add_engagement_type.py +4 -8
  259. souleyez/storage/migrations/_020_add_rbac.py +9 -17
  260. souleyez/storage/migrations/_021_wazuh_integration.py +4 -8
  261. souleyez/storage/migrations/_023_fix_detection_results_fk.py +2 -4
  262. souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +4 -8
  263. souleyez/storage/migrations/_026_add_engagement_scope.py +4 -8
  264. souleyez/storage/migrations/_027_multi_siem_persistence.py +8 -16
  265. souleyez/storage/migrations/__init__.py +1 -4
  266. souleyez/storage/migrations/migration_manager.py +6 -9
  267. souleyez/storage/msf_sessions.py +1 -1
  268. souleyez/storage/osint.py +3 -1
  269. souleyez/storage/recommendation_engine.py +3 -2
  270. souleyez/storage/screenshots.py +2 -1
  271. souleyez/storage/smb_shares.py +3 -1
  272. souleyez/storage/sqlmap_data.py +6 -4
  273. souleyez/storage/team_collaboration.py +3 -2
  274. souleyez/storage/timeline_tracker.py +2 -1
  275. souleyez/storage/wazuh_vulns.py +3 -1
  276. souleyez/storage/web_paths.py +3 -1
  277. souleyez/testing/credential_tester.py +2 -0
  278. souleyez/ui/__init__.py +2 -1
  279. souleyez/ui/ai_quotes.py +1 -1
  280. souleyez/ui/attack_surface.py +50 -28
  281. souleyez/ui/chain_rules_view.py +6 -3
  282. souleyez/ui/correlation_view.py +3 -2
  283. souleyez/ui/dashboard.py +85 -139
  284. souleyez/ui/deliverables_view.py +1 -1
  285. souleyez/ui/design_system.py +5 -3
  286. souleyez/ui/errors.py +3 -1
  287. souleyez/ui/evidence_linking_view.py +2 -1
  288. souleyez/ui/evidence_vault.py +11 -6
  289. souleyez/ui/exploit_suggestions_view.py +11 -7
  290. souleyez/ui/export_view.py +3 -1
  291. souleyez/ui/gap_analysis_view.py +6 -3
  292. souleyez/ui/help_system.py +4 -1
  293. souleyez/ui/intelligence_view.py +7 -3
  294. souleyez/ui/interactive.py +1512 -584
  295. souleyez/ui/interactive_selector.py +3 -2
  296. souleyez/ui/log_formatter.py +1 -0
  297. souleyez/ui/menu_components.py +3 -1
  298. souleyez/ui/msf_auxiliary_menu.py +4 -1
  299. souleyez/ui/pending_chains_view.py +15 -12
  300. souleyez/ui/progress_indicators.py +5 -2
  301. souleyez/ui/recommendations_view.py +4 -2
  302. souleyez/ui/rule_builder.py +4 -1
  303. souleyez/ui/setup_wizard.py +10 -8
  304. souleyez/ui/shortcuts.py +1 -1
  305. souleyez/ui/splunk_gap_analysis_view.py +7 -4
  306. souleyez/ui/splunk_vulns_view.py +4 -1
  307. souleyez/ui/team_dashboard.py +7 -5
  308. souleyez/ui/template_selector.py +2 -1
  309. souleyez/ui/terminal.py +3 -2
  310. souleyez/ui/timeline_view.py +2 -1
  311. souleyez/ui/tool_setup.py +92 -31
  312. souleyez/ui/tutorial.py +7 -4
  313. souleyez/ui/tutorial_state.py +3 -2
  314. souleyez/ui/wazuh_vulns_view.py +5 -2
  315. souleyez/ui/wordlist_browser.py +4 -3
  316. souleyez/ui.py +13 -7
  317. souleyez/utils/tool_checker.py +61 -12
  318. souleyez/utils.py +4 -4
  319. souleyez/wordlists.py +1 -0
  320. {souleyez-2.43.34.dist-info → souleyez-3.0.7.dist-info}/METADATA +2 -2
  321. souleyez-3.0.7.dist-info/RECORD +445 -0
  322. souleyez-2.43.34.dist-info/RECORD +0 -443
  323. {souleyez-2.43.34.dist-info → souleyez-3.0.7.dist-info}/WHEEL +0 -0
  324. {souleyez-2.43.34.dist-info → souleyez-3.0.7.dist-info}/entry_points.txt +0 -0
  325. {souleyez-2.43.34.dist-info → souleyez-3.0.7.dist-info}/licenses/LICENSE +0 -0
  326. {souleyez-2.43.34.dist-info → souleyez-3.0.7.dist-info}/top_level.txt +0 -0
souleyez/plugins/nxc.py CHANGED
@@ -2,6 +2,7 @@
2
2
  """
3
3
  souleyez.plugins.nxc - NetExec (successor to CrackMapExec) for SMB/WinRM/etc
4
4
  """
5
+
5
6
  import subprocess
6
7
  import time
7
8
  from typing import List
@@ -7,7 +7,8 @@ Changes in v2.2:
7
7
  - Modified run() to support build_command() pattern
8
8
  - Backward compatibility maintained
9
9
  """
10
- from typing import Optional, List, Dict, Any
10
+
11
+ from typing import Any, Dict, List, Optional
11
12
 
12
13
 
13
14
  class PluginBase:
@@ -113,8 +114,8 @@ class PluginBase:
113
114
  cmd_spec = self.build_command(target, args, label, log_path)
114
115
  if cmd_spec is not None:
115
116
  # build_command() is implemented, execute via subprocess
116
- import subprocess
117
117
  import os
118
+ import subprocess
118
119
 
119
120
  cmd = cmd_spec.get("cmd")
120
121
  if not cmd:
@@ -7,10 +7,11 @@ Guidance:
7
7
  - run(prepared): execute tool, write raw output to prepared['outdir'], then return ScanResult dict
8
8
  - Keep run side-effectful (it actually invokes tools); keep prepare lightweight.
9
9
  """
10
- from pathlib import Path
10
+
11
11
  import subprocess
12
12
  import time
13
- from typing import Dict, Any, List, Optional
13
+ from pathlib import Path
14
+ from typing import Any, Dict, List, Optional
14
15
 
15
16
  from ..engine.base import ScannerPlugin, ScanResult
16
17
 
@@ -2,6 +2,7 @@
2
2
  """
3
3
  souleyez.plugins.rdp_sec_check - RDP security configuration checker
4
4
  """
5
+
5
6
  import subprocess
6
7
  import time
7
8
  from typing import List
@@ -2,8 +2,9 @@
2
2
  """
3
3
  Responder plugin - LLMNR/NBT-NS poisoning for credential capture.
4
4
  """
5
- import subprocess
5
+
6
6
  import os
7
+ import subprocess
7
8
  from pathlib import Path
8
9
 
9
10
  HELP = {
@@ -5,12 +5,14 @@ souleyez.plugins.router_http_brute
5
5
  Router web admin brute force plugin using Hydra.
6
6
  Targets common router login pages with default credentials.
7
7
  """
8
+
8
9
  import subprocess
9
10
  import time
10
11
  from typing import List
11
12
 
13
+ from souleyez.security.validation import ValidationError, validate_target
14
+
12
15
  from .plugin_base import PluginBase
13
- from souleyez.security.validation import validate_target, ValidationError
14
16
 
15
17
  HELP = {
16
18
  "name": "Router HTTP Brute — Web Admin Login Attack",
@@ -5,12 +5,14 @@ souleyez.plugins.router_ssh_brute
5
5
  Router SSH brute force plugin using Hydra.
6
6
  Targets routers with SSH management enabled.
7
7
  """
8
+
8
9
  import subprocess
9
10
  import time
10
11
  from typing import List
11
12
 
13
+ from souleyez.security.validation import ValidationError, validate_target
14
+
12
15
  from .plugin_base import PluginBase
13
- from souleyez.security.validation import validate_target, ValidationError
14
16
 
15
17
  HELP = {
16
18
  "name": "Router SSH Brute — SSH Login Attack",
@@ -5,12 +5,14 @@ souleyez.plugins.router_telnet_brute
5
5
  Router Telnet brute force plugin using Hydra.
6
6
  Targets routers with Telnet management enabled.
7
7
  """
8
+
8
9
  import subprocess
9
10
  import time
10
11
  from typing import List
11
12
 
13
+ from souleyez.security.validation import ValidationError, validate_target
14
+
12
15
  from .plugin_base import PluginBase
13
- from souleyez.security.validation import validate_target, ValidationError
14
16
 
15
17
  HELP = {
16
18
  "name": "Router Telnet Brute — Telnet Login Attack",
@@ -5,13 +5,15 @@ souleyez.plugins.routersploit
5
5
  RouterSploit vulnerability scanner plugin.
6
6
  Scans routers and embedded devices for known vulnerabilities.
7
7
  """
8
- import subprocess
8
+
9
9
  import shutil
10
+ import subprocess
10
11
  import time
11
12
  from typing import List
12
13
 
14
+ from souleyez.security.validation import ValidationError, validate_target
15
+
13
16
  from .plugin_base import PluginBase
14
- from souleyez.security.validation import validate_target, ValidationError
15
17
 
16
18
  HELP = {
17
19
  "name": "RouterSploit — Router Vulnerability Scanner",
@@ -205,8 +207,8 @@ exit
205
207
  """
206
208
 
207
209
  # Write resource script and run rsf
208
- import tempfile
209
210
  import os
211
+ import tempfile
210
212
 
211
213
  fd, rc_file = tempfile.mkstemp(suffix=".rsf", prefix="routersploit_")
212
214
  try:
@@ -5,13 +5,15 @@ souleyez.plugins.routersploit_exploit
5
5
  RouterSploit exploit execution plugin.
6
6
  Runs specific exploits against vulnerable routers.
7
7
  """
8
- import subprocess
8
+
9
9
  import shutil
10
+ import subprocess
10
11
  import time
11
12
  from typing import List
12
13
 
14
+ from souleyez.security.validation import ValidationError, validate_target
15
+
13
16
  from .plugin_base import PluginBase
14
- from souleyez.security.validation import validate_target, ValidationError
15
17
 
16
18
  HELP = {
17
19
  "name": "RouterSploit Exploit — Router Exploitation",
@@ -166,8 +168,8 @@ run
166
168
  exit
167
169
  """
168
170
 
169
- import tempfile
170
171
  import os
172
+ import tempfile
171
173
 
172
174
  fd, rc_file = tempfile.mkstemp(suffix=".rsf", prefix="rsf_exploit_")
173
175
  try:
@@ -2,6 +2,7 @@
2
2
  """
3
3
  souleyez.plugins.searchsploit - Search Exploit-DB for vulnerabilities and exploits
4
4
  """
5
+
5
6
  import subprocess
6
7
  import time
7
8
  from typing import List
@@ -13,6 +13,7 @@ Connects to and explores various services after access is discovered:
13
13
 
14
14
  This tool is designed to auto-chain from discovery tools when access is found.
15
15
  """
16
+
16
17
  import ftplib # nosec B402 - intentional for pentesting FTP services
17
18
  import json
18
19
  import os
@@ -792,9 +793,9 @@ class NFSHandler(ProtocolHandler):
792
793
 
793
794
  def download_file(self, remote_path: str, local_path: str) -> bool:
794
795
  """Download file from NFS share."""
796
+ import shutil
795
797
  import subprocess
796
798
  import tempfile
797
- import shutil
798
799
 
799
800
  if not self.mount_point:
800
801
  self.mount_point = tempfile.mkdtemp(prefix="souleyez_nfs_")
@@ -2,12 +2,14 @@
2
2
  """
3
3
  souleyez.plugins.smbmap - SMB share enumeration and permission mapping
4
4
  """
5
+
5
6
  import subprocess
6
7
  import time
7
8
  from typing import List
8
9
 
10
+ from souleyez.security.validation import ValidationError, validate_target
11
+
9
12
  from .plugin_base import PluginBase
10
- from souleyez.security.validation import validate_target, ValidationError
11
13
 
12
14
  HELP = {
13
15
  "name": "SMBMap — SMB Share Enumerator",
@@ -4,6 +4,7 @@ souleyez.plugins.smbpasswd
4
4
 
5
5
  SMB Password Change plugin - changes passwords for users with STATUS_PASSWORD_MUST_CHANGE.
6
6
  """
7
+
7
8
  import subprocess
8
9
  import time
9
10
  from typing import List
@@ -4,12 +4,14 @@ souleyez.plugins.sqlmap
4
4
 
5
5
  SQLMap SQL injection detection and exploitation plugin with unified interface.
6
6
  """
7
+
7
8
  import subprocess
8
9
  import time
9
10
  from typing import List
10
11
 
12
+ from souleyez.security.validation import ValidationError, validate_url
13
+
11
14
  from .plugin_base import PluginBase
12
- from souleyez.security.validation import validate_url, ValidationError
13
15
 
14
16
  HELP = {
15
17
  "name": "SQLMap — Automated SQL Injection Detection & Exploitation Tool",
@@ -4,12 +4,14 @@ souleyez.plugins.theharvester
4
4
 
5
5
  theHarvester OSINT plugin with unified interface.
6
6
  """
7
+
7
8
  import subprocess
8
9
  import time
9
10
  from typing import List
10
11
 
12
+ from souleyez.security.validation import ValidationError, validate_hostname
13
+
11
14
  from .plugin_base import PluginBase
12
- from souleyez.security.validation import validate_hostname, ValidationError
13
15
 
14
16
  HELP = {
15
17
  "name": "theHarvester — Public Recon & Harvesting Tool",
souleyez/plugins/tr069.py CHANGED
@@ -5,12 +5,14 @@ souleyez.plugins.tr069
5
5
  TR-069 (CWMP) detection and enumeration plugin.
6
6
  Detects ISP remote management protocol on routers.
7
7
  """
8
+
8
9
  import subprocess
9
10
  import time
10
11
  from typing import List
11
12
 
13
+ from souleyez.security.validation import ValidationError, validate_target
14
+
12
15
  from .plugin_base import PluginBase
13
- from souleyez.security.validation import validate_target, ValidationError
14
16
 
15
17
  HELP = {
16
18
  "name": "TR-069 — ISP Remote Management Detection",
souleyez/plugins/upnp.py CHANGED
@@ -5,12 +5,14 @@ souleyez.plugins.upnp
5
5
  UPnP (Universal Plug and Play) enumeration plugin using nmap scripts.
6
6
  Discovers UPnP services, device info, and potential misconfigurations.
7
7
  """
8
+
8
9
  import subprocess
9
10
  import time
10
11
  from typing import List
11
12
 
13
+ from souleyez.security.validation import ValidationError, validate_target
14
+
12
15
  from .plugin_base import PluginBase
13
- from souleyez.security.validation import validate_target, ValidationError
14
16
 
15
17
  HELP = {
16
18
  "name": "UPnP — Router/IoT Discovery",
@@ -5,13 +5,15 @@ souleyez.plugins.upnp_abuse
5
5
  UPnP abuse plugin for adding/removing port forwards and extracting info.
6
6
  Uses miniupnpc library to interact with UPnP-enabled routers.
7
7
  """
8
- import subprocess
8
+
9
9
  import shutil
10
+ import subprocess
10
11
  import time
11
12
  from typing import List
12
13
 
14
+ from souleyez.security.validation import ValidationError, validate_target
15
+
13
16
  from .plugin_base import PluginBase
14
- from souleyez.security.validation import validate_target, ValidationError
15
17
 
16
18
  HELP = {
17
19
  "name": "UPnP Abuse — Port Forward Manipulation",
@@ -5,13 +5,15 @@ souleyez.plugins.vnc_access
5
5
  VNC access plugin for connecting to VNC servers.
6
6
  Used after successful credential discovery.
7
7
  """
8
- import subprocess
8
+
9
9
  import shutil
10
+ import subprocess
10
11
  import time
11
12
  from typing import List
12
13
 
14
+ from souleyez.security.validation import ValidationError, validate_target
15
+
13
16
  from .plugin_base import PluginBase
14
- from souleyez.security.validation import validate_target, ValidationError
15
17
 
16
18
  HELP = {
17
19
  "name": "VNC Access — Connect to Screen Sharing",
@@ -5,12 +5,14 @@ souleyez.plugins.vnc_brute
5
5
  VNC brute force plugin using Hydra.
6
6
  Attacks VNC/Screen Sharing on macOS systems.
7
7
  """
8
+
8
9
  import subprocess
9
10
  import time
10
11
  from typing import List
11
12
 
13
+ from souleyez.security.validation import ValidationError, validate_target
14
+
12
15
  from .plugin_base import PluginBase
13
- from souleyez.security.validation import validate_target, ValidationError
14
16
 
15
17
  HELP = {
16
18
  "name": "VNC Brute — Screen Sharing Attack",
@@ -5,6 +5,7 @@ souleyez.plugins.web_login_test - Web login credential testing
5
5
  Tests cracked credentials against web login endpoints.
6
6
  Supports both JSON REST APIs and traditional HTML form logins.
7
7
  """
8
+
8
9
  import json
9
10
  import re
10
11
  import ssl
souleyez/plugins/whois.py CHANGED
@@ -4,12 +4,14 @@ souleyez.plugins.whois
4
4
 
5
5
  WHOIS domain information lookup plugin.
6
6
  """
7
+
7
8
  import subprocess
8
9
  import time
9
10
  from typing import List
10
11
 
12
+ from souleyez.security.validation import ValidationError, validate_target
13
+
11
14
  from .plugin_base import PluginBase
12
- from souleyez.security.validation import validate_target, ValidationError
13
15
 
14
16
  HELP = {
15
17
  "name": "WHOIS — Domain Registration Information",
@@ -4,14 +4,16 @@ souleyez.plugins.wpscan
4
4
 
5
5
  WPScan WordPress vulnerability scanner plugin.
6
6
  """
7
+
7
8
  import os
8
9
  import subprocess
9
10
  import time
10
11
  from typing import List
11
12
  from urllib.parse import urlparse, urlunparse
12
13
 
14
+ from souleyez.security.validation import ValidationError, validate_url
15
+
13
16
  from .plugin_base import PluginBase
14
- from souleyez.security.validation import validate_url, ValidationError
15
17
 
16
18
  HELP = {
17
19
  "name": "WPScan — WordPress Security Scanner",
@@ -188,6 +190,44 @@ class WpscanPlugin(PluginBase):
188
190
  base = urlunparse((parsed.scheme, parsed.netloc, path, "", "", ""))
189
191
  return base
190
192
 
193
+ def _fix_enumerate_args(self, args: List[str]) -> List[str]:
194
+ """
195
+ Fix incompatible WPScan enumerate options.
196
+
197
+ WPScan has mutually exclusive options:
198
+ - vp (vulnerable plugins) and ap (all plugins) cannot be used together
199
+ - vt (vulnerable themes) and at (all themes) cannot be used together
200
+
201
+ If both are present, prefer the vulnerable-only option (vp/vt) as it's
202
+ faster and more focused.
203
+ """
204
+ new_args = []
205
+ i = 0
206
+ while i < len(args):
207
+ arg = args[i]
208
+ if arg == "--enumerate" and i + 1 < len(args):
209
+ enum_value = args[i + 1]
210
+ # Parse the enumerate options
211
+ options = [opt.strip() for opt in enum_value.split(",")]
212
+
213
+ # Fix incompatible options
214
+ # If both vp and ap, remove ap (prefer vulnerable-only)
215
+ if "vp" in options and "ap" in options:
216
+ options.remove("ap")
217
+ # If both vt and at, remove at (prefer vulnerable-only)
218
+ if "vt" in options and "at" in options:
219
+ options.remove("at")
220
+
221
+ # Rebuild enumerate value
222
+ new_args.append("--enumerate")
223
+ new_args.append(",".join(options))
224
+ i += 2
225
+ else:
226
+ new_args.append(arg)
227
+ i += 1
228
+
229
+ return new_args
230
+
191
231
  def build_command(
192
232
  self, target: str, args: List[str] = None, label: str = "", log_path: str = None
193
233
  ):
@@ -217,6 +257,11 @@ class WpscanPlugin(PluginBase):
217
257
 
218
258
  args = args or []
219
259
 
260
+ # Fix incompatible enumerate options (vp/ap, vt/at are mutually exclusive)
261
+ # vp = vulnerable plugins, ap = all plugins (can't use both)
262
+ # vt = vulnerable themes, at = all themes (can't use both)
263
+ args = self._fix_enumerate_args(args)
264
+
220
265
  # Add --disable-tls-checks for HTTPS targets (handles self-signed certs)
221
266
  if target.startswith("https://") and "--disable-tls-checks" not in args:
222
267
  args = ["--disable-tls-checks"] + args
@@ -268,6 +313,9 @@ class WpscanPlugin(PluginBase):
268
313
  if args is None:
269
314
  args = []
270
315
 
316
+ # Fix incompatible enumerate options (vp/ap, vt/at are mutually exclusive)
317
+ args = self._fix_enumerate_args(args)
318
+
271
319
  # Add --disable-tls-checks for HTTPS targets (handles self-signed certs)
272
320
  if target.startswith("https://") and "--disable-tls-checks" not in args:
273
321
  args = ["--disable-tls-checks"] + args
@@ -3,8 +3,9 @@
3
3
  Attack chain analysis and visualization.
4
4
  Builds attack graphs from evidence timeline and generates Mermaid.js diagrams.
5
5
  """
6
- from typing import Dict, List, Set, Tuple
6
+
7
7
  from datetime import datetime
8
+ from typing import Dict, List, Set, Tuple
8
9
 
9
10
 
10
11
  class AttackChainAnalyzer:
@@ -3,6 +3,7 @@
3
3
  Chart generation for pentest reports.
4
4
  Creates interactive Chart.js charts for HTML reports.
5
5
  """
6
+
6
7
  import json
7
8
  from typing import Dict, List
8
9
 
@@ -3,6 +3,7 @@
3
3
  Compliance mapping for pentest findings.
4
4
  Maps findings to OWASP Top 10 and CWE standards.
5
5
  """
6
+
6
7
  from typing import Dict, List, Set
7
8
 
8
9
 
@@ -7,22 +7,22 @@ client-ready detection validation reports.
7
7
 
8
8
  from dataclasses import dataclass, field
9
9
  from datetime import datetime
10
- from typing import Dict, List, Any, Optional
10
+ from typing import Any, Dict, List, Optional
11
11
 
12
- from souleyez.detection.validator import (
13
- DetectionValidator,
14
- DetectionResult,
15
- EngagementDetectionSummary,
16
- )
12
+ from souleyez.detection.attack_signatures import ATTACK_SIGNATURES, get_signature
17
13
  from souleyez.detection.mitre_mappings import (
14
+ MITRE_TACTICS,
18
15
  MITREMappings,
19
- TechniqueResult,
20
16
  TacticResult,
21
- MITRE_TACTICS,
17
+ TechniqueResult,
18
+ )
19
+ from souleyez.detection.validator import (
20
+ DetectionResult,
21
+ DetectionValidator,
22
+ EngagementDetectionSummary,
22
23
  )
23
- from souleyez.detection.attack_signatures import get_signature, ATTACK_SIGNATURES
24
- from souleyez.storage.engagements import EngagementManager
25
24
  from souleyez.storage.database import get_db
25
+ from souleyez.storage.engagements import EngagementManager
26
26
 
27
27
 
28
28
  @dataclass
@@ -3,6 +3,7 @@
3
3
  Report formatting utilities.
4
4
  Handles Markdown and HTML output with professional styling.
5
5
  """
6
+
6
7
  from datetime import datetime
7
8
  from typing import Dict, List
8
9
 
@@ -1589,22 +1590,16 @@ All testing was conducted in accordance with the agreed-upon rules of engagement
1589
1590
  sections = []
1590
1591
 
1591
1592
  if business_impact:
1592
- sections.append(
1593
- f"""**Business Impact:**
1594
- {business_impact}"""
1595
- )
1593
+ sections.append(f"""**Business Impact:**
1594
+ {business_impact}""")
1596
1595
 
1597
1596
  if attack_scenario:
1598
- sections.append(
1599
- f"""**Attack Scenario:**
1600
- {attack_scenario}"""
1601
- )
1597
+ sections.append(f"""**Attack Scenario:**
1598
+ {attack_scenario}""")
1602
1599
 
1603
1600
  if risk_context:
1604
- sections.append(
1605
- f"""**Risk Context:**
1606
- {risk_context}"""
1607
- )
1601
+ sections.append(f"""**Risk Context:**
1602
+ {risk_context}""")
1608
1603
 
1609
1604
  if not sections:
1610
1605
  return ""