secator 0.8.2a0__tar.gz → 0.9.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 (202) hide show
  1. {secator-0.8.2a0 → secator-0.9.1}/.docker/Dockerfile.alpine +16 -9
  2. {secator-0.8.2a0 → secator-0.9.1}/.docker/Dockerfile.arch +1 -1
  3. {secator-0.8.2a0 → secator-0.9.1}/.docker/Dockerfile.debian +1 -1
  4. {secator-0.8.2a0 → secator-0.9.1}/.docker/Dockerfile.kali +1 -1
  5. {secator-0.8.2a0 → secator-0.9.1}/.docker/Dockerfile.osx +1 -1
  6. {secator-0.8.2a0 → secator-0.9.1}/.docker/Dockerfile.ubuntu +1 -1
  7. {secator-0.8.2a0 → secator-0.9.1}/.gitignore +3 -2
  8. {secator-0.8.2a0 → secator-0.9.1}/CHANGELOG.md +38 -0
  9. {secator-0.8.2a0 → secator-0.9.1}/PKG-INFO +16 -13
  10. {secator-0.8.2a0 → secator-0.9.1}/README.md +15 -11
  11. {secator-0.8.2a0 → secator-0.9.1}/pyproject.toml +1 -2
  12. {secator-0.8.2a0 → secator-0.9.1}/secator/celery.py +7 -6
  13. {secator-0.8.2a0 → secator-0.9.1}/secator/cli.py +17 -15
  14. {secator-0.8.2a0 → secator-0.9.1}/secator/config.py +6 -0
  15. {secator-0.8.2a0 → secator-0.9.1}/secator/installer.py +6 -0
  16. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/error.py +5 -1
  17. {secator-0.8.2a0 → secator-0.9.1}/secator/rich.py +1 -1
  18. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/command.py +6 -4
  19. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/bbot.py +13 -5
  20. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/httpx.py +3 -0
  21. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/naabu.py +1 -1
  22. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/wpscan.py +2 -0
  23. {secator-0.8.2a0 → secator-0.9.1}/secator/utils.py +1 -1
  24. secator-0.8.2a0/images/aliases.cast +0 -444
  25. secator-0.8.2a0/images/aliases.gif +0 -0
  26. secator-0.8.2a0/images/demo.gif +0 -0
  27. secator-0.8.2a0/images/demo.tap +0 -47
  28. secator-0.8.2a0/images/fmt.cast +0 -672
  29. secator-0.8.2a0/images/fmt.gif +0 -0
  30. secator-0.8.2a0/images/help.png +0 -0
  31. secator-0.8.2a0/images/input.cast +0 -319
  32. secator-0.8.2a0/images/input.gif +0 -0
  33. secator-0.8.2a0/images/pipe.cast +0 -1310
  34. secator-0.8.2a0/images/pipe.gif +0 -0
  35. secator-0.8.2a0/images/short_demo.cast +0 -343
  36. secator-0.8.2a0/images/short_demo.gif +0 -0
  37. {secator-0.8.2a0 → secator-0.9.1}/.docker/build_all.sh +0 -0
  38. {secator-0.8.2a0 → secator-0.9.1}/.dockerignore +0 -0
  39. {secator-0.8.2a0 → secator-0.9.1}/.flake8 +0 -0
  40. {secator-0.8.2a0 → secator-0.9.1}/CONTRIBUTING.md +0 -0
  41. {secator-0.8.2a0 → secator-0.9.1}/Dockerfile +0 -0
  42. {secator-0.8.2a0 → secator-0.9.1}/LICENSE +0 -0
  43. {secator-0.8.2a0 → secator-0.9.1}/SECURITY.md +0 -0
  44. {secator-0.8.2a0 → secator-0.9.1}/cloudbuild.yaml +0 -0
  45. {secator-0.8.2a0 → secator-0.9.1}/helm/.helmignore +0 -0
  46. {secator-0.8.2a0 → secator-0.9.1}/helm/Chart.yaml +0 -0
  47. {secator-0.8.2a0 → secator-0.9.1}/helm/templates/redis-service.yaml +0 -0
  48. {secator-0.8.2a0 → secator-0.9.1}/helm/templates/redis.yaml +0 -0
  49. {secator-0.8.2a0 → secator-0.9.1}/helm/templates/secator-manager.yaml +0 -0
  50. {secator-0.8.2a0 → secator-0.9.1}/helm/templates/secator-worker.yaml +0 -0
  51. {secator-0.8.2a0 → secator-0.9.1}/helm/values.yaml +0 -0
  52. {secator-0.8.2a0 → secator-0.9.1}/scripts/download_cves.sh +0 -0
  53. {secator-0.8.2a0 → secator-0.9.1}/scripts/install.sh +0 -0
  54. {secator-0.8.2a0 → secator-0.9.1}/scripts/install_asciinema.sh +0 -0
  55. {secator-0.8.2a0 → secator-0.9.1}/scripts/install_go.sh +0 -0
  56. {secator-0.8.2a0 → secator-0.9.1}/scripts/install_ruby.sh +0 -0
  57. {secator-0.8.2a0 → secator-0.9.1}/scripts/msf/exploit_cve.rc +0 -0
  58. {secator-0.8.2a0 → secator-0.9.1}/scripts/msf/ftp_anonymous.rc +0 -0
  59. {secator-0.8.2a0 → secator-0.9.1}/scripts/msf/ftp_version.rc +0 -0
  60. {secator-0.8.2a0 → secator-0.9.1}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
  61. {secator-0.8.2a0 → secator-0.9.1}/scripts/msf/redis.rc +0 -0
  62. {secator-0.8.2a0 → secator-0.9.1}/scripts/stories/STORY.md +0 -0
  63. {secator-0.8.2a0 → secator-0.9.1}/scripts/stories/aliases.sh +0 -0
  64. {secator-0.8.2a0 → secator-0.9.1}/scripts/stories/demo.sh +0 -0
  65. {secator-0.8.2a0 → secator-0.9.1}/scripts/stories/fmt.sh +0 -0
  66. {secator-0.8.2a0 → secator-0.9.1}/scripts/stories/input.sh +0 -0
  67. {secator-0.8.2a0 → secator-0.9.1}/scripts/stories/pipe.sh +0 -0
  68. {secator-0.8.2a0 → secator-0.9.1}/scripts/stories/short_demo.sh +0 -0
  69. {secator-0.8.2a0 → secator-0.9.1}/secator/.gitignore +0 -0
  70. {secator-0.8.2a0 → secator-0.9.1}/secator/__init__.py +0 -0
  71. {secator-0.8.2a0 → secator-0.9.1}/secator/celery_utils.py +0 -0
  72. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/__init__.py +0 -0
  73. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/profiles/__init__.py +0 -0
  74. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/profiles/aggressive.yaml +0 -0
  75. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/profiles/default.yaml +0 -0
  76. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/profiles/stealth.yaml +0 -0
  77. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/scans/__init__.py +0 -0
  78. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/scans/domain.yaml +0 -0
  79. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/scans/host.yaml +0 -0
  80. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/scans/network.yaml +0 -0
  81. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/scans/subdomain.yaml +0 -0
  82. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/scans/url.yaml +0 -0
  83. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/__init__.py +0 -0
  84. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/cidr_recon.yaml +0 -0
  85. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/code_scan.yaml +0 -0
  86. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/host_recon.yaml +0 -0
  87. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/port_scan.yaml +0 -0
  88. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/subdomain_recon.yaml +0 -0
  89. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/url_bypass.yaml +0 -0
  90. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/url_crawl.yaml +0 -0
  91. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/url_dirsearch.yaml +0 -0
  92. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/url_fuzz.yaml +0 -0
  93. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/url_nuclei.yaml +0 -0
  94. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/url_vuln.yaml +0 -0
  95. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/user_hunt.yaml +0 -0
  96. {secator-0.8.2a0 → secator-0.9.1}/secator/configs/workflows/wordpress.yaml +0 -0
  97. {secator-0.8.2a0 → secator-0.9.1}/secator/decorators.py +0 -0
  98. {secator-0.8.2a0 → secator-0.9.1}/secator/definitions.py +0 -0
  99. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/__init__.py +0 -0
  100. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/_base.py +0 -0
  101. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/console.py +0 -0
  102. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/csv.py +0 -0
  103. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/gdrive.py +0 -0
  104. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/json.py +0 -0
  105. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/table.py +0 -0
  106. {secator-0.8.2a0 → secator-0.9.1}/secator/exporters/txt.py +0 -0
  107. {secator-0.8.2a0 → secator-0.9.1}/secator/hooks/__init__.py +0 -0
  108. {secator-0.8.2a0 → secator-0.9.1}/secator/hooks/gcs.py +0 -0
  109. {secator-0.8.2a0 → secator-0.9.1}/secator/hooks/mongodb.py +0 -0
  110. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/__init__.py +0 -0
  111. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/_base.py +0 -0
  112. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/exploit.py +0 -0
  113. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/info.py +0 -0
  114. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/ip.py +0 -0
  115. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/port.py +0 -0
  116. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/progress.py +0 -0
  117. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/record.py +0 -0
  118. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/stat.py +0 -0
  119. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/subdomain.py +0 -0
  120. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/tag.py +0 -0
  121. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/target.py +0 -0
  122. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/url.py +0 -0
  123. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/user_account.py +0 -0
  124. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/vulnerability.py +0 -0
  125. {secator-0.8.2a0 → secator-0.9.1}/secator/output_types/warning.py +0 -0
  126. {secator-0.8.2a0 → secator-0.9.1}/secator/report.py +0 -0
  127. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/__init__.py +0 -0
  128. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/_base.py +0 -0
  129. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/_helpers.py +0 -0
  130. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/celery.py +0 -0
  131. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/scan.py +0 -0
  132. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/task.py +0 -0
  133. {secator-0.8.2a0 → secator-0.9.1}/secator/runners/workflow.py +0 -0
  134. {secator-0.8.2a0 → secator-0.9.1}/secator/scans/__init__.py +0 -0
  135. {secator-0.8.2a0 → secator-0.9.1}/secator/serializers/__init__.py +0 -0
  136. {secator-0.8.2a0 → secator-0.9.1}/secator/serializers/dataclass.py +0 -0
  137. {secator-0.8.2a0 → secator-0.9.1}/secator/serializers/json.py +0 -0
  138. {secator-0.8.2a0 → secator-0.9.1}/secator/serializers/regex.py +0 -0
  139. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/__init__.py +0 -0
  140. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/_categories.py +0 -0
  141. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/bup.py +0 -0
  142. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/cariddi.py +0 -0
  143. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/dalfox.py +0 -0
  144. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/dirsearch.py +0 -0
  145. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/dnsx.py +0 -0
  146. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/dnsxbrute.py +0 -0
  147. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/feroxbuster.py +0 -0
  148. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/ffuf.py +0 -0
  149. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/fping.py +0 -0
  150. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/gau.py +0 -0
  151. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/gf.py +0 -0
  152. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/gospider.py +0 -0
  153. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/grype.py +0 -0
  154. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/h8mail.py +0 -0
  155. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/katana.py +0 -0
  156. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/maigret.py +0 -0
  157. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/mapcidr.py +0 -0
  158. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/msfconsole.py +0 -0
  159. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/nmap.py +0 -0
  160. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/nuclei.py +0 -0
  161. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/searchsploit.py +0 -0
  162. {secator-0.8.2a0 → secator-0.9.1}/secator/tasks/subfinder.py +0 -0
  163. {secator-0.8.2a0 → secator-0.9.1}/secator/template.py +0 -0
  164. {secator-0.8.2a0 → secator-0.9.1}/secator/thread.py +0 -0
  165. {secator-0.8.2a0 → secator-0.9.1}/secator/utils_test.py +0 -0
  166. {secator-0.8.2a0 → secator-0.9.1}/secator/workflows/__init__.py +0 -0
  167. {secator-0.8.2a0 → secator-0.9.1}/tests/__init__.py +0 -0
  168. {secator-0.8.2a0 → secator-0.9.1}/tests/fixtures/h8mail_breach.txt +0 -0
  169. {secator-0.8.2a0 → secator-0.9.1}/tests/fixtures/ls.py +0 -0
  170. {secator-0.8.2a0 → secator-0.9.1}/tests/fixtures/msfconsole_input.rc +0 -0
  171. {secator-0.8.2a0 → secator-0.9.1}/tests/fixtures/nmap_output.xml +0 -0
  172. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/__init__.py +0 -0
  173. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/inputs.py +0 -0
  174. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/outputs.py +0 -0
  175. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/setup.sh +0 -0
  176. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/teardown.sh +0 -0
  177. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/test_addons.py +0 -0
  178. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/test_celery.py +0 -0
  179. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/test_scans.py +0 -0
  180. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/test_tasks.py +0 -0
  181. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/test_tasks_categories.py +0 -0
  182. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/test_worker.py +0 -0
  183. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/test_workflows.py +0 -0
  184. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/wordlist.txt +0 -0
  185. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/wordlist_dns.txt +0 -0
  186. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
  187. {secator-0.8.2a0 → secator-0.9.1}/tests/integration/wordpress_toolbox/Makefile +0 -0
  188. {secator-0.8.2a0 → secator-0.9.1}/tests/performance/__init__.py +0 -0
  189. {secator-0.8.2a0 → secator-0.9.1}/tests/performance/loadtester.py +0 -0
  190. {secator-0.8.2a0 → secator-0.9.1}/tests/performance/test_worker.py +0 -0
  191. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/__init__.py +0 -0
  192. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_celery.py +0 -0
  193. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_cli.py +0 -0
  194. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_config.py +0 -0
  195. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_offline.py +0 -0
  196. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_runners.py +0 -0
  197. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_scans.py +0 -0
  198. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_serializers.py +0 -0
  199. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_tasks.py +0 -0
  200. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_tasks_categories.py +0 -0
  201. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_template.py +0 -0
  202. {secator-0.8.2a0 → secator-0.9.1}/tests/unit/test_utils.py +0 -0
