bbot 2.4.0.6007rc0__tar.gz → 2.4.0.6031rc0__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 (433) hide show
  1. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/PKG-INFO +2 -2
  2. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/__init__.py +1 -1
  3. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/cli.py +7 -1
  4. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/config/logger.py +5 -10
  5. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/logger.py +9 -0
  6. bbot-2.4.0.6031rc0/bbot/modules/crt.py +40 -0
  7. bbot-2.4.0.6007rc0/bbot/modules/crt.py → bbot-2.4.0.6031rc0/bbot/modules/crt_db.py +8 -4
  8. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/deadly/nuclei.py +1 -1
  9. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/unarchive.py +3 -2
  10. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/websocket.py +12 -6
  11. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/trufflehog.py +1 -1
  12. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/scanner.py +3 -6
  13. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/bbot_fixtures.py +20 -0
  14. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_cli.py +12 -2
  15. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_python_api.py +10 -10
  16. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py +3 -3
  17. bbot-2.4.0.6031rc0/bbot/test/test_step_2/module_tests/test_module_crt.py +15 -0
  18. bbot-2.4.0.6007rc0/bbot/test/test_step_2/module_tests/test_module_crt.py → bbot-2.4.0.6031rc0/bbot/test/test_step_2/module_tests/test_module_crt_db.py +1 -3
  19. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py +5 -5
  20. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py +4 -7
  21. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/pyproject.toml +2 -2
  22. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/LICENSE +0 -0
  23. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/README.md +0 -0
  24. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/__init__.py +0 -0
  25. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/config/__init__.py +0 -0
  26. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/config/files.py +0 -0
  27. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/core.py +0 -0
  28. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/engine.py +0 -0
  29. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/event/__init__.py +0 -0
  30. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/event/base.py +0 -0
  31. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/event/helpers.py +0 -0
  32. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/flags.py +0 -0
  33. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/__init__.py +0 -0
  34. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/async_helpers.py +0 -0
  35. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/bloom.py +0 -0
  36. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/cache.py +0 -0
  37. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/command.py +0 -0
  38. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/depsinstaller/__init__.py +0 -0
  39. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/depsinstaller/installer.py +0 -0
  40. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/depsinstaller/sudo_askpass.py +0 -0
  41. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/diff.py +0 -0
  42. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/dns/__init__.py +0 -0
  43. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/dns/brute.py +0 -0
  44. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/dns/dns.py +0 -0
  45. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/dns/engine.py +0 -0
  46. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/dns/helpers.py +0 -0
  47. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/dns/mock.py +0 -0
  48. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/files.py +0 -0
  49. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/helper.py +0 -0
  50. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/interactsh.py +0 -0
  51. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/libmagic.py +0 -0
  52. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/misc.py +0 -0
  53. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/names_generator.py +0 -0
  54. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/ntlm.py +0 -0
  55. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/process.py +0 -0
  56. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/ratelimiter.py +0 -0
  57. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/regex.py +0 -0
  58. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/regexes.py +0 -0
  59. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/url.py +0 -0
  60. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/validators.py +0 -0
  61. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/web/__init__.py +0 -0
  62. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/web/client.py +0 -0
  63. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/web/engine.py +0 -0
  64. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/web/ssl_context.py +0 -0
  65. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/web/web.py +0 -0
  66. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/helpers/wordcloud.py +0 -0
  67. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/modules.py +0 -0
  68. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/multiprocess.py +0 -0
  69. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/core/shared_deps.py +0 -0
  70. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/db/sql/models.py +0 -0
  71. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/defaults.yml +0 -0
  72. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/errors.py +0 -0
  73. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/__init__.py +0 -0
  74. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/ajaxpro.py +0 -0
  75. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/anubisdb.py +0 -0
  76. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/apkpure.py +0 -0
  77. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/azure_realm.py +0 -0
  78. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/azure_tenant.py +0 -0
  79. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/baddns.py +0 -0
  80. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/baddns_direct.py +0 -0
  81. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/baddns_zone.py +0 -0
  82. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/badsecrets.py +0 -0
  83. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/base.py +0 -0
  84. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bevigil.py +0 -0
  85. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/binaryedge.py +0 -0
  86. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bucket_amazon.py +0 -0
  87. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bucket_azure.py +0 -0
  88. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bucket_digitalocean.py +0 -0
  89. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bucket_file_enum.py +0 -0
  90. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bucket_firebase.py +0 -0
  91. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bucket_google.py +0 -0
  92. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bufferoverrun.py +0 -0
  93. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/builtwith.py +0 -0
  94. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/bypass403.py +0 -0
  95. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/c99.py +0 -0
  96. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/censys.py +0 -0
  97. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/certspotter.py +0 -0
  98. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/chaos.py +0 -0
  99. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/code_repository.py +0 -0
  100. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/credshed.py +0 -0
  101. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/deadly/dastardly.py +0 -0
  102. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/deadly/ffuf.py +0 -0
  103. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/deadly/vhost.py +0 -0
  104. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dehashed.py +0 -0
  105. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/digitorus.py +0 -0
  106. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dnsbimi.py +0 -0
  107. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dnsbrute.py +0 -0
  108. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dnsbrute_mutations.py +0 -0
  109. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dnscaa.py +0 -0
  110. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dnscommonsrv.py +0 -0
  111. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dnsdumpster.py +0 -0
  112. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dnstlsrpt.py +0 -0
  113. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/docker_pull.py +0 -0
  114. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dockerhub.py +0 -0
  115. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/dotnetnuke.py +0 -0
  116. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/emailformat.py +0 -0
  117. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/extractous.py +0 -0
  118. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/ffuf_shortnames.py +0 -0
  119. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/filedownload.py +0 -0
  120. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/fingerprintx.py +0 -0
  121. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/fullhunt.py +0 -0
  122. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/generic_ssrf.py +0 -0
  123. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/git.py +0 -0
  124. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/git_clone.py +0 -0
  125. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/gitdumper.py +0 -0
  126. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/github_codesearch.py +0 -0
  127. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/github_org.py +0 -0
  128. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/github_workflows.py +0 -0
  129. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/gitlab.py +0 -0
  130. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/google_playstore.py +0 -0
  131. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/gowitness.py +0 -0
  132. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/hackertarget.py +0 -0
  133. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/host_header.py +0 -0
  134. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/httpx.py +0 -0
  135. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/hunt.py +0 -0
  136. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/hunterio.py +0 -0
  137. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/iis_shortnames.py +0 -0
  138. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/__init__.py +0 -0
  139. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/aggregate.py +0 -0
  140. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/base.py +0 -0
  141. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/cloudcheck.py +0 -0
  142. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/dnsresolve.py +0 -0
  143. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/excavate.py +0 -0
  144. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/internal/speculate.py +0 -0
  145. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/ip2location.py +0 -0
  146. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/ipneighbor.py +0 -0
  147. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/ipstack.py +0 -0
  148. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/jadx.py +0 -0
  149. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/leakix.py +0 -0
  150. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/myssl.py +0 -0
  151. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/newsletters.py +0 -0
  152. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/ntlm.py +0 -0
  153. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/oauth.py +0 -0
  154. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/otx.py +0 -0
  155. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/__init__.py +0 -0
  156. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/asset_inventory.py +0 -0
  157. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/base.py +0 -0
  158. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/csv.py +0 -0
  159. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/discord.py +0 -0
  160. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/emails.py +0 -0
  161. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/http.py +0 -0
  162. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/json.py +0 -0
  163. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/mysql.py +0 -0
  164. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/neo4j.py +0 -0
  165. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/nmap_xml.py +0 -0
  166. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/postgres.py +0 -0
  167. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/python.py +0 -0
  168. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/slack.py +0 -0
  169. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/splunk.py +0 -0
  170. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/sqlite.py +0 -0
  171. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/stdout.py +0 -0
  172. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/subdomains.py +0 -0
  173. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/teams.py +0 -0
  174. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/txt.py +0 -0
  175. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/web_parameters.py +0 -0
  176. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/output/web_report.py +0 -0
  177. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/paramminer_cookies.py +0 -0
  178. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/paramminer_getparams.py +0 -0
  179. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/paramminer_headers.py +0 -0
  180. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/passivetotal.py +0 -0
  181. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/pgp.py +0 -0
  182. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/portfilter.py +0 -0
  183. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/portscan.py +0 -0
  184. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/postman.py +0 -0
  185. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/postman_download.py +0 -0
  186. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/rapiddns.py +0 -0
  187. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/report/affiliates.py +0 -0
  188. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/report/asn.py +0 -0
  189. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/report/base.py +0 -0
  190. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/robots.py +0 -0
  191. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/securitytrails.py +0 -0
  192. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/securitytxt.py +0 -0
  193. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/shodan_dns.py +0 -0
  194. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/shodan_idb.py +0 -0
  195. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/sitedossier.py +0 -0
  196. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/skymem.py +0 -0
  197. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/smuggler.py +0 -0
  198. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/social.py +0 -0
  199. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/sslcert.py +0 -0
  200. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/subdomaincenter.py +0 -0
  201. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/subdomainradar.py +0 -0
  202. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/telerik.py +0 -0
  203. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/templates/bucket.py +0 -0
  204. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/templates/github.py +0 -0
  205. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/templates/postman.py +0 -0
  206. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/templates/shodan.py +0 -0
  207. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/templates/sql.py +0 -0
  208. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/templates/subdomain_enum.py +0 -0
  209. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/templates/webhook.py +0 -0
  210. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/trickest.py +0 -0
  211. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/url_manipulation.py +0 -0
  212. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/urlscan.py +0 -0
  213. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/viewdns.py +0 -0
  214. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/virustotal.py +0 -0
  215. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/wafw00f.py +0 -0
  216. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/wappalyzer.py +0 -0
  217. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/wayback.py +0 -0
  218. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/wpscan.py +0 -0
  219. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/modules/zoomeye.py +0 -0
  220. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/baddns-intense.yml +0 -0
  221. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/cloud-enum.yml +0 -0
  222. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/code-enum.yml +0 -0
  223. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/email-enum.yml +0 -0
  224. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/fast.yml +0 -0
  225. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/kitchen-sink.yml +0 -0
  226. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/nuclei/nuclei-budget.yml +0 -0
  227. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/nuclei/nuclei-intense.yml +0 -0
  228. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/nuclei/nuclei-technology.yml +0 -0
  229. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/nuclei/nuclei.yml +0 -0
  230. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/spider-intense.yml +0 -0
  231. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/spider.yml +0 -0
  232. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/subdomain-enum.yml +0 -0
  233. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/tech-detect.yml +0 -0
  234. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web/dirbust-heavy.yml +0 -0
  235. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web/dirbust-light.yml +0 -0
  236. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web/dotnet-audit.yml +0 -0
  237. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web/iis-shortnames.yml +0 -0
  238. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web/paramminer.yml +0 -0
  239. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web-basic.yml +0 -0
  240. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web-screenshots.yml +0 -0
  241. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/presets/web-thorough.yml +0 -0
  242. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/__init__.py +0 -0
  243. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/dispatcher.py +0 -0
  244. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/manager.py +0 -0
  245. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/preset/__init__.py +0 -0
  246. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/preset/args.py +0 -0
  247. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/preset/conditions.py +0 -0
  248. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/preset/environ.py +0 -0
  249. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/preset/path.py +0 -0
  250. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/preset/preset.py +0 -0
  251. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/stats.py +0 -0
  252. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scanner/target.py +0 -0
  253. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/scripts/docs.py +0 -0
  254. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/__init__.py +0 -0
  255. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/conftest.py +0 -0
  256. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/coverage.cfg +0 -0
  257. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/fastapi_test.py +0 -0
  258. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/owasp_mastg.apk +0 -0
  259. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/run_tests.sh +0 -0
  260. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test.conf +0 -0
  261. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_output.ndjson +0 -0
  262. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/__init__.py +0 -0
  263. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test__module__tests.py +0 -0
  264. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_bbot_fastapi.py +0 -0
  265. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_bloom_filter.py +0 -0
  266. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_command.py +0 -0
  267. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_config.py +0 -0
  268. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_depsinstaller.py +0 -0
  269. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_dns.py +0 -0
  270. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_docs.py +0 -0
  271. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_engine.py +0 -0
  272. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_events.py +0 -0
  273. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_files.py +0 -0
  274. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_helpers.py +0 -0
  275. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_manager_deduplication.py +0 -0
  276. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_manager_scope_accuracy.py +0 -0
  277. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_modules_basic.py +0 -0
  278. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_presets.py +0 -0
  279. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_regexes.py +0 -0
  280. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_scan.py +0 -0
  281. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_scope.py +0 -0
  282. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_target.py +0 -0
  283. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_1/test_web.py +0 -0
  284. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/__init__.py +0 -0
  285. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/__init__.py +0 -0
  286. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/base.py +0 -0
  287. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_affiliates.py +0 -0
  288. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_aggregate.py +0 -0
  289. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_ajaxpro.py +0 -0
  290. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_anubisdb.py +0 -0
  291. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_apkpure.py +0 -0
  292. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_asn.py +0 -0
  293. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -0
  294. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_azure_realm.py +0 -0
  295. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_azure_tenant.py +0 -0
  296. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_baddns.py +0 -0
  297. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +0 -0
  298. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_zone.py +0 -0
  299. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_badsecrets.py +0 -0
  300. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bevigil.py +0 -0
  301. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_binaryedge.py +0 -0
  302. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +0 -0
  303. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +0 -0
  304. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_digitalocean.py +0 -0
  305. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_file_enum.py +0 -0
  306. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_firebase.py +0 -0
  307. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_google.py +0 -0
  308. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +0 -0
  309. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_builtwith.py +0 -0
  310. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_bypass403.py +0 -0
  311. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_c99.py +0 -0
  312. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_certspotter.py +0 -0
  313. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_chaos.py +0 -0
  314. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +0 -0
  315. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_code_repository.py +0 -0
  316. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_credshed.py +0 -0
  317. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_csv.py +0 -0
  318. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dastardly.py +0 -0
  319. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dehashed.py +0 -0
  320. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_digitorus.py +0 -0
  321. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_discord.py +0 -0
  322. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +0 -0
  323. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +0 -0
  324. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +0 -0
  325. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnscaa.py +0 -0
  326. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +0 -0
  327. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +0 -0
  328. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnsresolve.py +0 -0
  329. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dnstlsrpt.py +0 -0
  330. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_docker_pull.py +0 -0
  331. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dockerhub.py +0 -0
  332. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -0
  333. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_emailformat.py +0 -0
  334. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_emails.py +0 -0
  335. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_extractous.py +0 -0
  336. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf.py +0 -0
  337. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +0 -0
  338. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_filedownload.py +0 -0
  339. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_fingerprintx.py +0 -0
  340. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_fullhunt.py +0 -0
  341. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_generic_ssrf.py +0 -0
  342. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_git.py +0 -0
  343. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_git_clone.py +0 -0
  344. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_gitdumper.py +0 -0
  345. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_github_codesearch.py +0 -0
  346. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_github_org.py +0 -0
  347. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_github_workflows.py +0 -0
  348. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_gitlab.py +0 -0
  349. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_google_playstore.py +0 -0
  350. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_gowitness.py +0 -0
  351. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_hackertarget.py +0 -0
  352. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_host_header.py +0 -0
  353. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_http.py +0 -0
  354. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_httpx.py +0 -0
  355. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_hunt.py +0 -0
  356. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_hunterio.py +0 -0
  357. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_iis_shortnames.py +0 -0
  358. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_ip2location.py +0 -0
  359. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_ipneighbor.py +0 -0
  360. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_ipstack.py +0 -0
  361. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_jadx.py +0 -0
  362. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_json.py +0 -0
  363. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_leakix.py +0 -0
  364. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_mysql.py +0 -0
  365. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_myssl.py +0 -0
  366. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_neo4j.py +0 -0
  367. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_newsletters.py +0 -0
  368. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_nmap_xml.py +0 -0
  369. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_ntlm.py +0 -0
  370. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_oauth.py +0 -0
  371. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_otx.py +0 -0
  372. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +0 -0
  373. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -0
  374. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +0 -0
  375. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_passivetotal.py +0 -0
  376. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_pgp.py +0 -0
  377. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_portfilter.py +0 -0
  378. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_portscan.py +0 -0
  379. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_postgres.py +0 -0
  380. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_postman.py +0 -0
  381. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_postman_download.py +0 -0
  382. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_python.py +0 -0
  383. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_rapiddns.py +0 -0
  384. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_robots.py +0 -0
  385. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_securitytrails.py +0 -0
  386. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_securitytxt.py +0 -0
  387. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +0 -0
  388. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_idb.py +0 -0
  389. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_sitedossier.py +0 -0
  390. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_skymem.py +0 -0
  391. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_slack.py +0 -0
  392. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_smuggler.py +0 -0
  393. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_social.py +0 -0
  394. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_speculate.py +0 -0
  395. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_splunk.py +0 -0
  396. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_sqlite.py +0 -0
  397. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_sslcert.py +0 -0
  398. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_stdout.py +0 -0
  399. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +0 -0
  400. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +0 -0
  401. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_subdomains.py +0 -0
  402. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_teams.py +0 -0
  403. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_telerik.py +0 -0
  404. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_trickest.py +0 -0
  405. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_trufflehog.py +0 -0
  406. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_txt.py +0 -0
  407. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_unarchive.py +0 -0
  408. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_url_manipulation.py +0 -0
  409. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_urlscan.py +0 -0
  410. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_vhost.py +0 -0
  411. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_viewdns.py +0 -0
  412. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_virustotal.py +0 -0
  413. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_wafw00f.py +0 -0
  414. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_wappalyzer.py +0 -0
  415. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_wayback.py +0 -0
  416. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_web_parameters.py +0 -0
  417. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_web_report.py +0 -0
  418. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_websocket.py +0 -0
  419. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_wpscan.py +0 -0
  420. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/module_tests/test_module_zoomeye.py +0 -0
  421. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/template_tests/__init__.py +0 -0
  422. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +0 -0
  423. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/testsslcert.pem +0 -0
  424. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/test/testsslkey.pem +0 -0
  425. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/devops_mutations.txt +0 -0
  426. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/ms_on_prem_subdomains.txt +0 -0
  427. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/nameservers.txt +0 -0
  428. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/paramminer_headers.txt +0 -0
  429. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/paramminer_parameters.txt +0 -0
  430. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +0 -0
  431. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/top_open_ports_nmap.txt +0 -0
  432. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/bbot/wordlists/valid_url_schemes.txt +0 -0
  433. {bbot-2.4.0.6007rc0 → bbot-2.4.0.6031rc0}/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.0.6007rc0
