souleyez 2.17.0__tar.gz → 2.28.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 (406) hide show
  1. {souleyez-2.17.0 → souleyez-2.28.0}/BETA_README.md +21 -2
  2. {souleyez-2.17.0/souleyez.egg-info → souleyez-2.28.0}/PKG-INFO +22 -3
  3. {souleyez-2.17.0 → souleyez-2.28.0}/README.md +9 -1
  4. {souleyez-2.17.0 → souleyez-2.28.0}/pyproject.toml +2 -2
  5. souleyez-2.28.0/souleyez/__init__.py +1 -0
  6. souleyez-2.28.0/souleyez/assets/__init__.py +1 -0
  7. souleyez-2.28.0/souleyez/assets/souleyez-icon.png +0 -0
  8. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_sync_manager.py +15 -5
  9. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/tool_chaining.py +257 -41
  10. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/validator.py +4 -2
  11. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/README.md +2 -2
  12. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/configuration.md +1 -1
  13. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/installation.md +14 -1
  14. souleyez-2.28.0/souleyez/docs/user-guide/scope-management.md +683 -0
  15. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/background.py +666 -155
  16. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/result_handler.py +433 -11
  17. souleyez-2.28.0/souleyez/engine/worker_manager.py +205 -0
  18. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/splunk.py +58 -11
  19. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/main.py +324 -4
  20. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/crackmapexec_parser.py +101 -43
  21. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/dnsrecon_parser.py +50 -35
  22. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/enum4linux_parser.py +101 -21
  23. souleyez-2.28.0/souleyez/parsers/http_fingerprint_parser.py +319 -0
  24. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/hydra_parser.py +56 -5
  25. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/impacket_parser.py +123 -44
  26. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/john_parser.py +47 -14
  27. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/msf_parser.py +20 -5
  28. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/nmap_parser.py +48 -27
  29. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/smbmap_parser.py +69 -25
  30. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/sqlmap_parser.py +72 -26
  31. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/theharvester_parser.py +21 -13
  32. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/gobuster.py +96 -3
  33. souleyez-2.28.0/souleyez/plugins/http_fingerprint.py +598 -0
  34. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/msf_exploit.py +6 -3
  35. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/nuclei.py +43 -18
  36. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/searchsploit.py +21 -18
  37. souleyez-2.28.0/souleyez/security/scope_validator.py +615 -0
  38. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/hosts.py +87 -2
  39. souleyez-2.28.0/souleyez/storage/migrations/_026_add_engagement_scope.py +87 -0
  40. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/interactive.py +419 -25
  41. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/setup_wizard.py +424 -58
  42. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/tool_setup.py +52 -52
  43. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/utils/tool_checker.py +75 -13
  44. {souleyez-2.17.0 → souleyez-2.28.0/souleyez.egg-info}/PKG-INFO +22 -3
  45. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/SOURCES.txt +9 -0
  46. souleyez-2.28.0/tests/test_scope_integration.py +855 -0
  47. souleyez-2.28.0/tests/test_scope_validator.py +416 -0
  48. souleyez-2.17.0/souleyez/__init__.py +0 -1
  49. souleyez-2.17.0/souleyez/engine/worker_manager.py +0 -109
  50. {souleyez-2.17.0 → souleyez-2.28.0}/LICENSE +0 -0
  51. {souleyez-2.17.0 → souleyez-2.28.0}/MANIFEST.in +0 -0
  52. {souleyez-2.17.0 → souleyez-2.28.0}/setup.cfg +0 -0
  53. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/__init__.py +0 -0
  54. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/action_mapper.py +0 -0
  55. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/chain_advisor.py +0 -0
  56. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/claude_provider.py +0 -0
  57. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/context_builder.py +0 -0
  58. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/executor.py +0 -0
  59. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/feedback_handler.py +0 -0
  60. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/llm_factory.py +0 -0
  61. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/llm_provider.py +0 -0
  62. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/ollama_provider.py +0 -0
  63. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/ollama_service.py +0 -0
  64. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/path_scorer.py +0 -0
  65. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/recommender.py +0 -0
  66. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/report_context.py +0 -0
  67. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/report_prompts.py +0 -0
  68. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/report_service.py +0 -0
  69. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/result_parser.py +0 -0
  70. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ai/safety.py +0 -0
  71. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/__init__.py +0 -0
  72. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/audit.py +0 -0
  73. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/engagement_access.py +0 -0
  74. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/permissions.py +0 -0
  75. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/session_manager.py +0 -0
  76. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/auth/user_manager.py +0 -0
  77. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/__init__.py +0 -0
  78. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/audit.py +0 -0
  79. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/auth.py +0 -0
  80. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/deliverables.py +0 -0
  81. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/engagement.py +0 -0
  82. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/license.py +0 -0
  83. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/screenshots.py +0 -0
  84. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/commands/user.py +0 -0
  85. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/config.py +0 -0
  86. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/__init__.py +0 -0
  87. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/credential_tester.py +0 -0
  88. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/cve_mappings.py +0 -0
  89. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/cve_matcher.py +0 -0
  90. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_auto_mapper.py +0 -0
  91. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_chain_engine.py +0 -0
  92. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_database.py +0 -0
  93. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_integration.py +0 -0
  94. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_rpc_client.py +0 -0
  95. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/msf_rpc_manager.py +0 -0
  96. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/network_utils.py +0 -0
  97. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/parser_handler.py +0 -0
  98. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/pending_chains.py +0 -0
  99. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/templates.py +0 -0
  100. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/version_utils.py +0 -0
  101. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/vuln_correlation.py +0 -0
  102. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/core/web_utils.py +0 -0
  103. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/README.md +0 -0
  104. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/active_directory.json +0 -0
  105. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/cis_controls_v8.json +0 -0
  106. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/cloud_security.json +0 -0
  107. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/cmmc_2.0.json +0 -0
  108. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/external_network.json +0 -0
  109. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/ffiec_cat.json +0 -0
  110. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/gdpr_article32.json +0 -0
  111. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/glba_safeguards.json +0 -0
  112. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/hipaa_security.json +0 -0
  113. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/hitrust_csf.json +0 -0
  114. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/internal_network.json +0 -0
  115. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/iso27001.json +0 -0
  116. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/nerc_cip.json +0 -0
  117. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/nist_csf.json +0 -0
  118. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/owasp_top10_2021.json +0 -0
  119. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/pci_dss_4.0.json +0 -0
  120. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/ptes_standard.json +0 -0
  121. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/red_team.json +0 -0
  122. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/soc2_type2.json +0 -0
  123. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/templates/webapp_advanced.json +0 -0
  124. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/README.md +0 -0
  125. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/all_users.txt +0 -0
  126. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/api_endpoints.txt +0 -0
  127. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/default_credentials.txt +0 -0
  128. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/macos_users.txt +0 -0
  129. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/router_passwords.txt +0 -0
  130. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/router_users.txt +0 -0
  131. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/soul_pass.txt +0 -0
  132. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/soul_users.txt +0 -0
  133. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/subdomains_common.txt +0 -0
  134. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/top100.txt +0 -0
  135. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/top20_quick.txt +0 -0
  136. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/vnc_passwords.txt +0 -0
  137. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/web_dirs_common.txt +0 -0
  138. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/web_extensions.txt +0 -0
  139. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/data/wordlists/web_files_common.txt +0 -0
  140. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/__init__.py +0 -0
  141. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/attack_signatures.py +0 -0
  142. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/detection/mitre_mappings.py +0 -0
  143. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/devtools.py +0 -0
  144. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/cli-commands.md +0 -0
  145. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/engagement-api.md +0 -0
  146. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/integration-guide.md +0 -0
  147. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/api-reference/parser-formats.md +0 -0
  148. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/000-template.md +0 -0
  149. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/001-local-llm-over-cloud.md +0 -0
  150. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/002-master-password-approach.md +0 -0
  151. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/decisions/003-database-schema-design.md +0 -0
  152. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/architecture/overview.md +0 -0
  153. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/database/MIGRATIONS.md +0 -0
  154. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/database/SCHEMA.md +0 -0
  155. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/database/SCHEMA_ERD.md +0 -0
  156. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/developer-guide/test_coverage_plan.md +0 -0
  157. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/developer-guide/ui-design-system.md +0 -0
  158. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/images/README.md +0 -0
  159. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/best-practices.md +0 -0
  160. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/credential-encryption.md +0 -0
  161. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/password-protected-commands.md +0 -0
  162. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/secure-defaults.md +0 -0
  163. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/security/threat-model.md +0 -0
  164. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/ai-integration.md +0 -0
  165. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/attack-surface.md +0 -0
  166. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/auto-chaining.md +0 -0
  167. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/deliverables-screenshots.md +0 -0
  168. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/dependencies.md +0 -0
  169. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/evidence-vault.md +0 -0
  170. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/exploit-suggestions.md +0 -0
  171. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/getting-started.md +0 -0
  172. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/metasploit-integration.md +0 -0
  173. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/rbac.md +0 -0
  174. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/report-generation.md +0 -0
  175. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/siem-integration.md +0 -0
  176. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/tools-reference.md +0 -0
  177. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/troubleshooting.md +0 -0
  178. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/uninstall.md +0 -0
  179. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/worker-management.md +0 -0
  180. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/docs/user-guide/workflows.md +0 -0
  181. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/__init__.py +0 -0
  182. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/base.py +0 -0
  183. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/job_status.py +0 -0
  184. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/loader.py +0 -0
  185. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/log_sanitizer.py +0 -0
  186. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/engine/manager.py +0 -0
  187. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/export/__init__.py +0 -0
  188. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/export/evidence_bundle.py +0 -0
  189. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/feature_flags/__init__.py +0 -0
  190. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/feature_flags/features.py +0 -0
  191. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/feature_flags.py +0 -0
  192. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/history.py +0 -0
  193. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/importers/__init__.py +0 -0
  194. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/importers/msf_importer.py +0 -0
  195. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/importers/smart_importer.py +0 -0
  196. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/__init__.py +0 -0
  197. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/__init__.py +0 -0
  198. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/base.py +0 -0
  199. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/elastic.py +0 -0
  200. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/factory.py +0 -0
  201. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/rule_mappings/__init__.py +0 -0
  202. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/rule_mappings/wazuh_rules.py +0 -0
  203. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/sentinel.py +0 -0
  204. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/siem/wazuh.py +0 -0
  205. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/__init__.py +0 -0
  206. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/client.py +0 -0
  207. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/config.py +0 -0
  208. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/host_mapper.py +0 -0
  209. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/integrations/wazuh/sync.py +0 -0
  210. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/__init__.py +0 -0
  211. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/correlation_analyzer.py +0 -0
  212. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/exploit_knowledge.py +0 -0
  213. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/exploit_suggestions.py +0 -0
  214. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/gap_analyzer.py +0 -0
  215. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/gap_detector.py +0 -0
  216. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/sensitive_tables.py +0 -0
  217. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/service_parser.py +0 -0
  218. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/surface_analyzer.py +0 -0
  219. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/intelligence/target_parser.py +0 -0
  220. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/licensing/__init__.py +0 -0
  221. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/licensing/validator.py +0 -0
  222. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/log_config.py +0 -0
  223. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/migrations/__init__.py +0 -0
  224. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/migrations/fix_job_counter.py +0 -0
  225. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/__init__.py +0 -0
  226. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/bloodhound_parser.py +0 -0
  227. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/dalfox_parser.py +0 -0
  228. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/ffuf_parser.py +0 -0
  229. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/gobuster_parser.py +0 -0
  230. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/hashcat_parser.py +0 -0
  231. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/nikto_parser.py +0 -0
  232. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/nuclei_parser.py +0 -0
  233. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/responder_parser.py +0 -0
  234. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/searchsploit_parser.py +0 -0
  235. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/whois_parser.py +0 -0
  236. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/parsers/wpscan_parser.py +0 -0
  237. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/__init__.py +0 -0
  238. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/afp.py +0 -0
  239. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/afp_brute.py +0 -0
  240. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/ard.py +0 -0
  241. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/bloodhound.py +0 -0
  242. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/crackmapexec.py +0 -0
  243. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/dalfox.py +0 -0
  244. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/dns_hijack.py +0 -0
  245. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/dnsrecon.py +0 -0
  246. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/enum4linux.py +0 -0
  247. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/ffuf.py +0 -0
  248. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/firmware_extract.py +0 -0
  249. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/hashcat.py +0 -0
  250. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/hydra.py +0 -0
  251. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_getnpusers.py +0 -0
  252. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_psexec.py +0 -0
  253. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_secretsdump.py +0 -0
  254. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/impacket_smbclient.py +0 -0
  255. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/john.py +0 -0
  256. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/macos_ssh.py +0 -0
  257. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/mdns.py +0 -0
  258. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/msf_auxiliary.py +0 -0
  259. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/nikto.py +0 -0
  260. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/nmap.py +0 -0
  261. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/plugin_base.py +0 -0
  262. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/plugin_template.py +0 -0
  263. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/responder.py +0 -0
  264. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/router_http_brute.py +0 -0
  265. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/router_ssh_brute.py +0 -0
  266. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/router_telnet_brute.py +0 -0
  267. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/routersploit.py +0 -0
  268. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/routersploit_exploit.py +0 -0
  269. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/smbmap.py +0 -0
  270. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/sqlmap.py +0 -0
  271. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/theharvester.py +0 -0
  272. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/tr069.py +0 -0
  273. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/upnp.py +0 -0
  274. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/upnp_abuse.py +0 -0
  275. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/vnc_access.py +0 -0
  276. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/vnc_brute.py +0 -0
  277. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/whois.py +0 -0
  278. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/plugins/wpscan.py +0 -0
  279. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/__init__.py +0 -0
  280. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/attack_chain.py +0 -0
  281. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/charts.py +0 -0
  282. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/compliance_mappings.py +0 -0
  283. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/detection_report.py +0 -0
  284. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/formatters.py +0 -0
  285. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/generator.py +0 -0
  286. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/reporting/metrics.py +0 -0
  287. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/scanner.py +0 -0
  288. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/security/__init__.py +0 -0
  289. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/security/validation.py +0 -0
  290. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/security.py +0 -0
  291. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/__init__.py +0 -0
  292. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/credentials.py +0 -0
  293. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/crypto.py +0 -0
  294. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/database.py +0 -0
  295. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/db.py +0 -0
  296. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverable_evidence.py +0 -0
  297. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverable_exporter.py +0 -0
  298. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverable_templates.py +0 -0
  299. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/deliverables.py +0 -0
  300. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/engagements.py +0 -0
  301. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/evidence.py +0 -0
  302. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/execution_log.py +0 -0
  303. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/exploit_attempts.py +0 -0
  304. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/exploits.py +0 -0
  305. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/findings.py +0 -0
  306. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrate_to_engagements.py +0 -0
  307. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_001_add_credential_enhancements.py +0 -0
  308. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_002_add_status_tracking.py +0 -0
  309. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_003_add_execution_log.py +0 -0
  310. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_005_screenshots.py +0 -0
  311. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_006_deliverables.py +0 -0
  312. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_007_deliverable_templates.py +0 -0
  313. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_008_add_nuclei_table.py +0 -0
  314. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_009_add_cme_tables.py +0 -0
  315. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_010_evidence_linking.py +0 -0
  316. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_011_timeline_tracking.py +0 -0
  317. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_012_team_collaboration.py +0 -0
  318. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_013_add_host_tags.py +0 -0
  319. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_014_exploit_attempts.py +0 -0
  320. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_015_add_mac_os_fields.py +0 -0
  321. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_016_add_domain_field.py +0 -0
  322. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_017_msf_sessions.py +0 -0
  323. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_018_add_osint_target.py +0 -0
  324. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_019_add_engagement_type.py +0 -0
  325. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_020_add_rbac.py +0 -0
  326. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_021_wazuh_integration.py +0 -0
  327. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_022_wazuh_indexer_columns.py +0 -0
  328. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_023_fix_detection_results_fk.py +0 -0
  329. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +0 -0
  330. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/_025_multi_siem_support.py +0 -0
  331. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/__init__.py +0 -0
  332. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/migrations/migration_manager.py +0 -0
  333. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/msf_sessions.py +0 -0
  334. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/osint.py +0 -0
  335. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/recommendation_engine.py +0 -0
  336. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/schema.sql +0 -0
  337. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/screenshots.py +0 -0
  338. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/smb_shares.py +0 -0
  339. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/sqlmap_data.py +0 -0
  340. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/team_collaboration.py +0 -0
  341. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/timeline_tracker.py +0 -0
  342. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/wazuh_vulns.py +0 -0
  343. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/storage/web_paths.py +0 -0
  344. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/testing/__init__.py +0 -0
  345. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/testing/credential_tester.py +0 -0
  346. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/__init__.py +0 -0
  347. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/ai_quotes.py +0 -0
  348. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/attack_surface.py +0 -0
  349. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/chain_rules_view.py +0 -0
  350. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/correlation_view.py +0 -0
  351. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/dashboard.py +0 -0
  352. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/deliverables_view.py +0 -0
  353. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/design_system.py +0 -0
  354. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/errors.py +0 -0
  355. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/evidence_linking_view.py +0 -0
  356. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/evidence_vault.py +0 -0
  357. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/exploit_suggestions_view.py +0 -0
  358. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/export_view.py +0 -0
  359. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/gap_analysis_view.py +0 -0
  360. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/help_system.py +0 -0
  361. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/intelligence_view.py +0 -0
  362. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/interactive_selector.py +0 -0
  363. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/log_formatter.py +0 -0
  364. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/menu_components.py +0 -0
  365. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/msf_auxiliary_menu.py +0 -0
  366. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/pending_chains_view.py +0 -0
  367. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/progress_indicators.py +0 -0
  368. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/recommendations_view.py +0 -0
  369. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/rule_builder.py +0 -0
  370. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/shortcuts.py +0 -0
  371. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/splunk_gap_analysis_view.py +0 -0
  372. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/splunk_vulns_view.py +0 -0
  373. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/team_dashboard.py +0 -0
  374. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/template_selector.py +0 -0
  375. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/terminal.py +0 -0
  376. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/timeline_view.py +0 -0
  377. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/tutorial.py +0 -0
  378. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/tutorial_state.py +0 -0
  379. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui/wazuh_vulns_view.py +0 -0
  380. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/ui.py +0 -0
  381. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/utils/__init__.py +0 -0
  382. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/utils.py +0 -0
  383. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez/wordlists.py +0 -0
  384. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/dependency_links.txt +0 -0
  385. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/entry_points.txt +0 -0
  386. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/requires.txt +0 -0
  387. {souleyez-2.17.0 → souleyez-2.28.0}/souleyez.egg-info/top_level.txt +0 -0
  388. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_config.py +0 -0
  389. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_config_enhanced.py +0 -0
  390. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_crypto.py +0 -0
  391. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_database_100_final.py +0 -0
  392. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_engagements.py +0 -0
  393. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_engagements_simple.py +0 -0
  394. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_job_status_tracking.py +0 -0
  395. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_logging.py +0 -0
  396. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_network_utils.py +0 -0
  397. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_ollama_service.py +0 -0
  398. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_plugin_base.py +0 -0
  399. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_recommender.py +0 -0
  400. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_result_handler_sqlmap.py +0 -0
  401. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_schema.py +0 -0
  402. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_security_hardening.py +0 -0
  403. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_security_validation.py +0 -0
  404. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_sqlmap_parser.py +0 -0
  405. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_storage.py +0 -0
  406. {souleyez-2.17.0 → souleyez-2.28.0}/tests/test_version_utils.py +0 -0
