secator 0.8.2a0__tar.gz → 0.9.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.

Potentially problematic release.


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

Files changed (202) hide show
  1. {secator-0.8.2a0 → secator-0.9.0}/.gitignore +4 -2
  2. {secator-0.8.2a0 → secator-0.9.0}/CHANGELOG.md +25 -0
  3. {secator-0.8.2a0 → secator-0.9.0}/PKG-INFO +3 -3
  4. {secator-0.8.2a0 → secator-0.9.0}/README.md +2 -1
  5. {secator-0.8.2a0 → secator-0.9.0}/pyproject.toml +1 -2
  6. {secator-0.8.2a0 → secator-0.9.0}/secator/cli.py +16 -14
  7. {secator-0.8.2a0 → secator-0.9.0}/secator/installer.py +6 -0
  8. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/error.py +5 -1
  9. {secator-0.8.2a0 → secator-0.9.0}/secator/rich.py +1 -1
  10. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/command.py +6 -4
  11. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/bbot.py +12 -4
  12. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/httpx.py +3 -0
  13. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/naabu.py +1 -1
  14. {secator-0.8.2a0 → secator-0.9.0}/secator/utils.py +1 -1
  15. secator-0.8.2a0/.docker/Dockerfile.alpine +0 -26
  16. secator-0.8.2a0/.docker/Dockerfile.arch +0 -36
  17. secator-0.8.2a0/.docker/Dockerfile.debian +0 -38
  18. secator-0.8.2a0/.docker/Dockerfile.kali +0 -37
  19. secator-0.8.2a0/.docker/Dockerfile.osx +0 -40
  20. secator-0.8.2a0/.docker/Dockerfile.ubuntu +0 -37
  21. secator-0.8.2a0/.docker/build_all.sh +0 -30
  22. secator-0.8.2a0/images/aliases.cast +0 -444
  23. secator-0.8.2a0/images/aliases.gif +0 -0
  24. secator-0.8.2a0/images/demo.gif +0 -0
  25. secator-0.8.2a0/images/demo.tap +0 -47
  26. secator-0.8.2a0/images/fmt.cast +0 -672
  27. secator-0.8.2a0/images/fmt.gif +0 -0
  28. secator-0.8.2a0/images/help.png +0 -0
  29. secator-0.8.2a0/images/input.cast +0 -319
  30. secator-0.8.2a0/images/input.gif +0 -0
  31. secator-0.8.2a0/images/pipe.cast +0 -1310
  32. secator-0.8.2a0/images/pipe.gif +0 -0
  33. secator-0.8.2a0/images/short_demo.cast +0 -343
  34. secator-0.8.2a0/images/short_demo.gif +0 -0
  35. {secator-0.8.2a0 → secator-0.9.0}/.dockerignore +0 -0
  36. {secator-0.8.2a0 → secator-0.9.0}/.flake8 +0 -0
  37. {secator-0.8.2a0 → secator-0.9.0}/CONTRIBUTING.md +0 -0
  38. {secator-0.8.2a0 → secator-0.9.0}/Dockerfile +0 -0
  39. {secator-0.8.2a0 → secator-0.9.0}/LICENSE +0 -0
  40. {secator-0.8.2a0 → secator-0.9.0}/SECURITY.md +0 -0
  41. {secator-0.8.2a0 → secator-0.9.0}/cloudbuild.yaml +0 -0
  42. {secator-0.8.2a0 → secator-0.9.0}/helm/.helmignore +0 -0
  43. {secator-0.8.2a0 → secator-0.9.0}/helm/Chart.yaml +0 -0
  44. {secator-0.8.2a0 → secator-0.9.0}/helm/templates/redis-service.yaml +0 -0
  45. {secator-0.8.2a0 → secator-0.9.0}/helm/templates/redis.yaml +0 -0
  46. {secator-0.8.2a0 → secator-0.9.0}/helm/templates/secator-manager.yaml +0 -0
  47. {secator-0.8.2a0 → secator-0.9.0}/helm/templates/secator-worker.yaml +0 -0
  48. {secator-0.8.2a0 → secator-0.9.0}/helm/values.yaml +0 -0
  49. {secator-0.8.2a0 → secator-0.9.0}/scripts/download_cves.sh +0 -0
  50. {secator-0.8.2a0 → secator-0.9.0}/scripts/install.sh +0 -0
  51. {secator-0.8.2a0 → secator-0.9.0}/scripts/install_asciinema.sh +0 -0
  52. {secator-0.8.2a0 → secator-0.9.0}/scripts/install_go.sh +0 -0
  53. {secator-0.8.2a0 → secator-0.9.0}/scripts/install_ruby.sh +0 -0
  54. {secator-0.8.2a0 → secator-0.9.0}/scripts/msf/exploit_cve.rc +0 -0
  55. {secator-0.8.2a0 → secator-0.9.0}/scripts/msf/ftp_anonymous.rc +0 -0
  56. {secator-0.8.2a0 → secator-0.9.0}/scripts/msf/ftp_version.rc +0 -0
  57. {secator-0.8.2a0 → secator-0.9.0}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
  58. {secator-0.8.2a0 → secator-0.9.0}/scripts/msf/redis.rc +0 -0
  59. {secator-0.8.2a0 → secator-0.9.0}/scripts/stories/STORY.md +0 -0
  60. {secator-0.8.2a0 → secator-0.9.0}/scripts/stories/aliases.sh +0 -0
  61. {secator-0.8.2a0 → secator-0.9.0}/scripts/stories/demo.sh +0 -0
  62. {secator-0.8.2a0 → secator-0.9.0}/scripts/stories/fmt.sh +0 -0
  63. {secator-0.8.2a0 → secator-0.9.0}/scripts/stories/input.sh +0 -0
  64. {secator-0.8.2a0 → secator-0.9.0}/scripts/stories/pipe.sh +0 -0
  65. {secator-0.8.2a0 → secator-0.9.0}/scripts/stories/short_demo.sh +0 -0
  66. {secator-0.8.2a0 → secator-0.9.0}/secator/.gitignore +0 -0
  67. {secator-0.8.2a0 → secator-0.9.0}/secator/__init__.py +0 -0
  68. {secator-0.8.2a0 → secator-0.9.0}/secator/celery.py +0 -0
  69. {secator-0.8.2a0 → secator-0.9.0}/secator/celery_utils.py +0 -0
  70. {secator-0.8.2a0 → secator-0.9.0}/secator/config.py +0 -0
  71. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/__init__.py +0 -0
  72. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/profiles/__init__.py +0 -0
  73. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/profiles/aggressive.yaml +0 -0
  74. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/profiles/default.yaml +0 -0
  75. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/profiles/stealth.yaml +0 -0
  76. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/scans/__init__.py +0 -0
  77. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/scans/domain.yaml +0 -0
  78. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/scans/host.yaml +0 -0
  79. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/scans/network.yaml +0 -0
  80. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/scans/subdomain.yaml +0 -0
  81. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/scans/url.yaml +0 -0
  82. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/__init__.py +0 -0
  83. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/cidr_recon.yaml +0 -0
  84. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/code_scan.yaml +0 -0
  85. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/host_recon.yaml +0 -0
  86. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/port_scan.yaml +0 -0
  87. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/subdomain_recon.yaml +0 -0
  88. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/url_bypass.yaml +0 -0
  89. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/url_crawl.yaml +0 -0
  90. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/url_dirsearch.yaml +0 -0
  91. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/url_fuzz.yaml +0 -0
  92. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/url_nuclei.yaml +0 -0
  93. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/url_vuln.yaml +0 -0
  94. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/user_hunt.yaml +0 -0
  95. {secator-0.8.2a0 → secator-0.9.0}/secator/configs/workflows/wordpress.yaml +0 -0
  96. {secator-0.8.2a0 → secator-0.9.0}/secator/decorators.py +0 -0
  97. {secator-0.8.2a0 → secator-0.9.0}/secator/definitions.py +0 -0
  98. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/__init__.py +0 -0
  99. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/_base.py +0 -0
  100. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/console.py +0 -0
  101. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/csv.py +0 -0
  102. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/gdrive.py +0 -0
  103. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/json.py +0 -0
  104. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/table.py +0 -0
  105. {secator-0.8.2a0 → secator-0.9.0}/secator/exporters/txt.py +0 -0
  106. {secator-0.8.2a0 → secator-0.9.0}/secator/hooks/__init__.py +0 -0
  107. {secator-0.8.2a0 → secator-0.9.0}/secator/hooks/gcs.py +0 -0
  108. {secator-0.8.2a0 → secator-0.9.0}/secator/hooks/mongodb.py +0 -0
  109. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/__init__.py +0 -0
  110. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/_base.py +0 -0
  111. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/exploit.py +0 -0
  112. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/info.py +0 -0
  113. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/ip.py +0 -0
  114. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/port.py +0 -0
  115. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/progress.py +0 -0
  116. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/record.py +0 -0
  117. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/stat.py +0 -0
  118. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/subdomain.py +0 -0
  119. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/tag.py +0 -0
  120. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/target.py +0 -0
  121. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/url.py +0 -0
  122. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/user_account.py +0 -0
  123. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/vulnerability.py +0 -0
  124. {secator-0.8.2a0 → secator-0.9.0}/secator/output_types/warning.py +0 -0
  125. {secator-0.8.2a0 → secator-0.9.0}/secator/report.py +0 -0
  126. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/__init__.py +0 -0
  127. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/_base.py +0 -0
  128. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/_helpers.py +0 -0
  129. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/celery.py +0 -0
  130. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/scan.py +0 -0
  131. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/task.py +0 -0
  132. {secator-0.8.2a0 → secator-0.9.0}/secator/runners/workflow.py +0 -0
  133. {secator-0.8.2a0 → secator-0.9.0}/secator/scans/__init__.py +0 -0
  134. {secator-0.8.2a0 → secator-0.9.0}/secator/serializers/__init__.py +0 -0
  135. {secator-0.8.2a0 → secator-0.9.0}/secator/serializers/dataclass.py +0 -0
  136. {secator-0.8.2a0 → secator-0.9.0}/secator/serializers/json.py +0 -0
  137. {secator-0.8.2a0 → secator-0.9.0}/secator/serializers/regex.py +0 -0
  138. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/__init__.py +0 -0
  139. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/_categories.py +0 -0
  140. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/bup.py +0 -0
  141. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/cariddi.py +0 -0
  142. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/dalfox.py +0 -0
  143. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/dirsearch.py +0 -0
  144. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/dnsx.py +0 -0
  145. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/dnsxbrute.py +0 -0
  146. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/feroxbuster.py +0 -0
  147. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/ffuf.py +0 -0
  148. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/fping.py +0 -0
  149. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/gau.py +0 -0
  150. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/gf.py +0 -0
  151. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/gospider.py +0 -0
  152. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/grype.py +0 -0
  153. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/h8mail.py +0 -0
  154. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/katana.py +0 -0
  155. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/maigret.py +0 -0
  156. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/mapcidr.py +0 -0
  157. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/msfconsole.py +0 -0
  158. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/nmap.py +0 -0
  159. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/nuclei.py +0 -0
  160. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/searchsploit.py +0 -0
  161. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/subfinder.py +0 -0
  162. {secator-0.8.2a0 → secator-0.9.0}/secator/tasks/wpscan.py +0 -0
  163. {secator-0.8.2a0 → secator-0.9.0}/secator/template.py +0 -0
  164. {secator-0.8.2a0 → secator-0.9.0}/secator/thread.py +0 -0
  165. {secator-0.8.2a0 → secator-0.9.0}/secator/utils_test.py +0 -0
  166. {secator-0.8.2a0 → secator-0.9.0}/secator/workflows/__init__.py +0 -0
  167. {secator-0.8.2a0 → secator-0.9.0}/tests/__init__.py +0 -0
  168. {secator-0.8.2a0 → secator-0.9.0}/tests/fixtures/h8mail_breach.txt +0 -0
  169. {secator-0.8.2a0 → secator-0.9.0}/tests/fixtures/ls.py +0 -0
  170. {secator-0.8.2a0 → secator-0.9.0}/tests/fixtures/msfconsole_input.rc +0 -0
  171. {secator-0.8.2a0 → secator-0.9.0}/tests/fixtures/nmap_output.xml +0 -0
  172. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/__init__.py +0 -0
  173. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/inputs.py +0 -0
  174. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/outputs.py +0 -0
  175. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/setup.sh +0 -0
  176. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/teardown.sh +0 -0
  177. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/test_addons.py +0 -0
  178. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/test_celery.py +0 -0
  179. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/test_scans.py +0 -0
  180. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/test_tasks.py +0 -0
  181. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/test_tasks_categories.py +0 -0
  182. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/test_worker.py +0 -0
  183. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/test_workflows.py +0 -0
  184. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/wordlist.txt +0 -0
  185. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/wordlist_dns.txt +0 -0
  186. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
  187. {secator-0.8.2a0 → secator-0.9.0}/tests/integration/wordpress_toolbox/Makefile +0 -0
  188. {secator-0.8.2a0 → secator-0.9.0}/tests/performance/__init__.py +0 -0
  189. {secator-0.8.2a0 → secator-0.9.0}/tests/performance/loadtester.py +0 -0
  190. {secator-0.8.2a0 → secator-0.9.0}/tests/performance/test_worker.py +0 -0
  191. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/__init__.py +0 -0
  192. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_celery.py +0 -0
  193. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_cli.py +0 -0
  194. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_config.py +0 -0
  195. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_offline.py +0 -0
  196. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_runners.py +0 -0
  197. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_scans.py +0 -0
  198. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_serializers.py +0 -0
  199. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_tasks.py +0 -0
  200. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_tasks_categories.py +0 -0
  201. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_template.py +0 -0
  202. {secator-0.8.2a0 → secator-0.9.0}/tests/unit/test_utils.py +0 -0