3
+ Version: 2.4.0.6031rc0
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
@@ -42,7 +42,7 @@ Requires-Dist: socksio (>=1.0.0,<2.0.0)
42
42
  Requires-Dist: tabulate (==0.8.10)
43
43
  Requires-Dist: tldextract (>=5.1.1,<6.0.0)
44
44
  Requires-Dist: unidecode (>=1.3.8,<2.0.0)
45
- Requires-Dist: websockets (>=11.0.2,<16.0.0)
45
+ Requires-Dist: websockets (>=14.0.0,<16.0.0)
46
46
  Requires-Dist: wordninja (>=2.0.0,<3.0.0)
47
47
  Requires-Dist: xmltojson (>=2.0.2,<3.0.0)
48
48
  Requires-Dist: yara-python (>=4.5.1,<5.0.0)
@@ -1,4 +1,4 @@
1
1
  # version placeholder (replaced by poetry-dynamic-versioning)
2
- __version__ = "v2.4.0.6007rc"
2
+ __version__ = "v2.4.0.6031rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
+ import io
3
4
  import sys
4
5
  import logging
5
6
  import multiprocessing
@@ -240,7 +241,12 @@ async def _main():
240
241
 
241
242
  # set stdout and stderr to blocking mode
242
243
  # this is needed to prevent BlockingIOErrors in logging etc.
