bbot 2.4.2.6590rc0__tar.gz → 2.4.2.6608rc0__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 bbot might be problematic. Click here for more details.

Files changed (456) hide show
  1. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/PKG-INFO +1 -1
  2. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/__init__.py +1 -1
  3. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/excavate.py +53 -43
  4. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/serial.py +1 -1
  5. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/lightfuzz-xss.yml +1 -0
  6. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/preset/path.py +12 -10
  7. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/preset/preset.py +42 -37
  8. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scripts/docs.py +5 -5
  9. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py +14 -0
  10. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/pyproject.toml +1 -1
  11. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/LICENSE +0 -0
  12. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/README.md +0 -0
  13. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/cli.py +0 -0
  14. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/__init__.py +0 -0
  15. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/config/__init__.py +0 -0
  16. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/config/files.py +0 -0
  17. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/config/logger.py +0 -0
  18. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/core.py +0 -0
  19. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/engine.py +0 -0
  20. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/event/__init__.py +0 -0
  21. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/event/base.py +0 -0
  22. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/event/helpers.py +0 -0
  23. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/flags.py +0 -0
  24. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/__init__.py +0 -0
  25. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/async_helpers.py +0 -0
  26. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/bloom.py +0 -0
  27. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/cache.py +0 -0
  28. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/command.py +0 -0
  29. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/depsinstaller/__init__.py +0 -0
  30. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/depsinstaller/installer.py +0 -0
  31. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/depsinstaller/sudo_askpass.py +0 -0
  32. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/diff.py +0 -0
  33. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/dns/__init__.py +0 -0
  34. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/dns/brute.py +0 -0
  35. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/dns/dns.py +0 -0
  36. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/dns/engine.py +0 -0
  37. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/dns/helpers.py +0 -0
  38. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/dns/mock.py +0 -0
  39. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/files.py +0 -0
  40. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/helper.py +0 -0
  41. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/interactsh.py +0 -0
  42. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/libmagic.py +0 -0
  43. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/misc.py +0 -0
  44. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/names_generator.py +0 -0
  45. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/ntlm.py +0 -0
  46. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/process.py +0 -0
  47. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/ratelimiter.py +0 -0
  48. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/regex.py +0 -0
  49. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/regexes.py +0 -0
  50. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/url.py +0 -0
  51. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/validators.py +0 -0
  52. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/web/__init__.py +0 -0
  53. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/web/client.py +0 -0
  54. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/web/engine.py +0 -0
  55. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/web/envelopes.py +0 -0
  56. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/web/ssl_context.py +0 -0
  57. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/web/web.py +0 -0
  58. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/wordcloud.py +0 -0
  59. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/helpers/yara_helper.py +0 -0
  60. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/modules.py +0 -0
  61. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/multiprocess.py +0 -0
  62. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/core/shared_deps.py +0 -0
  63. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/db/sql/models.py +0 -0
  64. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/defaults.yml +0 -0
  65. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/errors.py +0 -0
  66. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/logger.py +0 -0
  67. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/__init__.py +0 -0
  68. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/ajaxpro.py +0 -0
  69. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/anubisdb.py +0 -0
  70. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/apkpure.py +0 -0
  71. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/azure_realm.py +0 -0
  72. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/azure_tenant.py +0 -0
  73. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/baddns.py +0 -0
  74. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/baddns_direct.py +0 -0
  75. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/baddns_zone.py +0 -0
  76. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/badsecrets.py +0 -0
  77. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/base.py +0 -0
  78. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bevigil.py +0 -0
  79. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/binaryedge.py +0 -0
  80. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bucket_amazon.py +0 -0
  81. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bucket_azure.py +0 -0
  82. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bucket_digitalocean.py +0 -0
  83. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bucket_file_enum.py +0 -0
  84. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bucket_firebase.py +0 -0
  85. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bucket_google.py +0 -0
  86. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bufferoverrun.py +0 -0
  87. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/builtwith.py +0 -0
  88. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/bypass403.py +0 -0
  89. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/c99.py +0 -0
  90. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/censys.py +0 -0
  91. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/certspotter.py +0 -0
  92. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/chaos.py +0 -0
  93. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/code_repository.py +0 -0
  94. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/credshed.py +0 -0
  95. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/crt.py +0 -0
  96. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/crt_db.py +0 -0
  97. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dastardly.py +0 -0
  98. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dehashed.py +0 -0
  99. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/digitorus.py +0 -0
  100. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dnsbimi.py +0 -0
  101. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dnsbrute.py +0 -0
  102. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dnsbrute_mutations.py +0 -0
  103. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dnscaa.py +0 -0
  104. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dnscommonsrv.py +0 -0
  105. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dnsdumpster.py +0 -0
  106. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dnstlsrpt.py +0 -0
  107. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/docker_pull.py +0 -0
  108. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dockerhub.py +0 -0
  109. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/dotnetnuke.py +0 -0
  110. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/emailformat.py +0 -0
  111. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/extractous.py +0 -0
  112. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/ffuf.py +0 -0
  113. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/ffuf_shortnames.py +0 -0
  114. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/filedownload.py +0 -0
  115. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/fingerprintx.py +0 -0
  116. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/fullhunt.py +0 -0
  117. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/generic_ssrf.py +0 -0
  118. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/git.py +0 -0
  119. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/git_clone.py +0 -0
  120. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/gitdumper.py +0 -0
  121. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/github_codesearch.py +0 -0
  122. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/github_org.py +0 -0
  123. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/github_workflows.py +0 -0
  124. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/gitlab.py +0 -0
  125. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/google_playstore.py +0 -0
  126. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/gowitness.py +0 -0
  127. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/hackertarget.py +0 -0
  128. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/host_header.py +0 -0
  129. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/httpx.py +0 -0
  130. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/hunt.py +0 -0
  131. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/hunterio.py +0 -0
  132. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/iis_shortnames.py +0 -0
  133. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/__init__.py +0 -0
  134. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/aggregate.py +0 -0
  135. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/base.py +0 -0
  136. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/cloudcheck.py +0 -0
  137. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/dnsresolve.py +0 -0
  138. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/speculate.py +0 -0
  139. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/internal/unarchive.py +0 -0
  140. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/ip2location.py +0 -0
  141. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/ipneighbor.py +0 -0
  142. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/ipstack.py +0 -0
  143. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/jadx.py +0 -0
  144. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/leakix.py +0 -0
  145. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/lightfuzz.py +0 -0
  146. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/__init__.py +0 -0
  147. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/base.py +0 -0
  148. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/cmdi.py +0 -0
  149. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/crypto.py +0 -0
  150. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/nosqli.py +0 -0
  151. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/path.py +0 -0
  152. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/sqli.py +0 -0
  153. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/ssti.py +0 -0
  154. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/lightfuzz/submodules/xss.py +0 -0
  155. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/myssl.py +0 -0
  156. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/newsletters.py +0 -0
  157. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/ntlm.py +0 -0
  158. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/nuclei.py +0 -0
  159. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/oauth.py +0 -0
  160. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/otx.py +0 -0
  161. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/__init__.py +0 -0
  162. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/asset_inventory.py +0 -0
  163. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/base.py +0 -0
  164. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/csv.py +0 -0
  165. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/discord.py +0 -0
  166. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/emails.py +0 -0
  167. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/http.py +0 -0
  168. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/json.py +0 -0
  169. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/mysql.py +0 -0
  170. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/neo4j.py +0 -0
  171. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/nmap_xml.py +0 -0
  172. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/postgres.py +0 -0
  173. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/python.py +0 -0
  174. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/slack.py +0 -0
  175. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/splunk.py +0 -0
  176. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/sqlite.py +0 -0
  177. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/stdout.py +0 -0
  178. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/subdomains.py +0 -0
  179. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/teams.py +0 -0
  180. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/txt.py +0 -0
  181. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/web_parameters.py +0 -0
  182. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/web_report.py +0 -0
  183. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/output/websocket.py +0 -0
  184. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/paramminer_cookies.py +0 -0
  185. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/paramminer_getparams.py +0 -0
  186. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/paramminer_headers.py +0 -0
  187. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/passivetotal.py +0 -0
  188. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/pgp.py +0 -0
  189. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/portfilter.py +0 -0
  190. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/portscan.py +0 -0
  191. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/postman.py +0 -0
  192. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/postman_download.py +0 -0
  193. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/rapiddns.py +0 -0
  194. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/reflected_parameters.py +0 -0
  195. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/report/affiliates.py +0 -0
  196. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/report/asn.py +0 -0
  197. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/report/base.py +0 -0
  198. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/robots.py +0 -0
  199. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/securitytrails.py +0 -0
  200. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/securitytxt.py +0 -0
  201. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/shodan_dns.py +0 -0
  202. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/shodan_idb.py +0 -0
  203. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/sitedossier.py +0 -0
  204. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/skymem.py +0 -0
  205. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/smuggler.py +0 -0
  206. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/social.py +0 -0
  207. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/sslcert.py +0 -0
  208. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/subdomaincenter.py +0 -0
  209. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/subdomainradar.py +0 -0
  210. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/telerik.py +0 -0
  211. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/templates/bucket.py +0 -0
  212. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/templates/github.py +0 -0
  213. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/templates/postman.py +0 -0
  214. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/templates/shodan.py +0 -0
  215. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/templates/sql.py +0 -0
  216. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/templates/subdomain_enum.py +0 -0
  217. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/templates/webhook.py +0 -0
  218. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/trickest.py +0 -0
  219. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/trufflehog.py +0 -0
  220. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/url_manipulation.py +0 -0
  221. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/urlscan.py +0 -0
  222. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/vhost.py +0 -0
  223. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/viewdns.py +0 -0
  224. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/virustotal.py +0 -0
  225. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/wafw00f.py +0 -0
  226. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/wappalyzer.py +0 -0
  227. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/wayback.py +0 -0
  228. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/wpscan.py +0 -0
  229. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/modules/zoomeye.py +0 -0
  230. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/baddns-intense.yml +0 -0
  231. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/cloud-enum.yml +0 -0
  232. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/code-enum.yml +0 -0
  233. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/email-enum.yml +0 -0
  234. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/fast.yml +0 -0
  235. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/kitchen-sink.yml +0 -0
  236. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/nuclei/nuclei-budget.yml +0 -0
  237. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/nuclei/nuclei-intense.yml +0 -0
  238. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/nuclei/nuclei-technology.yml +0 -0
  239. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/nuclei/nuclei.yml +0 -0
  240. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/spider-intense.yml +0 -0
  241. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/spider.yml +0 -0
  242. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/subdomain-enum.yml +0 -0
  243. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/tech-detect.yml +0 -0
  244. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/dirbust-heavy.yml +0 -0
  245. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/dirbust-light.yml +0 -0
  246. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/dotnet-audit.yml +0 -0
  247. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/iis-shortnames.yml +0 -0
  248. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/lightfuzz-heavy.yml +0 -0
  249. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/lightfuzz-light.yml +0 -0
  250. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/lightfuzz-medium.yml +0 -0
  251. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/lightfuzz-superheavy.yml +0 -0
  252. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web/paramminer.yml +0 -0
  253. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web-basic.yml +0 -0
  254. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web-screenshots.yml +0 -0
  255. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/presets/web-thorough.yml +0 -0
  256. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/__init__.py +0 -0
  257. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/dispatcher.py +0 -0
  258. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/manager.py +0 -0
  259. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/preset/__init__.py +0 -0
  260. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/preset/args.py +0 -0
  261. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/preset/conditions.py +0 -0
  262. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/preset/environ.py +0 -0
  263. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/scanner.py +0 -0
  264. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/stats.py +0 -0
  265. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/scanner/target.py +0 -0
  266. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/__init__.py +0 -0
  267. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/bbot_fixtures.py +0 -0
  268. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/conftest.py +0 -0
  269. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/coverage.cfg +0 -0
  270. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/fastapi_test.py +0 -0
  271. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/owasp_mastg.apk +0 -0
  272. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/run_tests.sh +0 -0
  273. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test.conf +0 -0
  274. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_output.ndjson +0 -0
  275. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/__init__.py +0 -0
  276. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test__module__tests.py +0 -0
  277. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_bbot_fastapi.py +0 -0
  278. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_bloom_filter.py +0 -0
  279. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_cli.py +0 -0
  280. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_command.py +0 -0
  281. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_config.py +0 -0
  282. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_depsinstaller.py +0 -0
  283. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_dns.py +0 -0
  284. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_docs.py +0 -0
  285. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_engine.py +0 -0
  286. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_event_seeds.py +0 -0
  287. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_events.py +0 -0
  288. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_files.py +0 -0
  289. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_helpers.py +0 -0
  290. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_manager_deduplication.py +0 -0
  291. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_manager_scope_accuracy.py +0 -0
  292. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_modules_basic.py +0 -0
  293. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_presets.py +0 -0
  294. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_python_api.py +0 -0
  295. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_regexes.py +0 -0
  296. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_scan.py +0 -0
  297. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_scope.py +0 -0
  298. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_target.py +0 -0
  299. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_web.py +0 -0
  300. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_1/test_web_envelopes.py +0 -0
  301. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/__init__.py +0 -0
  302. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/__init__.py +0 -0
  303. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/base.py +0 -0
  304. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_affiliates.py +0 -0
  305. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_aggregate.py +0 -0
  306. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_ajaxpro.py +0 -0
  307. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_anubisdb.py +0 -0
  308. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_apkpure.py +0 -0
  309. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_asn.py +0 -0
  310. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -0
  311. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_azure_realm.py +0 -0
  312. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_azure_tenant.py +0 -0
  313. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_baddns.py +0 -0
  314. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +0 -0
  315. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_zone.py +0 -0
  316. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_badsecrets.py +0 -0
  317. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bevigil.py +0 -0
  318. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_binaryedge.py +0 -0
  319. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +0 -0
  320. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +0 -0
  321. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_digitalocean.py +0 -0
  322. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_file_enum.py +0 -0
  323. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_firebase.py +0 -0
  324. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_google.py +0 -0
  325. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +0 -0
  326. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_builtwith.py +0 -0
  327. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_bypass403.py +0 -0
  328. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_c99.py +0 -0
  329. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py +0 -0
  330. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_certspotter.py +0 -0
  331. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_chaos.py +0 -0
  332. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +0 -0
  333. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_code_repository.py +0 -0
  334. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_credshed.py +0 -0
  335. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_crt.py +0 -0
  336. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_crt_db.py +0 -0
  337. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_csv.py +0 -0
  338. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dastardly.py +0 -0
  339. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dehashed.py +0 -0
  340. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_digitorus.py +0 -0
  341. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_discord.py +0 -0
  342. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +0 -0
  343. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +0 -0
  344. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +0 -0
  345. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnscaa.py +0 -0
  346. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +0 -0
  347. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +0 -0
  348. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnsresolve.py +0 -0
  349. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dnstlsrpt.py +0 -0
  350. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_docker_pull.py +0 -0
  351. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dockerhub.py +0 -0
  352. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -0
  353. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_emailformat.py +0 -0
  354. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_emails.py +0 -0
  355. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_extractous.py +0 -0
  356. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf.py +0 -0
  357. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +0 -0
  358. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_filedownload.py +0 -0
  359. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_fingerprintx.py +0 -0
  360. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_fullhunt.py +0 -0
  361. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_generic_ssrf.py +0 -0
  362. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_git.py +0 -0
  363. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_git_clone.py +0 -0
  364. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_gitdumper.py +0 -0
  365. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_github_codesearch.py +0 -0
  366. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_github_org.py +0 -0
  367. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_github_workflows.py +0 -0
  368. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_gitlab.py +0 -0
  369. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_google_playstore.py +0 -0
  370. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_gowitness.py +0 -0
  371. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_hackertarget.py +0 -0
  372. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_host_header.py +0 -0
  373. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_http.py +0 -0
  374. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_httpx.py +0 -0
  375. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_hunt.py +0 -0
  376. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_hunterio.py +0 -0
  377. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_iis_shortnames.py +0 -0
  378. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_ip2location.py +0 -0
  379. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_ipneighbor.py +0 -0
  380. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_ipstack.py +0 -0
  381. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_jadx.py +0 -0
  382. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_json.py +0 -0
  383. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_leakix.py +0 -0
  384. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_lightfuzz.py +0 -0
  385. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_mysql.py +0 -0
  386. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_myssl.py +0 -0
  387. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_neo4j.py +0 -0
  388. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_newsletters.py +0 -0
  389. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_nmap_xml.py +0 -0
  390. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_ntlm.py +0 -0
  391. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py +0 -0
  392. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_oauth.py +0 -0
  393. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_otx.py +0 -0
  394. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +0 -0
  395. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -0
  396. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +0 -0
  397. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_passivetotal.py +0 -0
  398. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_pgp.py +0 -0
  399. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_portfilter.py +0 -0
  400. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_portscan.py +0 -0
  401. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_postgres.py +0 -0
  402. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_postman.py +0 -0
  403. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_postman_download.py +0 -0
  404. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_python.py +0 -0
  405. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_rapiddns.py +0 -0
  406. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_reflected_parameters.py +0 -0
  407. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_robots.py +0 -0
  408. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_securitytrails.py +0 -0
  409. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_securitytxt.py +0 -0
  410. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +0 -0
  411. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_idb.py +0 -0
  412. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_sitedossier.py +0 -0
  413. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_skymem.py +0 -0
  414. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_slack.py +0 -0
  415. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_smuggler.py +0 -0
  416. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_social.py +0 -0
  417. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_speculate.py +0 -0
  418. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_splunk.py +0 -0
  419. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_sqlite.py +0 -0
  420. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_sslcert.py +0 -0
  421. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_stdout.py +0 -0
  422. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +0 -0
  423. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +0 -0
  424. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_subdomains.py +0 -0
  425. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_teams.py +0 -0
  426. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_telerik.py +0 -0
  427. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_trickest.py +0 -0
  428. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_trufflehog.py +0 -0
  429. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_txt.py +0 -0
  430. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_unarchive.py +0 -0
  431. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_url_manipulation.py +0 -0
  432. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_urlscan.py +0 -0
  433. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_vhost.py +0 -0
  434. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_viewdns.py +0 -0
  435. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_virustotal.py +0 -0
  436. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_wafw00f.py +0 -0
  437. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_wappalyzer.py +0 -0
  438. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_wayback.py +0 -0
  439. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_web_parameters.py +0 -0
  440. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_web_report.py +0 -0
  441. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_websocket.py +0 -0
  442. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_wpscan.py +0 -0
  443. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/module_tests/test_module_zoomeye.py +0 -0
  444. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/template_tests/__init__.py +0 -0
  445. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +0 -0
  446. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/testsslcert.pem +0 -0
  447. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/test/testsslkey.pem +0 -0
  448. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/devops_mutations.txt +0 -0
  449. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/ms_on_prem_subdomains.txt +0 -0
  450. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/nameservers.txt +0 -0
  451. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/paramminer_headers.txt +0 -0
  452. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/paramminer_parameters.txt +0 -0
  453. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +0 -0
  454. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/top_open_ports_nmap.txt +0 -0
  455. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/valid_url_schemes.txt +0 -0
  456. {bbot-2.4.2.6590rc0 → bbot-2.4.2.6608rc0}/bbot/wordlists/wordninja_dns.txt.gz +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bbot
3
- Version: 2.4.2.6590rc0
3
+ Version: 2.4.2.6608rc0
4
4
  Summary: OSINT automation for hackers.
5
5
  License: GPL-3.0
6
6
  Keywords: python,cli,automation,osint,threat-intel,intelligence,neo4j,scanner,python-library,hacking,recursion,pentesting,recon,command-line-tool,bugbounty,subdomains,security-tools,subdomain-scanner,osint-framework,attack-surface,subdomain-enumeration,osint-tool
@@ -1,5 +1,5 @@
1
1
  # version placeholder (replaced by poetry-dynamic-versioning)
2
- __version__ = "v2.4.2.6590rc"
2
+ __version__ = "v2.4.2.6608rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
5
5
 
@@ -5,7 +5,7 @@ import time
5
5
  import inspect
6
6
  import regex as re
7
7
  from pathlib import Path
8
- from bbot.errors import ExcavateError
8
+ from bbot.errors import ExcavateError, ValidationError
9
9
  import bbot.core.helpers.regexes as bbot_regexes
10
10
  from bbot.modules.base import BaseInterceptModule
11
11
  from bbot.modules.internal.base import BaseInternalModule
@@ -622,14 +622,15 @@ class excavate(BaseInternalModule, BaseInterceptModule):
622
622
  base_url += f"?{event.parsed_url.query}"