@@ -1,26 +1,33 @@
1
- FROM alpine:latest
1
+ FROM alpine:latest AS builder
2
2
 
3
- ARG flavor=full
4
3
  ENV PATH="${PATH}:/root/.local/bin"
5
- ENV GOBIN="/root/.local/bin"
6
- ENV TERM="xterm-256color"
7
4
  RUN apk add --no-cache \
8
5
  flock \
9
6
  gcc \
10
7
  musl-dev \
11
8
  linux-headers \
12
9
  pipx \
13
- python3-dev \
14
- py3-pip \
15
- sudo
10
+ python3-dev
16
11
  COPY . /code
17
12
  WORKDIR /code
18
- RUN pipx install . && \
13
+
14
+ RUN pipx install --pip-args="--no-cache-dir" . && \
19
15
  secator install addons worker && \
20
16
  secator install addons gdrive && \
21
17
  secator install addons gcs && \
22
18
  secator install addons mongodb && \
23
19
  secator install addons redis && \
24
20
  secator install addons dev
25
- RUN if [ "$flavor" != "lite" ]; then secator install tools; fi
21
+
22
+ FROM python:3.12-alpine
23
+ ARG flavor=full
24
+ ENV TERM="xterm-256color"
25
+ ENV PATH="${PATH}:/root/.local/bin"
26
+ ENV GOBIN="/root/.local/bin"
27
+ COPY --from=builder /root/.local /root/.local
28
+ RUN apk add --no-cache \
29
+ flock \
30
+ pipx \
31
+ sudo
32
+ RUN if [ "$flavor" != "lite" ]; then secator install tools --cleanup; fi
26
33
  ENTRYPOINT ["secator"]