243
- fds = [sys.stdout.fileno(), sys.stderr.fileno()]
244
+ fds = []
245
+ for stream in [sys.stdout, sys.stderr]:
246
+ try:
247
+ fds.append(stream.fileno())
248
+ except io.UnsupportedOperation:
249
+ log.debug(f"Can't get fileno for {stream}")
244
250
  for fd in fds:
245
251
  flags = fcntl.fcntl(fd, fcntl.F_GETFL)
246
252
  fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~os.O_NONBLOCK)
@@ -9,9 +9,8 @@ from pathlib import Path
9
9
  from contextlib import suppress
10
10
 
11
11
  from ..helpers.misc import mkdir, error_and_exit
12
- from ...logger import colorize, loglevel_mapping
13
12
  from ..multiprocess import SHARED_INTERPRETER_STATE
14
-
13
+ from ...logger import colorize, loglevel_mapping, GzipRotatingFileHandler
15
14
 
16
15
  debug_format = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s %(filename)s:%(lineno)s %(message)s")
17
16
 
@@ -216,15 +215,11 @@ class BBOTLogger:
216
215
  if not mkdir(log_dir, raise_error=False):
217
216
  error_and_exit(f"Failure creating or error writing to BBOT logs directory ({log_dir})")
218
217
 
219
- # Main log file
220
- main_handler = logging.handlers.TimedRotatingFileHandler(
221
- f"{log_dir}/bbot.log", when="d", interval=1, backupCount=14
222
- )
218
+ # Main log file (compressed)
219
+ main_handler = GzipRotatingFileHandler(f"{log_dir}/bbot.log", when="d", interval=1, backupCount=14)
223
220
 