@@ -135,5 +135,7 @@ dmypy.json
135
135
  # Pyre type checker
136
136
  .pyre/
137
137
 
138
- # Git
139
- .git/
138
+ # Project
139
+ .git/
140
+ .docker/
141
+ images/
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.0](https://github.com/freelabz/secator/compare/v0.8.2...v0.9.0) (2025-02-21)
4
+
5
+
6
+ ### Features
7
+
8
+ * add cleanup option to secator install tools ([#530](https://github.com/freelabz/secator/issues/530)) ([bcc11c2](https://github.com/freelabz/secator/commit/bcc11c24e628b527111b1890b3810bf60be14448))
9
+ * add warning if bin dir is not in path ([#528](https://github.com/freelabz/secator/issues/528)) ([59ca31e](https://github.com/freelabz/secator/commit/59ca31e3e4bb07680762213d6f5722afb9586519))
10
+ * improve dockerfile size with multi-stage build ([#534](https://github.com/freelabz/secator/issues/534)) ([ceb3652](https://github.com/freelabz/secator/commit/ceb3652371669bfce525a5e26c38e88e9e03356f))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * bbot screenshots copy ([#540](https://github.com/freelabz/secator/issues/540)) ([2cea982](https://github.com/freelabz/secator/commit/2cea9825cf73fb97546c38793c7f280db7c99822))
16
+ * install chromium in httpx ([#541](https://github.com/freelabz/secator/issues/541)) ([1965619](https://github.com/freelabz/secator/commit/19656198351fc0b40f71aeb7fb20035db6b89a37))
17
+ * miscellaneous bugfixes ([#533](https://github.com/freelabz/secator/issues/533)) ([b8c0edf](https://github.com/freelabz/secator/commit/b8c0edf30882bb030dbb6b376e264850d3905307))
18
+ * restore colors to rich defaults to honor TERM and NO_COLOR ([#524](https://github.com/freelabz/secator/issues/524)) ([982fc55](https://github.com/freelabz/secator/commit/982fc55a60c03d03bf871727fafdf6840dab0908))
19
+ * secator update command ([#538](https://github.com/freelabz/secator/issues/538)) ([cf73def](https://github.com/freelabz/secator/commit/cf73def36de7e9e8522d795922daae02252792fd))
20
+
21
+ ## [0.8.2](https://github.com/freelabz/secator/compare/v0.8.1...v0.8.2) (2025-02-10)
22
+
23
+
24
+ ### Bug Fixes
25
+
26
+ * random proxy bug ([#433](https://github.com/freelabz/secator/issues/433)) ([a437684](https://github.com/freelabz/secator/commit/a4376844b7dea55e8951fe578d5631688728e503))
27
+
3
28
  ## [0.8.1](https://github.com/freelabz/secator/compare/v0.8.0...v0.8.1) (2025-02-07)
4
29
 
5
30
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secator
3
- Version: 0.8.2a0
3
+ Version: 0.9.0
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
@@ -66,7 +66,6 @@ Requires-Dist: pyinstrument<5; extra == 'trace'
66
66
  Provides-Extra: worker
67
67
  Requires-Dist: eventlet<1; extra == 'worker'
68
68
  Requires-Dist: flower<3; extra == 'worker'
69
- Requires-Dist: gevent<25; extra == 'worker'
70
69
  Description-Content-Type: text/markdown
71
70
 
72
71
  <h1 align="center">
@@ -165,6 +164,7 @@ check that the tool complies with our selection criterias before doing so. If it
165
164
  ```sh
166
165
  pipx install secator
167
166
  ```
167
+ ***Note:** Make sure to have [pipx](https://pipx.pypa.io/stable/installation/) installed.*
168
168
 
169
169
  </details>
170
170
 
@@ -178,7 +178,7 @@ pip install secator
178
178
  </details>
179
179
 
180
180
  <details>
181
- <summary>Bash</summary>
181
+ <summary>Bash (uses apt)</summary>
182
182
 
183
183
  ```sh
184
184
  wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
@@ -94,6 +94,7 @@ check that the tool complies with our selection criterias before doing so. If it
94
94
  ```sh
95
95
  pipx install secator
96
96
  ```
97
+ ***Note:** Make sure to have [pipx](https://pipx.pypa.io/stable/installation/) installed.*
97
98
 
98
99
  </details>
99
100
 
@@ -107,7 +108,7 @@ pip install secator
107
108
  </details>
108
109
 
109
110
  <details>
110
- <summary>Bash</summary>
111
+ <summary>Bash (uses apt)</summary>
111
112
 
112
113
  ```sh
113
114
  wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
@@ -4,7 +4,7 @@ build-backend = 'hatchling.build'
4
4
 
5
5
  [project]
6
6
  name = 'secator'
7
- version = "0.8.2-alpha0"
7
+ version = "0.9.0"
8
8
  authors = [{ name = 'FreeLabz', email = 'sales@freelabz.com' }]
9
9
  readme = 'README.md'
10
10
  description = "The pentester's swiss knife."
@@ -72,7 +72,6 @@ trace = [
72
72
  'pyinstrument < 5',
73
73
  ]
74
74
  worker = [
75
- 'gevent < 25',
76
75
  'eventlet < 1',
77
76
  'flower < 3',
78
77
  ]
@@ -1047,7 +1047,8 @@ def install_ruby():
1047
1047
 
1048
1048
  @install.command('tools')
1049
1049
  @click.argument('cmds', required=False)
1050
- def install_tools(cmds):
1050
+ @click.option('--cleanup', is_flag=True, default=False)
1051
+ def install_tools(cmds, cleanup):
1051
1052
  """Install supported tools."""
1052
1053
  if CONFIG.offline_mode:
1053
1054
  console.print(Error(message='Cannot run this command in offline mode.'))
@@ -1069,18 +1070,19 @@ def install_tools(cmds):
1069
1070
  if not status.is_ok():
1070
1071
  return_code = 1
1071
1072
  console.print()
1072
- distro = get_distro_config()
1073
- cleanup_cmds = [
1074
- 'go clean -cache',
1075
- 'go clean -modcache',
1076
- 'pip cache purge',
1077
- 'gem cleanup --user-install',
1078
- 'gem clean --user-install',
1079
- ]
1080
- if distro.pm_finalizer:
1081
- cleanup_cmds.append(f'sudo {distro.pm_finalizer}')
1082
- cmd = ' && '.join(cleanup_cmds)
1083
- Command.execute(cmd, cls_attributes={'shell': True}, quiet=False)
1073
+ if cleanup:
1074
+ distro = get_distro_config()
1075
+ cleanup_cmds = [
1076
+ 'go clean -cache',
1077
+ 'go clean -modcache',
1078
+ 'pip cache purge',
1079
+ 'gem cleanup --user-install',
1080
+ 'gem clean --user-install',
1081
+ ]
1082
+ if distro.pm_finalizer:
1083
+ cleanup_cmds.append(f'sudo {distro.pm_finalizer}')
1084
+ cmd = ' && '.join(cleanup_cmds)
1085
+ Command.execute(cmd, cls_attributes={'shell': True}, quiet=False)
1084
1086
  sys.exit(return_code)
1085
1087
 
1086
1088
 
@@ -1097,7 +1099,7 @@ def update(all):
1097
1099
  sys.exit(1)
1098
1100
 
1099
1101
  # Check current and latest version
1100
- info = get_version_info('secator', github_handle='freelabz/secator', version=VERSION)
1102
+ info = get_version_info('secator', '-version', 'freelabz/secator', version=VERSION)
1101
1103
  latest_version = info['latest_version']
1102
1104
  do_update = True
1103
1105
 
@@ -66,6 +66,12 @@ class ToolInstaller:
66
66
  tool_cls.install_post]):
67
67
  return InstallerStatus.INSTALL_NOT_SUPPORTED
68
68
 
69
+ # Check PATH
70
+ path_var = os.environ.get('PATH', '')
71
+ if not str(CONFIG.dirs.bin) in path_var:
72
+ console.print(Warning(message=f'Bin directory {CONFIG.dirs.bin} not found in PATH ! Binaries installed by secator will not work')) # noqa: E501
73
+ console.print(Warning(message=f'Run "export PATH=$PATH:{CONFIG.dirs.bin}" to add the binaries to your PATH'))
74
+
69
75
  # Install pre-required packages
70
76
  if tool_cls.install_pre:
71
77
  status = PackageInstaller.install(tool_cls.install_pre)
@@ -8,6 +8,7 @@ from secator.utils import rich_to_ansi, traceback_as_string, rich_escape as _s
8
8
  class Error(OutputType):
9
9
  message: str
10
10
  traceback: str = field(default='', compare=False)
11
+ traceback_title: str = field(default='', compare=False)
11
12
  _source: str = field(default='', repr=True)
12
13
  _type: str = field(default='error', repr=True)
13
14
  _timestamp: int = field(default_factory=lambda: time.time(), compare=False)
@@ -31,6 +32,9 @@ class Error(OutputType):
31
32
  def __repr__(self):
32
33
  s = rf"\[[bold red]ERR[/]] {_s(self.message)}"
33
34
  if self.traceback:
34
- traceback_pretty = ' ' + self.traceback.replace('\n', '\n ')
35
+ s += ':'
36
+ traceback_pretty = ' ' + _s(self.traceback).replace('\n', '\n ')
37
+ if self.traceback_title:
38
+ traceback_pretty = f' {self.traceback_title}:\n{traceback_pretty}'
35
39
  s += f'\n[dim]{_s(traceback_pretty)}[/]'
36
40
  return rich_to_ansi(s)
@@ -4,7 +4,7 @@ import yaml
4
4
  from rich.console import Console
5
5
  from rich.table import Table
6
6
 
7
- console = Console(stderr=True, color_system='truecolor')
7
+ console = Console(stderr=True)
8
8
  console_stdout = Console(record=True)
9
9
  # handler = RichHandler(rich_tracebacks=True) # TODO: add logging handler
10
10
 
@@ -301,7 +301,7 @@ class Command(Runner):
301
301
  proxy = CONFIG.http.socks5_proxy
302
302
  elif self.proxy in ['auto', 'http'] and self.proxy_http and CONFIG.http.http_proxy:
303
303
  proxy = CONFIG.http.http_proxy
304
- elif self.proxy == 'random':
304
+ elif self.proxy == 'random' and self.proxy_http:
305
305
  proxy = FreeProxy(timeout=CONFIG.http.freeproxy_timeout, rand=True, anonym=True).get()
306
306
  elif self.proxy.startswith(('http://', 'socks5://')):
307
307
  proxy = self.proxy
@@ -344,7 +344,7 @@ class Command(Runner):
344
344
 
345
345
  # Abort if no inputs
346
346
  if len(self.inputs) == 0 and self.skip_if_no_inputs:
347
- yield Info(message=f'{self.unique_name} skipped (no inputs)', _source=self.unique_name, _uuid=str(uuid.uuid4()))
347
+ yield Warning(message=f'{self.unique_name} skipped (no inputs)', _source=self.unique_name, _uuid=str(uuid.uuid4()))
348
348
  return
349
349
 
350
350
  # Yield targets
@@ -507,7 +507,7 @@ class Command(Runner):
507
507
  if self.config.name in str(exc):
508
508
  message = 'Executable not found.'
509
509
  if self.install_cmd:
510
- message += f' Install it with [bold green4]secator install tools {self.config.name}[/].'
510
+ message += f' Install it with "secator install tools {self.config.name}".'
511
511
  error = Error(message=message)
512
512
  else:
513
513
  error = Error.from_exception(exc)
@@ -652,12 +652,14 @@ class Command(Runner):
652
652
  )
653
653
 
654
654
  elif self.return_code != 0:
655
- error = f'Command failed with return code {self.return_code}.'
655
+ error = f'Command failed with return code {self.return_code}'
656
656
  last_lines = self.output.split('\n')
657
657
  last_lines = last_lines[max(0, len(last_lines) - 2):]
658
+ last_lines = [line for line in last_lines if line != '']
658
659
  yield Error(
659
660
  message=error,
660
661
  traceback='\n'.join(last_lines),
662
+ traceback_title='Last stdout lines',
661
663
  _source=self.unique_name,
662
664
  _uuid=str(uuid.uuid4())
663
665
  )
@@ -4,7 +4,7 @@ from secator.config import CONFIG
4
4
  from secator.decorators import task
5
5
  from secator.runners import Command
6
6
  from secator.serializers import RegexSerializer
7
- from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Error
7
+ from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Info, Error
8
8
  from secator.serializers import JSONSerializer
9
9
 
10
10
 
@@ -219,7 +219,8 @@ class bbot(Command):
219
219
  }
220
220
  }
221
221
  install_pre = {
222
- '*': ['git', 'openssl', 'unzip', 'tar', 'chromium']
222
+ 'apk': ['python3-dev', 'linux-headers', 'musl-dev', 'gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium'],
223
+ '*': ['gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium']
223
224
  }
224
225
  install_cmd = 'pipx install bbot && pipx upgrade bbot'
225
226
  install_post = {
@@ -234,6 +235,11 @@ class bbot(Command):
234
235
  yield item
235
236
  return
236
237
 
238
+ # Set scan name and base path for output
239
+ if _type == 'SCAN':
240
+ self.scan_config = item['data']
241
+ return
242
+
237
243
  if _type not in BBOT_MAP_TYPES:
238
244
  self._print(f'[bold orange3]Found unsupported bbot type: {_type}.[/] [bold green]Skipping.[/]', rich=True)
239
245
  return
@@ -278,9 +284,11 @@ class bbot(Command):
278
284
 
279
285
  # If a screenshot was saved, move it to secator output folder
280
286
  if item['type'] == 'WEBSCREENSHOT':
281
- path = item['data']['path']
282
- name = path.split('/')[-1]
287
+ from pathlib import Path
288
+ path = Path.home() / '.bbot' / 'scans' / self.scan_config['name'] / item['data']['path']
289
+ name = path.as_posix().split('/')[-1]
283
290
  secator_path = f'{self.reports_folder}/.outputs/{name}'
291
+ yield Info(f'Copying screenshot {path} to {secator_path}')
284
292
  shutil.copy(path, secator_path)
285
293
  item['data']['path'] = secator_path
286
294
 
@@ -65,6 +65,9 @@ class httpx(Http):
65
65
  }
66
66
  item_loaders = [JSONSerializer()]
67
67
  output_types = [Url, Subdomain]
68
+ install_pre = {
69
+ 'apk': ['chromium']
70
+ }
68
71
  install_cmd = 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest'
69
72
  install_github_handle = 'projectdiscovery/httpx'
70
73
  proxychains = False
@@ -34,7 +34,7 @@ class naabu(ReconPort):
34
34
  # 'health_check': 'hc'
35
35
  }
36
36
  opt_value_map = {
37
- TIMEOUT: lambda x: x*1000 if x and x > 0 else None, # convert to milliseconds
37
+ TIMEOUT: lambda x: int(x*1000) if x and x > 0 else None, # convert to milliseconds
38
38
  RETRIES: lambda x: 1 if x == 0 else x,
39
39
  PROXY: lambda x: x.replace('socks5://', '')
40
40
  }
@@ -373,7 +373,7 @@ def rich_to_ansi(text):
373
373
  str: Converted text (ANSI).
374
374
  """
375
375
  from rich.console import Console
376
- tmp_console = Console(file=None, highlight=False, color_system='truecolor')
376
+ tmp_console = Console(file=None, highlight=False)
377
377
  with tmp_console.capture() as capture:
378
378
  tmp_console.print(text, end='', soft_wrap=True)
379
379
  return capture.get()
@@ -1,26 +0,0 @@
1
- FROM alpine:latest
2
-
3
- ARG flavor=full
4
- ENV PATH="${PATH}:/root/.local/bin"
5
- ENV GOBIN="/root/.local/bin"
6
- ENV TERM="xterm-256color"
7
- RUN apk add --no-cache \
8
- flock \
9
- gcc \
10
- musl-dev \
11
- linux-headers \
12
- pipx \
13
- python3-dev \
14
- py3-pip \
15
- sudo
16
- COPY . /code
17
- WORKDIR /code
18
- RUN pipx install . && \
19
- secator install addons worker && \
20
- secator install addons gdrive && \
21
- secator install addons gcs && \
22
- secator install addons mongodb && \
23
- secator install addons redis && \
24
- secator install addons dev
25
- RUN if [ "$flavor" != "lite" ]; then secator install tools; fi
26
- ENTRYPOINT ["secator"]
@@ -1,36 +0,0 @@
1
- FROM archlinux:latest
2
-
3
- ENV PATH="${PATH}:/root/.local/bin"
4
- ENV GOBIN="/root/.local/bin"
5
- RUN pacman -Syu --noconfirm && \
6
- pacman -S --noconfirm \
7
- base-devel \
8
- bash \
9
- curl \
10
- git \
11
- go \
12
- jq \
13
- openssl \
14
- proxychains \
15
- proxychains-ng \
16
- python \
17
- python-pip \
18
- python-pipx \
19
- ruby \
20
- rubygems \
21
- sudo \
22
- unzip \
23
- vim \
24
- wget
25
- COPY . /code
26
- WORKDIR /code
27
- RUN pipx install . && \
28
- secator install addons worker && \
29
- secator install addons gdrive && \
30
- secator install addons gcs && \
31
- secator install addons mongodb && \
32
- secator install addons redis && \
33
- secator install addons dev
34
- RUN secator config set security.force_source_install true
35
- RUN secator install tools
36
- ENTRYPOINT ["secator"]
@@ -1,38 +0,0 @@
1
- FROM debian:latest
2
-
3
- ENV PATH="${PATH}:/root/.local/bin"
4
- ENV GOBIN="/root/.local/bin"
5
- RUN apt update -y && \
6
- apt install -y \
7
- bash \
8
- build-essential \
9
- curl \
10
- git \
11
- golang-go \
12
- jq \
13
- openssl \
14
- pipx \
15
- python3 \
16
- python3-pip \
17
- python3-venv \
18
- proxychains \
19
- proxychains-ng \
20
- ruby-full \
21
- rubygems \
22
- sudo \
23
- unzip \
24
- vim \
25
- wget
26
- COPY . /code
27
- WORKDIR /code
28
- RUN pipx install . && \
29
- secator install addons worker && \
30
- secator install addons gdrive && \
31
- secator install addons gcs && \
32
- secator install addons mongodb && \
33
- secator install addons redis && \
34
- secator install addons dev
35
- RUN secator install langs go
36
- RUN secator config set security.force_source_install true
37
- RUN secator install tools
38
- ENTRYPOINT ["secator"]
@@ -1,37 +0,0 @@
1
- FROM kalilinux/kali-rolling:latest
2
-
3
- ENV PATH="${PATH}:/root/.local/bin"
4
- ENV GOBIN="/root/.local/bin"
5
- RUN apt update -y && \
6
- apt install -y \
7
- bash \
8
- build-essential \
9
- curl \
10
- git \
11
- golang-go \
12
- jq \
13
- openssl \
14
- pipx \
15
- python3 \
16
- python3-pip \
17
- python3-venv \
18
- proxychains \
19
- proxychains-ng \
20
- ruby-full \
21
- rubygems \
22
- sudo \
23
- unzip \
24
- vim \
25
- wget
26
- COPY . /code
27
- WORKDIR /code
28
- RUN pipx install . && \
29
- secator install addons worker && \
30
- secator install addons gdrive && \
31
- secator install addons gcs && \
32
- secator install addons mongodb && \
33
- secator install addons redis && \
34
- secator install addons dev
35
- RUN secator config set security.force_source_install true
36
- RUN secator install tools
37
- ENTRYPOINT ["secator"]
@@ -1,40 +0,0 @@
1
- FROM sickcodes/docker-osx:latest
2
-
3
- ENV PATH="${PATH}:/home/arch/.local/bin"
4
- ENV GOBIN="/home/arch/.local/bin"
5
- RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
6
- RUN echo >> /home/arch/.bashrc
7
- RUN echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/arch/.bashrc
8
- RUN sudo pacman -Syu --noconfirm && \
9
- sudo pacman -S --noconfirm -y \
10
- base-devel \
11
- bash \
12
- curl \
13
- git \
14
- go \
15
- jq \
16
- openssl \
17
- proxychains \
18
- proxychains-ng \
19
- python \
20
- python-pip \
21
- python-pipx \
22
- ruby \
23
- rubygems \
24
- sudo \
25
- unzip \
26
- vim \
27
- wget
28
- COPY . /code
29
- WORKDIR /code
30
- USER arch
31
- RUN pipx install . && \
32
- secator install addons worker && \
33
- secator install addons gdrive && \
34
- secator install addons gcs && \
35
- secator install addons mongodb && \
36
- secator install addons redis && \
37
- secator install addons dev
38
- RUN secator config set security.force_source_install true
39
- RUN secator install tools
40
- ENTRYPOINT ["secator"]
@@ -1,37 +0,0 @@
1
- FROM ubuntu:latest
2
-
3
- ENV PATH="${PATH}:/root/.local/bin"
4
- ENV GOBIN="/root/.local/bin"
5
- RUN apt update -y && \
6
- apt install -y \
7
- bash \
8
- build-essential \
9
- curl \
10
- git \
11
- golang-go \
12
- jq \
13
- openssl \
14
- pipx \
15
- python3 \
16
- python3-pip \
17
- python3-venv \
18
- proxychains \
19
- proxychains-ng \
20
- ruby-full \
21
- rubygems \
22
- sudo \
23
- unzip \
24
- vim \
25
- wget
26
- COPY . /code
27
- WORKDIR /code
28
- RUN pipx install . && \
29
- secator install addons worker && \
30
- secator install addons gdrive && \
31
- secator install addons gcs && \
32
- secator install addons mongodb && \
33
- secator install addons redis && \
34
- secator install addons dev
35
- RUN secator config set security.force_source_install true
36
- RUN secator install tools
37
- ENTRYPOINT ["secator"]
@@ -1,30 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Define an array of distributions
4
- DISTROS=("alpine" "arch" "debian" "kali" "osx" "ubuntu")
5
-
6
- # Function to build an image
7
- build_image() {
8
- local DISTRO=$1
9
- local DOCKERFILE=".docker/Dockerfile.${DISTRO}"
10
- local IMAGE_NAME="secator-${DISTRO}"
11
-
12
- if [ -f "$DOCKERFILE" ]; then
13
- echo "🚀 Building $IMAGE_NAME using $DOCKERFILE..."
14
- docker build -t "$IMAGE_NAME" -f "$DOCKERFILE" . && \
15
- echo "✅ Successfully built $IMAGE_NAME" || \
16
- echo "❌ Failed to build $IMAGE_NAME"
17
- else
18
- echo "⚠️ Dockerfile $DOCKERFILE not found, skipping..."
19
- fi
20
- }
21
-
22
- # Iterate through the distributions and build in parallel
23
- for DISTRO in "${DISTROS[@]}"; do
24
- build_image "$DISTRO" &
25
- done
26
-
27
- # Wait for all background jobs to finish
28
- wait
29
-
30
- echo "🎉 All parallel builds completed!"