secator 0.3.6__tar.gz → 0.4.1__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 (169) hide show
  1. {secator-0.3.6 → secator-0.4.1}/CHANGELOG.md +43 -0
  2. {secator-0.3.6 → secator-0.4.1}/PKG-INFO +12 -6
  3. {secator-0.3.6 → secator-0.4.1}/README.md +9 -5
  4. secator-0.4.1/images/demo.gif +0 -0
  5. secator-0.4.1/images/demo.tap +47 -0
  6. secator-0.4.1/images/help.png +0 -0
  7. {secator-0.3.6 → secator-0.4.1}/pyproject.toml +3 -1
  8. {secator-0.3.6 → secator-0.4.1}/scripts/stories/STORY.md +2 -2
  9. {secator-0.3.6 → secator-0.4.1}/secator/celery.py +14 -19
  10. {secator-0.3.6 → secator-0.4.1}/secator/cli.py +181 -99
  11. secator-0.4.1/secator/config.py +573 -0
  12. {secator-0.3.6 → secator-0.4.1}/secator/decorators.py +5 -5
  13. secator-0.4.1/secator/definitions.py +135 -0
  14. {secator-0.3.6 → secator-0.4.1}/secator/exporters/gdrive.py +10 -10
  15. {secator-0.3.6 → secator-0.4.1}/secator/hooks/mongodb.py +3 -4
  16. {secator-0.3.6 → secator-0.4.1}/secator/installer.py +10 -6
  17. {secator-0.3.6 → secator-0.4.1}/secator/output_types/vulnerability.py +3 -1
  18. {secator-0.3.6 → secator-0.4.1}/secator/runners/_base.py +11 -9
  19. {secator-0.3.6 → secator-0.4.1}/secator/runners/_helpers.py +52 -34
  20. {secator-0.3.6 → secator-0.4.1}/secator/runners/command.py +26 -30
  21. {secator-0.3.6 → secator-0.4.1}/secator/runners/scan.py +4 -7
  22. {secator-0.3.6 → secator-0.4.1}/secator/runners/task.py +2 -1
  23. {secator-0.3.6 → secator-0.4.1}/secator/runners/workflow.py +3 -6
  24. {secator-0.3.6 → secator-0.4.1}/secator/tasks/_categories.py +95 -44
  25. {secator-0.3.6 → secator-0.4.1}/secator/tasks/dnsxbrute.py +3 -2
  26. {secator-0.3.6 → secator-0.4.1}/secator/tasks/ffuf.py +2 -2
  27. {secator-0.3.6 → secator-0.4.1}/secator/tasks/httpx.py +4 -4
  28. {secator-0.3.6 → secator-0.4.1}/secator/tasks/katana.py +5 -4
  29. {secator-0.3.6 → secator-0.4.1}/secator/tasks/msfconsole.py +3 -4
  30. {secator-0.3.6 → secator-0.4.1}/secator/tasks/nmap.py +95 -48
  31. {secator-0.3.6 → secator-0.4.1}/secator/tasks/nuclei.py +4 -0
  32. secator-0.3.6/secator/config.py → secator-0.4.1/secator/template.py +24 -24
  33. {secator-0.3.6 → secator-0.4.1}/secator/utils.py +3 -7
  34. {secator-0.3.6 → secator-0.4.1}/tests/integration/inputs.py +2 -2
  35. {secator-0.3.6 → secator-0.4.1}/tests/integration/outputs.py +7 -7
  36. secator-0.4.1/tests/integration/test_worker.py +82 -0
  37. {secator-0.3.6 → secator-0.4.1}/tests/integration/test_workflows.py +2 -2
  38. {secator-0.3.6 → secator-0.4.1}/tests/performance/loadtester.py +2 -2
  39. secator-0.4.1/tests/unit/test_config.py +71 -0
  40. secator-0.4.1/tests/unit/test_offline.py +43 -0
  41. secator-0.3.6/images/demo.cast +0 -959
  42. secator-0.3.6/images/demo.gif +0 -0
  43. secator-0.3.6/images/help.png +0 -0
  44. secator-0.3.6/secator/definitions.py +0 -236
  45. {secator-0.3.6 → secator-0.4.1}/.flake8 +0 -0
  46. {secator-0.3.6 → secator-0.4.1}/.gitignore +0 -0
  47. {secator-0.3.6 → secator-0.4.1}/CONTRIBUTING.md +0 -0
  48. {secator-0.3.6 → secator-0.4.1}/Dockerfile +0 -0
  49. {secator-0.3.6 → secator-0.4.1}/LICENSE +0 -0
  50. {secator-0.3.6 → secator-0.4.1}/SECURITY.md +0 -0
  51. {secator-0.3.6 → secator-0.4.1}/cloudbuild.yaml +0 -0
  52. {secator-0.3.6 → secator-0.4.1}/images/aliases.cast +0 -0
  53. {secator-0.3.6 → secator-0.4.1}/images/aliases.gif +0 -0
  54. {secator-0.3.6 → secator-0.4.1}/images/fmt.cast +0 -0
  55. {secator-0.3.6 → secator-0.4.1}/images/fmt.gif +0 -0
  56. {secator-0.3.6 → secator-0.4.1}/images/input.cast +0 -0
  57. {secator-0.3.6 → secator-0.4.1}/images/input.gif +0 -0
  58. {secator-0.3.6 → secator-0.4.1}/images/pipe.cast +0 -0
  59. {secator-0.3.6 → secator-0.4.1}/images/pipe.gif +0 -0
  60. {secator-0.3.6 → secator-0.4.1}/images/short_demo.cast +0 -0
  61. {secator-0.3.6 → secator-0.4.1}/images/short_demo.gif +0 -0
  62. {secator-0.3.6 → secator-0.4.1}/scripts/download_cves.sh +0 -0
  63. {secator-0.3.6 → secator-0.4.1}/scripts/install.sh +0 -0
  64. {secator-0.3.6 → secator-0.4.1}/scripts/install_asciinema.sh +0 -0
  65. {secator-0.3.6 → secator-0.4.1}/scripts/install_go.sh +0 -0
  66. {secator-0.3.6 → secator-0.4.1}/scripts/install_ruby.sh +0 -0
  67. {secator-0.3.6 → secator-0.4.1}/scripts/msf/exploit_cve.rc +0 -0
  68. {secator-0.3.6 → secator-0.4.1}/scripts/msf/ftp_anonymous.rc +0 -0
  69. {secator-0.3.6 → secator-0.4.1}/scripts/msf/ftp_version.rc +0 -0
  70. {secator-0.3.6 → secator-0.4.1}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
  71. {secator-0.3.6 → secator-0.4.1}/scripts/msf/redis.rc +0 -0
  72. {secator-0.3.6 → secator-0.4.1}/scripts/msfinstall.sh +0 -0
  73. {secator-0.3.6 → secator-0.4.1}/scripts/stories/aliases.sh +0 -0
  74. {secator-0.3.6 → secator-0.4.1}/scripts/stories/demo.sh +0 -0
  75. {secator-0.3.6 → secator-0.4.1}/scripts/stories/fmt.sh +0 -0
  76. {secator-0.3.6 → secator-0.4.1}/scripts/stories/input.sh +0 -0
  77. {secator-0.3.6 → secator-0.4.1}/scripts/stories/pipe.sh +0 -0
  78. {secator-0.3.6 → secator-0.4.1}/scripts/stories/short_demo.sh +0 -0
  79. {secator-0.3.6 → secator-0.4.1}/secator/.gitignore +0 -0
  80. {secator-0.3.6 → secator-0.4.1}/secator/__init__.py +0 -0
  81. {secator-0.3.6 → secator-0.4.1}/secator/configs/__init__.py +0 -0
  82. {secator-0.3.6 → secator-0.4.1}/secator/configs/profiles/__init__.py +0 -0
  83. {secator-0.3.6 → secator-0.4.1}/secator/configs/profiles/aggressive.yaml +0 -0
  84. {secator-0.3.6 → secator-0.4.1}/secator/configs/profiles/default.yaml +0 -0
  85. {secator-0.3.6 → secator-0.4.1}/secator/configs/profiles/stealth.yaml +0 -0
  86. {secator-0.3.6 → secator-0.4.1}/secator/configs/scans/__init__.py +0 -0
  87. {secator-0.3.6 → secator-0.4.1}/secator/configs/scans/domain.yaml +0 -0
  88. {secator-0.3.6 → secator-0.4.1}/secator/configs/scans/host.yaml +0 -0
  89. {secator-0.3.6 → secator-0.4.1}/secator/configs/scans/network.yaml +0 -0
  90. {secator-0.3.6 → secator-0.4.1}/secator/configs/scans/subdomain.yaml +0 -0
  91. {secator-0.3.6 → secator-0.4.1}/secator/configs/scans/url.yaml +0 -0
  92. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/__init__.py +0 -0
  93. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/cidr_recon.yaml +0 -0
  94. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/code_scan.yaml +0 -0
  95. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/host_recon.yaml +0 -0
  96. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/port_scan.yaml +0 -0
  97. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/subdomain_recon.yaml +0 -0
  98. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/url_crawl.yaml +0 -0
  99. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/url_dirsearch.yaml +0 -0
  100. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/url_fuzz.yaml +0 -0
  101. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/url_nuclei.yaml +0 -0
  102. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/url_vuln.yaml +0 -0
  103. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/user_hunt.yaml +0 -0
  104. {secator-0.3.6 → secator-0.4.1}/secator/configs/workflows/wordpress.yaml +0 -0
  105. {secator-0.3.6 → secator-0.4.1}/secator/exporters/__init__.py +0 -0
  106. {secator-0.3.6 → secator-0.4.1}/secator/exporters/_base.py +0 -0
  107. {secator-0.3.6 → secator-0.4.1}/secator/exporters/csv.py +0 -0
  108. {secator-0.3.6 → secator-0.4.1}/secator/exporters/json.py +0 -0
  109. {secator-0.3.6 → secator-0.4.1}/secator/exporters/table.py +0 -0
  110. {secator-0.3.6 → secator-0.4.1}/secator/exporters/txt.py +0 -0
  111. {secator-0.3.6 → secator-0.4.1}/secator/hooks/__init__.py +0 -0
  112. {secator-0.3.6 → secator-0.4.1}/secator/output_types/__init__.py +0 -0
  113. {secator-0.3.6 → secator-0.4.1}/secator/output_types/_base.py +0 -0
  114. {secator-0.3.6 → secator-0.4.1}/secator/output_types/exploit.py +0 -0
  115. {secator-0.3.6 → secator-0.4.1}/secator/output_types/ip.py +0 -0
  116. {secator-0.3.6 → secator-0.4.1}/secator/output_types/port.py +0 -0
  117. {secator-0.3.6 → secator-0.4.1}/secator/output_types/progress.py +0 -0
  118. {secator-0.3.6 → secator-0.4.1}/secator/output_types/record.py +0 -0
  119. {secator-0.3.6 → secator-0.4.1}/secator/output_types/subdomain.py +0 -0
  120. {secator-0.3.6 → secator-0.4.1}/secator/output_types/tag.py +0 -0
  121. {secator-0.3.6 → secator-0.4.1}/secator/output_types/target.py +0 -0
  122. {secator-0.3.6 → secator-0.4.1}/secator/output_types/url.py +0 -0
  123. {secator-0.3.6 → secator-0.4.1}/secator/output_types/user_account.py +0 -0
  124. {secator-0.3.6 → secator-0.4.1}/secator/report.py +0 -0
  125. {secator-0.3.6 → secator-0.4.1}/secator/rich.py +0 -0
  126. {secator-0.3.6 → secator-0.4.1}/secator/runners/__init__.py +0 -0
  127. {secator-0.3.6 → secator-0.4.1}/secator/serializers/__init__.py +0 -0
  128. {secator-0.3.6 → secator-0.4.1}/secator/serializers/dataclass.py +0 -0
  129. {secator-0.3.6 → secator-0.4.1}/secator/serializers/json.py +0 -0
  130. {secator-0.3.6 → secator-0.4.1}/secator/serializers/regex.py +0 -0
  131. {secator-0.3.6 → secator-0.4.1}/secator/tasks/__init__.py +0 -0
  132. {secator-0.3.6 → secator-0.4.1}/secator/tasks/cariddi.py +0 -0
  133. {secator-0.3.6 → secator-0.4.1}/secator/tasks/dalfox.py +0 -0
  134. {secator-0.3.6 → secator-0.4.1}/secator/tasks/dirsearch.py +0 -0
  135. {secator-0.3.6 → secator-0.4.1}/secator/tasks/dnsx.py +0 -0
  136. {secator-0.3.6 → secator-0.4.1}/secator/tasks/feroxbuster.py +0 -0
  137. {secator-0.3.6 → secator-0.4.1}/secator/tasks/fping.py +0 -0
  138. {secator-0.3.6 → secator-0.4.1}/secator/tasks/gau.py +0 -0
  139. {secator-0.3.6 → secator-0.4.1}/secator/tasks/gf.py +0 -0
  140. {secator-0.3.6 → secator-0.4.1}/secator/tasks/gospider.py +0 -0
  141. {secator-0.3.6 → secator-0.4.1}/secator/tasks/grype.py +0 -0
  142. {secator-0.3.6 → secator-0.4.1}/secator/tasks/h8mail.py +0 -0
  143. {secator-0.3.6 → secator-0.4.1}/secator/tasks/maigret.py +0 -0
  144. {secator-0.3.6 → secator-0.4.1}/secator/tasks/mapcidr.py +0 -0
  145. {secator-0.3.6 → secator-0.4.1}/secator/tasks/naabu.py +0 -0
  146. {secator-0.3.6 → secator-0.4.1}/secator/tasks/searchsploit.py +0 -0
  147. {secator-0.3.6 → secator-0.4.1}/secator/tasks/subfinder.py +0 -0
  148. {secator-0.3.6 → secator-0.4.1}/secator/tasks/wpscan.py +0 -0
  149. {secator-0.3.6 → secator-0.4.1}/secator/utils_test.py +0 -0
  150. {secator-0.3.6 → secator-0.4.1}/tests/__init__.py +0 -0
  151. {secator-0.3.6 → secator-0.4.1}/tests/fixtures/h8mail_breach.txt +0 -0
  152. {secator-0.3.6 → secator-0.4.1}/tests/fixtures/msfconsole_input.rc +0 -0
  153. {secator-0.3.6 → secator-0.4.1}/tests/fixtures/nmap_output.xml +0 -0
  154. {secator-0.3.6 → secator-0.4.1}/tests/integration/__init__.py +0 -0
  155. {secator-0.3.6 → secator-0.4.1}/tests/integration/setup.sh +0 -0
  156. {secator-0.3.6 → secator-0.4.1}/tests/integration/teardown.sh +0 -0
  157. {secator-0.3.6 → secator-0.4.1}/tests/integration/test_scans.py +0 -0
  158. {secator-0.3.6 → secator-0.4.1}/tests/integration/test_tasks.py +0 -0
  159. {secator-0.3.6 → secator-0.4.1}/tests/integration/wordlist.txt +0 -0
  160. {secator-0.3.6 → secator-0.4.1}/tests/integration/wordlist_dns.txt +0 -0
  161. {secator-0.3.6 → secator-0.4.1}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
  162. {secator-0.3.6 → secator-0.4.1}/tests/integration/wordpress_toolbox/Makefile +0 -0
  163. {secator-0.3.6 → secator-0.4.1}/tests/performance/__init__.py +0 -0
  164. {secator-0.3.6 → secator-0.4.1}/tests/unit/__init__.py +0 -0
  165. {secator-0.3.6 → secator-0.4.1}/tests/unit/test_celery.py +0 -0
  166. {secator-0.3.6 → secator-0.4.1}/tests/unit/test_scans.py +0 -0
  167. {secator-0.3.6 → secator-0.4.1}/tests/unit/test_serializers.py +0 -0
  168. {secator-0.3.6 → secator-0.4.1}/tests/unit/test_tasks.py +0 -0
  169. {secator-0.3.6 → secator-0.4.1}/tests/unit/test_workflows.py +0 -0
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1](https://github.com/freelabz/secator/compare/v0.4.0...v0.4.1) (2024-04-30)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * failed addons import ([#368](https://github.com/freelabz/secator/issues/368)) ([aee7ede](https://github.com/freelabz/secator/commit/aee7edeee1e96292e637b9161034f0d628a1f386))
9
+ * load dotenv before config import ([#370](https://github.com/freelabz/secator/issues/370)) ([ba2ea8e](https://github.com/freelabz/secator/commit/ba2ea8e3624dda7268d3788c0541fc0d37195358))
10
+
11
+ ## [0.4.0](https://github.com/freelabz/secator/compare/v0.3.6...v0.4.0) (2024-04-27)
12
+
13
+
14
+ ### Features
15
+
16
+ * `nuclei` - add "meta" items to extra_data ([#329](https://github.com/freelabz/secator/issues/329)) ([d986e01](https://github.com/freelabz/secator/commit/d986e01ed10bfd58c57565e24f053cf4ffb165b5))
17
+ * add offline mode ([#314](https://github.com/freelabz/secator/issues/314)) ([6b55e99](https://github.com/freelabz/secator/commit/6b55e99a9e60a102afaf71a49148a8aec1b2e3dc))
18
+ * add secator configuration loader ([#313](https://github.com/freelabz/secator/issues/313)) ([9b9ab7b](https://github.com/freelabz/secator/commit/9b9ab7b1c394bd77c986fcb755d19d1b887228cf))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * add alias for config command and reload help screenshot ([#324](https://github.com/freelabz/secator/issues/324)) ([3dbc9ad](https://github.com/freelabz/secator/commit/3dbc9adf7a3b12dbf5bdcaa2224297d58b1e2fd8))
24
+ * add nmap --top-ports option ([#339](https://github.com/freelabz/secator/issues/339)) ([6352be7](https://github.com/freelabz/secator/commit/6352be7350890c38e521d98b89e7e634ed8c8684))
25
+ * add redis addon missing warning on celery worker ([#310](https://github.com/freelabz/secator/issues/310)) ([c0afc3a](https://github.com/freelabz/secator/commit/c0afc3a068140f9811845c05c8d3763d932407de))
26
+ * better vuln detection ([#349](https://github.com/freelabz/secator/issues/349)) ([150b603](https://github.com/freelabz/secator/commit/150b6030e6702f599b8a67ba53bef4c2e675e90a))
27
+ * **config:** broken list values with 0 or 1 element ([#364](https://github.com/freelabz/secator/issues/364)) ([7ef7a5e](https://github.com/freelabz/secator/commit/7ef7a5e27604df53868d2b670439a0a7150e8af1))
28
+ * **docker:** pull remote DockerHub images in Compose ([#363](https://github.com/freelabz/secator/issues/363)) ([dce6d8a](https://github.com/freelabz/secator/commit/dce6d8a5d722aa85c1fc2592f44738b6bfe79b04))
29
+ * grype integration test ([#327](https://github.com/freelabz/secator/issues/327)) ([33ddb84](https://github.com/freelabz/secator/commit/33ddb84836965c4bff6fd442c317de240e54ec3f))
30
+ * minor config tweaks ([#360](https://github.com/freelabz/secator/issues/360)) ([4631024](https://github.com/freelabz/secator/commit/46310245afe0b0d04a6b333175f28ffeab1659bb))
31
+ * next steps highlight ([#326](https://github.com/freelabz/secator/issues/326)) ([528c715](https://github.com/freelabz/secator/commit/528c715e4f20bceb9dbae85e99b707243d556aea))
32
+ * proper local file naming for sudo_killer.zip ([#330](https://github.com/freelabz/secator/issues/330)) ([f7e563f](https://github.com/freelabz/secator/commit/f7e563f3a4a20fd38f7167e2bd682ddb3eea6224))
33
+ * query CVEs without CPE match ([#321](https://github.com/freelabz/secator/issues/321)) ([d02e09c](https://github.com/freelabz/secator/commit/d02e09cc379afa85df25227f6c0bab4496031d78))
34
+ * switch payload sudo_killer to zip ([#318](https://github.com/freelabz/secator/issues/318)) ([2a92dc8](https://github.com/freelabz/secator/commit/2a92dc8d4a71cce71a85bb77747b8af2d5aed6c4))
35
+ * task description in remote mode ([#344](https://github.com/freelabz/secator/issues/344)) ([1140611](https://github.com/freelabz/secator/commit/1140611a1129c19bd306db33396ea3fa1bc88f25))
36
+ * truncated pickle error ([#334](https://github.com/freelabz/secator/issues/334)) ([663af17](https://github.com/freelabz/secator/commit/663af1777d07c7628a220ee627aece9fc83e6095))
37
+
38
+
39
+ ### Documentation
40
+
41
+ * add VHS demo ([#293](https://github.com/freelabz/secator/issues/293)) ([70454a6](https://github.com/freelabz/secator/commit/70454a60053ef6ce3002565c07ede7b00b14e335))
42
+ * update README.md ([a0a19fb](https://github.com/freelabz/secator/commit/a0a19fb24cd297e98cb8716e691ed6fcf11475c6))
43
+ * update README.md ([341f5b8](https://github.com/freelabz/secator/commit/341f5b8cd049fd8e33ebfb525de0377d0a659df2))
44
+ * Update README.md ([98c986c](https://github.com/freelabz/secator/commit/98c986c644bbe62434c0a2fe72fe9eea606c2e8d))
45
+
3
46
  ## [0.3.6](https://github.com/freelabz/secator/compare/v0.3.5...v0.3.6) (2024-04-17)
4
47
 
5
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: secator
3
- Version: 0.3.6
3
+ Version: 0.4.1
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
@@ -29,11 +29,13 @@ Requires-Dist: humanize<5
29
29
  Requires-Dist: ifaddr<1
30
30
  Requires-Dist: jinja2<4
31
31
  Requires-Dist: packaging<25
32
+ Requires-Dist: pydantic<3
32
33
  Requires-Dist: python-dotenv<2
33
34
  Requires-Dist: pyyaml<7
34
35
  Requires-Dist: requests<3
35
36
  Requires-Dist: rich-click<1.7
36
37
  Requires-Dist: rich<14
38
+ Requires-Dist: typing-extensions<5
37
39
  Requires-Dist: validators<1
38
40
  Requires-Dist: xmltodict<1
39
41
  Provides-Extra: build
@@ -90,7 +92,7 @@ and it is designed to improve productivity for pentesters and security researche
90
92
 
91
93
  # Features
92
94
 
93
- ![](images/short_demo.gif)
95
+ ![](images/demo.gif)
94
96
 
95
97
  * **Curated list of commands**
96
98
 
@@ -177,14 +179,18 @@ wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/instal
177
179
  <summary>Docker</summary>
178
180
 
179
181
  ```sh
180
- docker run -it --rm --net=host -v $HOME/.secator:/root/.secator freelabz/secator --help
182
+ docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator --help
181
183
  ```
182
184
 
183
- The volume mount `-v` is necessary to save all `secator` reports to your host machine.
185
+ The volume mount -v is necessary to save all secator reports to your host machine, and--net=host is recommended to grant full access to the host network.
184
186
 
185
- You can set up an alias to facilitate running `secator` from Docker:
187
+ You can alias this command to run it easier:
186
188
  ```sh
187
- alias secator="docker run -it --rm --net=host -v $HOME/.secator:/root/.secator freelabz/secator"
189
+ alias secator="docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator"
190
+ ```
191
+
192
+ Now you can run secator like if it was installed on baremetal:
193
+ ```
188
194
  secator --help
189
195
  ```
190
196
 
@@ -29,7 +29,7 @@ and it is designed to improve productivity for pentesters and security researche
29
29
 
30
30
  # Features
31
31
 
32
- ![](images/short_demo.gif)
32
+ ![](images/demo.gif)
33
33
 
34
34
  * **Curated list of commands**
35
35
 
@@ -116,14 +116,18 @@ wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/instal
116
116
  <summary>Docker</summary>
117
117
 
118
118
  ```sh
119
- docker run -it --rm --net=host -v $HOME/.secator:/root/.secator freelabz/secator --help
119
+ docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator --help
120
120
  ```
121
121
 
122
- The volume mount `-v` is necessary to save all `secator` reports to your host machine.
122
+ The volume mount -v is necessary to save all secator reports to your host machine, and--net=host is recommended to grant full access to the host network.
123
123
 
124
- You can set up an alias to facilitate running `secator` from Docker:
124
+ You can alias this command to run it easier:
125
125
  ```sh
126
- alias secator="docker run -it --rm --net=host -v $HOME/.secator:/root/.secator freelabz/secator"
126
+ alias secator="docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator"
127
+ ```
128
+
129
+ Now you can run secator like if it was installed on baremetal:
130
+ ```
127
131
  secator --help
128
132
  ```
129
133
 
Binary file
@@ -0,0 +1,47 @@
1
+ secator --help
2
+ clear
3
+
4
+ # Run tasks ...
5
+ secator x katana http://testphp.vulnweb.com -rl 100 -timeout 10 -header Accept:text/html
6
+ clear
7
+
8
+ # ... with mutualized input options and output types !
9
+ Up 3
10
+ Left 72
11
+ Backspace 6
12
+ dirsearch # noenter
13
+
14
+ Up 1
15
+ Backspace 9
16
+ cariddi # noenter
17
+
18
+ Up 1
19
+ Backspace 7
20
+ feroxbuster # nowait
21
+ Sleep 5s
22
+ Ctrl+C
23
+ Sleep 3s
24
+
25
+ Up 1
26
+ Left 72
27
+ Backspace 11
28
+ nmap # noenter
29
+ Right 8
30
+ Backspace 7
31
+ Right 19
32
+ Space 1
33
+ -p 80,443 # noenter
34
+ Right 45
35
+ Backspace 25
36
+ Sleep 2s
37
+ Enter
38
+ Wait
39
+ Sleep 3s
40
+ clear
41
+
42
+ # Run workflows ...
43
+ secator w host_recon --help
44
+
45
+ Up 1
46
+ Backspace 6
47
+ localhost -rl 1000 -ss -p 6379,8080 -tid redis-info,exposed-redis,CVE-2021-44228
Binary file
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "secator"
7
- version = "0.3.6"
7
+ version = "0.4.1"
8
8
  authors = [{ name = "FreeLabz", email = "sales@freelabz.com" }]
9
9
  readme = "README.md"
10
10
  description = "The pentester's swiss knife."
@@ -42,9 +42,11 @@ dependencies = [
42
42
  "packaging < 25",
43
43
  "python-dotenv < 2",
44
44
  "pyyaml < 7",
45
+ "pydantic < 3",
45
46
  "requests < 3",
46
47
  "rich < 14",
47
48
  "rich-click < 1.7",
49
+ "typing_extensions < 5",
48
50
  "validators < 1",
49
51
  "xmltodict < 1"
50
52
  ]
@@ -60,9 +60,9 @@ secator z default mydomain.com --worker
60
60
  **Callbacks (library mode):**
61
61
  ```py
62
62
  from secator.runners import Workflow
63
- from secator.config import ConfigLoader
63
+ from secator.template import TemplateLoader
64
64
 
65
- config = ConfigLoader(name='workflows/host_recon')
65
+ config = TemplateLoader(name='workflows/host_recon')
66
66
  hooks = {
67
67
  Task: {
68
68
  'on_item': {
@@ -9,12 +9,7 @@ from celery.result import AsyncResult, allow_join_result
9
9
  # from pyinstrument import Profiler # TODO: make pyinstrument optional
10
10
  from rich.logging import RichHandler
11
11
 
12
- from secator.definitions import (CELERY_BROKER_CONNECTION_TIMEOUT,
13
- CELERY_BROKER_POOL_LIMIT, CELERY_BROKER_URL,
14
- CELERY_BROKER_VISIBILITY_TIMEOUT,
15
- CELERY_DATA_FOLDER,
16
- CELERY_OVERRIDE_DEFAULT_LOGGING,
17
- CELERY_RESULT_BACKEND, DEBUG)
12
+ from secator.config import CONFIG
18
13
  from secator.rich import console
19
14
  from secator.runners import Scan, Task, Workflow
20
15
  from secator.runners._helpers import run_extractors
@@ -33,7 +28,7 @@ logging.basicConfig(
33
28
  handlers=[rich_handler],
34
29
  force=True)
35
30
  logging.getLogger('kombu').setLevel(logging.ERROR)
36
- logging.getLogger('celery').setLevel(logging.INFO if DEBUG > 6 else logging.WARNING)
31
+ logging.getLogger('celery').setLevel(logging.INFO if CONFIG.debug.level > 6 else logging.WARNING)
37
32
 
38
33
  logger = logging.getLogger(__name__)
39
34
 
@@ -49,19 +44,19 @@ app.conf.update({
49
44
  'worker_max_tasks_per_child': 10,
50
45
 
51
46
  # Broker config
52
- 'broker_url': CELERY_BROKER_URL,
47
+ 'broker_url': CONFIG.celery.broker_url,
53
48
  'broker_transport_options': {
54
- 'data_folder_in': CELERY_DATA_FOLDER,
55
- 'data_folder_out': CELERY_DATA_FOLDER,
56
- 'control_folder': CELERY_DATA_FOLDER,
57
- 'visibility_timeout': CELERY_BROKER_VISIBILITY_TIMEOUT,
49
+ 'data_folder_in': CONFIG.dirs.celery_data,
50
+ 'data_folder_out': CONFIG.dirs.celery_data,
51
+ 'control_folder': CONFIG.dirs.celery_data,
52
+ 'visibility_timeout': CONFIG.celery.broker_visibility_timeout,
58
53
  },
59
54
  'broker_connection_retry_on_startup': True,
60
- 'broker_pool_limit': CELERY_BROKER_POOL_LIMIT,
61
- 'broker_connection_timeout': CELERY_BROKER_CONNECTION_TIMEOUT,
55
+ 'broker_pool_limit': CONFIG.celery.broker_pool_limit,
56
+ 'broker_connection_timeout': CONFIG.celery.broker_connection_timeout,
62
57
 
63
58
  # Backend config
64
- 'result_backend': CELERY_RESULT_BACKEND,
59
+ 'result_backend': CONFIG.celery.result_backend,
65
60
  'result_extended': True,
66
61
  'result_backend_thread_safe': True,
67
62
  # 'result_backend_transport_options': {'master_name': 'mymaster'}, # for Redis HA backend
@@ -90,7 +85,7 @@ app.autodiscover_tasks(['secator.hooks.mongodb'], related_name=None)
90
85
 
91
86
  def maybe_override_logging():
92
87
  def decorator(func):
93
- if CELERY_OVERRIDE_DEFAULT_LOGGING:
88
+ if CONFIG.celery.override_default_logging:
94
89
  return signals.setup_logging.connect(func)
95
90
  else:
96
91
  return func
@@ -151,7 +146,7 @@ def break_task(task_cls, task_opts, targets, results=[], chunk_size=1):
151
146
 
152
147
  @app.task(bind=True)
153
148
  def run_task(self, args=[], kwargs={}):
154
- if DEBUG > 1:
149
+ if CONFIG.debug.level > 1:
155
150
  logger.info(f'Received task with args {args} and kwargs {kwargs}')
156
151
  if 'context' not in kwargs:
157
152
  kwargs['context'] = {}
@@ -162,7 +157,7 @@ def run_task(self, args=[], kwargs={}):
162
157
 
163
158
  @app.task(bind=True)
164
159
  def run_workflow(self, args=[], kwargs={}):
165
- if DEBUG > 1:
160
+ if CONFIG.debug.level > 1:
166
161
  logger.info(f'Received workflow with args {args} and kwargs {kwargs}')
167
162
  if 'context' not in kwargs:
168
163
  kwargs['context'] = {}
@@ -173,7 +168,7 @@ def run_workflow(self, args=[], kwargs={}):
173
168
 
174
169
  @app.task(bind=True)
175
170
  def run_scan(self, args=[], kwargs={}):
176
- if DEBUG > 1:
171
+ if CONFIG.debug.level > 1:
177
172
  logger.info(f'Received scan with args {args} and kwargs {kwargs}')
178
173
  if 'context' not in kwargs:
179
174
  kwargs['context'] = {}