@@ -32,5 +32,5 @@ RUN pipx install . && \
32
32
  secator install addons redis && \
33
33
  secator install addons dev
34
34
  RUN secator config set security.force_source_install true
35
- RUN secator install tools
35
+ RUN secator install tools --cleanup
36
36
  ENTRYPOINT ["secator"]
@@ -34,5 +34,5 @@ RUN pipx install . && \
34
34
  secator install addons dev
35
35
  RUN secator install langs go
36
36
  RUN secator config set security.force_source_install true
37
- RUN secator install tools
37
+ RUN secator install tools --cleanup
38
38
  ENTRYPOINT ["secator"]
@@ -33,5 +33,5 @@ RUN pipx install . && \
33
33
  secator install addons redis && \
34
34
  secator install addons dev
35
35
  RUN secator config set security.force_source_install true
36
- RUN secator install tools
36
+ RUN secator install tools --cleanup
37
37
  ENTRYPOINT ["secator"]
@@ -36,5 +36,5 @@ RUN pipx install . && \
36
36
  secator install addons redis && \
37
37
  secator install addons dev
38
38
  RUN secator config set security.force_source_install true
39
- RUN secator install tools
39
+ RUN secator install tools --cleanup
40
40
  ENTRYPOINT ["secator"]
@@ -33,5 +33,5 @@ RUN pipx install . && \
33
33
  secator install addons redis && \
