secator 0.16.2__tar.gz → 0.16.4__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.

Potentially problematic release.


This version of secator might be problematic. Click here for more details.

Files changed (213) hide show
  1. {secator-0.16.2 → secator-0.16.4}/CHANGELOG.md +21 -0
  2. {secator-0.16.2 → secator-0.16.4}/PKG-INFO +1 -1
  3. {secator-0.16.2 → secator-0.16.4}/cloudbuild.yaml +4 -3
  4. {secator-0.16.2 → secator-0.16.4}/pyproject.toml +1 -1
  5. {secator-0.16.2 → secator-0.16.4}/secator/celery.py +39 -2
  6. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/url_crawl.yaml +9 -12
  7. {secator-0.16.2 → secator-0.16.4}/secator/hooks/gcs.py +1 -1
  8. {secator-0.16.2 → secator-0.16.4}/secator/hooks/mongodb.py +25 -3
  9. {secator-0.16.2 → secator-0.16.4}/secator/runners/_base.py +9 -4
  10. {secator-0.16.2 → secator-0.16.4}/secator/tasks/bup.py +1 -0
  11. {secator-0.16.2 → secator-0.16.4}/secator/tasks/dalfox.py +2 -6
  12. {secator-0.16.2 → secator-0.16.4}/.coderabbit.yaml +0 -0
  13. {secator-0.16.2 → secator-0.16.4}/.docker/Dockerfile.alpine +0 -0
  14. {secator-0.16.2 → secator-0.16.4}/.docker/Dockerfile.arch +0 -0
  15. {secator-0.16.2 → secator-0.16.4}/.docker/Dockerfile.debian +0 -0
  16. {secator-0.16.2 → secator-0.16.4}/.docker/Dockerfile.kali +0 -0
  17. {secator-0.16.2 → secator-0.16.4}/.docker/Dockerfile.osx +0 -0
  18. {secator-0.16.2 → secator-0.16.4}/.docker/Dockerfile.ubuntu +0 -0
  19. {secator-0.16.2 → secator-0.16.4}/.docker/build_all.sh +0 -0
  20. {secator-0.16.2 → secator-0.16.4}/.dockerignore +0 -0
  21. {secator-0.16.2 → secator-0.16.4}/.flake8 +0 -0
  22. {secator-0.16.2 → secator-0.16.4}/.gitignore +0 -0
  23. {secator-0.16.2 → secator-0.16.4}/CONTRIBUTING.md +0 -0
  24. {secator-0.16.2 → secator-0.16.4}/Dockerfile +0 -0
  25. {secator-0.16.2 → secator-0.16.4}/LICENSE +0 -0
  26. {secator-0.16.2 → secator-0.16.4}/README.md +0 -0
  27. {secator-0.16.2 → secator-0.16.4}/SECURITY.md +0 -0
  28. {secator-0.16.2 → secator-0.16.4}/helm/.helmignore +0 -0
  29. {secator-0.16.2 → secator-0.16.4}/helm/Chart.yaml +0 -0
  30. {secator-0.16.2 → secator-0.16.4}/helm/templates/redis-service.yaml +0 -0
  31. {secator-0.16.2 → secator-0.16.4}/helm/templates/redis.yaml +0 -0
  32. {secator-0.16.2 → secator-0.16.4}/helm/templates/secator-manager.yaml +0 -0
  33. {secator-0.16.2 → secator-0.16.4}/helm/templates/secator-worker.yaml +0 -0
  34. {secator-0.16.2 → secator-0.16.4}/helm/values.yaml +0 -0
  35. {secator-0.16.2 → secator-0.16.4}/scripts/download_cves.sh +0 -0
  36. {secator-0.16.2 → secator-0.16.4}/scripts/generate_tools_md_table.py +0 -0
  37. {secator-0.16.2 → secator-0.16.4}/scripts/install.sh +0 -0
  38. {secator-0.16.2 → secator-0.16.4}/scripts/install_asciinema.sh +0 -0
  39. {secator-0.16.2 → secator-0.16.4}/scripts/install_go.sh +0 -0
  40. {secator-0.16.2 → secator-0.16.4}/scripts/install_ruby.sh +0 -0
  41. {secator-0.16.2 → secator-0.16.4}/scripts/msf/exploit_cve.rc +0 -0
  42. {secator-0.16.2 → secator-0.16.4}/scripts/msf/ftp_anonymous.rc +0 -0
  43. {secator-0.16.2 → secator-0.16.4}/scripts/msf/ftp_version.rc +0 -0
  44. {secator-0.16.2 → secator-0.16.4}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
  45. {secator-0.16.2 → secator-0.16.4}/scripts/msf/redis.rc +0 -0
  46. {secator-0.16.2 → secator-0.16.4}/scripts/stories/STORY.md +0 -0
  47. {secator-0.16.2 → secator-0.16.4}/scripts/stories/aliases.sh +0 -0
  48. {secator-0.16.2 → secator-0.16.4}/scripts/stories/demo.sh +0 -0
  49. {secator-0.16.2 → secator-0.16.4}/scripts/stories/fmt.sh +0 -0
  50. {secator-0.16.2 → secator-0.16.4}/scripts/stories/input.sh +0 -0
  51. {secator-0.16.2 → secator-0.16.4}/scripts/stories/pipe.sh +0 -0
  52. {secator-0.16.2 → secator-0.16.4}/scripts/stories/short_demo.sh +0 -0
  53. {secator-0.16.2 → secator-0.16.4}/scripts/update_tools.sh +0 -0
  54. {secator-0.16.2 → secator-0.16.4}/secator/.gitignore +0 -0
  55. {secator-0.16.2 → secator-0.16.4}/secator/__init__.py +0 -0
  56. {secator-0.16.2 → secator-0.16.4}/secator/celery_signals.py +0 -0
  57. {secator-0.16.2 → secator-0.16.4}/secator/celery_utils.py +0 -0
  58. {secator-0.16.2 → secator-0.16.4}/secator/cli.py +0 -0
  59. {secator-0.16.2 → secator-0.16.4}/secator/cli_helper.py +0 -0
  60. {secator-0.16.2 → secator-0.16.4}/secator/click.py +0 -0
  61. {secator-0.16.2 → secator-0.16.4}/secator/config.py +0 -0
  62. {secator-0.16.2 → secator-0.16.4}/secator/configs/__init__.py +0 -0
  63. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/__init__.py +0 -0
  64. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/aggressive.yaml +0 -0
  65. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/http_headless.yaml +0 -0
  66. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/http_record.yaml +0 -0
  67. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/insane.yaml +0 -0
  68. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/paranoid.yaml +0 -0
  69. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/polite.yaml +0 -0
  70. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/sneaky.yaml +0 -0
  71. {secator-0.16.2 → secator-0.16.4}/secator/configs/profiles/tor.yaml +0 -0
  72. {secator-0.16.2 → secator-0.16.4}/secator/configs/scans/__init__.py +0 -0
  73. {secator-0.16.2 → secator-0.16.4}/secator/configs/scans/domain.yaml +0 -0
  74. {secator-0.16.2 → secator-0.16.4}/secator/configs/scans/host.yaml +0 -0
  75. {secator-0.16.2 → secator-0.16.4}/secator/configs/scans/network.yaml +0 -0
  76. {secator-0.16.2 → secator-0.16.4}/secator/configs/scans/subdomain.yaml +0 -0
  77. {secator-0.16.2 → secator-0.16.4}/secator/configs/scans/url.yaml +0 -0
  78. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/__init__.py +0 -0
  79. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/cidr_recon.yaml +0 -0
  80. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/code_scan.yaml +0 -0
  81. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/host_recon.yaml +0 -0
  82. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/subdomain_recon.yaml +0 -0
  83. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/url_bypass.yaml +0 -0
  84. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/url_dirsearch.yaml +0 -0
  85. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/url_fuzz.yaml +0 -0
  86. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/url_params_fuzz.yaml +0 -0
  87. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/url_vuln.yaml +0 -0
  88. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/user_hunt.yaml +0 -0
  89. {secator-0.16.2 → secator-0.16.4}/secator/configs/workflows/wordpress.yaml +0 -0
  90. {secator-0.16.2 → secator-0.16.4}/secator/cve.py +0 -0
  91. {secator-0.16.2 → secator-0.16.4}/secator/decorators.py +0 -0
  92. {secator-0.16.2 → secator-0.16.4}/secator/definitions.py +0 -0
  93. {secator-0.16.2 → secator-0.16.4}/secator/exporters/__init__.py +0 -0
  94. {secator-0.16.2 → secator-0.16.4}/secator/exporters/_base.py +0 -0
  95. {secator-0.16.2 → secator-0.16.4}/secator/exporters/console.py +0 -0
  96. {secator-0.16.2 → secator-0.16.4}/secator/exporters/csv.py +0 -0
  97. {secator-0.16.2 → secator-0.16.4}/secator/exporters/gdrive.py +0 -0
  98. {secator-0.16.2 → secator-0.16.4}/secator/exporters/json.py +0 -0
  99. {secator-0.16.2 → secator-0.16.4}/secator/exporters/table.py +0 -0
  100. {secator-0.16.2 → secator-0.16.4}/secator/exporters/txt.py +0 -0
  101. {secator-0.16.2 → secator-0.16.4}/secator/hooks/__init__.py +0 -0
  102. {secator-0.16.2 → secator-0.16.4}/secator/installer.py +0 -0
  103. {secator-0.16.2 → secator-0.16.4}/secator/loader.py +0 -0
  104. {secator-0.16.2 → secator-0.16.4}/secator/output_types/__init__.py +0 -0
  105. {secator-0.16.2 → secator-0.16.4}/secator/output_types/_base.py +0 -0
  106. {secator-0.16.2 → secator-0.16.4}/secator/output_types/certificate.py +0 -0
  107. {secator-0.16.2 → secator-0.16.4}/secator/output_types/error.py +0 -0
  108. {secator-0.16.2 → secator-0.16.4}/secator/output_types/exploit.py +0 -0
  109. {secator-0.16.2 → secator-0.16.4}/secator/output_types/info.py +0 -0
  110. {secator-0.16.2 → secator-0.16.4}/secator/output_types/ip.py +0 -0
  111. {secator-0.16.2 → secator-0.16.4}/secator/output_types/port.py +0 -0
  112. {secator-0.16.2 → secator-0.16.4}/secator/output_types/progress.py +0 -0
  113. {secator-0.16.2 → secator-0.16.4}/secator/output_types/record.py +0 -0
  114. {secator-0.16.2 → secator-0.16.4}/secator/output_types/stat.py +0 -0
  115. {secator-0.16.2 → secator-0.16.4}/secator/output_types/state.py +0 -0
  116. {secator-0.16.2 → secator-0.16.4}/secator/output_types/subdomain.py +0 -0
  117. {secator-0.16.2 → secator-0.16.4}/secator/output_types/tag.py +0 -0
  118. {secator-0.16.2 → secator-0.16.4}/secator/output_types/target.py +0 -0
  119. {secator-0.16.2 → secator-0.16.4}/secator/output_types/url.py +0 -0
  120. {secator-0.16.2 → secator-0.16.4}/secator/output_types/user_account.py +0 -0
  121. {secator-0.16.2 → secator-0.16.4}/secator/output_types/vulnerability.py +0 -0
  122. {secator-0.16.2 → secator-0.16.4}/secator/output_types/warning.py +0 -0
  123. {secator-0.16.2 → secator-0.16.4}/secator/report.py +0 -0
  124. {secator-0.16.2 → secator-0.16.4}/secator/rich.py +0 -0
  125. {secator-0.16.2 → secator-0.16.4}/secator/runners/__init__.py +0 -0
  126. {secator-0.16.2 → secator-0.16.4}/secator/runners/_helpers.py +0 -0
  127. {secator-0.16.2 → secator-0.16.4}/secator/runners/celery.py +0 -0
  128. {secator-0.16.2 → secator-0.16.4}/secator/runners/command.py +0 -0
  129. {secator-0.16.2 → secator-0.16.4}/secator/runners/scan.py +0 -0
  130. {secator-0.16.2 → secator-0.16.4}/secator/runners/task.py +0 -0
  131. {secator-0.16.2 → secator-0.16.4}/secator/runners/workflow.py +0 -0
  132. {secator-0.16.2 → secator-0.16.4}/secator/scans/__init__.py +0 -0
  133. {secator-0.16.2 → secator-0.16.4}/secator/serializers/__init__.py +0 -0
  134. {secator-0.16.2 → secator-0.16.4}/secator/serializers/dataclass.py +0 -0
  135. {secator-0.16.2 → secator-0.16.4}/secator/serializers/json.py +0 -0
  136. {secator-0.16.2 → secator-0.16.4}/secator/serializers/regex.py +0 -0
  137. {secator-0.16.2 → secator-0.16.4}/secator/tasks/__init__.py +0 -0
  138. {secator-0.16.2 → secator-0.16.4}/secator/tasks/_categories.py +0 -0
  139. {secator-0.16.2 → secator-0.16.4}/secator/tasks/arjun.py +0 -0
  140. {secator-0.16.2 → secator-0.16.4}/secator/tasks/bbot.py +0 -0
  141. {secator-0.16.2 → secator-0.16.4}/secator/tasks/cariddi.py +0 -0
  142. {secator-0.16.2 → secator-0.16.4}/secator/tasks/dirsearch.py +0 -0
  143. {secator-0.16.2 → secator-0.16.4}/secator/tasks/dnsx.py +0 -0
  144. {secator-0.16.2 → secator-0.16.4}/secator/tasks/feroxbuster.py +0 -0
  145. {secator-0.16.2 → secator-0.16.4}/secator/tasks/ffuf.py +0 -0
  146. {secator-0.16.2 → secator-0.16.4}/secator/tasks/fping.py +0 -0
  147. {secator-0.16.2 → secator-0.16.4}/secator/tasks/gau.py +0 -0
  148. {secator-0.16.2 → secator-0.16.4}/secator/tasks/gf.py +0 -0
  149. {secator-0.16.2 → secator-0.16.4}/secator/tasks/gitleaks.py +0 -0
  150. {secator-0.16.2 → secator-0.16.4}/secator/tasks/gospider.py +0 -0
  151. {secator-0.16.2 → secator-0.16.4}/secator/tasks/grype.py +0 -0
  152. {secator-0.16.2 → secator-0.16.4}/secator/tasks/h8mail.py +0 -0
  153. {secator-0.16.2 → secator-0.16.4}/secator/tasks/httpx.py +0 -0
  154. {secator-0.16.2 → secator-0.16.4}/secator/tasks/katana.py +0 -0
  155. {secator-0.16.2 → secator-0.16.4}/secator/tasks/maigret.py +0 -0
  156. {secator-0.16.2 → secator-0.16.4}/secator/tasks/mapcidr.py +0 -0
  157. {secator-0.16.2 → secator-0.16.4}/secator/tasks/msfconsole.py +0 -0
  158. {secator-0.16.2 → secator-0.16.4}/secator/tasks/naabu.py +0 -0
  159. {secator-0.16.2 → secator-0.16.4}/secator/tasks/nmap.py +0 -0
  160. {secator-0.16.2 → secator-0.16.4}/secator/tasks/nuclei.py +0 -0
  161. {secator-0.16.2 → secator-0.16.4}/secator/tasks/searchsploit.py +0 -0
  162. {secator-0.16.2 → secator-0.16.4}/secator/tasks/subfinder.py +0 -0
  163. {secator-0.16.2 → secator-0.16.4}/secator/tasks/testssl.py +0 -0
  164. {secator-0.16.2 → secator-0.16.4}/secator/tasks/trivy.py +0 -0
  165. {secator-0.16.2 → secator-0.16.4}/secator/tasks/wafw00f.py +0 -0
  166. {secator-0.16.2 → secator-0.16.4}/secator/tasks/wpprobe.py +0 -0
  167. {secator-0.16.2 → secator-0.16.4}/secator/tasks/wpscan.py +0 -0
  168. {secator-0.16.2 → secator-0.16.4}/secator/template.py +0 -0
  169. {secator-0.16.2 → secator-0.16.4}/secator/thread.py +0 -0
  170. {secator-0.16.2 → secator-0.16.4}/secator/tree.py +0 -0
  171. {secator-0.16.2 → secator-0.16.4}/secator/utils.py +0 -0
  172. {secator-0.16.2 → secator-0.16.4}/secator/utils_test.py +0 -0
  173. {secator-0.16.2 → secator-0.16.4}/secator/workflows/__init__.py +0 -0
  174. {secator-0.16.2 → secator-0.16.4}/tests/__init__.py +0 -0
  175. {secator-0.16.2 → secator-0.16.4}/tests/fixtures/h8mail_breach.txt +0 -0
  176. {secator-0.16.2 → secator-0.16.4}/tests/fixtures/ls.py +0 -0
  177. {secator-0.16.2 → secator-0.16.4}/tests/fixtures/msfconsole_input.rc +0 -0
  178. {secator-0.16.2 → secator-0.16.4}/tests/fixtures/nmap_output.xml +0 -0
  179. {secator-0.16.2 → secator-0.16.4}/tests/integration/__init__.py +0 -0
  180. {secator-0.16.2 → secator-0.16.4}/tests/integration/all.yaml +0 -0
  181. {secator-0.16.2 → secator-0.16.4}/tests/integration/inputs.py +0 -0
  182. {secator-0.16.2 → secator-0.16.4}/tests/integration/outputs.py +0 -0
  183. {secator-0.16.2 → secator-0.16.4}/tests/integration/setup.sh +0 -0
  184. {secator-0.16.2 → secator-0.16.4}/tests/integration/teardown.sh +0 -0
  185. {secator-0.16.2 → secator-0.16.4}/tests/integration/test_addons.py +0 -0
  186. {secator-0.16.2 → secator-0.16.4}/tests/integration/test_celery.py +0 -0
  187. {secator-0.16.2 → secator-0.16.4}/tests/integration/test_scans.py +0 -0
  188. {secator-0.16.2 → secator-0.16.4}/tests/integration/test_tasks.py +0 -0
  189. {secator-0.16.2 → secator-0.16.4}/tests/integration/test_tasks_categories.py +0 -0
  190. {secator-0.16.2 → secator-0.16.4}/tests/integration/test_worker.py +0 -0
  191. {secator-0.16.2 → secator-0.16.4}/tests/integration/test_workflows.py +0 -0
  192. {secator-0.16.2 → secator-0.16.4}/tests/integration/wordlist.txt +0 -0
  193. {secator-0.16.2 → secator-0.16.4}/tests/integration/wordlist_dns.txt +0 -0
  194. {secator-0.16.2 → secator-0.16.4}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
  195. {secator-0.16.2 → secator-0.16.4}/tests/integration/wordpress_toolbox/Makefile +0 -0
  196. {secator-0.16.2 → secator-0.16.4}/tests/performance/__init__.py +0 -0
  197. {secator-0.16.2 → secator-0.16.4}/tests/performance/loadtester.py +0 -0
  198. {secator-0.16.2 → secator-0.16.4}/tests/performance/test_worker.py +0 -0
  199. {secator-0.16.2 → secator-0.16.4}/tests/template/test_templates.py +0 -0
  200. {secator-0.16.2 → secator-0.16.4}/tests/unit/__init__.py +0 -0
  201. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_celery.py +0 -0
  202. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_cli.py +0 -0
  203. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_command.py +0 -0
  204. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_config.py +0 -0
  205. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_offline.py +0 -0
  206. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_runners.py +0 -0
  207. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_runners_helpers.py +0 -0
  208. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_scans.py +0 -0
  209. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_serializers.py +0 -0
  210. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_tasks.py +0 -0
  211. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_tasks_categories.py +0 -0
  212. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_template.py +0 -0
  213. {secator-0.16.2 → secator-0.16.4}/tests/unit/test_utils.py +0 -0
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.16.4](https://github.com/freelabz/secator/compare/v0.16.3...v0.16.4) (2025-06-13)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **dalfox:** reduce chunk size for dalfox ([#700](https://github.com/freelabz/secator/issues/700)) ([c14be68](https://github.com/freelabz/secator/commit/c14be68427d18072cf75c61fb6ae966f97515d15))
9
+ * **gcs:** add stored_response_path to sent items ([#697](https://github.com/freelabz/secator/issues/697)) ([7c6f992](https://github.com/freelabz/secator/commit/7c6f992b6c7898e956436e169b64af1d9f1d8934))
10
+ * mongodb optimizations ([#699](https://github.com/freelabz/secator/issues/699)) ([c0497a6](https://github.com/freelabz/secator/commit/c0497a67c293680dafdc052eff510ffd17edafe6))
11
+
12
+ ## [0.16.3](https://github.com/freelabz/secator/compare/v0.16.2...v0.16.3) (2025-06-11)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * bup file flag ([#690](https://github.com/freelabz/secator/issues/690)) ([83d83d7](https://github.com/freelabz/secator/commit/83d83d72c5c523ea44dcc3cb78f478c935ed4127))
18
+ * **celery:** add no_live_updates to skip backend updates ([#695](https://github.com/freelabz/secator/issues/695)) ([c99599c](https://github.com/freelabz/secator/commit/c99599caa219312e8ca2e190d8353960ca4f2633))
19
+ * **dalfox:** use jsonl option instead of json ([#692](https://github.com/freelabz/secator/issues/692)) ([c406e34](https://github.com/freelabz/secator/commit/c406e346a4011b0c57efd7b6d5e518ee6d7953e6))
20
+ * **mongodb:** add all output types ([#696](https://github.com/freelabz/secator/issues/696)) ([af98935](https://github.com/freelabz/secator/commit/af989352662f53903768c268347e6046db9dd8fd))
21
+ * show info message for mark_runner_started / mark_runner_completed ([#694](https://github.com/freelabz/secator/issues/694)) ([ed0f6cb](https://github.com/freelabz/secator/commit/ed0f6cb1464c962fc6f65381762fd23330f9aa85))
22
+ * **workflow:** put cariddi in crawlers group ([#693](https://github.com/freelabz/secator/issues/693)) ([a9e1afd](https://github.com/freelabz/secator/commit/a9e1afd97256aefc33d179d9e3d4091f24b332b2))
23
+
3
24
  ## [0.16.2](https://github.com/freelabz/secator/compare/v0.16.1...v0.16.2) (2025-06-06)
4
25
 
5
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secator
3
- Version: 0.16.2
3
+ Version: 0.16.4
4
4
  Summary: The pentester's swiss knife.
5
5
  Project-URL: Homepage, https://github.com/freelabz/secator
6
6
  Project-URL: Issues, https://github.com/freelabz/secator/issues
@@ -1,12 +1,13 @@
1
1
  steps:
2
2
  - name: 'gcr.io/cloud-builders/docker'
3
3
  entrypoint: 'bash'
4
- args: ['-c', 'docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:latest || exit 0']
4
+ args: ['-c', 'docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION} || exit 0']
5
5
  - name: 'gcr.io/cloud-builders/docker'
6
- args: ['build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator', '--cache-from', 'europe-west1-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:latest', '.']
6
+ args: ['build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION}', '--cache-from', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION}', '.']
7
7
  substitutions:
8
8
  _REPOSITORY: secator
9
9
  _LOCATION: europe-west1
10
+ _VERSION: latest
10
11
 
11
12
  images:
12
- - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator'
13
+ - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/secator:${_VERSION}'
@@ -4,7 +4,7 @@ build-backend = 'hatchling.build'
4
4
 
5
5
  [project]
6
6
  name = 'secator'
7
- version = "0.16.2"
7
+ version = "0.16.4"
8
8
  authors = [{ name = 'FreeLabz', email = 'sales@freelabz.com' }]
9
9
  readme = 'README.md'
10
10
  description = "The pentester's swiss knife."
@@ -100,6 +100,8 @@ def update_state(celery_task, task, force=False):
100
100
  """Update task state to add metadata information."""
101
101
  if not IN_CELERY_WORKER_PROCESS:
102
102
  return
103
+ if task.no_live_updates:
104
+ return
103
105
  if not force and not should_update(CONFIG.runners.backend_update_frequency, task.last_updated_celery):
104
106
  return
105
107
  task.last_updated_celery = time()
@@ -212,19 +214,42 @@ def run_command(self, results, name, targets, opts={}):
212
214
  update_state(self, task)
213
215
  update_state(self, task, force=True)
214
216
 
217
+ if CONFIG.addons.mongodb.enabled:
218
+ return [r._uuid for r in task.results]
215
219
  return task.results
216
220
 
217
221
 
218
222
  @app.task
219
223
  def forward_results(results):
224
+ """Forward results to the next task (bridge task).
225
+
226
+ Args:
227
+ results (list): Results to forward.
228
+
229
+ Returns:
230
+ list: List of uuids.
231
+ """
220
232
  if isinstance(results, list):
221
233
  for ix, item in enumerate(results):
222
234
  if isinstance(item, dict) and 'results' in item:
223
235
  results[ix] = item['results']
224
236
  elif 'results' in results:
225
237
  results = results['results']
238
+
239
+ if IN_CELERY_WORKER_PROCESS:
240
+ console.print(Info(message=f'Deduplicating {len(results)} results'))
241
+
226
242
  results = flatten(results)
227
- results = deduplicate(results, attr='_uuid')
243
+ if CONFIG.addons.mongodb.enabled:
244
+ uuids = [r._uuid for r in results if hasattr(r, '_uuid')]
245
+ uuids.extend([r for r in results if isinstance(r, str)])
246
+ results = list(set(uuids))
247
+ else:
248
+ results = deduplicate(results, attr='_uuid')
249
+
250
+ if IN_CELERY_WORKER_PROCESS:
251
+ console.print(Info(message=f'Forwarded {len(results)} flattened and deduplicated results'))
252
+
228
253
  return results
229
254
 
230
255
 
@@ -240,10 +265,17 @@ def mark_runner_started(results, runner, enable_hooks=True):
240
265
  Returns:
241
266
  list: Runner results
242
267
  """
268
+ if IN_CELERY_WORKER_PROCESS:
269
+ console.print(Info(message=f'Runner {runner.unique_name} has started, running mark_started'))
243
270
  debug(f'Runner {runner.unique_name} has started, running mark_started', sub='celery')
244
271
  if results:
245
- runner.results = forward_results(results)
272
+ results = forward_results(results)
246
273
  runner.enable_hooks = enable_hooks
274
+ if CONFIG.addons.mongodb.enabled:
275
+ from secator.hooks.mongodb import get_results
276
+ results = get_results(results)
277
+ for item in results:
278
+ runner.add_result(item, print=False)
247
279
  runner.mark_started()
248
280
  return runner.results
249
281
 
@@ -260,9 +292,14 @@ def mark_runner_completed(results, runner, enable_hooks=True):
260
292
  Returns:
261
293
  list: Final results
262
294
  """
295
+ if IN_CELERY_WORKER_PROCESS:
296
+ console.print(Info(message=f'Runner {runner.unique_name} has finished, running mark_completed'))
263
297
  debug(f'Runner {runner.unique_name} has finished, running mark_completed', sub='celery')
264
298
  results = forward_results(results)
265
299
  runner.enable_hooks = enable_hooks
300
+ if CONFIG.addons.mongodb.enabled:
301
+ from secator.hooks.mongodb import get_results
302
+ results = get_results(results)
266
303
  for item in results:
267
304
  runner.add_result(item, print=False)
268
305
  runner.mark_completed()
@@ -9,7 +9,7 @@ input_types:
9
9
  options:
10
10
  crawlers:
11
11
  type: list
12
- help: Crawlers to use (katana, gospider)
12
+ help: Crawlers to use
13
13
  default: ['gau', 'katana']
14
14
  internal: True
15
15
 
@@ -36,17 +36,14 @@ tasks:
36
36
  description: Crawl URLs
37
37
  if: "'gospider' in opts.crawlers"
38
38
 
39
- cariddi:
40
- description: Hunt URLs patterns
41
- info: True
42
- secrets: True
43
- errors: True
44
- juicy_extensions: 1
45
- juicy_endpoints: True
46
- targets_:
47
- - target.name
48
- - url.url
49
- if: opts.hunt_patterns
39
+ cariddi:
40
+ description: Hunt URLs patterns
41
+ info: True
42
+ secrets: True
43
+ errors: True
44
+ juicy_extensions: 1
45
+ juicy_endpoints: True
46
+ if: opts.hunt_patterns
50
47
 
51
48
  httpx:
52
49
  description: Run HTTP probes on crawled URLs
@@ -11,7 +11,7 @@ from secator.utils import debug
11
11
 
12
12
  GCS_BUCKET_NAME = CONFIG.addons.gcs.bucket_name
13
13
  ITEMS_TO_SEND = {
14
- 'url': ['screenshot_path']
14
+ 'url': ['screenshot_path', 'stored_response_path']
15
15
  }
16
16
 
17
17
 
@@ -6,7 +6,7 @@ from bson.objectid import ObjectId
6
6
  from celery import shared_task
7
7
 
8
8
  from secator.config import CONFIG
9
- from secator.output_types import FINDING_TYPES
9
+ from secator.output_types import OUTPUT_TYPES
10
10
  from secator.runners import Scan, Task, Workflow
11
11
  from secator.utils import debug, escape_mongodb_url
12
12
 
@@ -46,6 +46,28 @@ def get_runner_dbg(runner):
46
46
  }
47
47
 
48
48
 
49
+ def get_results(uuids):
50
+ """Get results from MongoDB based on a list of uuids.
51
+
52
+ Args:
53
+ uuids (list[str | Output]): List of uuids, but can also be a mix of uuids and output types.
54
+
55
+ Returns:
56
+ Generator of findings.
57
+ """
58
+ client = get_mongodb_client()
59
+ db = client.main
60
+ del_uuids = []
61
+ for r in uuids:
62
+ if isinstance(r, tuple(OUTPUT_TYPES)):
63
+ yield r
64
+ del_uuids.append(r)
65
+ uuids = [ObjectId(u) for u in uuids if u not in del_uuids and ObjectId.is_valid(u)]
66
+ for r in db.findings.find({'_id': {'$in': uuids}}):
67
+ finding = load_finding(r)
68
+ yield finding
69
+
70
+
49
71
  def update_runner(self):
50
72
  client = get_mongodb_client()
51
73
  db = client.main
@@ -78,7 +100,7 @@ def update_runner(self):
78
100
 
79
101
 
80
102
  def update_finding(self, item):
81
- if type(item) not in FINDING_TYPES:
103
+ if type(item) not in OUTPUT_TYPES:
82
104
  return item
83
105
  start_time = time.time()
84
106
  client = get_mongodb_client()
@@ -120,7 +142,7 @@ def find_duplicates(self):
120
142
  def load_finding(obj):
121
143
  finding_type = obj['_type']
122
144
  klass = None
123
- for otype in FINDING_TYPES:
145
+ for otype in OUTPUT_TYPES:
124
146
  if finding_type == otype.get_name():
125
147
  klass = otype
126
148
  item = klass.load(obj)
@@ -117,6 +117,7 @@ class Runner:
117
117
 
118
118
  # Runner process options
119
119
  self.no_poll = self.run_opts.get('no_poll', False)
120
+ self.no_live_updates = self.run_opts.get('no_live_updates', False)
120
121
  self.no_process = not self.run_opts.get('process', True)
121
122
  self.piped_input = self.run_opts.get('piped_input', False)
122
123
  self.piped_output = self.run_opts.get('piped_output', False)
@@ -177,6 +178,10 @@ class Runner:
177
178
 
178
179
  # Add prior results to runner results
179
180
  self.debug(f'adding {len(results)} prior results to runner', sub='init')
181
+ if CONFIG.addons.mongodb.enabled:
182
+ self.debug('adding prior results from MongoDB', sub='init')
183
+ from secator.hooks.mongodb import get_results
184
+ results = get_results(results)
180
185
  for result in results:
181
186
  self.add_result(result, print=False, output=False, hooks=False, queue=not self.has_parent)
182
187
 
@@ -188,8 +193,8 @@ class Runner:
188
193
  for target in targets:
189
194
  self.add_result(target, print=False, output=False)
190
195
 
191
- # Run extractors on results and targets
192
- self._run_extractors(results + targets)
196
+ # Run extractors on results
197
+ self._run_extractors()
193
198
  self.debug(f'inputs ({len(self.inputs)})', obj=self.inputs, sub='init')
194
199
  self.debug(f'run opts ({len(self.resolved_opts)})', obj=self.resolved_opts, sub='init')
195
200
  self.debug(f'print opts ({len(self.resolved_print_opts)})', obj=self.resolved_print_opts, sub='init')
@@ -429,12 +434,12 @@ class Runner:
429
434
  if error:
430
435
  self.add_result(error)
431
436
 
432
- def _run_extractors(self, results):
437
+ def _run_extractors(self):
433
438
  """Run extractors on results and targets."""
434
439
  self.debug('running extractors', sub='init')
435
440
  ctx = {'opts': DotMap(self.run_opts), 'targets': self.inputs, 'ancestor_id': self.ancestor_id}
436
441
  inputs, run_opts, errors = run_extractors(
437
- results,
442
+ self.results,
438
443
  self.run_opts,
439
444
  self.inputs,
440
445
  ctx=ctx,
@@ -20,6 +20,7 @@ class bup(Http):
20
20
  output_types = [Url, Progress]
21
21
  tags = ['url', 'bypass']
22
22
  input_flag = '-u'
23
+ file_flag = '-R'
23
24
  json_flag = '--jsonl'
24
25
  opt_prefix = '--'
25
26
  opts = {
@@ -25,9 +25,10 @@ class dalfox(VulnHttp):
25
25
  output_types = [Vulnerability, Url]
26
26
  tags = ['url', 'fuzz']
27
27
  input_flag = 'url'
28
+ input_chunk_size = 20
28
29
  file_flag = 'file'
29
30
  # input_chunk_size = 1
30
- json_flag = '--format json'
31
+ json_flag = '--format jsonl'
31
32
  version_flag = 'version'
32
33
  opt_prefix = '--'
33
34
  opt_key_map = {
@@ -65,11 +66,6 @@ class dalfox(VulnHttp):
65
66
  proxy_http = True
66
67
  profile = 'cpu'
67
68
 
68
- @staticmethod
69
- def on_line(self, line):
70
- line = line.rstrip(',')
71
- return line
72
-
73
69
  @staticmethod
74
70
  def on_json_loaded(self, item):
75
71
  if item.get('type', '') == 'V':
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes