secator 0.5.1__tar.gz → 0.6.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 (174) hide show
  1. {secator-0.5.1 → secator-0.6.0}/CHANGELOG.md +21 -0
  2. {secator-0.5.1 → secator-0.6.0}/Dockerfile +4 -2
  3. {secator-0.5.1 → secator-0.6.0}/PKG-INFO +2 -2
  4. secator-0.6.0/helm/.helmignore +23 -0
  5. secator-0.6.0/helm/Chart.yaml +7 -0
  6. secator-0.6.0/helm/templates/redis-service.yaml +12 -0
  7. secator-0.6.0/helm/templates/redis.yaml +22 -0
  8. secator-0.6.0/helm/templates/secator-manager.yaml +18 -0
  9. secator-0.6.0/helm/templates/secator-worker.yaml +24 -0
  10. secator-0.6.0/helm/values.yaml +34 -0
  11. {secator-0.5.1 → secator-0.6.0}/pyproject.toml +2 -2
  12. {secator-0.5.1 → secator-0.6.0}/secator/hooks/mongodb.py +1 -1
  13. {secator-0.5.1 → secator-0.6.0}/secator/output_types/progress.py +1 -1
  14. {secator-0.5.1 → secator-0.6.0}/secator/tasks/_categories.py +1 -1
  15. {secator-0.5.1 → secator-0.6.0}/secator/tasks/httpx.py +17 -13
  16. {secator-0.5.1 → secator-0.6.0}/secator/tasks/katana.py +13 -7
  17. {secator-0.5.1 → secator-0.6.0}/tests/integration/outputs.py +2 -2
  18. {secator-0.5.1 → secator-0.6.0}/.flake8 +0 -0
  19. {secator-0.5.1 → secator-0.6.0}/.gitignore +0 -0
  20. {secator-0.5.1 → secator-0.6.0}/CONTRIBUTING.md +0 -0
  21. {secator-0.5.1 → secator-0.6.0}/LICENSE +0 -0
  22. {secator-0.5.1 → secator-0.6.0}/README.md +0 -0
  23. {secator-0.5.1 → secator-0.6.0}/SECURITY.md +0 -0
  24. {secator-0.5.1 → secator-0.6.0}/cloudbuild.yaml +0 -0
  25. {secator-0.5.1 → secator-0.6.0}/images/aliases.cast +0 -0
  26. {secator-0.5.1 → secator-0.6.0}/images/aliases.gif +0 -0
  27. {secator-0.5.1 → secator-0.6.0}/images/demo.gif +0 -0
  28. {secator-0.5.1 → secator-0.6.0}/images/demo.tap +0 -0
  29. {secator-0.5.1 → secator-0.6.0}/images/fmt.cast +0 -0
  30. {secator-0.5.1 → secator-0.6.0}/images/fmt.gif +0 -0
  31. {secator-0.5.1 → secator-0.6.0}/images/help.png +0 -0
  32. {secator-0.5.1 → secator-0.6.0}/images/input.cast +0 -0
  33. {secator-0.5.1 → secator-0.6.0}/images/input.gif +0 -0
  34. {secator-0.5.1 → secator-0.6.0}/images/pipe.cast +0 -0
  35. {secator-0.5.1 → secator-0.6.0}/images/pipe.gif +0 -0
  36. {secator-0.5.1 → secator-0.6.0}/images/short_demo.cast +0 -0
  37. {secator-0.5.1 → secator-0.6.0}/images/short_demo.gif +0 -0
  38. {secator-0.5.1 → secator-0.6.0}/scripts/download_cves.sh +0 -0
  39. {secator-0.5.1 → secator-0.6.0}/scripts/install.sh +0 -0
  40. {secator-0.5.1 → secator-0.6.0}/scripts/install_asciinema.sh +0 -0
  41. {secator-0.5.1 → secator-0.6.0}/scripts/install_go.sh +0 -0
  42. {secator-0.5.1 → secator-0.6.0}/scripts/install_ruby.sh +0 -0
  43. {secator-0.5.1 → secator-0.6.0}/scripts/msf/exploit_cve.rc +0 -0
  44. {secator-0.5.1 → secator-0.6.0}/scripts/msf/ftp_anonymous.rc +0 -0
  45. {secator-0.5.1 → secator-0.6.0}/scripts/msf/ftp_version.rc +0 -0
  46. {secator-0.5.1 → secator-0.6.0}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
  47. {secator-0.5.1 → secator-0.6.0}/scripts/msf/redis.rc +0 -0
  48. {secator-0.5.1 → secator-0.6.0}/scripts/msfinstall.sh +0 -0
  49. {secator-0.5.1 → secator-0.6.0}/scripts/stories/STORY.md +0 -0
  50. {secator-0.5.1 → secator-0.6.0}/scripts/stories/aliases.sh +0 -0
  51. {secator-0.5.1 → secator-0.6.0}/scripts/stories/demo.sh +0 -0
  52. {secator-0.5.1 → secator-0.6.0}/scripts/stories/fmt.sh +0 -0
  53. {secator-0.5.1 → secator-0.6.0}/scripts/stories/input.sh +0 -0
  54. {secator-0.5.1 → secator-0.6.0}/scripts/stories/pipe.sh +0 -0
  55. {secator-0.5.1 → secator-0.6.0}/scripts/stories/short_demo.sh +0 -0
  56. {secator-0.5.1 → secator-0.6.0}/secator/.gitignore +0 -0
  57. {secator-0.5.1 → secator-0.6.0}/secator/__init__.py +0 -0
  58. {secator-0.5.1 → secator-0.6.0}/secator/celery.py +0 -0
  59. {secator-0.5.1 → secator-0.6.0}/secator/cli.py +0 -0
  60. {secator-0.5.1 → secator-0.6.0}/secator/config.py +0 -0
  61. {secator-0.5.1 → secator-0.6.0}/secator/configs/__init__.py +0 -0
  62. {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/__init__.py +0 -0
  63. {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/aggressive.yaml +0 -0
  64. {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/default.yaml +0 -0
  65. {secator-0.5.1 → secator-0.6.0}/secator/configs/profiles/stealth.yaml +0 -0
  66. {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/__init__.py +0 -0
  67. {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/domain.yaml +0 -0
  68. {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/host.yaml +0 -0
  69. {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/network.yaml +0 -0
  70. {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/subdomain.yaml +0 -0
  71. {secator-0.5.1 → secator-0.6.0}/secator/configs/scans/url.yaml +0 -0
  72. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/__init__.py +0 -0
  73. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/cidr_recon.yaml +0 -0
  74. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/code_scan.yaml +0 -0
  75. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/host_recon.yaml +0 -0
  76. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/port_scan.yaml +0 -0
  77. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/subdomain_recon.yaml +0 -0
  78. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_crawl.yaml +0 -0
  79. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_dirsearch.yaml +0 -0
  80. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_fuzz.yaml +0 -0
  81. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_nuclei.yaml +0 -0
  82. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/url_vuln.yaml +0 -0
  83. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/user_hunt.yaml +0 -0
  84. {secator-0.5.1 → secator-0.6.0}/secator/configs/workflows/wordpress.yaml +0 -0
  85. {secator-0.5.1 → secator-0.6.0}/secator/decorators.py +0 -0
  86. {secator-0.5.1 → secator-0.6.0}/secator/definitions.py +0 -0
  87. {secator-0.5.1 → secator-0.6.0}/secator/exporters/__init__.py +0 -0
  88. {secator-0.5.1 → secator-0.6.0}/secator/exporters/_base.py +0 -0
  89. {secator-0.5.1 → secator-0.6.0}/secator/exporters/csv.py +0 -0
  90. {secator-0.5.1 → secator-0.6.0}/secator/exporters/gdrive.py +0 -0
  91. {secator-0.5.1 → secator-0.6.0}/secator/exporters/json.py +0 -0
  92. {secator-0.5.1 → secator-0.6.0}/secator/exporters/table.py +0 -0
  93. {secator-0.5.1 → secator-0.6.0}/secator/exporters/txt.py +0 -0
  94. {secator-0.5.1 → secator-0.6.0}/secator/hooks/__init__.py +0 -0
  95. {secator-0.5.1 → secator-0.6.0}/secator/installer.py +0 -0
  96. {secator-0.5.1 → secator-0.6.0}/secator/output_types/__init__.py +0 -0
  97. {secator-0.5.1 → secator-0.6.0}/secator/output_types/_base.py +0 -0
  98. {secator-0.5.1 → secator-0.6.0}/secator/output_types/exploit.py +0 -0
  99. {secator-0.5.1 → secator-0.6.0}/secator/output_types/ip.py +0 -0
  100. {secator-0.5.1 → secator-0.6.0}/secator/output_types/port.py +0 -0
  101. {secator-0.5.1 → secator-0.6.0}/secator/output_types/record.py +0 -0
  102. {secator-0.5.1 → secator-0.6.0}/secator/output_types/subdomain.py +0 -0
  103. {secator-0.5.1 → secator-0.6.0}/secator/output_types/tag.py +0 -0
  104. {secator-0.5.1 → secator-0.6.0}/secator/output_types/target.py +0 -0
  105. {secator-0.5.1 → secator-0.6.0}/secator/output_types/url.py +0 -0
  106. {secator-0.5.1 → secator-0.6.0}/secator/output_types/user_account.py +0 -0
  107. {secator-0.5.1 → secator-0.6.0}/secator/output_types/vulnerability.py +0 -0
  108. {secator-0.5.1 → secator-0.6.0}/secator/report.py +0 -0
  109. {secator-0.5.1 → secator-0.6.0}/secator/rich.py +0 -0
  110. {secator-0.5.1 → secator-0.6.0}/secator/runners/__init__.py +0 -0
  111. {secator-0.5.1 → secator-0.6.0}/secator/runners/_base.py +0 -0
  112. {secator-0.5.1 → secator-0.6.0}/secator/runners/_helpers.py +0 -0
  113. {secator-0.5.1 → secator-0.6.0}/secator/runners/command.py +0 -0
  114. {secator-0.5.1 → secator-0.6.0}/secator/runners/scan.py +0 -0
  115. {secator-0.5.1 → secator-0.6.0}/secator/runners/task.py +0 -0
  116. {secator-0.5.1 → secator-0.6.0}/secator/runners/workflow.py +0 -0
  117. {secator-0.5.1 → secator-0.6.0}/secator/serializers/__init__.py +0 -0
  118. {secator-0.5.1 → secator-0.6.0}/secator/serializers/dataclass.py +0 -0
  119. {secator-0.5.1 → secator-0.6.0}/secator/serializers/json.py +0 -0
  120. {secator-0.5.1 → secator-0.6.0}/secator/serializers/regex.py +0 -0
  121. {secator-0.5.1 → secator-0.6.0}/secator/tasks/__init__.py +0 -0
  122. {secator-0.5.1 → secator-0.6.0}/secator/tasks/cariddi.py +0 -0
  123. {secator-0.5.1 → secator-0.6.0}/secator/tasks/dalfox.py +0 -0
  124. {secator-0.5.1 → secator-0.6.0}/secator/tasks/dirsearch.py +0 -0
  125. {secator-0.5.1 → secator-0.6.0}/secator/tasks/dnsx.py +0 -0
  126. {secator-0.5.1 → secator-0.6.0}/secator/tasks/dnsxbrute.py +0 -0
  127. {secator-0.5.1 → secator-0.6.0}/secator/tasks/feroxbuster.py +0 -0
  128. {secator-0.5.1 → secator-0.6.0}/secator/tasks/ffuf.py +0 -0
  129. {secator-0.5.1 → secator-0.6.0}/secator/tasks/fping.py +0 -0
  130. {secator-0.5.1 → secator-0.6.0}/secator/tasks/gau.py +0 -0
  131. {secator-0.5.1 → secator-0.6.0}/secator/tasks/gf.py +0 -0
  132. {secator-0.5.1 → secator-0.6.0}/secator/tasks/gospider.py +0 -0
  133. {secator-0.5.1 → secator-0.6.0}/secator/tasks/grype.py +0 -0
  134. {secator-0.5.1 → secator-0.6.0}/secator/tasks/h8mail.py +0 -0
  135. {secator-0.5.1 → secator-0.6.0}/secator/tasks/maigret.py +0 -0
  136. {secator-0.5.1 → secator-0.6.0}/secator/tasks/mapcidr.py +0 -0
  137. {secator-0.5.1 → secator-0.6.0}/secator/tasks/msfconsole.py +0 -0
  138. {secator-0.5.1 → secator-0.6.0}/secator/tasks/naabu.py +0 -0
  139. {secator-0.5.1 → secator-0.6.0}/secator/tasks/nmap.py +0 -0
  140. {secator-0.5.1 → secator-0.6.0}/secator/tasks/nuclei.py +0 -0
  141. {secator-0.5.1 → secator-0.6.0}/secator/tasks/searchsploit.py +0 -0
  142. {secator-0.5.1 → secator-0.6.0}/secator/tasks/subfinder.py +0 -0
  143. {secator-0.5.1 → secator-0.6.0}/secator/tasks/wpscan.py +0 -0
  144. {secator-0.5.1 → secator-0.6.0}/secator/template.py +0 -0
  145. {secator-0.5.1 → secator-0.6.0}/secator/utils.py +0 -0
  146. {secator-0.5.1 → secator-0.6.0}/secator/utils_test.py +0 -0
  147. {secator-0.5.1 → secator-0.6.0}/tests/__init__.py +0 -0
  148. {secator-0.5.1 → secator-0.6.0}/tests/fixtures/h8mail_breach.txt +0 -0
  149. {secator-0.5.1 → secator-0.6.0}/tests/fixtures/ls.py +0 -0
  150. {secator-0.5.1 → secator-0.6.0}/tests/fixtures/msfconsole_input.rc +0 -0
  151. {secator-0.5.1 → secator-0.6.0}/tests/fixtures/nmap_output.xml +0 -0
  152. {secator-0.5.1 → secator-0.6.0}/tests/integration/__init__.py +0 -0
  153. {secator-0.5.1 → secator-0.6.0}/tests/integration/inputs.py +0 -0
  154. {secator-0.5.1 → secator-0.6.0}/tests/integration/setup.sh +0 -0
  155. {secator-0.5.1 → secator-0.6.0}/tests/integration/teardown.sh +0 -0
  156. {secator-0.5.1 → secator-0.6.0}/tests/integration/test_scans.py +0 -0
  157. {secator-0.5.1 → secator-0.6.0}/tests/integration/test_tasks.py +0 -0
  158. {secator-0.5.1 → secator-0.6.0}/tests/integration/test_worker.py +0 -0
  159. {secator-0.5.1 → secator-0.6.0}/tests/integration/test_workflows.py +0 -0
  160. {secator-0.5.1 → secator-0.6.0}/tests/integration/wordlist.txt +0 -0
  161. {secator-0.5.1 → secator-0.6.0}/tests/integration/wordlist_dns.txt +0 -0
  162. {secator-0.5.1 → secator-0.6.0}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
  163. {secator-0.5.1 → secator-0.6.0}/tests/integration/wordpress_toolbox/Makefile +0 -0
  164. {secator-0.5.1 → secator-0.6.0}/tests/performance/__init__.py +0 -0
  165. {secator-0.5.1 → secator-0.6.0}/tests/performance/loadtester.py +0 -0
  166. {secator-0.5.1 → secator-0.6.0}/tests/unit/__init__.py +0 -0
  167. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_celery.py +0 -0
  168. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_config.py +0 -0
  169. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_offline.py +0 -0
  170. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_scans.py +0 -0
  171. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_serializers.py +0 -0
  172. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_tasks.py +0 -0
  173. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_template.py +0 -0
  174. {secator-0.5.1 → secator-0.6.0}/tests/unit/test_workflows.py +0 -0
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.6.0](https://github.com/freelabz/secator/compare/v0.5.2...v0.6.0) (2024-07-25)
4
+
5
+
6
+ ### Features
7
+
8
+ * add duplicate finder to mongodb hooks ([#409](https://github.com/freelabz/secator/issues/409)) ([fb0e11c](https://github.com/freelabz/secator/commit/fb0e11cd2b64bf51bc862f47243c8c0602d3d5e9))
9
+ * basic helm chart ([#408](https://github.com/freelabz/secator/issues/408)) ([6b2f84f](https://github.com/freelabz/secator/commit/6b2f84f61bd8eccf2cdd61b6ffdc2eb4489240bc))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * Dockerfile broken apt install ([#407](https://github.com/freelabz/secator/issues/407)) ([c023279](https://github.com/freelabz/secator/commit/c02327968ecea816004636801684b336735df439))
15
+ * **tasks:** duplicate meta opt entry ([#401](https://github.com/freelabz/secator/issues/401)) ([ae56aa6](https://github.com/freelabz/secator/commit/ae56aa62f5a18936a1787547e37bbe636e6e43c3))
16
+
17
+ ## [0.5.2](https://github.com/freelabz/secator/compare/v0.5.1...v0.5.2) (2024-05-07)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **nuclei,katana:** add -sr flag and write http responses and screenshot to correct folder ([#395](https://github.com/freelabz/secator/issues/395)) ([1a51790](https://github.com/freelabz/secator/commit/1a51790c9231f593631c2780b6d5e0fa89f1aa55))
23
+
3
24
  ## [0.5.1](https://github.com/freelabz/secator/compare/v0.5.0...v0.5.1) (2024-05-06)
4
25
 
5
26
 
@@ -22,8 +22,7 @@ RUN apt update -y && \
22
22
  jq \
23
23
  openssl \
24
24
  proxychains \
25
- proxychains-ng \
26
- && rm -rf /var/lib/apt/lists/*
25
+ proxychains-ng
27
26
 
28
27
  # Install Metasploit framework
29
28
  RUN curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
@@ -43,5 +42,8 @@ RUN secator install addons mongodb
43
42
  RUN secator install addons redis
44
43
  RUN secator install addons dev
45
44
 
45
+ # Cleanup
46
+ RUN rm -rf /var/lib/apt/lists/*
47
+
46
48
  # Set entrypoint
47
49
  ENTRYPOINT ["secator"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: secator
3
- Version: 0.5.1
3
+ Version: 0.6.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
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.9
19
19
  Classifier: Programming Language :: Python :: 3.10
20
20
  Classifier: Programming Language :: Python :: 3.11
21
21
  Requires-Python: >=3.8
22
- Requires-Dist: bs4<1
22
+ Requires-Dist: beautifulsoup4<=5
23
23
  Requires-Dist: celery<6
24
24
  Requires-Dist: cpe<2
25
25
  Requires-Dist: dotmap<2
@@ -0,0 +1,23 @@
1
+ # Patterns to ignore when building packages.
2
+ # This supports shell glob matching, relative path matching, and
3
+ # negation (prefixed with !). Only one pattern per line.
4
+ .DS_Store
5
+ # Common VCS dirs
6
+ .git/
7
+ .gitignore
8
+ .bzr/
9
+ .bzrignore
10
+ .hg/
11
+ .hgignore
12
+ .svn/
13
+ # Common backup files
14
+ *.swp
15
+ *.bak
16
+ *.tmp
17
+ *.orig
18
+ *~
19
+ # Various IDEs
20
+ .project
21
+ .idea/
22
+ *.tmproj
23
+ .vscode/
@@ -0,0 +1,7 @@
1
+ apiVersion: v2
2
+ name: Secator
3
+ description: A Secator Helm chart for Kubernetes
4
+
5
+ type: application
6
+ version: 0.1.0
7
+ appVersion: "0.5.2"
@@ -0,0 +1,12 @@
1
+ apiVersion: v1
2
+ kind: Service
3
+ metadata:
4
+ name: {{ .Values.redis.name }}
5
+ namespace: {{ .Values.namespace }}
6
+ spec:
7
+ type: ClusterIP
8
+ ports:
9
+ - port: {{ .Values.redis.port }}
10
+ name: client
11
+ selector:
12
+ app: redis
@@ -0,0 +1,22 @@
1
+ apiVersion: apps/v1
2
+ kind: StatefulSet
3
+ metadata:
4
+ name: {{ .Values.redis.name }}
5
+ namespace: {{ .Values.namespace }}
6
+ spec:
7
+ selector:
8
+ matchLabels:
9
+ app: redis
10
+ serviceName: {{ .Values.redis.name }}
11
+ replicas: {{ .Values.redis.replicas }}
12
+ template:
13
+ metadata:
14
+ labels:
15
+ app: redis
16
+ spec:
17
+ containers:
18
+ - name: {{ .Values.redis.name }}
19
+ image: {{ .Values.redis.image }}
20
+ ports:
21
+ - containerPort: {{ .Values.redis.port }}
22
+ name: client
@@ -0,0 +1,18 @@
1
+ apiVersion: v1
2
+ kind: Pod
3
+ metadata:
4
+ name: {{ .Values.secatorManager.name }}
5
+ namespace: {{ .Values.namespace }}
6
+ labels:
7
+ name: secator-manager
8
+ spec:
9
+ containers:
10
+ - name: secator-manager
11
+ image: {{ .Values.secatorManager.image }}
12
+ command: ["tail"]
13
+ args: ["-F", "anything"]
14
+ env:
15
+ - name: SECATOR_CELERY_BROKER_URL
16
+ value: "redis://{{ .Values.redis.name }}:6379/0"
17
+ - name: SECATOR_CELERY_RESULT_BACKEND
18
+ value: "redis://{{ .Values.redis.name }}:6379/0"
@@ -0,0 +1,24 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: {{ .Values.secatorWorker.name }}
5
+ namespace: {{ .Values.namespace }}
6
+ spec:
7
+ selector:
8
+ matchLabels:
9
+ app: secator-worker
10
+ template:
11
+ metadata:
12
+ labels:
13
+ app: secator-worker
14
+ spec:
15
+ containers:
16
+ - name: {{ .Values.secatorWorker.name }}
17
+ image: {{ .Values.secatorWorker.image }}
18
+ command: ["secator"]
19
+ args: ["worker"]
20
+ env:
21
+ - name: SECATOR_CELERY_BROKER_URL
22
+ value: "redis://{{ .Values.redis.name }}:6379/0"
23
+ - name: SECATOR_CELERY_RESULT_BACKEND
24
+ value: "redis://{{ .Values.redis.name }}:6379/0"
@@ -0,0 +1,34 @@
1
+ # Default values for Secator
2
+ # This is a YAML-formatted file.
3
+ # Declare variables to be passed into your templates.
4
+
5
+ namespace: secator
6
+
7
+ secatorManager:
8
+ name: secator-manager
9
+ image: "freelabz/secator"
10
+
11
+ # Empty if using default repository
12
+ repository:
13
+ # Empty if using tag "latest"
14
+ tag:
15
+
16
+ secatorWorker:
17
+ name: secator-worker
18
+ image: "freelabz/secator"
19
+
20
+ # Empty if using default repository
21
+ repository:
22
+ # Empty if using tag "latest"
23
+ tag:
24
+
25
+ redis:
26
+ name: redis
27
+ image: "redis"
28
+
29
+ # Empty if using default repository
30
+ repository:
31
+ # Empty if using tag "latest"
32
+ tag:
33
+ replicas: 1
34
+ port: 6379
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "secator"
7
- version = "0.5.1"
7
+ version = "0.6.0"
8
8
  authors = [{ name = "FreeLabz", email = "sales@freelabz.com" }]
9
9
  readme = "README.md"
10
10
  description = "The pentester's swiss knife."
@@ -30,7 +30,7 @@ classifiers = [
30
30
  "Programming Language :: Python :: 3.11",
31
31
  ]
32
32
  dependencies = [
33
- "bs4 < 1",
33
+ "beautifulsoup4 <= 5",
34
34
  'celery < 6',
35
35
  "cpe < 2",
36
36
  "dotmap < 2",
@@ -206,6 +206,6 @@ MONGODB_HOOKS = {
206
206
  'on_item': [update_finding],
207
207
  'on_duplicate': [update_finding],
208
208
  'on_iter': [update_runner],
209
- 'on_end': [update_runner]
209
+ 'on_end': [update_runner, find_duplicates]
210
210
  }
211
211
  }
@@ -8,7 +8,7 @@ from secator.utils import rich_to_ansi
8
8
  @dataclass
9
9
  class Progress(OutputType):
10
10
  duration: str
11
- percent: int
11
+ percent: int = 0
12
12
  errors: list = field(default_factory=list)
13
13
  extra_data: dict = field(default_factory=dict)
14
14
  _source: str = field(default='', repr=True)
@@ -44,7 +44,7 @@ OPTS_HTTP = [
44
44
  ]
45
45
 
46
46
  OPTS_HTTP_CRAWLERS = OPTS_HTTP + [
47
- DEPTH, MATCH_REGEX, MATCH_SIZE, MATCH_WORDS, FILTER_REGEX, FILTER_CODES, FILTER_SIZE, FILTER_WORDS, FOLLOW_REDIRECT,
47
+ DEPTH, MATCH_REGEX, MATCH_SIZE, MATCH_WORDS, FILTER_REGEX, FILTER_CODES, FILTER_SIZE, FILTER_WORDS,
48
48
  MATCH_CODES
49
49
  ]
50
50
 
@@ -31,6 +31,7 @@ class httpx(Http):
31
31
  'cdn': {'is_flag': True, 'default': False, 'help': 'CDN detection'},
32
32
  'debug_resp': {'is_flag': True, 'default': False, 'help': 'Debug response'},
33
33
  'vhost': {'is_flag': True, 'default': False, 'help': 'Probe and display server supporting VHOST'},
34
+ 'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Save HTTP responses'}, # noqa: E501
34
35
  'screenshot': {'is_flag': True, 'short': 'ss', 'default': False, 'help': 'Screenshot response'},
35
36
  'system_chrome': {'is_flag': True, 'default': False, 'help': 'Use local installed Chrome for screenshot'},
36
37
  'headless_options': {'is_flag': False, 'short': 'ho', 'default': None, 'help': 'Headless Chrome additional options'},
@@ -55,6 +56,7 @@ class httpx(Http):
55
56
  THREADS: 'threads',
56
57
  TIMEOUT: 'timeout',
57
58
  USER_AGENT: OPT_NOT_SUPPORTED,
59
+ 'store_responses': 'sr',
58
60
  }
59
61
  opt_value_map = {
60
62
  DELAY: lambda x: str(x) + 's' if x else None,
@@ -71,15 +73,10 @@ class httpx(Http):
71
73
  debug_resp = self.get_opt_value('debug_resp')
72
74
  if debug_resp:
73
75
  self.cmd = self.cmd.replace('-silent', '')
74
- if CONFIG.http.store_responses:
75
- self.output_response_path = f'{self.reports_folder}/response'
76
- self.output_screenshot_path = f'{self.reports_folder}/screenshot'
77
- os.makedirs(self.output_response_path, exist_ok=True)
78
- os.makedirs(self.output_screenshot_path, exist_ok=True)
79
- self.cmd += f' -sr -srd {self.reports_folder}'
80
-
81
- # Remove screenshot bytes and body bytes when screenshot
82
76
  screenshot = self.get_opt_value('screenshot')
77
+ store_responses = self.get_opt_value('store_responses')
78
+ if store_responses or screenshot:
79
+ self.cmd += f' -srd {self.reports_folder}/.outputs'
83
80
  if screenshot:
84
81
  self.cmd += ' -esb -ehb'
85
82
 
@@ -98,8 +95,15 @@ class httpx(Http):
98
95
 
99
96
  @staticmethod
100
97
  def on_end(self):
101
- if CONFIG.http.store_responses:
102
- if os.path.exists(self.output_response_path + '/index.txt'):
103
- os.remove(self.output_response_path + '/index.txt')
104
- if os.path.exists(self.output_screenshot_path + '/index.txt'):
105
- os.remove(self.output_screenshot_path + '/index_screenshot.txt')
98
+ store_responses = self.get_opt_value('store_responses')
99
+ response_dir = f'{self.reports_folder}/.outputs'
100
+ if store_responses:
101
+ index_rpath = f'{response_dir}/response/index.txt'
102
+ index_spath = f'{response_dir}/screenshot/index_screenshot.txt'
103
+ index_spath2 = f'{response_dir}/screenshot/screenshot.html'
104
+ if os.path.exists(index_rpath):
105
+ os.remove(index_rpath)
106
+ if os.path.exists(index_spath):
107
+ os.remove(index_spath)
108
+ if os.path.exists(index_spath2):
109
+ os.remove(index_spath2)
@@ -29,7 +29,8 @@ class katana(HttpCrawler):
29
29
  opts = {
30
30
  'headless': {'is_flag': True, 'short': 'hl', 'help': 'Headless mode'},
31
31
  'system_chrome': {'is_flag': True, 'short': 'sc', 'help': 'Use local installed chrome browser'},
32
- 'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'}
32
+ 'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'},
33
+ 'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Store responses'}
33
34
  }
34
35
  opt_key_map = {
35
36
  HEADER: 'headers',
@@ -50,7 +51,8 @@ class katana(HttpCrawler):
50
51
  RETRIES: 'retry',
51
52
  THREADS: 'concurrency',
52
53
  TIMEOUT: 'timeout',
53
- USER_AGENT: OPT_NOT_SUPPORTED
54
+ USER_AGENT: OPT_NOT_SUPPORTED,
55
+ 'store_responses': 'sr'
54
56
  }
55
57
  opt_value_map = {
56
58
  DELAY: lambda x: int(x) if isinstance(x, float) else x
@@ -107,14 +109,16 @@ class katana(HttpCrawler):
107
109
  debug_resp = self.get_opt_value('debug_resp')
108
110
  if debug_resp:
109
111
  self.cmd = self.cmd.replace('-silent', '')
110
- if CONFIG.http.store_responses:
111
- self.cmd += f' -sr -srd {self.reports_folder}'
112
+ store_responses = self.get_opt_value('store_responses')
113
+ if store_responses:
114
+ self.cmd += f' -srd {self.reports_folder}/.outputs'
112
115
 
113
116
  @staticmethod
114
117
  def on_item(self, item):
115
118
  if not isinstance(item, Url):
116
119
  return item
117
- if CONFIG.http.store_responses and os.path.exists(item.stored_response_path):
120
+ store_responses = self.get_opt_value('store_responses')
121
+ if store_responses and os.path.exists(item.stored_response_path):
118
122
  with open(item.stored_response_path, 'r', encoding='latin-1') as fin:
119
123
  data = fin.read().splitlines(True)
120
124
  first_line = data[0]
@@ -126,5 +130,7 @@ class katana(HttpCrawler):
126
130
 
127
131
  @staticmethod
128
132
  def on_end(self):
129
- if CONFIG.http.store_responses and os.path.exists(self.reports_folder + '/index.txt'):
130
- os.remove(self.reports_folder + '/index.txt')
133
+ store_responses = self.get_opt_value('store_responses')
134
+ index_rpath = f'{self.reports_folder}/.outputs/index.txt'
135
+ if store_responses and os.path.exists(index_rpath):
136
+ os.remove(index_rpath)
@@ -59,7 +59,7 @@ OUTPUTS_TASKS = {
59
59
  _source='dnsx'
60
60
  ),
61
61
  Record(
62
- name='v=spf1 include:wikimedia.org ~all',
62
+ name='v=spf1 include:_cidrs.wikimedia.org ~all',
63
63
  type='TXT',
64
64
  host='wikipedia.org',
65
65
  _source='dnsx'
@@ -217,7 +217,7 @@ OUTPUTS_TASKS = {
217
217
  ],
218
218
  'wpscan': [
219
219
  Tag(
220
- name='Wordpress theme - twentytwentyfour 1.1',
220
+ name='Wordpress theme - twentytwentyfour 1.2',
221
221
  match='http://localhost:8000/',
222
222
  _source='wpscan'),
223
223
  Vulnerability(
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes