secator 0.14.0__tar.gz → 0.15.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 (203) hide show
  1. {secator-0.14.0 → secator-0.15.0}/CHANGELOG.md +12 -0
  2. {secator-0.14.0 → secator-0.15.0}/PKG-INFO +10 -3
  3. {secator-0.14.0 → secator-0.15.0}/README.md +9 -2
  4. {secator-0.14.0 → secator-0.15.0}/pyproject.toml +1 -1
  5. {secator-0.14.0 → secator-0.15.0}/secator/cli.py +2 -2
  6. {secator-0.14.0 → secator-0.15.0}/secator/decorators.py +16 -10
  7. {secator-0.14.0 → secator-0.15.0}/secator/definitions.py +5 -0
  8. {secator-0.14.0 → secator-0.15.0}/secator/installer.py +10 -3
  9. {secator-0.14.0 → secator-0.15.0}/secator/output_types/stat.py +3 -0
  10. {secator-0.14.0 → secator-0.15.0}/secator/runners/_base.py +2 -2
  11. {secator-0.14.0 → secator-0.15.0}/secator/runners/command.py +2 -0
  12. {secator-0.14.0 → secator-0.15.0}/secator/tasks/_categories.py +11 -11
  13. {secator-0.14.0 → secator-0.15.0}/secator/tasks/arjun.py +2 -1
  14. {secator-0.14.0 → secator-0.15.0}/secator/tasks/bbot.py +3 -0
  15. {secator-0.14.0 → secator-0.15.0}/secator/tasks/bup.py +2 -1
  16. {secator-0.14.0 → secator-0.15.0}/secator/tasks/cariddi.py +2 -1
  17. {secator-0.14.0 → secator-0.15.0}/secator/tasks/dalfox.py +2 -1
  18. {secator-0.14.0 → secator-0.15.0}/secator/tasks/dirsearch.py +3 -1
  19. {secator-0.14.0 → secator-0.15.0}/secator/tasks/dnsx.py +3 -1
  20. {secator-0.14.0 → secator-0.15.0}/secator/tasks/dnsxbrute.py +2 -0
  21. {secator-0.14.0 → secator-0.15.0}/secator/tasks/feroxbuster.py +3 -1
  22. {secator-0.14.0 → secator-0.15.0}/secator/tasks/ffuf.py +3 -1
  23. {secator-0.14.0 → secator-0.15.0}/secator/tasks/fping.py +3 -1
  24. {secator-0.14.0 → secator-0.15.0}/secator/tasks/gau.py +3 -1
  25. {secator-0.14.0 → secator-0.15.0}/secator/tasks/gf.py +2 -1
  26. {secator-0.14.0 → secator-0.15.0}/secator/tasks/gitleaks.py +3 -1
  27. {secator-0.14.0 → secator-0.15.0}/secator/tasks/gospider.py +2 -0
  28. {secator-0.14.0 → secator-0.15.0}/secator/tasks/grype.py +3 -1
  29. {secator-0.14.0 → secator-0.15.0}/secator/tasks/h8mail.py +2 -1
  30. {secator-0.14.0 → secator-0.15.0}/secator/tasks/httpx.py +3 -1
  31. {secator-0.14.0 → secator-0.15.0}/secator/tasks/katana.py +2 -0
  32. {secator-0.14.0 → secator-0.15.0}/secator/tasks/maigret.py +3 -1
  33. {secator-0.14.0 → secator-0.15.0}/secator/tasks/mapcidr.py +2 -1
  34. {secator-0.14.0 → secator-0.15.0}/secator/tasks/msfconsole.py +4 -3
  35. {secator-0.14.0 → secator-0.15.0}/secator/tasks/naabu.py +3 -1
  36. {secator-0.14.0 → secator-0.15.0}/secator/tasks/nmap.py +2 -0
  37. {secator-0.14.0 → secator-0.15.0}/secator/tasks/nuclei.py +3 -1
  38. {secator-0.14.0 → secator-0.15.0}/secator/tasks/searchsploit.py +3 -1
  39. {secator-0.14.0 → secator-0.15.0}/secator/tasks/subfinder.py +3 -1
  40. {secator-0.14.0 → secator-0.15.0}/secator/tasks/testssl.py +2 -1
  41. {secator-0.14.0 → secator-0.15.0}/secator/tasks/trivy.py +4 -1
  42. {secator-0.14.0 → secator-0.15.0}/secator/tasks/wafw00f.py +2 -1
  43. {secator-0.14.0 → secator-0.15.0}/secator/tasks/wpprobe.py +2 -1
  44. {secator-0.14.0 → secator-0.15.0}/secator/tasks/wpscan.py +2 -1
  45. {secator-0.14.0 → secator-0.15.0}/secator/utils.py +15 -11
  46. {secator-0.14.0 → secator-0.15.0}/secator/utils_test.py +9 -3
  47. {secator-0.14.0 → secator-0.15.0}/tests/integration/inputs.py +2 -0
  48. {secator-0.14.0 → secator-0.15.0}/tests/integration/test_tasks.py +7 -2
  49. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_tasks.py +3 -3
  50. {secator-0.14.0 → secator-0.15.0}/.docker/Dockerfile.alpine +0 -0
  51. {secator-0.14.0 → secator-0.15.0}/.docker/Dockerfile.arch +0 -0
  52. {secator-0.14.0 → secator-0.15.0}/.docker/Dockerfile.debian +0 -0
  53. {secator-0.14.0 → secator-0.15.0}/.docker/Dockerfile.kali +0 -0
  54. {secator-0.14.0 → secator-0.15.0}/.docker/Dockerfile.osx +0 -0
  55. {secator-0.14.0 → secator-0.15.0}/.docker/Dockerfile.ubuntu +0 -0
  56. {secator-0.14.0 → secator-0.15.0}/.docker/build_all.sh +0 -0
  57. {secator-0.14.0 → secator-0.15.0}/.dockerignore +0 -0
  58. {secator-0.14.0 → secator-0.15.0}/.flake8 +0 -0
  59. {secator-0.14.0 → secator-0.15.0}/.gitignore +0 -0
  60. {secator-0.14.0 → secator-0.15.0}/CONTRIBUTING.md +0 -0
  61. {secator-0.14.0 → secator-0.15.0}/Dockerfile +0 -0
  62. {secator-0.14.0 → secator-0.15.0}/LICENSE +0 -0
  63. {secator-0.14.0 → secator-0.15.0}/SECURITY.md +0 -0
  64. {secator-0.14.0 → secator-0.15.0}/cloudbuild.yaml +0 -0
  65. {secator-0.14.0 → secator-0.15.0}/helm/.helmignore +0 -0
  66. {secator-0.14.0 → secator-0.15.0}/helm/Chart.yaml +0 -0
  67. {secator-0.14.0 → secator-0.15.0}/helm/templates/redis-service.yaml +0 -0
  68. {secator-0.14.0 → secator-0.15.0}/helm/templates/redis.yaml +0 -0
  69. {secator-0.14.0 → secator-0.15.0}/helm/templates/secator-manager.yaml +0 -0
  70. {secator-0.14.0 → secator-0.15.0}/helm/templates/secator-worker.yaml +0 -0
  71. {secator-0.14.0 → secator-0.15.0}/helm/values.yaml +0 -0
  72. {secator-0.14.0 → secator-0.15.0}/scripts/download_cves.sh +0 -0
  73. {secator-0.14.0 → secator-0.15.0}/scripts/install.sh +0 -0
  74. {secator-0.14.0 → secator-0.15.0}/scripts/install_asciinema.sh +0 -0
  75. {secator-0.14.0 → secator-0.15.0}/scripts/install_go.sh +0 -0
  76. {secator-0.14.0 → secator-0.15.0}/scripts/install_ruby.sh +0 -0
  77. {secator-0.14.0 → secator-0.15.0}/scripts/msf/exploit_cve.rc +0 -0
  78. {secator-0.14.0 → secator-0.15.0}/scripts/msf/ftp_anonymous.rc +0 -0
  79. {secator-0.14.0 → secator-0.15.0}/scripts/msf/ftp_version.rc +0 -0
  80. {secator-0.14.0 → secator-0.15.0}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
  81. {secator-0.14.0 → secator-0.15.0}/scripts/msf/redis.rc +0 -0
  82. {secator-0.14.0 → secator-0.15.0}/scripts/stories/STORY.md +0 -0
  83. {secator-0.14.0 → secator-0.15.0}/scripts/stories/aliases.sh +0 -0
  84. {secator-0.14.0 → secator-0.15.0}/scripts/stories/demo.sh +0 -0
  85. {secator-0.14.0 → secator-0.15.0}/scripts/stories/fmt.sh +0 -0
  86. {secator-0.14.0 → secator-0.15.0}/scripts/stories/input.sh +0 -0
  87. {secator-0.14.0 → secator-0.15.0}/scripts/stories/pipe.sh +0 -0
  88. {secator-0.14.0 → secator-0.15.0}/scripts/stories/short_demo.sh +0 -0
  89. {secator-0.14.0 → secator-0.15.0}/secator/.gitignore +0 -0
  90. {secator-0.14.0 → secator-0.15.0}/secator/__init__.py +0 -0
  91. {secator-0.14.0 → secator-0.15.0}/secator/celery.py +0 -0
  92. {secator-0.14.0 → secator-0.15.0}/secator/celery_signals.py +0 -0
  93. {secator-0.14.0 → secator-0.15.0}/secator/celery_utils.py +0 -0
  94. {secator-0.14.0 → secator-0.15.0}/secator/config.py +0 -0
  95. {secator-0.14.0 → secator-0.15.0}/secator/configs/__init__.py +0 -0
  96. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/__init__.py +0 -0
  97. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/aggressive.yaml +0 -0
  98. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/default.yaml +0 -0
  99. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/insane.yaml +0 -0
  100. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/paranoid.yaml +0 -0
  101. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/polite.yaml +0 -0
  102. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/sneaky.yaml +0 -0
  103. {secator-0.14.0 → secator-0.15.0}/secator/configs/profiles/tor.yaml +0 -0
  104. {secator-0.14.0 → secator-0.15.0}/secator/configs/scans/__init__.py +0 -0
  105. {secator-0.14.0 → secator-0.15.0}/secator/configs/scans/domain.yaml +0 -0
  106. {secator-0.14.0 → secator-0.15.0}/secator/configs/scans/host.yaml +0 -0
  107. {secator-0.14.0 → secator-0.15.0}/secator/configs/scans/network.yaml +0 -0
  108. {secator-0.14.0 → secator-0.15.0}/secator/configs/scans/subdomain.yaml +0 -0
  109. {secator-0.14.0 → secator-0.15.0}/secator/configs/scans/url.yaml +0 -0
  110. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/__init__.py +0 -0
  111. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/cidr_recon.yaml +0 -0
  112. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/code_scan.yaml +0 -0
  113. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/host_recon.yaml +0 -0
  114. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/subdomain_recon.yaml +0 -0
  115. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/url_bypass.yaml +0 -0
  116. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/url_crawl.yaml +0 -0
  117. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/url_dirsearch.yaml +0 -0
  118. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/url_fuzz.yaml +0 -0
  119. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/url_nuclei.yaml +0 -0
  120. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/url_params_fuzz.yaml +0 -0
  121. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/url_vuln.yaml +0 -0
  122. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/user_hunt.yaml +0 -0
  123. {secator-0.14.0 → secator-0.15.0}/secator/configs/workflows/wordpress.yaml +0 -0
  124. {secator-0.14.0 → secator-0.15.0}/secator/exporters/__init__.py +0 -0
  125. {secator-0.14.0 → secator-0.15.0}/secator/exporters/_base.py +0 -0
  126. {secator-0.14.0 → secator-0.15.0}/secator/exporters/console.py +0 -0
  127. {secator-0.14.0 → secator-0.15.0}/secator/exporters/csv.py +0 -0
  128. {secator-0.14.0 → secator-0.15.0}/secator/exporters/gdrive.py +0 -0
  129. {secator-0.14.0 → secator-0.15.0}/secator/exporters/json.py +0 -0
  130. {secator-0.14.0 → secator-0.15.0}/secator/exporters/table.py +0 -0
  131. {secator-0.14.0 → secator-0.15.0}/secator/exporters/txt.py +0 -0
  132. {secator-0.14.0 → secator-0.15.0}/secator/hooks/__init__.py +0 -0
  133. {secator-0.14.0 → secator-0.15.0}/secator/hooks/gcs.py +0 -0
  134. {secator-0.14.0 → secator-0.15.0}/secator/hooks/mongodb.py +0 -0
  135. {secator-0.14.0 → secator-0.15.0}/secator/output_types/__init__.py +0 -0
  136. {secator-0.14.0 → secator-0.15.0}/secator/output_types/_base.py +0 -0
  137. {secator-0.14.0 → secator-0.15.0}/secator/output_types/certificate.py +0 -0
  138. {secator-0.14.0 → secator-0.15.0}/secator/output_types/error.py +0 -0
  139. {secator-0.14.0 → secator-0.15.0}/secator/output_types/exploit.py +0 -0
  140. {secator-0.14.0 → secator-0.15.0}/secator/output_types/info.py +0 -0
  141. {secator-0.14.0 → secator-0.15.0}/secator/output_types/ip.py +0 -0
  142. {secator-0.14.0 → secator-0.15.0}/secator/output_types/port.py +0 -0
  143. {secator-0.14.0 → secator-0.15.0}/secator/output_types/progress.py +0 -0
  144. {secator-0.14.0 → secator-0.15.0}/secator/output_types/record.py +0 -0
  145. {secator-0.14.0 → secator-0.15.0}/secator/output_types/state.py +0 -0
  146. {secator-0.14.0 → secator-0.15.0}/secator/output_types/subdomain.py +0 -0
  147. {secator-0.14.0 → secator-0.15.0}/secator/output_types/tag.py +0 -0
  148. {secator-0.14.0 → secator-0.15.0}/secator/output_types/target.py +0 -0
  149. {secator-0.14.0 → secator-0.15.0}/secator/output_types/url.py +0 -0
  150. {secator-0.14.0 → secator-0.15.0}/secator/output_types/user_account.py +0 -0
  151. {secator-0.14.0 → secator-0.15.0}/secator/output_types/vulnerability.py +0 -0
  152. {secator-0.14.0 → secator-0.15.0}/secator/output_types/warning.py +0 -0
  153. {secator-0.14.0 → secator-0.15.0}/secator/report.py +0 -0
  154. {secator-0.14.0 → secator-0.15.0}/secator/rich.py +0 -0
  155. {secator-0.14.0 → secator-0.15.0}/secator/runners/__init__.py +0 -0
  156. {secator-0.14.0 → secator-0.15.0}/secator/runners/_helpers.py +0 -0
  157. {secator-0.14.0 → secator-0.15.0}/secator/runners/celery.py +0 -0
  158. {secator-0.14.0 → secator-0.15.0}/secator/runners/scan.py +0 -0
  159. {secator-0.14.0 → secator-0.15.0}/secator/runners/task.py +0 -0
  160. {secator-0.14.0 → secator-0.15.0}/secator/runners/workflow.py +0 -0
  161. {secator-0.14.0 → secator-0.15.0}/secator/scans/__init__.py +0 -0
  162. {secator-0.14.0 → secator-0.15.0}/secator/serializers/__init__.py +0 -0
  163. {secator-0.14.0 → secator-0.15.0}/secator/serializers/dataclass.py +0 -0
  164. {secator-0.14.0 → secator-0.15.0}/secator/serializers/json.py +0 -0
  165. {secator-0.14.0 → secator-0.15.0}/secator/serializers/regex.py +0 -0
  166. {secator-0.14.0 → secator-0.15.0}/secator/tasks/__init__.py +0 -0
  167. {secator-0.14.0 → secator-0.15.0}/secator/template.py +0 -0
  168. {secator-0.14.0 → secator-0.15.0}/secator/thread.py +0 -0
  169. {secator-0.14.0 → secator-0.15.0}/secator/workflows/__init__.py +0 -0
  170. {secator-0.14.0 → secator-0.15.0}/tests/__init__.py +0 -0
  171. {secator-0.14.0 → secator-0.15.0}/tests/fixtures/h8mail_breach.txt +0 -0
  172. {secator-0.14.0 → secator-0.15.0}/tests/fixtures/ls.py +0 -0
  173. {secator-0.14.0 → secator-0.15.0}/tests/fixtures/msfconsole_input.rc +0 -0
  174. {secator-0.14.0 → secator-0.15.0}/tests/fixtures/nmap_output.xml +0 -0
  175. {secator-0.14.0 → secator-0.15.0}/tests/integration/__init__.py +0 -0
  176. {secator-0.14.0 → secator-0.15.0}/tests/integration/outputs.py +0 -0
  177. {secator-0.14.0 → secator-0.15.0}/tests/integration/setup.sh +0 -0
  178. {secator-0.14.0 → secator-0.15.0}/tests/integration/teardown.sh +0 -0
  179. {secator-0.14.0 → secator-0.15.0}/tests/integration/test_addons.py +0 -0
  180. {secator-0.14.0 → secator-0.15.0}/tests/integration/test_celery.py +0 -0
  181. {secator-0.14.0 → secator-0.15.0}/tests/integration/test_helpers.py +0 -0
  182. {secator-0.14.0 → secator-0.15.0}/tests/integration/test_scans.py +0 -0
  183. {secator-0.14.0 → secator-0.15.0}/tests/integration/test_worker.py +0 -0
  184. {secator-0.14.0 → secator-0.15.0}/tests/integration/test_workflows.py +0 -0
  185. {secator-0.14.0 → secator-0.15.0}/tests/integration/wordlist.txt +0 -0
  186. {secator-0.14.0 → secator-0.15.0}/tests/integration/wordlist_dns.txt +0 -0
  187. {secator-0.14.0 → secator-0.15.0}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
  188. {secator-0.14.0 → secator-0.15.0}/tests/integration/wordpress_toolbox/Makefile +0 -0
  189. {secator-0.14.0 → secator-0.15.0}/tests/performance/__init__.py +0 -0
  190. {secator-0.14.0 → secator-0.15.0}/tests/performance/loadtester.py +0 -0
  191. {secator-0.14.0 → secator-0.15.0}/tests/performance/test_worker.py +0 -0
  192. {secator-0.14.0 → secator-0.15.0}/tests/unit/__init__.py +0 -0
  193. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_celery.py +0 -0
  194. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_cli.py +0 -0
  195. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_command.py +0 -0
  196. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_config.py +0 -0
  197. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_offline.py +0 -0
  198. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_runners.py +0 -0
  199. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_scans.py +0 -0
  200. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_serializers.py +0 -0
  201. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_tasks_categories.py +0 -0
  202. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_template.py +0 -0
  203. {secator-0.14.0 → secator-0.15.0}/tests/unit/test_utils.py +0 -0
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.15.0](https://github.com/freelabz/secator/compare/v0.14.0...v0.15.0) (2025-05-04)
4
+
5
+
6
+ ### Features
7
+
8
+ * improve cli usage and add multi input types ([#609](https://github.com/freelabz/secator/issues/609)) ([b850914](https://github.com/freelabz/secator/commit/b8509141e62dfd72e0b4f15c2b9b5466089e9818))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * installer issue on non-standard distribs ([#613](https://github.com/freelabz/secator/issues/613)) ([194e911](https://github.com/freelabz/secator/commit/194e911b420fcbb0feec3b563a098a3f36cc09cd))
14
+
3
15
  ## [0.14.0](https://github.com/freelabz/secator/compare/v0.13.0...v0.14.0) (2025-04-30)
4
16
 
5
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secator
3
- Version: 0.14.0
3
+ Version: 0.15.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
@@ -82,7 +82,7 @@ Description-Content-Type: text/markdown
82
82
  <a href="https://pypi.org/project/secator/"><img src="https://img.shields.io/pypi/dm/secator"></a>
83
83
  <a href="https://twitter.com/freelabz"><img src="https://img.shields.io/twitter/follow/freelabz.svg?logo=twitter"></a>
84
84
  <a href="https://youtube.com/@FreeLabz"><img src="https://img.shields.io/youtube/channel/subscribers/UCu-F6SpU0h2NP18zBBP04cw?style=social&label=Subscribe%20%40FreeLabz"></a>
85
- <!-- <a href="https://discord.gg/freelabz"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a> -->
85
+ <a href="https://discord.gg/nyHjC2aTrq"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a>
86
86
  </p>
87
87
 
88
88
 
@@ -91,7 +91,8 @@ Description-Content-Type: text/markdown
91
91
  <a href="#supported-commands">Supported commands</a> •
92
92
  <a href="#install-secator">Installation</a> •
93
93
  <a href="#usage">Usage</a> •
94
- <a href="https://docs.freelabz.com">Documentation</a>
94
+ <a href="https://docs.freelabz.com">Documentation</a>
95
+ <a href="https://discord.gg/nyHjC2aTrq">Join us on Discord !</a>
95
96
  </p>
96
97
 
97
98
  `secator` is a task and workflow runner used for security assessments. It supports dozens of well-known security tools
@@ -122,6 +123,11 @@ and it is designed to improve productivity for pentesters and security researche
122
123
 
123
124
  | Name | Description | Category |
124
125
  |---------------------------------------------------------------|--------------------------------------------------------------------------------|-----------------|
126
+ | [arjun](https://github.com/s0md3v/Arjun) | HTTP Parameter Discovery Suite. | |
127
+ | [gitleaks](https://github.com/gitleaks/gitleaks) | Tool for detecting secrets like passwords, API keys, tokens, etc. | |
128
+ | [testssl](https://github.com/testssl/testssl.sh) | SSL/TLS security scanner, including ciphers, protocols and cryptographic flaws.| |
129
+ | [wafw00f](https://github.com/EnableSecurity/wafw00f) | Web Application Firewall Fingerprinting tool. | |
130
+ | [wpprobe](https://github.com/Chocapikk/wpprobe) | Fast wordpress plugin enumeration tool. | |
125
131
  | [httpx](https://github.com/projectdiscovery/httpx) | Fast HTTP prober. | `http` |
126
132
  | [cariddi](https://github.com/edoardottt/cariddi) | Fast crawler and endpoint secrets / api keys / tokens matcher. | `http/crawler` |
127
133
  | [gau](https://github.com/lc/gau) | Offline URL crawler (Alien Vault, The Wayback Machine, Common Crawl, URLScan). | `http/crawler` |
@@ -139,6 +145,7 @@ and it is designed to improve productivity for pentesters and security researche
139
145
  | [naabu](https://github.com/projectdiscovery/naabu) | Fast port discovery tool. | `recon/port` |
140
146
  | [maigret](https://github.com/soxoj/maigret) | Hunt for user accounts across many websites. | `recon/user` |
141
147
  | [gf](https://github.com/tomnomnom/gf) | A wrapper around grep to avoid typing common patterns. | `tagger` |
148
+ | [trivy](https://github.com/aquasecurity/trivy) | Comprehensive and versatile security scanner. | `vuln` |
142
149
  | [grype](https://github.com/anchore/grype) | A vulnerability scanner for container images and filesystems. | `vuln/code` |
143
150
  | [dalfox](https://github.com/hahwul/dalfox) | Powerful XSS scanning tool and parameter analyzer. | `vuln/http` |
144
151
  | [msfconsole](https://docs.rapid7.com/metasploit/msf-overview) | CLI to access and work with the Metasploit Framework. | `vuln/http` |
@@ -12,7 +12,7 @@
12
12
  <a href="https://pypi.org/project/secator/"><img src="https://img.shields.io/pypi/dm/secator"></a>
13
13
  <a href="https://twitter.com/freelabz"><img src="https://img.shields.io/twitter/follow/freelabz.svg?logo=twitter"></a>
14
14
  <a href="https://youtube.com/@FreeLabz"><img src="https://img.shields.io/youtube/channel/subscribers/UCu-F6SpU0h2NP18zBBP04cw?style=social&label=Subscribe%20%40FreeLabz"></a>
15
- <!-- <a href="https://discord.gg/freelabz"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a> -->
15
+ <a href="https://discord.gg/nyHjC2aTrq"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a>
16
16
  </p>
17
17
 
18
18
 
@@ -21,7 +21,8 @@
21
21
  <a href="#supported-commands">Supported commands</a> •
22
22
  <a href="#install-secator">Installation</a> •
23
23
  <a href="#usage">Usage</a> •
24
- <a href="https://docs.freelabz.com">Documentation</a>
24
+ <a href="https://docs.freelabz.com">Documentation</a>
25
+ <a href="https://discord.gg/nyHjC2aTrq">Join us on Discord !</a>
25
26
  </p>
26
27
 
27
28
  `secator` is a task and workflow runner used for security assessments. It supports dozens of well-known security tools
@@ -52,6 +53,11 @@ and it is designed to improve productivity for pentesters and security researche
52
53
 
53
54
  | Name | Description | Category |
54
55
  |---------------------------------------------------------------|--------------------------------------------------------------------------------|-----------------|
56
+ | [arjun](https://github.com/s0md3v/Arjun) | HTTP Parameter Discovery Suite. | |
57
+ | [gitleaks](https://github.com/gitleaks/gitleaks) | Tool for detecting secrets like passwords, API keys, tokens, etc. | |
58
+ | [testssl](https://github.com/testssl/testssl.sh) | SSL/TLS security scanner, including ciphers, protocols and cryptographic flaws.| |
59
+ | [wafw00f](https://github.com/EnableSecurity/wafw00f) | Web Application Firewall Fingerprinting tool. | |
60
+ | [wpprobe](https://github.com/Chocapikk/wpprobe) | Fast wordpress plugin enumeration tool. | |
55
61
  | [httpx](https://github.com/projectdiscovery/httpx) | Fast HTTP prober. | `http` |
56
62
  | [cariddi](https://github.com/edoardottt/cariddi) | Fast crawler and endpoint secrets / api keys / tokens matcher. | `http/crawler` |
57
63
  | [gau](https://github.com/lc/gau) | Offline URL crawler (Alien Vault, The Wayback Machine, Common Crawl, URLScan). | `http/crawler` |
@@ -69,6 +75,7 @@ and it is designed to improve productivity for pentesters and security researche
69
75
  | [naabu](https://github.com/projectdiscovery/naabu) | Fast port discovery tool. | `recon/port` |
70
76
  | [maigret](https://github.com/soxoj/maigret) | Hunt for user accounts across many websites. | `recon/user` |
71
77
  | [gf](https://github.com/tomnomnom/gf) | A wrapper around grep to avoid typing common patterns. | `tagger` |
78
+ | [trivy](https://github.com/aquasecurity/trivy) | Comprehensive and versatile security scanner. | `vuln` |
72
79
  | [grype](https://github.com/anchore/grype) | A vulnerability scanner for container images and filesystems. | `vuln/code` |
73
80
  | [dalfox](https://github.com/hahwul/dalfox) | Powerful XSS scanning tool and parameter analyzer. | `vuln/http` |
74
81
  | [msfconsole](https://docs.rapid7.com/metasploit/msf-overview) | CLI to access and work with the Metasploit Framework. | `vuln/http` |
@@ -4,7 +4,7 @@ build-backend = 'hatchling.build'
4
4
 
5
5
  [project]
6
6
  name = 'secator'
7
- version = "0.14.0"
7
+ version = "0.15.0"
8
8
  authors = [{ name = 'FreeLabz', email = 'sales@freelabz.com' }]
9
9
  readme = 'README.md'
10
10
  description = "The pentester's swiss knife."
@@ -783,7 +783,7 @@ def report_list(workspace, runner_type, time_delta):
783
783
  @report.command('export')
784
784
  @click.argument('json_path', type=str)
785
785
  @click.option('--output-folder', '-of', type=str)
786
- @click.option('-output', '-o', type=str)
786
+ @click.option('-output', '-o', type=str, required=True)
787
787
  def report_export(json_path, output_folder, output):
788
788
  with open(json_path, 'r') as f:
789
789
  data = loads_dataclass(f.read())
@@ -1502,7 +1502,7 @@ def task(name, verbose, check):
1502
1502
  errors
1503
1503
  )
1504
1504
  check_test(
1505
- task.input_type,
1505
+ task.input_types,
1506
1506
  'Check task input type is set (cls.input_type)',
1507
1507
  'Task has no input_type attribute.',
1508
1508
  warnings,
@@ -271,7 +271,6 @@ def generate_cli_subcommand(cli_endpoint, func, **opts):
271
271
  def register_runner(cli_endpoint, config):
272
272
  name = config.name
273
273
  input_required = True
274
- input_type = 'targets'
275
274
  command_opts = {
276
275
  'no_args_is_help': True,
277
276
  'context_settings': {
@@ -282,37 +281,44 @@ def register_runner(cli_endpoint, config):
282
281
 
283
282
  if cli_endpoint.name == 'scan':
284
283
  runner_cls = Scan
284
+ input_required = False # allow targets from stdin
285
285
  short_help = config.description or ''
286
286
  short_help += f' [dim]alias: {config.alias}' if config.alias else ''
287
287
  command_opts.update({
288
288
  'name': name,
289
- 'short_help': short_help
289
+ 'short_help': short_help,
290
+ 'no_args_is_help': False
290
291
  })
292
+ input_types = config.input_types
291
293
 
292
294
  elif cli_endpoint.name == 'workflow':
293
295
  runner_cls = Workflow
296
+ input_required = False # allow targets from stdin
294
297
  short_help = config.description or ''
295
298
  short_help = f'{short_help:<55} [dim](alias)[/][bold cyan] {config.alias}' if config.alias else ''
296
299
  command_opts.update({
297
300
  'name': name,
298
- 'short_help': short_help
301
+ 'short_help': short_help,
302
+ 'no_args_is_help': False
299
303
  })
304
+ input_types = config.input_types
300
305
 
301
306
  elif cli_endpoint.name == 'task':
302
307
  runner_cls = Task
303
308
  input_required = False # allow targets from stdin
304
309
  task_cls = Task.get_task_class(config.name)
305
310
  task_category = get_command_category(task_cls)
306
- input_type = task_cls.input_type or 'targets'
307
- short_help = f'[magenta]{task_category:<15}[/]{task_cls.__doc__}'
311
+ short_help = f'[magenta]{task_category:<25}[/] {task_cls.__doc__}'
308
312
  command_opts.update({
309
313
  'name': name,
310
314
  'short_help': short_help,
311
315
  'no_args_is_help': False
312
316
  })
317
+ input_types = task_cls.input_types
313
318
 
314
319
  else:
315
320
  raise ValueError(f"Unrecognized runner endpoint name {cli_endpoint.name}")
321
+ input_types_str = '|'.join(input_types) if input_types else 'targets'
316
322
  options = get_command_options(config)
317
323
 
318
324
  # TODO: maybe allow this in the future
@@ -324,7 +330,7 @@ def register_runner(cli_endpoint, config):
324
330
  # for i in range(0, len(ctx.args), 2)
325
331
  # }
326
332
 
327
- @click.argument(input_type, required=input_required)
333
+ @click.argument(input_types_str, required=input_required)
328
334
  @decorate_command_options(options)
329
335
  @click.pass_context
330
336
  def func(ctx, **opts):
@@ -353,7 +359,7 @@ def register_runner(cli_endpoint, config):
353
359
  # opts.update(unknown_opts)
354
360
 
355
361
  # Expand input
356
- inputs = opts.pop(input_type)
362
+ inputs = opts.pop(input_types_str)
357
363
  inputs = expand_input(inputs, ctx)
358
364
 
359
365
  # Build hooks from driver name
@@ -420,10 +426,10 @@ def register_runner(cli_endpoint, config):
420
426
  runner.run()
421
427
 
422
428
  generate_cli_subcommand(cli_endpoint, func, **command_opts)
423
- generate_rich_click_opt_groups(cli_endpoint, name, input_type, options)
429
+ generate_rich_click_opt_groups(cli_endpoint, name, input_types, options)
424
430
 
425
431
 
426
- def generate_rich_click_opt_groups(cli_endpoint, name, input_type, options):
432
+ def generate_rich_click_opt_groups(cli_endpoint, name, input_types, options):
427
433
  sortorder = {
428
434
  'Execution': 0,
429
435
  'Output': 1,
@@ -434,7 +440,7 @@ def generate_rich_click_opt_groups(cli_endpoint, name, input_type, options):
434
440
  opt_group = [
435
441
  {
436
442
  'name': 'Targets',
437
- 'options': [input_type],
443
+ 'options': input_types,
438
444
  },
439
445
  ]
440
446
  for prefix in prefixes:
@@ -40,6 +40,9 @@ AUTO_CALIBRATION = 'auto_calibration'
40
40
  CONTENT_TYPE = 'content_type'
41
41
  CONTENT_LENGTH = 'content_length'
42
42
  CIDR_RANGE = 'cidr_range'
43
+ DOCKER_IMAGE = 'docker_image'
44
+ FILENAME = 'filename'
45
+ GIT_REPOSITORY = 'git_repository'
43
46
  CPES = 'cpes'
44
47
  CVES = 'cves'
45
48
  DELAY = 'delay'
@@ -62,6 +65,7 @@ MATCH_CODES = 'match_codes'
62
65
  MATCH_REGEX = 'match_regex'
63
66
  MATCH_SIZE = 'match_size'
64
67
  MATCH_WORDS = 'match_words'
68
+ ORG_NAME = 'org_name'
65
69
  OUTPUT_PATH = 'output_path'
66
70
  PATH = 'path'
67
71
  PERCENT = 'percent'
@@ -100,6 +104,7 @@ REFERENCE = 'reference'
100
104
  REFERENCES = 'references'
101
105
  SEVERITY = 'severity'
102
106
  TAGS = 'tags'
107
+ TECHNOLOGY = 'technology'
103
108
  WEBSERVER = 'webserver'
104
109
  WORDLIST = 'wordlist'
105
110
  WORDS = 'words'
@@ -47,6 +47,7 @@ class InstallerStatus(Enum):
47
47
  @dataclass
48
48
  class Distribution:
49
49
  name: str
50
+ system: str
50
51
  pm_name: str
51
52
  pm_installer: str
52
53
  pm_finalizer: str
@@ -186,6 +187,8 @@ class SourceInstaller:
186
187
  install_cmd = config
187
188
  else:
188
189
  distribution = get_distro_config()
190
+ if not distribution.pm_installer:
191
+ return InstallerStatus.UNKNOWN_DISTRIBUTION
189
192
  for distros, command in config.items():
190
193
  if distribution.name in distros.split("|") or distros == '*':
191
194
  install_cmd = command
@@ -543,7 +546,7 @@ def get_distro_config():
543
546
  distrib = system
544
547
 
545
548
  if system == "Linux":
546
- distrib = distro.id() or distro.like()
549
+ distrib = distro.like() or distro.id()
547
550
 
548
551
  if distrib in ["ubuntu", "debian", "linuxmint", "popos", "kali"]:
549
552
  installer = "apt install -y --no-install-recommends"
@@ -573,12 +576,16 @@ def get_distro_config():
573
576
  else:
574
577
  installer = "scoop" # Alternative package manager for Windows
575
578
 
576
- manager = installer.split(' ')[0]
579
+ if not installer:
580
+ console.print(Error(message=f'Could not find installer for your distribution (system: {system}, distrib: {distrib})')) # noqa: E501
581
+
582
+ manager = installer.split(' ')[0] if installer else ''
577
583
  config = Distribution(
578
584
  pm_installer=installer,
579
585
  pm_finalizer=finalizer,
580
586
  pm_name=manager,
581
- name=distrib
587
+ name=distrib,
588
+ system=system
582
589
  )
583
590
  return config
584
591
 
@@ -25,6 +25,9 @@ class Stat(OutputType):
25
25
  _table_fields = ['name', 'pid', 'cpu', 'memory']
26
26
  _sort_by = ('name', 'pid')
27
27
 
28
+ def __str__(self) -> str:
29
+ return f'{self.name} [pid={self.pid}] [cpu={self.cpu:.2f}%] [memory={self.memory:.2f}%]'
30
+
28
31
  def __repr__(self) -> str:
29
32
  s = rf'[dim yellow3]📊 {self.name} \[pid={self.pid}] \[cpu={self.cpu:.2f}%] \[memory={self.memory:.2f}%]'
30
33
  if self.net_conns:
@@ -53,7 +53,7 @@ class Runner:
53
53
  """
54
54
 
55
55
  # Input field (mostly for tests and CLI)
56
- input_type = None
56
+ input_types = []
57
57
 
58
58
  # Output types
59
59
  output_types = []
@@ -831,7 +831,7 @@ class Runner:
831
831
  if isinstance(data, (OutputType, dict)):
832
832
  if getattr(data, 'toDict', None):
833
833
  data = data.toDict()
834
- data = json.dumps(data)
834
+ data = json.dumps(data, default=str)
835
835
  print(data, file=out)
836
836
 
837
837
  def _get_findings_count(self):
@@ -30,6 +30,8 @@ class Command(Runner):
30
30
  # Base cmd
31
31
  cmd = None
32
32
 
33
+ # Tags
34
+ tags = []
33
35
  # Meta options
34
36
  meta_opts = {}
35
37
 
@@ -73,19 +73,19 @@ OPTS_VULN = [
73
73
 
74
74
  class Http(Command):
75
75
  meta_opts = {k: OPTS[k] for k in OPTS_HTTP_CRAWLERS}
76
- input_type = URL
76
+ input_types = [URL]
77
77
  output_types = [Url]
78
78
 
79
79
 
80
80
  class HttpCrawler(Command):
81
81
  meta_opts = {k: OPTS[k] for k in OPTS_HTTP_CRAWLERS}
82
- input_type = URL
82
+ input_types = [URL]
83
83
  output_types = [Url]
84
84
 
85
85
 
86
86
  class HttpFuzzer(Command):
87
87
  meta_opts = {k: OPTS[k] for k in OPTS_HTTP_FUZZERS}
88
- input_type = URL
88
+ input_types = [URL]
89
89
  output_types = [Url]
90
90
 
91
91
 
@@ -99,22 +99,22 @@ class Recon(Command):
99
99
 
100
100
 
101
101
  class ReconDns(Recon):
102
- input_type = HOST
102
+ input_types = [HOST]
103
103
  output_types = [Subdomain]
104
104
 
105
105
 
106
106
  class ReconUser(Recon):
107
- input_type = USERNAME
107
+ input_types = [USERNAME]
108
108
  output_types = [UserAccount]
109
109
 
110
110
 
111
111
  class ReconIp(Recon):
112
- input_type = CIDR_RANGE
112
+ input_types = [CIDR_RANGE]
113
113
  output_types = [Ip]
114
114
 
115
115
 
116
116
  class ReconPort(Recon):
117
- input_type = IP
117
+ input_types = [IP]
118
118
  output_types = [Port]
119
119
 
120
120
 
@@ -434,15 +434,15 @@ class Vuln(Command):
434
434
 
435
435
 
436
436
  class VulnHttp(Vuln):
437
- input_type = HOST
437
+ input_types = [HOST]
438
438
 
439
439
 
440
440
  class VulnCode(Vuln):
441
- input_type = PATH
441
+ input_types = [PATH]
442
442
 
443
443
 
444
444
  class VulnMulti(Vuln):
445
- input_type = HOST
445
+ input_types = [HOST]
446
446
  output_types = [Vulnerability]
447
447
 
448
448
 
@@ -451,7 +451,7 @@ class VulnMulti(Vuln):
451
451
  #--------------#
452
452
 
453
453
  class Tagger(Command):
454
- input_type = URL
454
+ input_types = [URL]
455
455
  output_types = [Tag]
456
456
 
457
457
  #----------------#
@@ -14,8 +14,9 @@ from secator.utils import process_wordlist
14
14
  class arjun(Command):
15
15
  """HTTP Parameter Discovery Suite."""
16
16
  cmd = 'arjun'
17
+ tags = ['url', 'fuzz', 'params']
17
18
  input_flag = '-u'
18
- input_type = URL
19
+ input_types = [URL]
19
20
  version_flag = ' '
20
21
  opts = {
21
22
  'chunk_size': {'type': int, 'help': 'Control query/chunk size'},
@@ -2,6 +2,7 @@ import shutil
2
2
 
3
3
  from secator.config import CONFIG
4
4
  from secator.decorators import task
5
+ from secator.definitions import FILENAME, HOST, IP, ORG_NAME, PORT, URL, USERNAME
5
6
  from secator.runners import Command
6
7
  from secator.serializers import RegexSerializer
7
8
  from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Info, Error
@@ -177,8 +178,10 @@ def output_discriminator(self, item):
177
178
  class bbot(Command):
178
179
  """Multipurpose scanner."""
179
180
  cmd = 'bbot -y --allow-deadly --force'
181
+ tags = ['vuln', 'scan']
180
182
  json_flag = '--json'
181
183
  input_flag = '-t'
184
+ input_types = [HOST, IP, URL, PORT, ORG_NAME, USERNAME, FILENAME]
182
185
  file_flag = None
183
186
  version_flag = '--help'
184
187
  opts = {
@@ -16,8 +16,9 @@ from secator.tasks._categories import Http
16
16
  class bup(Http):
17
17
  """40X bypasser."""
18
18
  cmd = 'bup'
19
+ tags = ['url', 'bypass']
19
20
  input_flag = '-u'
20
- input_type = URL
21
+ input_types = [URL]
21
22
  json_flag = '--jsonl'
22
23
  opt_prefix = '--'
23
24
  opts = {
@@ -14,7 +14,8 @@ from secator.tasks._categories import HttpCrawler
14
14
  class cariddi(HttpCrawler):
15
15
  """Crawl endpoints, secrets, api keys, extensions, tokens..."""
16
16
  cmd = 'cariddi'
17
- input_type = URL
17
+ tags = ['url', 'crawl']
18
+ input_types = [URL]
18
19
  input_flag = OPT_PIPE_INPUT
19
20
  output_types = [Url, Tag]
20
21
  file_flag = OPT_PIPE_INPUT
@@ -21,7 +21,8 @@ DALFOX_TYPE_MAP = {
21
21
  class dalfox(VulnHttp):
22
22
  """Powerful open source XSS scanning tool."""
23
23
  cmd = 'dalfox'
24
- input_type = URL
24
+ tags = ['url', 'fuzz']
25
+ input_types = [URL]
25
26
  input_flag = 'url'
26
27
  file_flag = 'file'
27
28
  # input_chunk_size = 1
@@ -9,7 +9,7 @@ from secator.definitions import (CONTENT_LENGTH, CONTENT_TYPE, DELAY, DEPTH,
9
9
  MATCH_CODES, MATCH_REGEX, MATCH_SIZE,
10
10
  MATCH_WORDS, METHOD, OPT_NOT_SUPPORTED, OUTPUT_PATH, PROXY,
11
11
  RATE_LIMIT, RETRIES, STATUS_CODE,
12
- THREADS, TIMEOUT, USER_AGENT, WORDLIST)
12
+ THREADS, TIMEOUT, USER_AGENT, WORDLIST, URL)
13
13
  from secator.output_types import Url, Info, Error
14
14
  from secator.tasks._categories import HttpFuzzer
15
15
 
@@ -18,6 +18,8 @@ from secator.tasks._categories import HttpFuzzer
18
18
  class dirsearch(HttpFuzzer):
19
19
  """Advanced web path brute-forcer."""
20
20
  cmd = 'dirsearch'
21
+ tags = ['url', 'fuzz']
22
+ input_types = [URL]
21
23
  input_flag = '-u'
22
24
  file_flag = '-l'
23
25
  json_flag = '-O json'
@@ -1,5 +1,5 @@
1
1
  from secator.decorators import task
2
- from secator.definitions import (OPT_PIPE_INPUT, RATE_LIMIT, RETRIES, THREADS)
2
+ from secator.definitions import (HOST, OPT_PIPE_INPUT, RATE_LIMIT, RETRIES, THREADS)
3
3
  from secator.output_types import Record, Ip, Subdomain
4
4
  from secator.output_types.ip import IpProtocol
5
5
  from secator.tasks._categories import ReconDns
@@ -11,8 +11,10 @@ from secator.utils import extract_domain_info
11
11
  class dnsx(ReconDns):
12
12
  """dnsx is a fast and multi-purpose DNS toolkit designed for running various retryabledns library."""
13
13
  cmd = 'dnsx -resp -recon'
14
+ tags = ['dns', 'fuzz']
14
15
  json_flag = '-json'
15
16
  input_flag = OPT_PIPE_INPUT
17
+ input_types = [HOST]
16
18
  file_flag = OPT_PIPE_INPUT
17
19
  output_types = [Record, Ip, Subdomain]
18
20
  opt_key_map = {
@@ -11,8 +11,10 @@ from secator.utils import process_wordlist
11
11
  class dnsxbrute(ReconDns):
12
12
  """dnsx is a fast and multi-purpose DNS toolkit designed for running various library."""
13
13
  cmd = 'dnsx'
14
+ tags = ['dns', 'fuzz']
14
15
  json_flag = '-json'
15
16
  input_flag = '-domain'
17
+ input_types = [HOST]
16
18
  file_flag = '-domain'
17
19
  opt_key_map = {
18
20
  RATE_LIMIT: 'rate-limit',
@@ -6,7 +6,7 @@ from secator.definitions import (CONTENT_TYPE, DELAY, DEPTH, FILTER_CODES,
6
6
  MATCH_REGEX, MATCH_SIZE, MATCH_WORDS, METHOD,
7
7
  OPT_NOT_SUPPORTED, OPT_PIPE_INPUT, PROXY,
8
8
  RATE_LIMIT, RETRIES, STATUS_CODE,
9
- THREADS, TIMEOUT, USER_AGENT, WORDLIST, WORDS)
9
+ THREADS, TIMEOUT, USER_AGENT, WORDLIST, WORDS, URL)
10
10
  from secator.output_types import Url
11
11
  from secator.serializers import JSONSerializer
12
12
  from secator.tasks._categories import HttpFuzzer
@@ -16,6 +16,8 @@ from secator.tasks._categories import HttpFuzzer
16
16
  class feroxbuster(HttpFuzzer):
17
17
  """Simple, fast, recursive content discovery tool written in Rust"""
18
18
  cmd = 'feroxbuster --auto-bail --no-state'
19
+ tags = ['url', 'fuzz']
20
+ input_types = [URL]
19
21
  input_flag = '--url'
20
22
  input_chunk_size = 1
21
23
  file_flag = OPT_PIPE_INPUT
@@ -7,7 +7,7 @@ from secator.definitions import (AUTO_CALIBRATION, CONTENT_LENGTH,
7
7
  MATCH_WORDS, METHOD, OPT_NOT_SUPPORTED,
8
8
  PERCENT, PROXY, RATE_LIMIT, RETRIES,
9
9
  STATUS_CODE, THREADS, TIME, TIMEOUT,
10
- USER_AGENT, WORDLIST)
10
+ USER_AGENT, WORDLIST, URL)
11
11
  from secator.output_types import Progress, Url
12
12
  from secator.serializers import JSONSerializer, RegexSerializer
13
13
  from secator.tasks._categories import HttpFuzzer
@@ -19,6 +19,8 @@ FFUF_PROGRESS_REGEX = r':: Progress: \[(?P<count>\d+)/(?P<total>\d+)\] :: Job \[
19
19
  class ffuf(HttpFuzzer):
20
20
  """Fast web fuzzer written in Go."""
21
21
  cmd = 'ffuf -noninteractive'
22
+ tags = ['url', 'fuzz']
23
+ input_types = [URL]
22
24
  input_flag = '-u'
23
25
  input_chunk_size = 1
24
26
  file_flag = None
@@ -11,8 +11,10 @@ from secator.tasks._categories import ReconIp
11
11
  class fping(ReconIp):
12
12
  """Send ICMP echo probes to network hosts, similar to ping, but much better."""
13
13
  cmd = 'fping -a'
14
+ tags = ['ip', 'recon']
14
15
  file_flag = '-f'
15
16
  input_flag = None
17
+ input_types = [IP]
16
18
  opt_prefix = '--'
17
19
  opt_key_map = {
18
20
  DELAY: 'period',
@@ -26,7 +28,7 @@ class fping(ReconIp):
26
28
  DELAY: lambda x: x * 1000, # convert s to ms
27
29
  TIMEOUT: lambda x: x * 1000 # convert s to ms
28
30
  }
29
- input_type = IP
31
+ input_types = [IP]
30
32
  output_types = [Ip]
31
33
  install_pre = {'*': ['fping']}
32
34
  ignore_return_code = True
@@ -4,7 +4,7 @@ from secator.definitions import (DELAY, DEPTH, FILTER_CODES, FILTER_REGEX,
4
4
  HEADER, MATCH_CODES, MATCH_REGEX, MATCH_SIZE,
5
5
  MATCH_WORDS, METHOD, OPT_NOT_SUPPORTED,
6
6
  OPT_PIPE_INPUT, PROXY, RATE_LIMIT, RETRIES,
7
- THREADS, TIMEOUT, USER_AGENT)
7
+ THREADS, TIMEOUT, USER_AGENT, URL)
8
8
  from secator.serializers import JSONSerializer
9
9
  from secator.tasks._categories import HttpCrawler
10
10
 
@@ -13,6 +13,8 @@ from secator.tasks._categories import HttpCrawler
13
13
  class gau(HttpCrawler):
14
14
  """Fetch known URLs from AlienVault's Open Threat Exchange, the Wayback Machine, Common Crawl, and URLScan."""
15
15
  cmd = 'gau'
16
+ tags = ['pattern', 'scan']
17
+ input_types = [URL]
16
18
  file_flag = OPT_PIPE_INPUT
17
19
  json_flag = '--json'
18
20
  opt_prefix = '--'
@@ -8,6 +8,7 @@ from secator.tasks._categories import Tagger
8
8
  class gf(Tagger):
9
9
  """Wrapper around grep, to help you grep for things."""
10
10
  cmd = 'gf'
11
+ tags = ['pattern', 'scan']
11
12
  file_flag = OPT_PIPE_INPUT
12
13
  input_flag = OPT_PIPE_INPUT
13
14
  version_flag = OPT_NOT_SUPPORTED
@@ -17,7 +18,7 @@ class gf(Tagger):
17
18
  opt_key_map = {
18
19
  'pattern': ''
19
20
  }
20
- input_type = URL
21
+ input_types = [URL]
21
22
  install_cmd = (
22
23
  'go install -v github.com/tomnomnom/gf@latest && '
23
24
  'git clone https://github.com/1ndianl33t/Gf-Patterns $HOME/.gf || true'
@@ -5,7 +5,7 @@ import yaml
5
5
  from secator.config import CONFIG
6
6
  from secator.decorators import task
7
7
  from secator.runners import Command
8
- from secator.definitions import (OUTPUT_PATH)
8
+ from secator.definitions import (OUTPUT_PATH, PATH, GIT_REPOSITORY)
9
9
  from secator.utils import caml_to_snake
10
10
  from secator.output_types import Tag, Info, Error
11
11
 
@@ -14,6 +14,8 @@ from secator.output_types import Tag, Info, Error
14
14
  class gitleaks(Command):
15
15
  """Tool for detecting secrets like passwords, API keys, and tokens in git repos, files, and stdin."""
16
16
  cmd = 'gitleaks'
17
+ tags = ['secret', 'scan']
18
+ input_types = [PATH, GIT_REPOSITORY]
17
19
  input_flag = None
18
20
  json_flag = '-f json'
19
21
  opt_prefix = '--'