623
623
  url = urljoin(base_url, endpoint)
624
624
 
625
+ try:
626
+ # Validate the URL before using it
627
+ parsed_url = self.excavate.helpers.validators.validate_url_parsed(url)
628
+ except (ValidationError, ValueError) as e:
629
+ self.excavate.debug(f"Invalid URL [{url}]: {e}")
630
+ continue
631
+
625
632
  if self.excavate.helpers.validate_parameter(parameter_name, parameter_type):
626
633
  if self.excavate.in_bl(parameter_name) is False:
627
- parsed_url = urlparse(url)
628
- if not parsed_url.hostname:
629
- self.excavate.warning(
630
- f"Error Parsing reconstructed URL [{url}] during parameter extraction, missing hostname"
631
- )
632
- continue
633
634
  description = f"HTTP Extracted Parameter [{parameter_name}] ({parameterExtractorSubModule.name} Submodule)"
634
635
  data = {
635
636
  "host": parsed_url.hostname,
@@ -848,45 +849,51 @@ class excavate(BaseInternalModule, BaseInterceptModule):
848
849
  urls_found = 0
849
850
  final_url = ""
850
851
  for url_str in results:
851
- if identifier == "url_full":
852
- if not await self.helpers.re.search(self.full_url_regex, url_str):
852
+ try:
853
+ if identifier == "url_full":
854
+ if not await self.helpers.re.search(self.full_url_regex, url_str):
855
+ self.excavate.debug(
856
+ f"Rejecting potential full URL [{url_str}] as did not match full_url_regex"
857
+ )
858
+ continue
859
+ final_url = url_str
860
+ self.excavate.debug(f"Discovered Full URL [{final_url}]")
861
+
862
+ elif identifier == "url_attr" and hasattr(event, "parsed_url"):
863
+ m = await self.helpers.re.search(self.tag_attribute_regex, url_str)
864
+ if not m:
865
+ self.excavate.debug(
866
+ f"Rejecting potential attribute URL [{url_str}] as did not match tag_attribute_regex"
867
+ )
868
+ continue
869
+ unescaped_url = html.unescape(m.group(1))
870
+ source_url = event.parsed_url.geturl()
871
+ final_url = urldefrag(urljoin(source_url, unescaped_url)).url
872
+ if not await self.helpers.re.search(self.full_url_regex_strict, final_url):
873
+ self.excavate.debug(
874
+ f"Rejecting reconstructed URL [{final_url}] as did not match full_url_regex_strict"
875
+ )
876
+ continue
853
877
  self.excavate.debug(
854
- f"Rejecting potential full URL [{url_str}] as did not match full_url_regex"
878
+ f"Reconstructed Full URL [{final_url}] from extracted relative URL [{unescaped_url}] "
855
879
  )
856
- continue
857
- final_url = url_str
858
880
 
859
- self.excavate.debug(f"Discovered Full URL [{final_url}]")
860
- elif identifier == "url_attr" and hasattr(event, "parsed_url"):
861
- m = await self.helpers.re.search(self.tag_attribute_regex, url_str)
862
- if not m:
863
- self.excavate.debug(
864
- f"Rejecting potential attribute URL [{url_str}] as did not match tag_attribute_regex"
881
+ if final_url:
882
+ # Validate the URL before using it
883
+ self.excavate.helpers.validators.validate_url_parsed(final_url)
884
+ if self.excavate.scan.in_scope(final_url):
885
+ urls_found += 1
886
+ await self.report(
887
+ final_url,
888
+ event,
889
+ yara_rule_settings,
890
+ discovery_context,
891
+ event_type="URL_UNVERIFIED",
892
+ urls_found=urls_found,
865
893
  )
866
- continue
867
- unescaped_url = html.unescape(m.group(1))
868
- source_url = event.parsed_url.geturl()
869
- final_url = urldefrag(urljoin(source_url, unescaped_url)).url
870
- if not await self.helpers.re.search(self.full_url_regex_strict, final_url):
871
- self.excavate.debug(
872
- f"Rejecting reconstructed URL [{final_url}] as did not match full_url_regex_strict"
873
- )
874
- continue
875
- self.excavate.debug(
876
- f"Reconstructed Full URL [{final_url}] from extracted relative URL [{unescaped_url}] "
877
- )
878
-
879
- if final_url:
880
- if self.excavate.scan.in_scope(final_url):
881
- urls_found += 1
882
- await self.report(
883
- final_url,
884
- event,
885
- yara_rule_settings,
886
- discovery_context,
887
- event_type="URL_UNVERIFIED",
888
- urls_found=urls_found,
889
- )
894
+ except (ValidationError, ValueError) as e:
895
+ self.excavate.debug(f"Invalid URL [{url_str if not final_url else final_url}]: {e}")
896
+ continue
890
897
 
891
898
  async def report_prep(self, event_data, event_type, event, tags, **kwargs):
892
899
  event_draft = self.excavate.make_event(event_data, event_type, parent=event)
@@ -1114,7 +1121,10 @@ class excavate(BaseInternalModule, BaseInterceptModule):
1114
1121
 
1115
1122
  # Check if rule processing function exists
1116
1123
  if rule_name in self.yara_preprocess_dict:
1117
- await self.yara_preprocess_dict[rule_name](result, event, discovery_context)
1124
+ try:
1125
+ await self.yara_preprocess_dict[rule_name](result, event, discovery_context)
1126
+ except ValidationError as e:
1127
+ self.debug(f"ValidationError in rule {rule_name} for result {result}: {e}")
1118
1128
  else:
1119
1129
  self.hugewarning(f"YARA Rule {rule_name} not found in pre-compiled rules")
1120
1130
 
@@ -22,7 +22,7 @@ class serial(BaseLightfuzz):
22
22
  CONTROL_PAYLOAD_PHP_RAW = "z:0:{}"
23
23
 
24
24
  BASE64_SERIALIZATION_PAYLOADS = {
25
- "php_base64": "YTowOnt9",
25
+ "php_base64": "YToxOntpOjA7aToxO30=",
26
26
  "java_base64": "rO0ABXNyABFqYXZhLmxhbmcuQm9vbGVhbs0gcoDVnPruAgABWgAFdmFsdWV4cAA=",
27
27
  "java_base64_string_error": "rO0ABXQABHRlc3Q=",
28
28
  "java_base64_OptionalDataException": "rO0ABXcEAAAAAAEAAAABc3IAEGphdmEudXRpbC5IYXNoTWFwAAAAAAAAAAECAAJMAARrZXkxYgABAAAAAAAAAAJ4cHcBAAAAB3QABHRlc3Q=",
@@ -1,4 +1,5 @@
1
1
  description: Discover web parameters and lightly fuzz them, limited to just GET-based xss vulnerabilities. This is an example of a custom lightfuzz preset, selectively enabling a single lightfuzz module.
2
+
2
3
  modules:
3
4
  - httpx
4
5
  - lightfuzz
@@ -6,6 +6,7 @@ from bbot.errors import *
6
6
  log = logging.getLogger("bbot.presets.path")
7
7
 
8
8
  DEFAULT_PRESET_PATH = Path(__file__).parent.parent.parent / "presets"
9
+ DEFAULT_PRESET_PATH = DEFAULT_PRESET_PATH.expanduser().resolve()
9
10
 
10
11
 
11
12
  class PresetPath:
@@ -17,7 +18,7 @@ class PresetPath:
17
18
  self.paths = [DEFAULT_PRESET_PATH]
18
19
 
19
20
  def find(self, filename):
20
- filename_path = Path(filename).resolve()
21
+ filename_path = Path(filename).expanduser().resolve()
21
22
  extension = filename_path.suffix.lower()
22
23
  file_candidates = set()
23
24
  extension_candidates = {".yaml", ".yml"}
@@ -29,16 +30,12 @@ class PresetPath:
29
30
  file_candidates.add(f"{filename_path.stem}{ext}")
30
31
  file_candidates = sorted(file_candidates)
31
32
  file_candidates_str = ",".join([str(s) for s in file_candidates])
32
- paths_to_search = self.paths
33
33
  if "/" in str(filename):
34
- if filename_path.parent not in paths_to_search:
35
- paths_to_search.append(filename_path.parent)
36
- log.debug(
37
- f"Searching for preset in {[str(p) for p in paths_to_search]}, file candidates: {file_candidates_str}"
38
- )
39
- for path in paths_to_search:
34
+ self.add_path(filename_path.parent)
35
+ log.debug(f"Searching for {file_candidates_str} in {[str(p) for p in self.paths]}")
36
+ for path in self.paths:
40
37
  for candidate in file_candidates:
41
- for file in path.rglob(candidate):
38
+ for file in path.rglob(f"**/{candidate}"):
42
39
  if file.is_file():
43
40
  log.verbose(f'Found preset matching "{filename}" at {file}')
44
41
  self.add_path(file.parent)
@@ -51,14 +48,19 @@ class PresetPath:
51
48
  return ":".join([str(s) for s in self.paths])
52
49
 
53
50
  def add_path(self, path):
54
- path = Path(path).resolve()
51
+ path = Path(path).expanduser().resolve()
52
+ # skip if already in paths
55
53
  if path in self.paths:
56
54
  return
55
+ # skip if path is a subdirectory of any path in paths
57
56
  if any(path.is_relative_to(p) for p in self.paths):
58
57
  return
58
+ # skip if path is not a directory
59
59
  if not path.is_dir():
60
60
  log.debug(f'Path "{path.resolve()}" is not a directory')
61
61
  return
62
+ # preemptively remove any paths that are subdirectories of the new path
63
+ self.paths = [p for p in self.paths if not p.is_relative_to(path)]
62
64
  self.paths.append(path)
63
65
 
64
66
  def __iter__(self):
@@ -308,7 +308,7 @@ class Preset(metaclass=BasePreset):
308
308
 
309
309
  @property
310
310
  def preset_dir(self):
311
- return self.bbot_home / "presets"
311
+ return (self.bbot_home / "presets").expanduser().resolve()
312
312
 
313
313
  @property
314
314
  def default_output_modules(self):
@@ -413,30 +413,32 @@ class Preset(metaclass=BasePreset):
413
413
  self.log_debug("Getting baked")
414
414
  # create a copy of self
415
415
  baked_preset = copy(self)
416
- baked_preset.scan = scan
416
+
417
417
  # copy core
418
418
  baked_preset.core = self.core.copy()
419
- # copy module loader
420
- baked_preset._module_loader = self.module_loader.copy()
421
- # prepare os environment
422
- os_environ = baked_preset.environ.prepare()
423
- # find and replace preloaded modules with os environ
424
- # this is different from the config variable substitution because it modifies
425
- # the preloaded modules, i.e. their ansible playbooks
426
- baked_preset.module_loader.find_and_replace(**os_environ)
427
- # update os environ
428
- os.environ.clear()
429
- os.environ.update(os_environ)
430
419
 
431
- # validate flags, config options
432
- baked_preset.validate()
420
+ if scan is not None:
421
+ baked_preset.scan = scan
422
+ # copy module loader
423
+ baked_preset._module_loader = self.module_loader.copy()
424
+ # prepare os environment
425
+ os_environ = baked_preset.environ.prepare()
426
+ # find and replace preloaded modules with os environ
427
+ # this is different from the config variable substitution because it modifies
428
+ # the preloaded modules, i.e. their ansible playbooks
429
+ baked_preset.module_loader.find_and_replace(**os_environ)
430
+ # update os environ
431
+ os.environ.clear()
432
+ os.environ.update(os_environ)
433
+
434
+ # assign baked preset to our scan
435
+ scan.preset = baked_preset
433
436
 
434
437
  # validate log level options
435
438
  baked_preset.apply_log_level(apply_core=scan is not None)
436
439
 
437
- # assign baked preset to our scan
438
- if scan is not None:
439
- scan.preset = baked_preset
440
+ # validate flags, config options
441
+ baked_preset.validate()
440
442
 
441
443
  # now that our requirements / exclusions are validated, we can start enabling modules
442
444
  # enable scan modules
@@ -483,15 +485,19 @@ class Preset(metaclass=BasePreset):
483
485
  from bbot.scanner.target import BBOTTarget
484
486
 
485
487
  baked_preset._target = BBOTTarget(
486
- *list(self._seeds), whitelist=self._whitelist, blacklist=self._blacklist, strict_scope=self.strict_scope
488
+ *list(self._seeds),
489
+ whitelist=self._whitelist,
490
+ blacklist=self._blacklist,
491
+ strict_scope=self.strict_scope,
487
492
  )
488
493
 
489
- # evaluate conditions
490
- if baked_preset.conditions:
491
- from .conditions import ConditionEvaluator
494
+ if scan is not None:
495
+ # evaluate conditions
496
+ if baked_preset.conditions:
497
+ from .conditions import ConditionEvaluator
492
498
 
493
- evaluator = ConditionEvaluator(baked_preset)
494
- evaluator.evaluate()
499
+ evaluator = ConditionEvaluator(baked_preset)
500
+ evaluator.evaluate()
495
501
 
496
502
  self._baked = True
497
503
  return baked_preset
@@ -562,6 +568,12 @@ class Preset(metaclass=BasePreset):
562
568
  return self.scope_config.get("strict", False)
563
569
 
564
570
  def apply_log_level(self, apply_core=False):
571
+ """
572
+ Apply the log level to the preset.
573
+
574
+ Args:
575
+ apply_core (bool, optional): If True, apply the log level to the core logger.
576
+ """
565
577
  # silent takes precedence
566
578
  if self.silent:
567
579
  self.verbose = False
@@ -920,20 +932,17 @@ class Preset(metaclass=BasePreset):
920
932
  """
921
933
  Recursively find all the presets and return them as a dictionary
922
934
  """
923
- preset_dir = self.preset_dir
924
- home_dir = Path.home()
925
-
926
935
  # first, add local preset dir to PRESET_PATH
927
936
  PRESET_PATH.add_path(self.preset_dir)
928
937
 
929
938
  # ensure local preset directory exists
930
- mkdir(preset_dir)
939
+ mkdir(self.preset_dir)
931
940
 
932
941
  global DEFAULT_PRESETS
933
942
  if DEFAULT_PRESETS is None:
934
943
  presets = {}
935
- for ext in ("yml", "yaml"):
936
- for preset_path in PRESET_PATH:
944
+ for preset_path in PRESET_PATH:
945
+ for ext in ("yml", "yaml"):
937
946
  # for every yaml file
938
947
  for original_filename in preset_path.rglob(f"**/*.{ext}"):
939
948
  # not including symlinks
@@ -957,18 +966,14 @@ class Preset(metaclass=BasePreset):
957
966
 
958
967
  local_preset = original_filename
959
968
  # populate symlinks in local preset dir
960
- if not original_filename.is_relative_to(preset_dir):
969
+ if not original_filename.is_relative_to(self.preset_dir):
961
970
  relative_preset = original_filename.relative_to(preset_path)
962
- local_preset = preset_dir / relative_preset
971
+ local_preset = self.preset_dir / relative_preset
963
972
  mkdir(local_preset.parent, check_writable=False)
964
973
  if not local_preset.exists():
965
974
  local_preset.symlink_to(original_filename)
966
975
 
967
- # collapse home directory into "~"
968
- if local_preset.is_relative_to(home_dir):
969
- local_preset = Path("~") / local_preset.relative_to(home_dir)
970
-
971
- presets[local_preset] = (loaded_preset, category, preset_path, original_filename)
976
+ presets[local_preset.stem] = (loaded_preset, category, preset_path, original_filename)
972
977
 
973
978
  # sort by name
974
979
  DEFAULT_PRESETS = dict(sorted(presets.items(), key=lambda x: x[-1][0].name))
@@ -198,15 +198,15 @@ def update_docs():
198
198
  update_md_files("BBOT PRESETS", bbot_presets_table)
199
199
 
200
200
  # BBOT presets
201
- for yaml_file, (loaded_preset, category, preset_path, original_filename) in DEFAULT_PRESET.all_presets.items():
201
+ for _, (loaded_preset, category, preset_path, original_filename) in DEFAULT_PRESET.all_presets.items():
202
202
  preset_yaml = f"""
203
- ```yaml title={yaml_file.name}
203
+ ```yaml title={preset_path.name}
204
204
  {loaded_preset._yaml_str}
205
205
  ```
206
206
  """
207
207
  preset_yaml_expandable = f"""
208
208
  <details>
209
- <summary><b><code>{yaml_file.name}</code></b></summary>
209
+ <summary><b><code>{preset_path.name}</code></b></summary>
210
210
 
211
211
  ```yaml
212
212
  {loaded_preset._yaml_str}
@@ -218,11 +218,11 @@ def update_docs():
218
218
  update_md_files(f"BBOT {loaded_preset.name.upper()} PRESET EXPANDABLE", preset_yaml_expandable)
219
219
 
220
220
  content = []
221
- for yaml_file, (loaded_preset, category, preset_path, original_filename) in DEFAULT_PRESET.all_presets.items():
221
+ for _, (loaded_preset, category, preset_path, original_filename) in DEFAULT_PRESET.all_presets.items():
222
222
  yaml_str = loaded_preset._yaml_str
223
223
  indent = " " * 4
224
224
  yaml_str = f"\n{indent}".join(yaml_str.splitlines())
225
- filename = homedir_collapseuser(yaml_file)
225
+ filename = homedir_collapseuser(preset_path)
226
226
 
227
227
  num_modules = len(loaded_preset.scan_modules)
228
228
  modules = ", ".join(sorted([f"`{m}`" for m in loaded_preset.scan_modules]))
@@ -1418,3 +1418,17 @@ class TestExcavateBadURLs(ModuleTestBase):
1418
1418
 
1419
1419
  url_events = [e for e in events if e.type == "URL_UNVERIFIED"]
1420
1420
  assert sorted([e.data for e in url_events]) == sorted(["https://ssl/", "http://127.0.0.1:8888/"])
1421
+
1422
+
1423
+ class TestExcavateURL_InvalidPort(TestExcavate):
1424
+ modules_overrides = ["excavate", "httpx", "hunt"]
1425
+
1426
+ async def setup_before_prep(self, module_test):
1427
+ # Test URL with invalid port (greater than 65535)
1428
+ module_test.httpserver.expect_request("/").respond_with_data(
1429
+ '<div><img loading="lazy" src="https://asdffoo.test.notreal:9212952841/whatever.jpg" width="576" height="382" alt="...." /></div>'
1430
+ )
1431
+
1432
+ def check(self, module_test, events):
1433
+ # Verify we got the hostname
1434
+ assert any(e.data == "asdffoo.test.notreal" for e in events)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "bbot"
3
- version = "v2.4.2.6590rc"
3
+ version = "v2.4.2.6608rc"
4
4
  description = "OSINT automation for hackers."
5
5
  authors = [
6
6
  "TheTechromancer",
File without changes
File without changes
File without changes