224
- # Separate log file for debugging
225
- debug_handler = logging.handlers.TimedRotatingFileHandler(
226
- f"{log_dir}/bbot.debug.log", when="d", interval=1, backupCount=14
227
- )
221
+ # Separate log file for debugging (compressed)
222
+ debug_handler = GzipRotatingFileHandler(f"{log_dir}/bbot.debug.log", when="d", interval=1, backupCount=14)
228
223
 
229
224
  # Log to stderr
230
225
  stderr_handler = logging.StreamHandler(sys.stderr)
@@ -1,4 +1,5 @@
1
1
  import sys
2
+ import logging.handlers
2
3
 
3
4
  loglevel_mapping = {
4
5
  "DEBUG": "DBUG",
@@ -50,3 +51,11 @@ def log_to_stderr(msg, level="INFO", logname=True):
50
51
  if logname:
51
52
  msg = f"{levelshort} {msg}"
52
53
  print(msg, file=sys.stderr)
54
+
55
+
56
+ # Create a compressed file handler for logs
57
+ class GzipRotatingFileHandler(logging.handlers.TimedRotatingFileHandler):
58
+ def _open(self):
59
+ import gzip
60
+
61
+ return gzip.open(f"{self.baseFilename}.gz", mode="at", encoding=self.encoding)
@@ -0,0 +1,40 @@
1
+ from bbot.modules.templates.subdomain_enum import subdomain_enum
2
+
3
+
4
+ class crt(subdomain_enum):
5
+ flags = ["subdomain-enum", "passive", "safe"]
6
+ watched_events = ["DNS_NAME"]
7
+ produced_events = ["DNS_NAME"]
8
+ meta = {
9
+ "description": "Query crt.sh (certificate transparency) for subdomains",
10
+ "created_date": "2022-05-13",
11
+ "author": "@TheTechromancer",
12
+ }
13
+
14
+ base_url = "https://crt.sh"
15
+ reject_wildcards = False
16
+
17
+ async def setup(self):
18
+ self.cert_ids = set()
19
+ return await super().setup()
20
+
21
+ async def request_url(self, query):
22
+ params = {"q": f"%.{query}", "output": "json"}
23
+ url = self.helpers.add_get_params(self.base_url, params).geturl()
24
+ return await self.api_request(url, timeout=self.http_timeout + 30)
25
+
26
+ async def parse_results(self, r, query):
27
+ results = set()
28
+ j = r.json()
29
+ for cert_info in j:
30
+ if not type(cert_info) == dict:
31
+ continue
32
+ cert_id = cert_info.get("id")
33
+ if cert_id:
34
+ if hash(cert_id) not in self.cert_ids:
35
+ self.cert_ids.add(hash(cert_id))
36
+ domain = cert_info.get("name_value")
37
+ if domain:
38
+ for d in domain.splitlines():
39
+ results.add(d.lower())
40
+ return results
@@ -4,13 +4,13 @@ import asyncpg
4
4
  from bbot.modules.templates.subdomain_enum import subdomain_enum
5
5
 
6
6
 
7
- class crt(subdomain_enum):
7
+ class crt_db(subdomain_enum):
8
8
  flags = ["subdomain-enum", "passive", "safe"]
9
9
  watched_events = ["DNS_NAME"]
10
10
  produced_events = ["DNS_NAME"]
11
11
  meta = {
12
- "description": "Query crt.sh (certificate transparency) for subdomains",
13
- "created_date": "2022-05-13",
12
+ "description": "Query crt.sh (certificate transparency) for subdomains via PostgreSQL",
13
+ "created_date": "2025-03-27",
14
14
  "author": "@TheTechromancer",
15
15
  }
16
16
 
@@ -29,7 +29,11 @@ class crt(subdomain_enum):
29
29
  async def request_url(self, query):
30
30
  if not self.db_conn:
31
31
  self.db_conn = await asyncpg.connect(
32
- host=self.db_host, port=self.db_port, user=self.db_user, database=self.db_name
32
+ host=self.db_host,
33
+ port=self.db_port,
34
+ user=self.db_user,
35
+ database=self.db_name,
36
+ statement_cache_size=0, # Disable automatic statement preparation
33
37
  )
34
38
 
35
39
  sql = """
@@ -15,7 +15,7 @@ class nuclei(BaseModule):
15
15
  }
16
16
 
17
17
  options = {
18
- "version": "3.3.10",
18
+ "version": "3.4.1",
19
19
  "tags": "",
20
20
  "templates": "",
21
21
  "severity": "",
@@ -29,8 +29,9 @@ class unarchive(BaseInternalModule):
29
29
 
30
30
  async def filter_event(self, event):
31
31
  if "file" in event.tags:
32
- if event.data["magic_mime_type"] in self.ignore_compressions:
33
- return False, f"Ignoring file type: {event.data['magic_mime_type']}, {event.data['path']}"
32
+ magic_mime_type = event.data.get("magic_mime_type", "")
33
+ if magic_mime_type in self.ignore_compressions:
34
+ return False, f"Ignoring file type: {magic_mime_type}, {event.data['path']}"
34
35
  if "compression" in event.data:
35
36
  if not event.data["compression"] in self.compression_methods:
36
37
  return (
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import asyncio
3
+ import ssl
3
4
  import websockets
4
5
 
5
6
  from bbot.modules.output.base import BaseOutputModule
@@ -8,11 +9,12 @@ from bbot.modules.output.base import BaseOutputModule
8
9
  class Websocket(BaseOutputModule):
9
10
  watched_events = ["*"]
10
11
  meta = {"description": "Output to websockets", "created_date": "2022-04-15", "author": "@TheTechromancer"}
11
- options = {"url": "", "token": "", "preserve_graph": True}
12
+ options = {"url": "", "token": "", "preserve_graph": True, "ignore_ssl": False}
12
13
  options_desc = {
13
14
  "url": "Web URL",
14
15
  "token": "Authorization Bearer token",
15
16
  "preserve_graph": "Preserve full chains of events in the graph (prevents orphans)",
17
+ "ignore_ssl": "Ignores all Websocket SSL related errors (like Self-Signed Certificates, etc.)",
16
18
  }
17
19
 
18
20
  async def setup(self):
@@ -31,12 +33,16 @@ class Websocket(BaseOutputModule):
31
33
  if self._ws is None or rebuild:
32
34
  kwargs = {"close_timeout": 0.5}
33
35
  if self.token:
34
- kwargs.update({"extra_headers": {"Authorization": f"Bearer {self.token}"}})
35
- verbs = ("Building", "Built")
36
- if rebuild:
37
- verbs = ("Rebuilding", "Rebuilt")
36
+ kwargs.update({"additional_headers": {"Authorization": f"Bearer {self.token}"}})
37
+ verbs = ("Building", "Built") if not rebuild else ("Rebuilding", "Rebuilt")
38
38
  self.debug(f"{verbs[0]} websocket connection to {self.url}")
39
- self._ws = await websockets.connect(self.url, **kwargs)
39
+ if self.config.get("ignore_ssl", False):
40
+ ssl_context = ssl.create_default_context()
41
+ ssl_context.check_hostname = False
42
+ ssl_context.verify_mode = ssl.CERT_NONE
43
+ self._ws = await websockets.connect(self.url, ssl=ssl_context, **kwargs)
44
+ else:
45
+ self._ws = await websockets.connect(self.url, **kwargs)
40
46
  self.debug(f"{verbs[1]} websocket connection to {self.url}")
41
47
  return self._ws
42
48
 
@@ -14,7 +14,7 @@ class trufflehog(BaseModule):
14
14
  }
15
15
 
16
16
  options = {
17
- "version": "3.88.15",
17
+ "version": "3.88.20",
18
18
  "config": "",
19
19
  "only_verified": True,
20
20
  "concurrency": 8,
@@ -14,6 +14,7 @@ from bbot.core.event import make_event
14
14
  from .manager import ScanIngress, ScanEgress
15
15
  from bbot.core.helpers.misc import sha1, rand_string
16
16
  from bbot.core.helpers.names_generator import random_name
17
+ from bbot.core.config.logger import GzipRotatingFileHandler
17
18
  from bbot.core.multiprocess import SHARED_INTERPRETER_STATE
18
19
  from bbot.core.helpers.async_helpers import async_to_sync_gen
19
20
  from bbot.errors import BBOTError, ScanError, ValidationError
@@ -1228,13 +1229,9 @@ class Scanner:
1228
1229
  def _log_handlers(self):
1229
1230
  if self.__log_handlers is None:
1230
1231
  self.helpers.mkdir(self.home)
1231
- main_handler = logging.handlers.TimedRotatingFileHandler(
1232
- str(self.home / "scan.log"), when="d", interval=1, backupCount=14
1233
- )
1232
+ main_handler = GzipRotatingFileHandler(str(self.home / "scan.log"), when="d", interval=1, backupCount=14)
1234
1233
  main_handler.addFilter(lambda x: x.levelno != logging.TRACE and x.levelno >= logging.VERBOSE)
1235
- debug_handler = logging.handlers.TimedRotatingFileHandler(
1236
- str(self.home / "debug.log"), when="d", interval=1, backupCount=14
1237
- )
1234
+ debug_handler = GzipRotatingFileHandler(str(self.home / "debug.log"), when="d", interval=1, backupCount=14)
1238
1235
  debug_handler.addFilter(lambda x: x.levelno >= logging.DEBUG)
1239
1236
  self.__log_handlers = [main_handler, debug_handler]
1240
1237
  return self.__log_handlers
@@ -1,5 +1,6 @@
1
1
  import os # noqa
2
2
  import sys
3
+ import zlib
3
4
  import pytest
4
5
  import shutil # noqa
5
6
  import asyncio # noqa
@@ -49,6 +50,25 @@ def tempapkfile():
49
50
  return apk_file
50
51
 
51
52
 
53
+ def read_gzipped_file(file_path):
54
+ """
55
+ Read and decompress a gzipped file, tolerating missing end markers.
56
+
57
+ Args:
58
+ file_path: Path to the gzipped file
59
+
60
+ Returns:
61
+ The decompressed content as a string
62
+ """
63
+ with open(file_path, "rb") as f:
64
+ data = f.read()
65
+ decompressor = zlib.decompressobj(
66
+ 16 + zlib.MAX_WBITS
67
+ ) # This is needed because the file doesn't have an end marker
68
+ content = decompressor.decompress(data).decode("utf-8", errors="ignore")
69
+ return content
70
+
71
+
52
72
  @pytest.fixture
53
73
  def clean_default_config(monkeypatch):
54
74
  clean_config = OmegaConf.merge(
@@ -129,6 +129,11 @@ async def test_cli_scan(monkeypatch):
129
129
  dns_success = True
130
130
  assert ip_success and dns_success, "IP_ADDRESS and/or DNS_NAME are not present in output.txt"
131
131
 
132
+ # Check for gzipped scan log file
133
+ scan_log_gz = scan_home / "scan.log.gz"
134
+ assert scan_log_gz.is_file(), "scan.log.gz not found"
135
+ assert "[INFO]" in read_gzipped_file(scan_log_gz)
136
+
132
137
 
133
138
  @pytest.mark.asyncio
134
139
  async def test_cli_args(monkeypatch, caplog, capsys, clean_default_config):
@@ -187,14 +192,19 @@ async def test_cli_args(monkeypatch, caplog, capsys, clean_default_config):
187
192
  output_dir = bbot_test_dir / "bbot_cli_args_output"
188
193
  scan_name = "bbot_cli_args_scan_name"
189
194
  scan_dir = output_dir / scan_name
190
- assert not output_dir.exists()
195
+ if output_dir.exists():
196
+ shutil.rmtree(output_dir)
191
197
  monkeypatch.setattr("sys.argv", ["bbot", "-o", str(output_dir), "-n", scan_name, "-y"])
192
198
  result = await cli._main()
193
199
  assert result is True
194
200
  assert output_dir.is_dir()
195
201
  assert scan_dir.is_dir()
196
202
  assert "[SCAN]" in open(scan_dir / "output.txt").read()
197
- assert "[INFO]" in open(scan_dir / "scan.log").read()
203
+
204
+ # Check for gzipped scan log file
205
+ scan_log_gz = scan_dir / "scan.log.gz"
206
+ assert scan_log_gz.is_file(), "scan.log.gz not found"
207
+ assert "[INFO]" in read_gzipped_file(scan_log_gz)
198
208
  shutil.rmtree(output_dir)
199
209
 
200
210
  # list module options
@@ -17,28 +17,28 @@ async def test_python_api():
17
17
  scan_home = scan2.helpers.scans_dir / "python_api_test"
18
18
  out_file = scan_home / "output.json"
19
19
  assert list(scan2.helpers.read_file(out_file))
20
- scan_log = scan_home / "scan.log"
21
- debug_log = scan_home / "debug.log"
20
+ scan_log = scan_home / "scan.log.gz"
21
+ debug_log = scan_home / "debug.log.gz"
22
22
  assert scan_log.is_file()
23
- assert "python_api_test" in open(scan_log).read()
23
+ assert "python_api_test" in read_gzipped_file(scan_log)
24
24
  assert debug_log.is_file()
25
- assert "python_api_test" in open(debug_log).read()
25
+ assert "python_api_test" in read_gzipped_file(debug_log)
26
26
 
27
27
  scan3 = Scanner("127.0.0.1", output_modules=["json"], scan_name="scan_logging_test")
28
28
  await scan3.async_start_without_generator()
29
29
 
30
- assert "scan_logging_test" not in open(scan_log).read()
31
- assert "scan_logging_test" not in open(debug_log).read()
30
+ assert "scan_logging_test" not in read_gzipped_file(scan_log)
31
+ assert "scan_logging_test" not in read_gzipped_file(debug_log)
32
32
 
33
33
  scan_home = scan3.helpers.scans_dir / "scan_logging_test"
34
34
  out_file = scan_home / "output.json"
35
35
  assert list(scan3.helpers.read_file(out_file))
36
- scan_log = scan_home / "scan.log"
37
- debug_log = scan_home / "debug.log"
36
+ scan_log = scan_home / "scan.log.gz"
37
+ debug_log = scan_home / "debug.log.gz"
38
38
  assert scan_log.is_file()
39
39
  assert debug_log.is_file()
40
- assert "scan_logging_test" in open(scan_log).read()
41
- assert "scan_logging_test" in open(debug_log).read()
40
+ assert "scan_logging_test" in read_gzipped_file(scan_log)
41
+ assert "scan_logging_test" in read_gzipped_file(debug_log)
42
42
 
43
43
  # make sure config loads properly
44
44
  bbot_home = "/tmp/.bbot_python_api_test"
@@ -7,7 +7,7 @@ class TestCensys(ModuleTestBase):
7
7
  async def setup_before_prep(self, module_test):
8
8
  module_test.httpx_mock.add_response(
9
9
  url="https://search.censys.io/api/v1/account",
10
- match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
10
+ # match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
11
11
  json={
12
12
  "email": "info@blacklanternsecurity.com",
13
13
  "login": "nope",
@@ -18,7 +18,7 @@ class TestCensys(ModuleTestBase):
18
18
  )
19
19
  module_test.httpx_mock.add_response(
20
20
  url="https://search.censys.io/api/v2/certificates/search",
21
- match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
21
+ # match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
22
22
  match_content=b'{"q": "names: blacklanternsecurity.com", "per_page": 100}',
23
23
  json={
24
24
  "code": 200,
@@ -47,7 +47,7 @@ class TestCensys(ModuleTestBase):
47
47
  )
48
48
  module_test.httpx_mock.add_response(
49
49
  url="https://search.censys.io/api/v2/certificates/search",
50
- match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
50
+ # match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
51
51
  match_content=b'{"q": "names: blacklanternsecurity.com", "per_page": 100, "cursor": "NextToken"}',
52
52
  json={
53
53
  "code": 200,
@@ -0,0 +1,15 @@
1
+ from .base import ModuleTestBase
2
+
3
+
4
+ class TestCRT(ModuleTestBase):
5
+ async def setup_after_prep(self, module_test):
6
+ module_test.module.abort_if = lambda e: False
7
+ for t in self.targets:
8
+ module_test.httpx_mock.add_response(
9
+ url="https://crt.sh?q=%25.blacklanternsecurity.com&output=json",
10
+ json=[{"id": 1, "name_value": "asdf.blacklanternsecurity.com\nzzzz.blacklanternsecurity.com"}],
11
+ )
12
+
13
+ def check(self, module_test, events):
14
+ assert any(e.data == "asdf.blacklanternsecurity.com" for e in events), "Failed to detect subdomain"
15
+ assert any(e.data == "zzzz.blacklanternsecurity.com" for e in events), "Failed to detect subdomain"
@@ -1,11 +1,10 @@
1
1
  from .base import ModuleTestBase
2
2
 
3
3
 
4
- class TestCRT(ModuleTestBase):
4
+ class TestCRT_DB(ModuleTestBase):
5
5
  async def setup_after_prep(self, module_test):
6
6
  class AsyncMock:
7
7
  async def fetch(self, *args, **kwargs):
8
- print("mock_fetch", args, kwargs)
9
8
  return [
10
9
  {"name_value": "asdf.blacklanternsecurity.com"},
11
10
  {"name_value": "zzzz.blacklanternsecurity.com"},
@@ -15,7 +14,6 @@ class TestCRT(ModuleTestBase):
15
14
  pass
16
15
 
17
16
  async def mock_connect(*args, **kwargs):
18
- print("mock_connect", args, kwargs)
19
17
  return AsyncMock()
20
18
 
21
19
  module_test.monkeypatch.setattr("asyncpg.connect", mock_connect)
@@ -1,3 +1,4 @@
1
+ from ...bbot_fixtures import *
1
2
  from bbot.modules.base import BaseModule
2
3
  from .base import ModuleTestBase, tempwordlist
3
4
 
@@ -1033,13 +1034,12 @@ class TestExcavateBadURLs(ModuleTestBase):
1033
1034
  module_test.set_expect_requests({"uri": "/"}, {"response_data": self.bad_url_data})
1034
1035
 
1035
1036
  def check(self, module_test, events):
1036
- log_file = module_test.scan.home / "debug.log"
1037
- log_text = log_file.read_text()
1037
+ debug_log_content = read_gzipped_file(module_test.scan.home / "debug.log.gz")
1038
1038
  # make sure our logging is working
1039
- assert "Setting scan status to STARTING" in log_text
1039
+ assert "Setting scan status to STARTING" in debug_log_content
1040
1040
  # make sure we don't have any URL validation errors
1041
- assert "Error Parsing reconstructed URL" not in log_text
1042
- assert "Error sanitizing event data" not in log_text
1041
+ assert "Error Parsing reconstructed URL" not in debug_log_content
1042
+ assert "Error sanitizing event data" not in debug_log_content
1043
1043
 
1044
1044
  url_events = [e for e in events if e.type == "URL_UNVERIFIED"]
1045
1045
  assert sorted([e.data for e in url_events]) == sorted(["https://ssl/", "http://127.0.0.1:8888/"])
@@ -1,3 +1,4 @@
1
+ from ...bbot_fixtures import *
1
2
  from .base import ModuleTestBase
2
3
 
3
4
 
@@ -100,9 +101,7 @@ class TestNucleiTechnology(TestNucleiManual):
100
101
 
101
102
  def check(self, module_test, events):
102
103
  assert any(e.type == "TECHNOLOGY" and "apache" in e.data["technology"].lower() for e in events)
103
-
104
- with open(module_test.scan.home / "debug.log") as f:
105
- assert "Using Interactsh Server" not in f.read()
104
+ assert "Using Interactsh Server" not in read_gzipped_file(module_test.scan.home / "debug.log.gz")
106
105
 
107
106
 
108
107
  class TestNucleiBudget(TestNucleiManual):
@@ -141,8 +140,7 @@ class TestNucleiRetries(TestNucleiManual):
141
140
  module_test.set_expect_requests(expect_args=expect_args, respond_args=respond_args)
142
141
 
143
142
  def check(self, module_test, events):
144
- with open(module_test.scan.home / "debug.log") as f:
145
- assert "-retries 0" in f.read()
143
+ assert "-retries 0" in read_gzipped_file(module_test.scan.home / "debug.log.gz")
146
144
 
147
145
 
148
146
  class TestNucleiRetriesCustom(TestNucleiRetries):
@@ -152,8 +150,7 @@ class TestNucleiRetriesCustom(TestNucleiRetries):
152
150
  }
153
151
 
154
152
  def check(self, module_test, events):
155
- with open(module_test.scan.home / "debug.log") as f:
156
- assert "-retries 1" in f.read()
153
+ assert "-retries 1" in read_gzipped_file(module_test.scan.home / "debug.log.gz")
157
154
 
158
155
 
159
156
  class TestNucleiCustomHeaders(TestNucleiManual):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "bbot"
3
- version = "v2.4.0.6007rc"
3
+ version = "v2.4.0.6031rc"
4
4
  description = "OSINT automation for hackers."
5
5
  authors = [
6
6
  "TheTechromancer",
@@ -35,7 +35,7 @@ xmltojson = "^2.0.2"
35
35
  pycryptodome = "^3.17"
36
36
  idna = "^3.4"
37
37
  tabulate = "0.8.10"
38
- websockets = ">=11.0.2,<16.0.0"
38
+ websockets = ">=14.0.0,<16.0.0"
39
39
  pyjwt = "^2.7.0"
40
40
  beautifulsoup4 = "^4.12.2"
41
41
  lxml = ">=4.9.2,<6.0.0"
File without changes
File without changes