souleyez 2.17.0__tar.gz → 2.23.0__tar.gz

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