34
34
  secator install addons dev
35
35
  RUN secator config set security.force_source_install true
36
- RUN secator install tools
36
+ RUN secator install tools --cleanup
37
37
  ENTRYPOINT ["secator"]
@@ -135,5 +135,6 @@ dmypy.json
135
135
  # Pyre type checker
136
136
  .pyre/
137
137
 
138
- # Git
139
- .git/
138
+ # Project
139
+ .git/
140
+ images/
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.1](https://github.com/freelabz/secator/compare/v0.9.0...v0.9.1) (2025-02-22)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * add celery broker transport options ([#547](https://github.com/freelabz/secator/issues/547)) ([3703d1e](https://github.com/freelabz/secator/commit/3703d1e10dd605b9c631ff6084713beb36bda469))
9
+ * add celery opts required for remote ([#544](https://github.com/freelabz/secator/issues/544)) ([36d1f2d](https://github.com/freelabz/secator/commit/36d1f2dadbd601ad8866e0b4ada485e3d26ec1b6))
10
+ * bbot port not cast as int ([#542](https://github.com/freelabz/secator/issues/542)) ([744553c](https://github.com/freelabz/secator/commit/744553c597869e0c4811214a00ead740b4dcd2e9))
11
+ * change main dockerfile path ([#546](https://github.com/freelabz/secator/issues/546)) ([6a2faf6](https://github.com/freelabz/secator/commit/6a2faf6966db2bf340311815a46ff4c347c8c136))
12
+ * cli bug warning ([#543](https://github.com/freelabz/secator/issues/543)) ([ca44b12](https://github.com/freelabz/secator/commit/ca44b12dcc5e4869753dc1d186adabd77825ee7e))
13
+ * update Dockerfile symlink ([#549](https://github.com/freelabz/secator/issues/549)) ([1b2bdcf](https://github.com/freelabz/secator/commit/1b2bdcf37eabad7150420a8893bb064a9f9c41cb))
14
+ * **wpscan:** set vuln confidence ([#548](https://github.com/freelabz/secator/issues/548)) ([0d8f13d](https://github.com/freelabz/secator/commit/0d8f13d7830906654778910c3e0e259962e31276))
15
+
16
+ ## [0.9.0](https://github.com/freelabz/secator/compare/v0.8.2...v0.9.0) (2025-02-21)
17
+
18
+
19
+ ### Features
20
+
21
+ * add cleanup option to secator install tools ([#530](https://github.com/freelabz/secator/issues/530)) ([bcc11c2](https://github.com/freelabz/secator/commit/bcc11c24e628b527111b1890b3810bf60be14448))
22
+ * add warning if bin dir is not in path ([#528](https://github.com/freelabz/secator/issues/528)) ([59ca31e](https://github.com/freelabz/secator/commit/59ca31e3e4bb07680762213d6f5722afb9586519))
23
+ * improve dockerfile size with multi-stage build ([#534](https://github.com/freelabz/secator/issues/534)) ([ceb3652](https://github.com/freelabz/secator/commit/ceb3652371669bfce525a5e26c38e88e9e03356f))
24
+
25
+
26
+ ### Bug Fixes
27
+
28
+ * bbot screenshots copy ([#540](https://github.com/freelabz/secator/issues/540)) ([2cea982](https://github.com/freelabz/secator/commit/2cea9825cf73fb97546c38793c7f280db7c99822))
29
+ * install chromium in httpx ([#541](https://github.com/freelabz/secator/issues/541)) ([1965619](https://github.com/freelabz/secator/commit/19656198351fc0b40f71aeb7fb20035db6b89a37))
30
+ * miscellaneous bugfixes ([#533](https://github.com/freelabz/secator/issues/533)) ([b8c0edf](https://github.com/freelabz/secator/commit/b8c0edf30882bb030dbb6b376e264850d3905307))
31
+ * restore colors to rich defaults to honor TERM and NO_COLOR ([#524](https://github.com/freelabz/secator/issues/524)) ([982fc55](https://github.com/freelabz/secator/commit/982fc55a60c03d03bf871727fafdf6840dab0908))
32
+ * secator update command ([#538](https://github.com/freelabz/secator/issues/538)) ([cf73def](https://github.com/freelabz/secator/commit/cf73def36de7e9e8522d795922daae02252792fd))
33
+
34
+ ## [0.8.2](https://github.com/freelabz/secator/compare/v0.8.1...v0.8.2) (2025-02-10)
35
+
36
+
37
+ ### Bug Fixes
38
+
39
+ * random proxy bug ([#433](https://github.com/freelabz/secator/issues/433)) ([a437684](https://github.com/freelabz/secator/commit/a4376844b7dea55e8951fe578d5631688728e503))
40
+
3
41
  ## [0.8.1](https://github.com/freelabz/secator/compare/v0.8.0...v0.8.1) (2025-02-07)
4
42
 
5
43
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secator
3
- Version: 0.8.2a0
3
+ Version: 0.9.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
@@ -66,7 +66,6 @@ Requires-Dist: pyinstrument<5; extra == 'trace'
66
66
  Provides-Extra: worker
67
67
  Requires-Dist: eventlet<1; extra == 'worker'
68
68
  Requires-Dist: flower<3; extra == 'worker'
69
- Requires-Dist: gevent<25; extra == 'worker'
70
69
  Description-Content-Type: text/markdown
71
70
 
72
71
  <h1 align="center">
@@ -165,6 +164,7 @@ check that the tool complies with our selection criterias before doing so. If it
165
164
  ```sh
166
165
  pipx install secator
167
166
  ```
167
+ ***Note:** Make sure to have [pipx](https://pipx.pypa.io/stable/installation/) installed.*
168
168
 
169
169
  </details>
170
170
 
@@ -178,7 +178,7 @@ pip install secator
178
178
  </details>
179
179
 
180
180
  <details>
181
- <summary>Bash</summary>
181
+ <summary>Bash (uses apt)</summary>
182
182
 
183
183
  ```sh
184
184
  wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
@@ -295,12 +295,23 @@ secator install addons worker
295
295
 
296
296
 
297
297
  <details>
298
- <summary>google</summary>
298
+ <summary>gdrive</summary>
299
299
 
300
300
  Add support for Google Drive exporter (`-o gdrive`).
301
301
 
302
302
  ```sh
303
- secator install addons google
303
+ secator install addons gdrive
304
+ ```
305
+
306
+ </details>
307
+
308
+ <details>
309
+ <summary>gcs</summary>
310
+
311
+ Add support for Google Cloud Storage driver (`-driver gcs`).
312
+
313
+ ```sh
314
+ secator install addons gcs
304
315
  ```
305
316
 
306
317
  </details>
@@ -360,14 +371,6 @@ secator install addons build
360
371
  </details>
361
372
 
362
373
 
363
- ### Install CVEs
364
-
365
- `secator` makes remote API calls to https://cve.circl.lu/ to get in-depth information about the CVEs it encounters.
366
- We provide a subcommand to download all known CVEs locally so that future lookups are made from disk instead:
367
- ```sh
368
- secator install cves
369
- ```
370
-
371
374
  ### Checking installation health
372
375
 
373
376
  To figure out which languages or tools are installed on your system (along with their version):
@@ -94,6 +94,7 @@ check that the tool complies with our selection criterias before doing so. If it
94
94
  ```sh
95
95
  pipx install secator
96
96
  ```
97
+ ***Note:** Make sure to have [pipx](https://pipx.pypa.io/stable/installation/) installed.*
97
98
 
98
99
  </details>
99
100
 
@@ -107,7 +108,7 @@ pip install secator
107
108
  </details>
108
109
 
109
110
  <details>
110
- <summary>Bash</summary>
111
+ <summary>Bash (uses apt)</summary>
111
112
 
112
113
  ```sh
113
114
  wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
@@ -224,12 +225,23 @@ secator install addons worker
224
225
 
225
226
 
226
227
  <details>
227
- <summary>google</summary>
228
+ <summary>gdrive</summary>
228
229
 
229
230
  Add support for Google Drive exporter (`-o gdrive`).
230
231
 
231
232
  ```sh
232
- secator install addons google
233
+ secator install addons gdrive
234
+ ```
235
+
236
+ </details>
237
+
238
+ <details>
239
+ <summary>gcs</summary>
240
+
241
+ Add support for Google Cloud Storage driver (`-driver gcs`).
242
+
243
+ ```sh
244
+ secator install addons gcs
233
245
  ```
234
246
 
235
247
  </details>
@@ -289,14 +301,6 @@ secator install addons build
289
301
  </details>
290
302
 
291
303
 
292
- ### Install CVEs
293
-
294
- `secator` makes remote API calls to https://cve.circl.lu/ to get in-depth information about the CVEs it encounters.
295
- We provide a subcommand to download all known CVEs locally so that future lookups are made from disk instead:
296
- ```sh
297
- secator install cves
298
- ```
299
-
300
304
  ### Checking installation health
301
305
 
302
306
  To figure out which languages or tools are installed on your system (along with their version):
@@ -4,7 +4,7 @@ build-backend = 'hatchling.build'
4
4
 
5
5
  [project]
6
6
  name = 'secator'
7
- version = "0.8.2-alpha0"
7
+ version = "0.9.1"
8
8
  authors = [{ name = 'FreeLabz', email = 'sales@freelabz.com' }]
9
9
  readme = 'README.md'
10
10
  description = "The pentester's swiss knife."
@@ -72,7 +72,6 @@ trace = [
72
72
  'pyinstrument < 5',
73
73
  ]
74
74
  worker = [
75
- 'gevent < 25',
76
75
  'eventlet < 1',
77
76
  'flower < 3',
78
77
  ]
@@ -1,4 +1,5 @@
1
1
  import gc
2
+ import json
2
3
  import logging
3
4
  import sys
4
5
  import uuid
@@ -49,7 +50,7 @@ app.conf.update({
49
50
 
50
51
  # Broker config
51
52
  'broker_url': CONFIG.celery.broker_url,
52
- 'broker_transport_options': {
53
+ 'broker_transport_options': json.loads(CONFIG.celery.broker_transport_options) if CONFIG.celery.broker_transport_options else { # noqa: E501
53
54
  'data_folder_in': CONFIG.dirs.celery_data,
54
55
  'data_folder_out': CONFIG.dirs.celery_data,
55
56
  'control_folder': CONFIG.dirs.celery_data,
@@ -62,17 +63,17 @@ app.conf.update({
62
63
  # Result backend config
63
64
  'result_backend': CONFIG.celery.result_backend,
64
65
  'result_expires': CONFIG.celery.result_expires,
66
+ 'result_backend_transport_options': json.loads(CONFIG.celery.result_backend_transport_options) if CONFIG.celery.result_backend_transport_options else {}, # noqa: E501
65
67
  'result_extended': True,
66
68
  'result_backend_thread_safe': True,
67
69
  'result_serializer': 'pickle',
68
- # 'result_backend_transport_options': {'master_name': 'mymaster'}, # for Redis HA backend
69
70
 
70
71
  # Task config
71
- 'task_acks_late': False,
72
+ 'task_acks_late': CONFIG.celery.task_acks_late,
72
73
  'task_compression': 'gzip',
73
74
  'task_create_missing_queues': True,
74
75
  'task_eager_propagates': False,
75
- 'task_reject_on_worker_lost': False,
76
+ 'task_reject_on_worker_lost': CONFIG.celery.task_reject_on_worker_lost,
76
77
  'task_routes': {
77
78
  'secator.celery.run_workflow': {'queue': 'celery'},
78
79
  'secator.celery.run_scan': {'queue': 'celery'},
@@ -85,10 +86,10 @@ app.conf.update({
85
86
 
86
87
  # Worker config
87
88
  # 'worker_direct': True, # TODO: consider enabling this to allow routing to specific workers
88
- 'worker_max_tasks_per_child': 10,
89
+ 'worker_max_tasks_per_child': CONFIG.celery.worker_max_tasks_per_child,
89
90
  # 'worker_max_memory_per_child': 100000 # TODO: consider enabling this
90
91
  'worker_pool_restarts': True,
91
- 'worker_prefetch_multiplier': 1,
92
+ 'worker_prefetch_multiplier': CONFIG.celery.worker_prefetch_multiplier,
92
93
  # 'worker_send_task_events': True, # TODO: consider enabling this for Flower monitoring
93
94
  })
94
95
  app.autodiscover_tasks(['secator.hooks.mongodb'], related_name=None)
@@ -20,7 +20,7 @@ from secator.config import CONFIG, ROOT_FOLDER, Config, default_config, config_p
20
20
  from secator.decorators import OrderedGroup, register_runner
21
21
  from secator.definitions import ADDONS_ENABLED, ASCII, DEV_PACKAGE, OPT_NOT_SUPPORTED, VERSION, STATE_COLORS
22
22
  from secator.installer import ToolInstaller, fmt_health_table_row, get_health_table, get_version_info, get_distro_config
23
- from secator.output_types import FINDING_TYPES, Info, Error
23
+ from secator.output_types import FINDING_TYPES, Info, Warning, Error
24
24
  from secator.report import Report
25
25
  from secator.rich import console
26
26
  from secator.runners import Command, Runner
@@ -1047,7 +1047,8 @@ def install_ruby():
1047
1047
 
1048
1048
  @install.command('tools')
1049
1049
  @click.argument('cmds', required=False)
1050
- def install_tools(cmds):
1050
+ @click.option('--cleanup', is_flag=True, default=False)
1051
+ def install_tools(cmds, cleanup):
1051
1052
  """Install supported tools."""
1052
1053
  if CONFIG.offline_mode:
1053
1054
  console.print(Error(message='Cannot run this command in offline mode.'))
@@ -1069,18 +1070,19 @@ def install_tools(cmds):
1069
1070
  if not status.is_ok():
1070
1071
  return_code = 1
1071
1072
  console.print()
1072
- distro = get_distro_config()
1073
- cleanup_cmds = [
1074
- 'go clean -cache',
1075
- 'go clean -modcache',
1076
- 'pip cache purge',
1077
- 'gem cleanup --user-install',
1078
- 'gem clean --user-install',
1079
- ]
1080
- if distro.pm_finalizer:
1081
- cleanup_cmds.append(f'sudo {distro.pm_finalizer}')
1082
- cmd = ' && '.join(cleanup_cmds)
1083
- Command.execute(cmd, cls_attributes={'shell': True}, quiet=False)
1073
+ if cleanup:
1074
+ distro = get_distro_config()
1075
+ cleanup_cmds = [
1076
+ 'go clean -cache',
1077
+ 'go clean -modcache',
1078
+ 'pip cache purge',
1079
+ 'gem cleanup --user-install',
1080
+ 'gem clean --user-install',
1081
+ ]
1082
+ if distro.pm_finalizer:
1083
+ cleanup_cmds.append(f'sudo {distro.pm_finalizer}')
1084
+ cmd = ' && '.join(cleanup_cmds)
1085
+ Command.execute(cmd, cls_attributes={'shell': True}, quiet=False)
1084
1086
  sys.exit(return_code)
1085
1087
 
1086
1088
 
@@ -1097,7 +1099,7 @@ def update(all):
1097
1099
  sys.exit(1)
1098
1100
 
1099
1101
  # Check current and latest version
1100
- info = get_version_info('secator', github_handle='freelabz/secator', version=VERSION)
1102
+ info = get_version_info('secator', '-version', 'freelabz/secator', version=VERSION)
1101
1103
  latest_version = info['latest_version']
1102
1104
  do_update = True
1103
1105
 
@@ -62,9 +62,15 @@ class Celery(StrictModel):
62
62
  broker_pool_limit: int = 10
63
63
  broker_connection_timeout: float = 4.0
64
64
  broker_visibility_timeout: int = 3600
65
+ broker_transport_options: str = ""
65
66
  override_default_logging: bool = True
66
67
  result_backend: StrExpandHome = ''
68
+ result_backend_transport_options: str = ""
67
69
  result_expires: int = 86400 # 1 day
70
+ task_acks_late: bool = False
71
+ task_reject_on_worker_lost: bool = False
72
+ worker_max_tasks_per_child: int = 20
73
+ worker_prefetch_multiplier: int = 1
68
74
 
69
75
 
70
76
  class Cli(StrictModel):
@@ -66,6 +66,12 @@ class ToolInstaller:
66
66
  tool_cls.install_post]):
67
67
  return InstallerStatus.INSTALL_NOT_SUPPORTED
68
68
 
69
+ # Check PATH
70
+ path_var = os.environ.get('PATH', '')
71
+ if not str(CONFIG.dirs.bin) in path_var:
72
+ console.print(Warning(message=f'Bin directory {CONFIG.dirs.bin} not found in PATH ! Binaries installed by secator will not work')) # noqa: E501
73
+ console.print(Warning(message=f'Run "export PATH=$PATH:{CONFIG.dirs.bin}" to add the binaries to your PATH'))
74
+
69
75
  # Install pre-required packages
70
76
  if tool_cls.install_pre:
71
77
  status = PackageInstaller.install(tool_cls.install_pre)
@@ -8,6 +8,7 @@ from secator.utils import rich_to_ansi, traceback_as_string, rich_escape as _s
8
8
  class Error(OutputType):
9
9
  message: str
10
10
  traceback: str = field(default='', compare=False)
11
+ traceback_title: str = field(default='', compare=False)
11
12
  _source: str = field(default='', repr=True)
12
13
  _type: str = field(default='error', repr=True)
13
14
  _timestamp: int = field(default_factory=lambda: time.time(), compare=False)
@@ -31,6 +32,9 @@ class Error(OutputType):
31
32
  def __repr__(self):
32
33
  s = rf"\[[bold red]ERR[/]] {_s(self.message)}"
33
34
  if self.traceback:
34
- traceback_pretty = ' ' + self.traceback.replace('\n', '\n ')
35
+ s += ':'
36
+ traceback_pretty = ' ' + _s(self.traceback).replace('\n', '\n ')
37
+ if self.traceback_title:
38
+ traceback_pretty = f' {self.traceback_title}:\n{traceback_pretty}'
35
39
  s += f'\n[dim]{_s(traceback_pretty)}[/]'
36
40
  return rich_to_ansi(s)
@@ -4,7 +4,7 @@ import yaml
4
4
  from rich.console import Console
5
5
  from rich.table import Table
6
6
 
7
- console = Console(stderr=True, color_system='truecolor')
7
+ console = Console(stderr=True)
8
8
  console_stdout = Console(record=True)
9
9
  # handler = RichHandler(rich_tracebacks=True) # TODO: add logging handler
10
10
 
@@ -301,7 +301,7 @@ class Command(Runner):
301
301
  proxy = CONFIG.http.socks5_proxy
302
302
  elif self.proxy in ['auto', 'http'] and self.proxy_http and CONFIG.http.http_proxy:
303
303
  proxy = CONFIG.http.http_proxy
304
- elif self.proxy == 'random':
304
+ elif self.proxy == 'random' and self.proxy_http:
305
305
  proxy = FreeProxy(timeout=CONFIG.http.freeproxy_timeout, rand=True, anonym=True).get()
306
306
  elif self.proxy.startswith(('http://', 'socks5://')):
307
307
  proxy = self.proxy
@@ -344,7 +344,7 @@ class Command(Runner):
344
344
 
345
345
  # Abort if no inputs
346
346
  if len(self.inputs) == 0 and self.skip_if_no_inputs:
347
- yield Info(message=f'{self.unique_name} skipped (no inputs)', _source=self.unique_name, _uuid=str(uuid.uuid4()))
347
+ yield Warning(message=f'{self.unique_name} skipped (no inputs)', _source=self.unique_name, _uuid=str(uuid.uuid4()))
348
348
  return
349
349
 
350
350
  # Yield targets
@@ -507,7 +507,7 @@ class Command(Runner):
507
507
  if self.config.name in str(exc):
508
508
  message = 'Executable not found.'
509
509
  if self.install_cmd:
510
- message += f' Install it with [bold green4]secator install tools {self.config.name}[/].'
510
+ message += f' Install it with "secator install tools {self.config.name}".'
511
511
  error = Error(message=message)
512
512
  else:
513
513
  error = Error.from_exception(exc)
@@ -652,12 +652,14 @@ class Command(Runner):
652
652
  )
653
653
 
654
654
  elif self.return_code != 0:
655
- error = f'Command failed with return code {self.return_code}.'
655
+ error = f'Command failed with return code {self.return_code}'
656
656
  last_lines = self.output.split('\n')
657
657
  last_lines = last_lines[max(0, len(last_lines) - 2):]
658
+ last_lines = [line for line in last_lines if line != '']
658
659
  yield Error(
659
660
  message=error,
660
661
  traceback='\n'.join(last_lines),
662
+ traceback_title='Last stdout lines',
661
663
  _source=self.unique_name,
662
664
  _uuid=str(uuid.uuid4())
663
665
  )
@@ -4,7 +4,7 @@ from secator.config import CONFIG
4
4
  from secator.decorators import task
5
5
  from secator.runners import Command
6
6
  from secator.serializers import RegexSerializer
7
- from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Error
7
+ from secator.output_types import Vulnerability, Port, Url, Record, Ip, Tag, Info, Error
8
8
  from secator.serializers import JSONSerializer
9
9
 
10
10
 
@@ -194,7 +194,7 @@ class bbot(Command):
194
194
  '_source': lambda x: 'bbot-' + x['module']
195
195
  },
196
196
  Port: {
197
- 'port': lambda x: int(x['data']['port']) if 'port' in x['data'] else x['data'].split(':')[-1],
197
+ 'port': lambda x: int(x['data']['port']) if 'port' in x['data'] else int(x['data'].split(':')[-1]),
198
198
  'ip': lambda x: [_ for _ in x['resolved_hosts'] if not _.startswith('::')][0],
199
199
  'state': lambda x: 'OPEN',
200
200
  'service_name': lambda x: x['data']['protocol'] if 'protocol' in x['data'] else '',
@@ -219,7 +219,8 @@ class bbot(Command):
219
219
  }
220
220
  }
221
221
  install_pre = {
222
- '*': ['git', 'openssl', 'unzip', 'tar', 'chromium']
222
+ 'apk': ['python3-dev', 'linux-headers', 'musl-dev', 'gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium'],
223
+ '*': ['gcc', 'git', 'openssl', 'unzip', 'tar', 'chromium']
223
224
  }
224
225
  install_cmd = 'pipx install bbot && pipx upgrade bbot'
225
226
  install_post = {
@@ -234,6 +235,11 @@ class bbot(Command):
234
235
  yield item
235
236
  return
236
237
 
238
+ # Set scan name and base path for output
239
+ if _type == 'SCAN':
240
+ self.scan_config = item['data']
241
+ return
242
+
237
243
  if _type not in BBOT_MAP_TYPES:
238
244
  self._print(f'[bold orange3]Found unsupported bbot type: {_type}.[/] [bold green]Skipping.[/]', rich=True)
239
245
  return
@@ -278,9 +284,11 @@ class bbot(Command):
278
284
 
279
285
  # If a screenshot was saved, move it to secator output folder
280
286
  if item['type'] == 'WEBSCREENSHOT':
281
- path = item['data']['path']
282
- name = path.split('/')[-1]
287
+ from pathlib import Path
288
+ path = Path.home() / '.bbot' / 'scans' / self.scan_config['name'] / item['data']['path']
289
+ name = path.as_posix().split('/')[-1]
283
290
  secator_path = f'{self.reports_folder}/.outputs/{name}'
291
+ yield Info(f'Copying screenshot {path} to {secator_path}')
284
292
  shutil.copy(path, secator_path)
285
293
  item['data']['path'] = secator_path
286
294
 
@@ -65,6 +65,9 @@ class httpx(Http):
65
65
  }
66
66
  item_loaders = [JSONSerializer()]
67
67
  output_types = [Url, Subdomain]
68
+ install_pre = {
69
+ 'apk': ['chromium']
70
+ }
68
71
  install_cmd = 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest'
69
72
  install_github_handle = 'projectdiscovery/httpx'
70
73
  proxychains = False
@@ -34,7 +34,7 @@ class naabu(ReconPort):
34
34
  # 'health_check': 'hc'
35
35
  }
36
36
  opt_value_map = {
37
- TIMEOUT: lambda x: x*1000 if x and x > 0 else None, # convert to milliseconds
37
+ TIMEOUT: lambda x: int(x*1000) if x and x > 0 else None, # convert to milliseconds
38
38
  RETRIES: lambda x: 1 if x == 0 else x,
39
39
  PROXY: lambda x: x.replace('socks5://', '')
40
40
  }
@@ -142,6 +142,7 @@ class wpscan(VulnHttp):
142
142
  yield Vulnerability(
143
143
  matched_at=target,
144
144
  name=f'Wordpress theme - {slug} {number} outdated',
145
+ confidence='high',
145
146
  severity='info'
146
147
  )
147
148
 
@@ -171,5 +172,6 @@ class wpscan(VulnHttp):
171
172
  yield Vulnerability(
172
173
  matched_at=target,
173
174
  name=f'Wordpress plugin - {slug} {number} outdated',
175
+ confidence='high',
174
176
  severity='info'
175
177
  )
@@ -373,7 +373,7 @@ def rich_to_ansi(text):
373
373
  str: Converted text (ANSI).
374
374
  """
375
375
  from rich.console import Console
376
- tmp_console = Console(file=None, highlight=False, color_system='truecolor')
376
+ tmp_console = Console(file=None, highlight=False)
377
377
  with tmp_console.capture() as capture:
378
378
  tmp_console.print(text, end='', soft_wrap=True)
379
379
  return capture.get()