@@ -1,5 +1,11 @@
1
1
  # SoulEyez Beta Program
2
2
 
3
+ [![CI](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml/badge.svg)](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml)
4
+ [![codecov](https://codecov.io/gh/cyber-soul-security/souleyez/branch/main/graph/badge.svg)](https://codecov.io/gh/cyber-soul-security/souleyez)
5
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
6
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
7
+ [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
8
+
3
9
  Welcome to the SoulEyez beta! Thank you for helping us test and improve this penetration testing management platform.
4
10
 
5
11
  ---
@@ -21,7 +27,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
21
27
 
22
28
  > ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
23
29
 
24
- ## Version: 2.17.0
30
+ ## Version: 2.28.0
25
31
 
26
32
  ### What's Included
27
33
 
@@ -59,6 +65,17 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
59
65
  - **Python**: 3.8 or newer
60
66
  - **Storage**: ~500MB for SoulEyez + tools
61
67
 
68
+ > **🐉 Kali Linux Recommended**
69
+ >
70
+ > SoulEyez performs significantly better on **Kali Linux** than other distributions:
71
+ > - All pentesting tools pre-installed and optimized
72
+ > - Metasploit database and RPC already configured
73
+ > - Security-focused kernel and networking stack
74
+ > - No dependency hunting or version conflicts
75
+ > - Wordlists, databases, and tool configs ready to go
76
+ >
77
+ > While Ubuntu and other Debian-based distros are supported, you may experience slower setup times and occasional tool compatibility issues.
78
+
62
79
  ### Known Issues
63
80
 
64
81
  - Very large scan outputs (>10MB) may slow the interface
@@ -76,6 +93,8 @@ pipx ensurepath # Add pipx apps to your PATH
76
93
  source ~/.bashrc # Reload your shell (or close and reopen terminal)
77
94
  ```
78
95
 
96
+ > **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
97
+
79
98
  > 💡 **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
99
 
81
100
  ### Step 2: Install SoulEyez
@@ -246,4 +265,4 @@ Happy hacking! 🛡️
246
265
 
247
266
  ---
248
267
 
249
- **Version**: 2.17.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
268
+ **Version**: 2.28.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.28.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>
@@ -51,6 +51,12 @@ Dynamic: license-file
51
51
 
52
52
  # SoulEyez Beta Program
53
53
 
54
+ [![CI](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml/badge.svg)](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml)
55
+ [![codecov](https://codecov.io/gh/cyber-soul-security/souleyez/branch/main/graph/badge.svg)](https://codecov.io/gh/cyber-soul-security/souleyez)
56
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
57
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
58
+ [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
59
+
54
60
  Welcome to the SoulEyez beta! Thank you for helping us test and improve this penetration testing management platform.
55
61
 
56
62
  ---
@@ -72,7 +78,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
72
78
 
73
79
  > ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
74
80
 
75
- ## Version: 2.17.0
81
+ ## Version: 2.28.0
76
82
 
77
83
  ### What's Included
78
84
 
@@ -110,6 +116,17 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
110
116
  - **Python**: 3.8 or newer
111
117
  - **Storage**: ~500MB for SoulEyez + tools
112
118
 
119
+ > **🐉 Kali Linux Recommended**
120
+ >
121
+ > SoulEyez performs significantly better on **Kali Linux** than other distributions:
122
+ > - All pentesting tools pre-installed and optimized
123
+ > - Metasploit database and RPC already configured
124
+ > - Security-focused kernel and networking stack
125
+ > - No dependency hunting or version conflicts
126
+ > - Wordlists, databases, and tool configs ready to go
127
+ >
128
+ > While Ubuntu and other Debian-based distros are supported, you may experience slower setup times and occasional tool compatibility issues.
129
+
113
130
  ### Known Issues
114
131
 
115
132
  - Very large scan outputs (>10MB) may slow the interface
@@ -127,6 +144,8 @@ pipx ensurepath # Add pipx apps to your PATH
127
144
  source ~/.bashrc # Reload your shell (or close and reopen terminal)
128
145
  ```
129
146
 
147
+ > **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
148
+
130
149
  > 💡 **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
150
 
132
151
  ### Step 2: Install SoulEyez
@@ -297,4 +316,4 @@ Happy hacking! 🛡️
297
316
 
298
317
  ---
299
318
 
300
- **Version**: 2.17.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
319
+ **Version**: 2.28.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
@@ -1,5 +1,11 @@
1
1
  # SoulEyez — AI-Powered Penetration Testing Platform
2
2
 
3
+ [![CI](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml/badge.svg)](https://github.com/cyber-soul-security/souleyez/actions/workflows/python-ci.yml)
4
+ [![codecov](https://codecov.io/gh/cyber-soul-security/souleyez/branch/main/graph/badge.svg)](https://codecov.io/gh/cyber-soul-security/souleyez)
5
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
6
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
7
+ [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
8
+
3
9
  **LEGAL NOTICE — Use Responsibly**
4
10
  Only use SoulEyez on systems you own or have explicit written permission to test.
5
11
  Unauthorized scanning or exploitation is illegal. The authors are not responsible for misuse.
@@ -133,7 +139,7 @@ See [docs/CONFIG.md](souleyez/docs/CONFIG.md) for complete configuration options
133
139
  # Install pipx if needed
134
140
  sudo apt install pipx
135
141
  pipx ensurepath
136
- source ~/.bashrc
142
+ source ~/.bashrc # Kali Linux: use 'source ~/.zshrc' instead
137
143
 
138
144
  # Install SoulEyez
139
145
  pipx install souleyez
@@ -142,6 +148,8 @@ pipx install souleyez
142
148
  souleyez setup
143
149
  ```
144
150
 
151
+ > **Kali Linux users:** Kali uses zsh by default. Use `source ~/.zshrc` instead of `source ~/.bashrc`
152
+
145
153
  See [docs/user-guide/installation.md](souleyez/docs/user-guide/installation.md) for detailed instructions.
146
154
 
147
155
  ---
@@ -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.28.0"
8
8
  description = "AI-Powered Penetration Testing Platform with 40+ integrated tools"
9
9
  readme = "BETA_README.md"
10
10
  license = {text = "MIT"}
@@ -71,7 +71,7 @@ include = ["souleyez*"]
71
71
  exclude = ["tests*", "scripts*", "reports*", "venv*", "debian*"]
72
72
 
73
73
  [tool.setuptools.package-data]
74
- souleyez = ["docs/**/*.md", "data/wordlists/*.txt", "data/wordlists/*.md", "data/templates/*.json", "data/templates/*.md"]
74
+ souleyez = ["docs/**/*.md", "data/wordlists/*.txt", "data/wordlists/*.md", "data/templates/*.json", "data/templates/*.md", "assets/*.png"]
75
75
 
76
76
  [tool.pytest.ini_options]
77
77
  testpaths = ["tests"]
@@ -0,0 +1 @@
1
+ __version__ = '2.28.0'
@@ -0,0 +1 @@
1
+ # SoulEyez assets package
@@ -29,15 +29,25 @@ logger = logging.getLogger(__name__)
29
29
 
30
30
  def get_msf_database_config() -> Optional[Dict[str, Any]]:
31
31
  """
32
- Get MSF database configuration from ~/.msf4/database.yml
32
+ Get MSF database configuration from ~/.msf4/database.yml or system-wide config.
33
+
34
+ Checks user config first, then falls back to system-wide config (Kali Linux).
33
35
 
34
36
  Returns:
35
37
  Dictionary with database config or None if not found/parseable
36
38
  """
37
- db_yml_path = Path.home() / ".msf4" / "database.yml"
38
-
39
- if not db_yml_path.exists():
40
- logger.debug(f"MSF database.yml not found at {db_yml_path}")
39
+ # Check user config first, then system-wide config (Kali uses system-wide)
40
+ user_db_path = Path.home() / ".msf4" / "database.yml"
41
+ system_db_path = Path('/usr/share/metasploit-framework/config/database.yml')
42
+
43
+ db_yml_path = None
44
+ if user_db_path.exists():
45
+ db_yml_path = user_db_path
46
+ elif system_db_path.exists():
47
+ db_yml_path = system_db_path
48
+
49
+ if not db_yml_path:
50
+ logger.debug("MSF database.yml not found in user or system config")
41
51
  return None
42
52
 
43
53
  try:
@@ -15,6 +15,17 @@ CATEGORY_CTF = "ctf" # Lab/learning scenarios - vulnerable by design
15
15
  CATEGORY_ENTERPRISE = "enterprise" # Real-world enterprise testing
16
16
  CATEGORY_GENERAL = "general" # Standard recon that applies everywhere
17
17
 
18
+ # Managed hosting platforms - skip CGI enumeration (pointless on these)
19
+ # These are detected from server headers/banners and product names
20
+ MANAGED_HOSTING_PLATFORMS = {
21
+ 'squarespace', 'wix', 'shopify', 'webflow', 'weebly',
22
+ 'wordpress.com', 'ghost.io', 'medium', 'tumblr', 'blogger',
23
+ 'netlify', 'vercel', 'github.io', 'pages.dev', 'cloudflare',
24
+ 'heroku', 'railway', 'render.com', 'fly.io',
25
+ 'aws cloudfront', 'akamai', 'fastly', 'cloudflare',
26
+ 'azure', 'google cloud', 'firebase',
27
+ }
28
+
18
29
  # Category display icons
19
30
  CATEGORY_ICONS = {
20
31
  CATEGORY_CTF: "🎯",
@@ -140,6 +151,75 @@ def classify_os_device(os_string: str, services: list) -> dict:
140
151
  return {'os_family': 'unknown', 'device_type': 'unknown', 'vendor': None}
141
152
 
142
153
 
154
+ def is_managed_hosting(services: List[Dict[str, Any]], http_fingerprint: Dict[str, Any] = None) -> bool:
155
+ """
156
+ Detect if target is a managed hosting platform.
157
+
158
+ These platforms don't have CGI directories, so tools like nikto
159
+ should skip CGI enumeration to avoid long, pointless scans.
160
+
161
+ Args:
162
+ services: List of service dicts from nmap parser
163
+ http_fingerprint: Optional fingerprint data from http_fingerprint plugin
164
+
165
+ Returns:
166
+ True if managed hosting detected, False otherwise
167
+ """
168
+ # Check fingerprint data first (most reliable, comes from actual HTTP headers)
169
+ if http_fingerprint:
170
+ managed = http_fingerprint.get('managed_hosting')
171
+ if managed:
172
+ return True
173
+
174
+ # Fall back to checking services data (less reliable, from nmap banners)
175
+ for service in services:
176
+ # Check product field
177
+ product = (service.get('product') or '').lower()
178
+ raw_version = (service.get('raw_version') or '').lower()
179
+ service_name = (service.get('service') or '').lower()
180
+
181
+ # Combine all fields for matching
182
+ combined = f"{product} {raw_version} {service_name}"
183
+
184
+ # Check against known managed hosting platforms
185
+ for platform in MANAGED_HOSTING_PLATFORMS:
186
+ if platform in combined:
187
+ return True
188
+
189
+ return False
190
+
191
+
192
+ def get_managed_hosting_platform(services: List[Dict[str, Any]], http_fingerprint: Dict[str, Any] = None) -> Optional[str]:
193
+ """
194
+ Get the name of the managed hosting platform if detected.
195
+
196
+ Args:
197
+ services: List of service dicts from nmap parser
198
+ http_fingerprint: Optional fingerprint data from http_fingerprint plugin
199
+
200
+ Returns:
201
+ Platform name or None
202
+ """
203
+ # Check fingerprint data first
204
+ if http_fingerprint:
205
+ managed = http_fingerprint.get('managed_hosting')
206
+ if managed:
207
+ return managed
208
+
209
+ # Fall back to services check
210
+ for service in services:
211
+ product = (service.get('product') or '').lower()
212
+ raw_version = (service.get('raw_version') or '').lower()
213
+ service_name = (service.get('service') or '').lower()
214
+ combined = f"{product} {raw_version} {service_name}"
215
+
216
+ for platform in MANAGED_HOSTING_PLATFORMS:
217
+ if platform in combined:
218
+ return platform.title()
219
+
220
+ return None
221
+
222
+
143
223
  # Technology to Nuclei tags mapping
144
224
  # Maps detected products/technologies to relevant nuclei template tags
145
225
  TECH_TO_NUCLEI_TAGS = {
@@ -423,6 +503,21 @@ class ChainRule:
423
503
  result = True
424
504
  break
425
505
 
506
+ elif cond_type == 'svc_version':
507
+ # Simple version string match (e.g., 'svc_version:2.3.4')
508
+ # Matches if any service has this exact version string
509
+ # Useful when nmap doesn't detect product name
510
+ services = context.get('services', [])
511
+ for service in services:
512
+ svc_version = (
513
+ service.get('version', '') or
514
+ service.get('service_version', '') or
515
+ ''
516
+ )
517
+ if svc_version and cond_value.lower() in svc_version.lower():
518
+ result = True
519
+ break
520
+
426
521
  # Apply negation if needed
427
522
  return not result if negated else result
428
523
 
@@ -496,6 +591,23 @@ class ChainRule:
496
591
  if svc_port in group.get('ports', []):
497
592
  port = str(svc_port)
498
593
  break
594
+ elif 'has:services' in self.trigger_condition:
595
+ # For has:services condition, extract port from the services array
596
+ # Prioritize HTTP services for web tools (gobuster, nuclei, etc.)
597
+ services = context.get('services', [])
598
+ http_ports = {80, 443, 8080, 8443, 8000, 8888, 3000, 5000}
599
+
600
+ # First pass: look for HTTP service by name or common HTTP ports
601
+ for svc in services:
602
+ svc_name = svc.get('service_name', '').lower()
603
+ svc_port = svc.get('port')
604
+ if svc_name == 'http' or svc_name == 'https' or svc_port in http_ports:
605
+ port = str(svc_port)
606
+ break
607
+
608
+ # Second pass: if no HTTP service, use the first service's port
609
+ if not port and services:
610
+ port = str(services[0].get('port', ''))
499
611
 
500
612
  # Calculate subnet for {subnet} placeholder (e.g., 10.0.0.88 → 10.0.0.0/24)
501
613
  subnet = ''
@@ -560,6 +672,25 @@ class ChainRule:
560
672
  new_args.append(arg)
561
673
  args = new_args
562
674
 
675
+ # For Nikto: Skip CGI enumeration on managed hosting platforms
676
+ # This prevents long, pointless scans on Squarespace, Wix, etc.
677
+ if self.target_tool == 'nikto':
678
+ services = context.get('services', [])
679
+ http_fingerprint = context.get('http_fingerprint', {})
680
+ if is_managed_hosting(services, http_fingerprint):
681
+ # Add -C none to skip CGI dirs (pointless on managed hosting)
682
+ if '-C' not in str(args):
683
+ args.extend(['-C', 'none'])
684
+ # Add -Tuning x6 to skip remote file inclusion tests
685
+ if '-Tuning' not in str(args):
686
+ args.extend(['-Tuning', 'x6'])
687
+ # Log which platform was detected
688
+ platform = get_managed_hosting_platform(services, http_fingerprint)
689
+ if platform:
690
+ from souleyez.log_config import get_logger
691
+ logger = get_logger(__name__)
692
+ logger.info(f"[FINGERPRINT] Managed hosting detected ({platform}) - nikto using optimized scan config")
693
+
563
694
  # For SQLMap with POST injections, add --data if we have POST data
564
695
  if self.target_tool == 'sqlmap' and post_data and '--data' not in str(args):
565
696
  # Insert --data after -u argument
@@ -627,32 +758,42 @@ class ToolChaining:
627
758
 
628
759
  # Web service discovered → run web scanners
629
760
  self.rules.extend([
630
- # Modern vulnerability scanner (Nuclei) - PRIORITY
631
- # Uses {nuclei_tags} placeholder to auto-detect tech and run relevant templates
761
+ # HTTP Fingerprinting - runs FIRST to detect WAF/CDN/managed hosting
762
+ # This enables smarter tool configuration for downstream scanners
632
763
  ChainRule(
633
764
  trigger_tool='nmap',
634
765
  trigger_condition='service:http',
766
+ target_tool='http_fingerprint',
767
+ priority=11, # Highest priority - runs before all other web tools
768
+ args_template=[],
769
+ description='Web server detected, fingerprinting for WAF/CDN/platform detection'
770
+ ),
771
+ # Nikto triggered by http_fingerprint (uses fingerprint data for smart config)
772
+ ChainRule(
773
+ trigger_tool='http_fingerprint',
774
+ trigger_condition='has:services',
775
+ target_tool='nikto',
776
+ priority=8,
777
+ args_template=['-nointeractive', '-timeout', '10'],
778
+ description='Fingerprinting complete, scanning for server misconfigurations with Nikto'
779
+ ),
780
+ # Nuclei triggered by http_fingerprint
781
+ ChainRule(
782
+ trigger_tool='http_fingerprint',
783
+ trigger_condition='has:services',
635
784
  target_tool='nuclei',
636
785
  priority=9,
637
786
  args_template=['-tags', '{nuclei_tags}', '-severity', 'critical,high', '-rate-limit', '50', '-c', '10', '-timeout', '10'],
638
- description='Web server detected (HTTP/HTTPS), scanning with Nuclei'
787
+ description='Fingerprinting complete, scanning with Nuclei'
639
788
  ),
789
+ # Gobuster triggered by http_fingerprint
640
790
  ChainRule(
641
- trigger_tool='nmap',
642
- trigger_condition='service:http',
791
+ trigger_tool='http_fingerprint',
792
+ trigger_condition='has:services',
643
793
  target_tool='gobuster',
644
794
  priority=7,
645
795
  args_template=['dir', '-u', 'http://{target}:{port}', '-w', 'data/wordlists/web_dirs_common.txt', '-x', 'js,json,php,asp,aspx,html,txt,bak,old,zip', '--no-error', '--timeout', '30s', '-t', '5', '--delay', '20ms'],
646
- description='Web server detected (HTTP/HTTPS), discovering directories and files'
647
- ),
648
- # Nikto - web server vulnerability scanner (complements nuclei)
649
- ChainRule(
650
- trigger_tool='nmap',
651
- trigger_condition='service:http',
652
- target_tool='nikto',
653
- priority=8,
654
- args_template=['-nointeractive', '-timeout', '10'],
655
- description='Web server detected, scanning for server misconfigurations with Nikto'
796
+ description='Fingerprinting complete, discovering directories and files'
656
797
  ),
657
798
  # Dalfox - XSS scanner triggered after gobuster finds pages
658
799
  ChainRule(
@@ -731,14 +872,8 @@ class ToolChaining:
731
872
  args_template=['-a', '{target}'],
732
873
  description='SMB service detected, enumerating shares and users (runs after CrackMapExec)'
733
874
  ),
734
- ChainRule(
735
- trigger_tool='nmap',
736
- trigger_condition='service:smb',
737
- target_tool='smbmap',
738
- priority=7,
739
- args_template=['-H', '{target}'],
740
- description='SMB service detected, mapping shares'
741
- ),
875
+ # NOTE: smbmap removed - has upstream impacket pickling bug on Python 3.13+
876
+ # Use crackmapexec/netexec --shares instead (enum4linux rule above)
742
877
  ])
743
878
 
744
879
  # Active Directory attacks - smart chaining workflow
@@ -1143,13 +1278,16 @@ class ToolChaining:
1143
1278
  # )
1144
1279
  # )
1145
1280
 
1281
+ # DISABLED: smbmap has upstream pickling bug - won't produce results
1146
1282
  # Writable SMB shares found → check for exploitability
1283
+ # TODO: Add rule triggering from crackmapexec writable shares detection
1147
1284
  self.rules.append(
1148
1285
  ChainRule(
1149
1286
  trigger_tool='smbmap',
1150
1287
  trigger_condition='has:writable_shares',
1151
1288
  target_tool='msf_auxiliary',
1152
1289
  priority=10,
1290
+ enabled=False, # Disabled - smbmap broken
1153
1291
  args_template=['auxiliary/scanner/smb/smb_version'],
1154
1292
  description='Writable SMB shares found, checking for vulnerabilities'
1155
1293
  )
@@ -1908,28 +2046,42 @@ class ToolChaining:
1908
2046
 
1909
2047
  # vsftpd 2.3.4 backdoor (CVE-2011-2523)
1910
2048
  # Triggers backdoor shell on port 6200 when username contains :)
2049
+ # Match FTP service with version 2.3.4 (nmap often shows just "ftp" + "2.3.4")
1911
2050
  self.rules.append(
1912
2051
  ChainRule(
1913
2052
  trigger_tool='nmap',
1914
- trigger_condition='version:vsftpd 2.3.4',
2053
+ trigger_condition='service:ftp & svc_version:2.3.4',
1915
2054
  target_tool='msf_exploit',
1916
2055
  priority=10,
1917
2056
  args_template=['exploit/unix/ftp/vsftpd_234_backdoor'],
1918
- description='vsftpd 2.3.4 detected - BACKDOOR AVAILABLE (CVE-2011-2523)',
2057
+ description='FTP 2.3.4 detected - checking for vsftpd backdoor (CVE-2011-2523)',
1919
2058
  category=CATEGORY_CTF
1920
2059
  )
1921
2060
  )
1922
2061
 
1923
2062
  # Samba 3.0.x usermap_script RCE (CVE-2007-2447)
1924
2063
  # Command injection in username field
2064
+ # Match SMB service with version starting with 3 (nmap shows "3.X" or "3.0.x")
1925
2065
  self.rules.append(
1926
2066
  ChainRule(
1927
2067
  trigger_tool='nmap',
1928
- trigger_condition='version:Samba 3.0',
2068
+ trigger_condition='service:smb & svc_version:3.',
1929
2069
  target_tool='msf_exploit',
1930
2070
  priority=10,
1931
2071
  args_template=['exploit/multi/samba/usermap_script'],
1932
- description='Samba 3.0.x detected - usermap_script RCE available (CVE-2007-2447)',
2072
+ description='Samba 3.x detected - checking for usermap_script RCE (CVE-2007-2447)',
2073
+ category=CATEGORY_CTF
2074
+ )
2075
+ )
2076
+ # Also match netbios-ssn service (common nmap detection for SMB)
2077
+ self.rules.append(
2078
+ ChainRule(
2079
+ trigger_tool='nmap',
2080
+ trigger_condition='service:netbios-ssn & svc_version:3.',
2081
+ target_tool='msf_exploit',
2082
+ priority=10,
2083
+ args_template=['exploit/multi/samba/usermap_script'],
2084
+ description='Samba 3.x detected (netbios-ssn) - checking for usermap_script RCE (CVE-2007-2447)',
1933
2085
  category=CATEGORY_CTF
1934
2086
  )
1935
2087
  )
@@ -2132,14 +2284,15 @@ class ToolChaining:
2132
2284
  )
2133
2285
 
2134
2286
  # ProFTPD mod_copy (CVE-2015-3306) - file copy without auth
2287
+ # Match FTP service with version 1.3.x (common ProFTPD versions)
2135
2288
  self.rules.append(
2136
2289
  ChainRule(
2137
2290
  trigger_tool='nmap',
2138
- trigger_condition='version:ProFTPD 1.3',
2291
+ trigger_condition='service:ftp & svc_version:1.3',
2139
2292
  target_tool='msf_exploit',
2140
2293
  priority=8,
2141
2294
  args_template=['exploit/unix/ftp/proftpd_modcopy_exec'],
2142
- description='ProFTPD 1.3.x detected - checking for mod_copy RCE (CVE-2015-3306)',
2295
+ description='FTP 1.3.x detected - checking for ProFTPD mod_copy RCE (CVE-2015-3306)',
2143
2296
  category=CATEGORY_CTF
2144
2297
  )
2145
2298
  )
@@ -4160,6 +4313,40 @@ class ToolChaining:
4160
4313
  if len(app_databases) > db_limit:
4161
4314
  logger.info(f"SQLMap auto-chaining limited to first {db_limit} of {len(app_databases)} application databases")
4162
4315
 
4316
+ # === Post-exploitation chain rules (is_dba, file_read, os_cmd) ===
4317
+ # Check for post-exploitation flags and fire appropriate chain rules
4318
+ is_dba = parse_results.get('is_dba', False)
4319
+ file_read_success = parse_results.get('file_read_success', False)
4320
+ os_command_success = parse_results.get('os_command_success', False)
4321
+
4322
+ if is_dba or file_read_success or os_command_success:
4323
+ from souleyez.log_config import get_logger
4324
+ logger = get_logger(__name__)
4325
+
4326
+ # Build context with post-exploitation flags using injectable_url
4327
+ post_exploit_context = {
4328
+ 'target': injectable_url, # Use the correct injectable URL
4329
+ 'tool': tool,
4330
+ 'is_dba': is_dba,
4331
+ 'file_read_success': file_read_success,
4332
+ 'os_command_success': os_command_success,
4333
+ 'post_data': post_data, # Preserve POST data for subsequent commands
4334
+ }
4335
+
4336
+ if is_dba:
4337
+ logger.info(f"SQLMap: DBA access confirmed! Evaluating post-exploitation chains...")
4338
+ if file_read_success:
4339
+ logger.info(f"SQLMap: File read successful! Evaluating file read chains...")
4340
+ if os_command_success:
4341
+ logger.info(f"SQLMap: OS command execution successful!")
4342
+
4343
+ # Evaluate chain rules - this will fire rules like has:is_dba
4344
+ commands = self.evaluate_chains(tool, post_exploit_context)
4345
+ if commands:
4346
+ logger.info(f"SQLMap: Matched {len(commands)} post-exploitation chain rule(s)")
4347
+ job_ids.extend(self._enqueue_commands(commands, tool, engagement_id, injectable_url, parent_job_id=job.get('id')))
4348
+ # === END Post-exploitation chain rules ===
4349
+
4163
4350
  return job_ids
4164
4351
  # === END SQLMap special handling ===
4165
4352
 
@@ -4877,6 +5064,28 @@ class ToolChaining:
4877
5064
  if not endpoint_url:
4878
5065
  continue
4879
5066
 
5067
+ # === Filter out non-injectable files ===
5068
+ path_lower = endpoint_url.lower()
5069
+ filename = path_lower.split('/')[-1] if '/' in path_lower else path_lower
5070
+
5071
+ # Skip Apache/nginx config files
5072
+ if filename.startswith('.ht') or filename.startswith('.nginx'):
5073
+ logger.debug(f"Skipping config file: {endpoint_url}")
5074
+ continue
5075
+
5076
+ # Skip static files that can't have SQL injection
5077
+ static_extensions = (
5078
+ '.html', '.htm', '.txt', '.css', '.js', '.json',
5079
+ '.xml', '.svg', '.png', '.jpg', '.jpeg', '.gif',
5080
+ '.ico', '.woff', '.woff2', '.ttf', '.eot',
5081
+ '.pdf', '.doc', '.docx', '.xls', '.xlsx',
5082
+ '.bak', '.old', '.backup', '.swp', '.orig',
5083
+ '.map', '.md', '.rst', '.log'
5084
+ )
5085
+ if any(filename.endswith(ext) for ext in static_extensions):
5086
+ logger.debug(f"Skipping static file: {endpoint_url}")
5087
+ continue
5088
+
4880
5089
  # === SQLMap for testable endpoints ===
4881
5090
  if status_code in testable_statuses and created_sqlmap_jobs < max_sqlmap_jobs:
4882
5091
  # For API endpoints without parameters, add test parameters
@@ -5635,18 +5844,25 @@ class ToolChaining:
5635
5844
  # Auto mode: enqueue immediately
5636
5845
  print(f" 🔗 Chaining {cmd['tool']} for {cmd_target}: {cmd['reason']}")
5637
5846
  # enqueue_job will acquire _lock again (nested lock is safe - same thread)
5638
- job_id = enqueue_job(
5639
- tool=cmd['tool'],
5640
- target=cmd_target,
5641
- args=resolved_args,
5642
- label=source_tool,
5643
- engagement_id=engagement_id,
5644
- parent_id=parent_job_id,
5645
- reason=cmd.get('reason', f"Auto-chain from {source_tool}"),
5646
- metadata=cmd.get('metadata'), # Pass through deduplication metadata
5647
- rule_id=cmd.get('rule_id') # Pass rule ID for tracking
5648
- )
5649
- job_ids.append(job_id)
5847
+ try:
5848
+ job_id = enqueue_job(
5849
+ tool=cmd['tool'],
5850
+ target=cmd_target,
5851
+ args=resolved_args,
5852
+ label=source_tool,
5853
+ engagement_id=engagement_id,
5854
+ parent_id=parent_job_id,
5855
+ reason=cmd.get('reason', f"Auto-chain from {source_tool}"),
5856
+ metadata=cmd.get('metadata'), # Pass through deduplication metadata
5857
+ rule_id=cmd.get('rule_id') # Pass rule ID for tracking
5858
+ )
5859
+ job_ids.append(job_id)
5860
+ except Exception as scope_err:
5861
+ # Handle scope violations gracefully - skip out-of-scope targets
5862
+ if 'ScopeViolationError' in type(scope_err).__name__ or 'out of scope' in str(scope_err).lower():
5863
+ print(f" ⚠️ Skipped (out of scope): {cmd_target}")
5864
+ else:
5865
+ raise # Re-raise unexpected errors
5650
5866
 
5651
5867
  # Lock released here - next iteration gets fresh lock
5652
5868
 
@@ -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.28.0
4
+ **Last Updated:** January 9, 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.