bbot 2.3.0.5336rc0__tar.gz → 2.3.0.5362rc0__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 (418) hide show
  1. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/PKG-INFO +21 -3
  2. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/README.md +20 -2
  3. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/__init__.py +1 -1
  4. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/depsinstaller/installer.py +2 -1
  5. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/db/sql/models.py +5 -5
  6. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/defaults.yml +7 -8
  7. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internal/cloudcheck.py +20 -5
  8. bbot-2.3.0.5362rc0/bbot/modules/output/mysql.py +51 -0
  9. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/portscan.py +28 -2
  10. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/templates/sql.py +5 -0
  11. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/templates/subdomain_enum.py +1 -1
  12. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test.conf +2 -0
  13. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +4 -0
  14. bbot-2.3.0.5362rc0/bbot/test/test_step_2/module_tests/test_module_mysql.py +76 -0
  15. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_portscan.py +6 -4
  16. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/pyproject.toml +1 -1
  17. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/LICENSE +0 -0
  18. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/cli.py +0 -0
  19. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/__init__.py +0 -0
  20. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/config/__init__.py +0 -0
  21. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/config/files.py +0 -0
  22. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/config/logger.py +0 -0
  23. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/core.py +0 -0
  24. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/engine.py +0 -0
  25. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/event/__init__.py +0 -0
  26. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/event/base.py +0 -0
  27. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/event/helpers.py +0 -0
  28. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/flags.py +0 -0
  29. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/__init__.py +0 -0
  30. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/async_helpers.py +0 -0
  31. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/bloom.py +0 -0
  32. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/cache.py +0 -0
  33. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/command.py +0 -0
  34. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/depsinstaller/__init__.py +0 -0
  35. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/depsinstaller/sudo_askpass.py +0 -0
  36. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/diff.py +0 -0
  37. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/dns/__init__.py +0 -0
  38. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/dns/brute.py +0 -0
  39. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/dns/dns.py +0 -0
  40. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/dns/engine.py +0 -0
  41. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/dns/helpers.py +0 -0
  42. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/dns/mock.py +0 -0
  43. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/files.py +0 -0
  44. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/helper.py +0 -0
  45. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/interactsh.py +0 -0
  46. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/libmagic.py +0 -0
  47. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/misc.py +0 -0
  48. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/names_generator.py +0 -0
  49. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/ntlm.py +0 -0
  50. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/process.py +0 -0
  51. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/ratelimiter.py +0 -0
  52. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/regex.py +0 -0
  53. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/regexes.py +0 -0
  54. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/url.py +0 -0
  55. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/validators.py +0 -0
  56. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/web/__init__.py +0 -0
  57. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/web/client.py +0 -0
  58. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/web/engine.py +0 -0
  59. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/web/ssl_context.py +0 -0
  60. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/web/web.py +0 -0
  61. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/helpers/wordcloud.py +0 -0
  62. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/modules.py +0 -0
  63. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/multiprocess.py +0 -0
  64. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/core/shared_deps.py +0 -0
  65. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/errors.py +0 -0
  66. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/logger.py +0 -0
  67. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/__init__.py +0 -0
  68. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/ajaxpro.py +0 -0
  69. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/anubisdb.py +0 -0
  70. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/apkpure.py +0 -0
  71. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/azure_realm.py +0 -0
  72. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/azure_tenant.py +0 -0
  73. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/baddns.py +0 -0
  74. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/baddns_direct.py +0 -0
  75. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/baddns_zone.py +0 -0
  76. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/badsecrets.py +0 -0
  77. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/base.py +0 -0
  78. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bevigil.py +0 -0
  79. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/binaryedge.py +0 -0
  80. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bucket_amazon.py +0 -0
  81. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bucket_azure.py +0 -0
  82. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bucket_digitalocean.py +0 -0
  83. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bucket_file_enum.py +0 -0
  84. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bucket_firebase.py +0 -0
  85. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bucket_google.py +0 -0
  86. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bufferoverrun.py +0 -0
  87. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/builtwith.py +0 -0
  88. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/bypass403.py +0 -0
  89. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/c99.py +0 -0
  90. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/censys.py +0 -0
  91. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/certspotter.py +0 -0
  92. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/chaos.py +0 -0
  93. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/code_repository.py +0 -0
  94. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/columbus.py +0 -0
  95. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/credshed.py +0 -0
  96. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/crt.py +0 -0
  97. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/deadly/dastardly.py +0 -0
  98. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/deadly/ffuf.py +0 -0
  99. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/deadly/nuclei.py +0 -0
  100. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/deadly/vhost.py +0 -0
  101. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dehashed.py +0 -0
  102. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/digitorus.py +0 -0
  103. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dnsbimi.py +0 -0
  104. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dnsbrute.py +0 -0
  105. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dnsbrute_mutations.py +0 -0
  106. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dnscaa.py +0 -0
  107. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dnscommonsrv.py +0 -0
  108. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dnsdumpster.py +0 -0
  109. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/docker_pull.py +0 -0
  110. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dockerhub.py +0 -0
  111. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/dotnetnuke.py +0 -0
  112. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/emailformat.py +0 -0
  113. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/extractous.py +0 -0
  114. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/ffuf_shortnames.py +0 -0
  115. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/filedownload.py +0 -0
  116. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/fingerprintx.py +0 -0
  117. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/fullhunt.py +0 -0
  118. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/generic_ssrf.py +0 -0
  119. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/git.py +0 -0
  120. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/git_clone.py +0 -0
  121. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/github_codesearch.py +0 -0
  122. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/github_org.py +0 -0
  123. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/github_workflows.py +0 -0
  124. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/gitlab.py +0 -0
  125. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/google_playstore.py +0 -0
  126. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/gowitness.py +0 -0
  127. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/hackertarget.py +0 -0
  128. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/host_header.py +0 -0
  129. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/httpx.py +0 -0
  130. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/hunt.py +0 -0
  131. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/hunterio.py +0 -0
  132. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/iis_shortnames.py +0 -0
  133. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internal/__init__.py +0 -0
  134. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internal/aggregate.py +0 -0
  135. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internal/base.py +0 -0
  136. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internal/dnsresolve.py +0 -0
  137. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internal/excavate.py +0 -0
  138. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internal/speculate.py +0 -0
  139. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/internetdb.py +0 -0
  140. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/ip2location.py +0 -0
  141. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/ipneighbor.py +0 -0
  142. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/ipstack.py +0 -0
  143. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/jadx.py +0 -0
  144. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/leakix.py +0 -0
  145. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/myssl.py +0 -0
  146. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/newsletters.py +0 -0
  147. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/ntlm.py +0 -0
  148. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/oauth.py +0 -0
  149. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/otx.py +0 -0
  150. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/__init__.py +0 -0
  151. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/asset_inventory.py +0 -0
  152. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/base.py +0 -0
  153. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/csv.py +0 -0
  154. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/discord.py +0 -0
  155. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/emails.py +0 -0
  156. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/http.py +0 -0
  157. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/json.py +0 -0
  158. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/neo4j.py +0 -0
  159. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/postgres.py +0 -0
  160. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/python.py +0 -0
  161. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/slack.py +0 -0
  162. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/splunk.py +0 -0
  163. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/sqlite.py +0 -0
  164. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/stdout.py +0 -0
  165. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/subdomains.py +0 -0
  166. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/teams.py +0 -0
  167. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/txt.py +0 -0
  168. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/web_report.py +0 -0
  169. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/output/websocket.py +0 -0
  170. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/paramminer_cookies.py +0 -0
  171. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/paramminer_getparams.py +0 -0
  172. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/paramminer_headers.py +0 -0
  173. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/passivetotal.py +0 -0
  174. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/pgp.py +0 -0
  175. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/postman.py +0 -0
  176. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/postman_download.py +0 -0
  177. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/rapiddns.py +0 -0
  178. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/report/affiliates.py +0 -0
  179. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/report/asn.py +0 -0
  180. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/report/base.py +0 -0
  181. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/robots.py +0 -0
  182. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/secretsdb.py +0 -0
  183. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/securitytrails.py +0 -0
  184. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/securitytxt.py +0 -0
  185. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/shodan_dns.py +0 -0
  186. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/sitedossier.py +0 -0
  187. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/skymem.py +0 -0
  188. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/smuggler.py +0 -0
  189. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/social.py +0 -0
  190. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/sslcert.py +0 -0
  191. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/subdomaincenter.py +0 -0
  192. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/subdomainradar.py +0 -0
  193. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/telerik.py +0 -0
  194. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/templates/bucket.py +0 -0
  195. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/templates/github.py +0 -0
  196. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/templates/postman.py +0 -0
  197. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/templates/shodan.py +0 -0
  198. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/templates/webhook.py +0 -0
  199. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/trickest.py +0 -0
  200. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/trufflehog.py +0 -0
  201. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/url_manipulation.py +0 -0
  202. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/urlscan.py +0 -0
  203. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/viewdns.py +0 -0
  204. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/virustotal.py +0 -0
  205. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/wafw00f.py +0 -0
  206. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/wappalyzer.py +0 -0
  207. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/wayback.py +0 -0
  208. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/wpscan.py +0 -0
  209. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/modules/zoomeye.py +0 -0
  210. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/baddns-thorough.yml +0 -0
  211. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/cloud-enum.yml +0 -0
  212. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/code-enum.yml +0 -0
  213. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/email-enum.yml +0 -0
  214. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/fast.yml +0 -0
  215. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/kitchen-sink.yml +0 -0
  216. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/spider.yml +0 -0
  217. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/subdomain-enum.yml +0 -0
  218. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web/dirbust-heavy.yml +0 -0
  219. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web/dirbust-light.yml +0 -0
  220. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web/dotnet-audit.yml +0 -0
  221. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web/iis-shortnames.yml +0 -0
  222. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web/paramminer.yml +0 -0
  223. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web-basic.yml +0 -0
  224. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web-screenshots.yml +0 -0
  225. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/presets/web-thorough.yml +0 -0
  226. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/__init__.py +0 -0
  227. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/dispatcher.py +0 -0
  228. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/manager.py +0 -0
  229. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/preset/__init__.py +0 -0
  230. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/preset/args.py +0 -0
  231. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/preset/conditions.py +0 -0
  232. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/preset/environ.py +0 -0
  233. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/preset/path.py +0 -0
  234. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/preset/preset.py +0 -0
  235. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/scanner.py +0 -0
  236. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/stats.py +0 -0
  237. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scanner/target.py +0 -0
  238. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/scripts/docs.py +0 -0
  239. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/__init__.py +0 -0
  240. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/bbot_fixtures.py +0 -0
  241. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/conftest.py +0 -0
  242. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/coverage.cfg +0 -0
  243. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/fastapi_test.py +0 -0
  244. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/owasp_mastg.apk +0 -0
  245. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/run_tests.sh +0 -0
  246. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_output.ndjson +0 -0
  247. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/__init__.py +0 -0
  248. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test__module__tests.py +0 -0
  249. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_bbot_fastapi.py +0 -0
  250. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_bloom_filter.py +0 -0
  251. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_cli.py +0 -0
  252. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_command.py +0 -0
  253. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_config.py +0 -0
  254. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_depsinstaller.py +0 -0
  255. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_dns.py +0 -0
  256. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_docs.py +0 -0
  257. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_engine.py +0 -0
  258. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_events.py +0 -0
  259. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_files.py +0 -0
  260. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_helpers.py +0 -0
  261. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_manager_deduplication.py +0 -0
  262. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_manager_scope_accuracy.py +0 -0
  263. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_modules_basic.py +0 -0
  264. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_presets.py +0 -0
  265. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_python_api.py +0 -0
  266. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_regexes.py +0 -0
  267. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_scan.py +0 -0
  268. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_scope.py +0 -0
  269. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_target.py +0 -0
  270. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_1/test_web.py +0 -0
  271. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/__init__.py +0 -0
  272. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/__init__.py +0 -0
  273. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/base.py +0 -0
  274. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_affiliates.py +0 -0
  275. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_aggregate.py +0 -0
  276. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_ajaxpro.py +0 -0
  277. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_anubisdb.py +0 -0
  278. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_apkpure.py +0 -0
  279. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_asn.py +0 -0
  280. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -0
  281. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_azure_realm.py +0 -0
  282. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_azure_tenant.py +0 -0
  283. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_baddns.py +0 -0
  284. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +0 -0
  285. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_zone.py +0 -0
  286. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_badsecrets.py +0 -0
  287. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bevigil.py +0 -0
  288. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_binaryedge.py +0 -0
  289. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +0 -0
  290. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +0 -0
  291. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_digitalocean.py +0 -0
  292. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_file_enum.py +0 -0
  293. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_firebase.py +0 -0
  294. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_google.py +0 -0
  295. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +0 -0
  296. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_builtwith.py +0 -0
  297. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_bypass403.py +0 -0
  298. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_c99.py +0 -0
  299. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py +0 -0
  300. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_certspotter.py +0 -0
  301. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_chaos.py +0 -0
  302. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_code_repository.py +0 -0
  303. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_columbus.py +0 -0
  304. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_credshed.py +0 -0
  305. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_crt.py +0 -0
  306. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_csv.py +0 -0
  307. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dastardly.py +0 -0
  308. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dehashed.py +0 -0
  309. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_digitorus.py +0 -0
  310. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_discord.py +0 -0
  311. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +0 -0
  312. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +0 -0
  313. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +0 -0
  314. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dnscaa.py +0 -0
  315. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +0 -0
  316. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +0 -0
  317. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dnsresolve.py +0 -0
  318. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_docker_pull.py +0 -0
  319. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dockerhub.py +0 -0
  320. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -0
  321. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_emailformat.py +0 -0
  322. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_emails.py +0 -0
  323. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py +0 -0
  324. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_extractous.py +0 -0
  325. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf.py +0 -0
  326. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +0 -0
  327. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_filedownload.py +0 -0
  328. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_fingerprintx.py +0 -0
  329. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_fullhunt.py +0 -0
  330. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_generic_ssrf.py +0 -0
  331. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_git.py +0 -0
  332. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_git_clone.py +0 -0
  333. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_github_codesearch.py +0 -0
  334. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_github_org.py +0 -0
  335. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_github_workflows.py +0 -0
  336. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_gitlab.py +0 -0
  337. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_google_playstore.py +0 -0
  338. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_gowitness.py +0 -0
  339. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_hackertarget.py +0 -0
  340. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_host_header.py +0 -0
  341. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_http.py +0 -0
  342. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_httpx.py +0 -0
  343. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_hunt.py +0 -0
  344. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_hunterio.py +0 -0
  345. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_iis_shortnames.py +0 -0
  346. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_internetdb.py +0 -0
  347. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_ip2location.py +0 -0
  348. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_ipneighbor.py +0 -0
  349. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_ipstack.py +0 -0
  350. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_jadx.py +0 -0
  351. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_json.py +0 -0
  352. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_leakix.py +0 -0
  353. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_myssl.py +0 -0
  354. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_neo4j.py +0 -0
  355. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_newsletters.py +0 -0
  356. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_ntlm.py +0 -0
  357. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py +0 -0
  358. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_oauth.py +0 -0
  359. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_otx.py +0 -0
  360. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +0 -0
  361. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -0
  362. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +0 -0
  363. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_passivetotal.py +0 -0
  364. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_pgp.py +0 -0
  365. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_postgres.py +0 -0
  366. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_postman.py +0 -0
  367. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_postman_download.py +0 -0
  368. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_python.py +0 -0
  369. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_rapiddns.py +0 -0
  370. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_robots.py +0 -0
  371. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_secretsdb.py +0 -0
  372. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_securitytrails.py +0 -0
  373. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_securitytxt.py +0 -0
  374. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +0 -0
  375. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_sitedossier.py +0 -0
  376. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_skymem.py +0 -0
  377. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_slack.py +0 -0
  378. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_smuggler.py +0 -0
  379. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_social.py +0 -0
  380. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_speculate.py +0 -0
  381. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_splunk.py +0 -0
  382. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_sqlite.py +0 -0
  383. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_sslcert.py +0 -0
  384. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_stdout.py +0 -0
  385. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +0 -0
  386. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +0 -0
  387. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_subdomains.py +0 -0
  388. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_teams.py +0 -0
  389. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_telerik.py +0 -0
  390. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_trickest.py +0 -0
  391. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_trufflehog.py +0 -0
  392. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_txt.py +0 -0
  393. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_url_manipulation.py +0 -0
  394. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_urlscan.py +0 -0
  395. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_vhost.py +0 -0
  396. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_viewdns.py +0 -0
  397. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_virustotal.py +0 -0
  398. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_wafw00f.py +0 -0
  399. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_wappalyzer.py +0 -0
  400. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_wayback.py +0 -0
  401. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_web_report.py +0 -0
  402. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_websocket.py +0 -0
  403. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_wpscan.py +0 -0
  404. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/module_tests/test_module_zoomeye.py +0 -0
  405. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/template_tests/__init__.py +0 -0
  406. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +0 -0
  407. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/testsslcert.pem +0 -0
  408. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/test/testsslkey.pem +0 -0
  409. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/devops_mutations.txt +0 -0
  410. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/ffuf_shortname_candidates.txt +0 -0
  411. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/ms_on_prem_subdomains.txt +0 -0
  412. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/nameservers.txt +0 -0
  413. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/paramminer_headers.txt +0 -0
  414. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/paramminer_parameters.txt +0 -0
  415. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +0 -0
  416. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/top_open_ports_nmap.txt +0 -0
  417. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/valid_url_schemes.txt +0 -0
  418. {bbot-2.3.0.5336rc0 → bbot-2.3.0.5362rc0}/bbot/wordlists/wordninja_dns.txt.gz +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bbot
3
- Version: 2.3.0.5336rc0
3
+ Version: 2.3.0.5362rc0
4
4
  Summary: OSINT automation for hackers.
5
5
  Home-page: https://github.com/blacklanternsecurity/bbot
6
6
  License: GPL-3.0
@@ -249,10 +249,10 @@ flags:
249
249
 
250
250
  ```bash
251
251
  # everything everywhere all at once
252
- bbot -t evilcorp.com -p kitchen-sink
252
+ bbot -t evilcorp.com -p kitchen-sink --allow-deadly
253
253
 
254
254
  # roughly equivalent to:
255
- bbot -t evilcorp.com -p subdomain-enum cloud-enum code-enum email-enum spider web-basic paramminer dirbust-light web-screenshots
255
+ bbot -t evilcorp.com -p subdomain-enum cloud-enum code-enum email-enum spider web-basic paramminer dirbust-light web-screenshots --allow-deadly
256
256
  ```
257
257
 
258
258
  <!-- BBOT KITCHEN-SINK PRESET EXPANDABLE -->
@@ -294,6 +294,24 @@ Click the graph below to explore the [inner workings](https://www.blacklanternse
294
294
 
295
295
  [![image](https://github.com/blacklanternsecurity/bbot/assets/20261699/e55ba6bd-6d97-48a6-96f0-e122acc23513)](https://www.blacklanternsecurity.com/bbot/Stable/how_it_works/)
296
296
 
297
+ ## Output Modules
298
+
299
+ - [Neo4j](docs/scanning/output.md#neo4j)
300
+ - [Teams](docs/scanning/output.md#teams)
301
+ - [Discord](docs/scanning/output.md#discord)
302
+ - [Slack](docs/scanning/output.md#slack)
303
+ - [Postgres](docs/scanning/output.md#postgres)
304
+ - [MySQL](docs/scanning/output.md#mysql)
305
+ - [SQLite](docs/scanning/output.md#sqlite)
306
+ - [Splunk](docs/scanning/output.md#splunk)
307
+ - [Elasticsearch](docs/scanning/output.md#elasticsearch)
308
+ - [CSV](docs/scanning/output.md#csv)
309
+ - [JSON](docs/scanning/output.md#json)
310
+ - [HTTP](docs/scanning/output.md#http)
311
+ - [Websocket](docs/scanning/output.md#websocket)
312
+
313
+ ...and [more](docs/scanning/output.md)!
314
+
297
315
  ## BBOT as a Python Library
298
316
 
299
317
  #### Synchronous
@@ -195,10 +195,10 @@ flags:
195
195
 
196
196
  ```bash
197
197
  # everything everywhere all at once
198
- bbot -t evilcorp.com -p kitchen-sink
198
+ bbot -t evilcorp.com -p kitchen-sink --allow-deadly
199
199
 
200
200
  # roughly equivalent to:
201
- bbot -t evilcorp.com -p subdomain-enum cloud-enum code-enum email-enum spider web-basic paramminer dirbust-light web-screenshots
201
+ bbot -t evilcorp.com -p subdomain-enum cloud-enum code-enum email-enum spider web-basic paramminer dirbust-light web-screenshots --allow-deadly
202
202
  ```
203
203
 
204
204
  <!-- BBOT KITCHEN-SINK PRESET EXPANDABLE -->
@@ -240,6 +240,24 @@ Click the graph below to explore the [inner workings](https://www.blacklanternse
240
240
 
241
241
  [![image](https://github.com/blacklanternsecurity/bbot/assets/20261699/e55ba6bd-6d97-48a6-96f0-e122acc23513)](https://www.blacklanternsecurity.com/bbot/Stable/how_it_works/)
242
242
 
243
+ ## Output Modules
244
+
245
+ - [Neo4j](docs/scanning/output.md#neo4j)
246
+ - [Teams](docs/scanning/output.md#teams)
247
+ - [Discord](docs/scanning/output.md#discord)
248
+ - [Slack](docs/scanning/output.md#slack)
249
+ - [Postgres](docs/scanning/output.md#postgres)
250
+ - [MySQL](docs/scanning/output.md#mysql)
251
+ - [SQLite](docs/scanning/output.md#sqlite)
252
+ - [Splunk](docs/scanning/output.md#splunk)
253
+ - [Elasticsearch](docs/scanning/output.md#elasticsearch)
254
+ - [CSV](docs/scanning/output.md#csv)
255
+ - [JSON](docs/scanning/output.md#json)
256
+ - [HTTP](docs/scanning/output.md#http)
257
+ - [Websocket](docs/scanning/output.md#websocket)
258
+
259
+ ...and [more](docs/scanning/output.md)!
260
+
243
261
  ## BBOT as a Python Library
244
262
 
245
263
  #### Synchronous
@@ -1,4 +1,4 @@
1
1
  # version placeholder (replaced by poetry-dynamic-versioning)
2
- __version__ = "v2.3.0.5336rc"
2
+ __version__ = "v2.3.0.5362rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
@@ -49,7 +49,8 @@ class DepsInstaller:
49
49
  self.minimal_git_config.touch()
50
50
  os.environ["GIT_CONFIG_GLOBAL"] = str(self.minimal_git_config)
51
51
 
52
- self.deps_behavior = self.parent_helper.config.get("deps_behavior", "abort_on_failure").lower()
52
+ self.deps_config = self.parent_helper.config.get("deps", {})
53
+ self.deps_behavior = self.deps_config.get("behavior", "abort_on_failure").lower()
53
54
  self.ansible_debug = self.core.logger.log_level <= logging.DEBUG
54
55
  self.venv = ""
55
56
  if sys.prefix != sys.base_prefix:
@@ -141,8 +141,8 @@ class Target(BBOTBaseModel, table=True):
141
141
  seeds: List = Field(default=[], sa_type=JSON)
142
142
  whitelist: List = Field(default=None, sa_type=JSON)
143
143
  blacklist: List = Field(default=[], sa_type=JSON)
144
- hash: str = Field(sa_column=Column("hash", String, unique=True, primary_key=True, index=True))
145
- scope_hash: str = Field(sa_column=Column("scope_hash", String, index=True))
146
- seed_hash: str = Field(sa_column=Column("seed_hashhash", String, index=True))
147
- whitelist_hash: str = Field(sa_column=Column("whitelist_hash", String, index=True))
148
- blacklist_hash: str = Field(sa_column=Column("blacklist_hash", String, index=True))
144
+ hash: str = Field(sa_column=Column("hash", String(length=255), unique=True, primary_key=True, index=True))
145
+ scope_hash: str = Field(sa_column=Column("scope_hash", String(length=255), index=True))
146
+ seed_hash: str = Field(sa_column=Column("seed_hashhash", String(length=255), index=True))
147
+ whitelist_hash: str = Field(sa_column=Column("whitelist_hash", String(length=255), index=True))
148
+ blacklist_hash: str = Field(sa_column=Column("blacklist_hash", String(length=255), index=True))
@@ -112,6 +112,13 @@ engine:
112
112
  deps:
113
113
  ffuf:
114
114
  version: "2.1.0"
115
+ # How to handle installation of module dependencies
116
+ # Choices are:
117
+ # - abort_on_failure (default) - if a module dependency fails to install, abort the scan
118
+ # - retry_failed - try again to install failed dependencies
119
+ # - ignore_failed - run the scan regardless of what happens with dependency installation
120
+ # - disable - completely disable BBOT's dependency system (you are responsible for installing tools, pip packages, etc.)
121
+ behavior: abort_on_failure
115
122
 
116
123
  ### ADVANCED OPTIONS ###
117
124
 
@@ -129,14 +136,6 @@ dnsresolve: True
129
136
  # Cloud provider tagging
130
137
  cloudcheck: True
131
138
 
132
- # How to handle installation of module dependencies
133
- # Choices are:
134
- # - abort_on_failure (default) - if a module dependency fails to install, abort the scan
135
- # - retry_failed - try again to install failed dependencies
136
- # - ignore_failed - run the scan regardless of what happens with dependency installation
137
- # - disable - completely disable BBOT's dependency system (you are responsible for installing tools, pip packages, etc.)
138
- deps_behavior: abort_on_failure
139
-
140
139
  # Strip querystring from URLs by default
141
140
  url_querystring_remove: True
142
141
  # When query string is retained, by default collapse parameter values down to a single value per parameter
@@ -1,3 +1,5 @@
1
+ from contextlib import suppress
2
+
1
3
  from bbot.modules.base import BaseInterceptModule
2
4
 
3
5
 
@@ -28,15 +30,28 @@ class CloudCheck(BaseInterceptModule):
28
30
  if self.dummy_modules is None:
29
31
  self.make_dummy_modules()
30
32
  # cloud tagging by hosts
31
- hosts_to_check = set(str(s) for s in event.resolved_hosts)
32
- # we use the original host, since storage buckets hostnames might be collapsed to _wildcard
33
- hosts_to_check.add(str(event.host_original))
34
- for host in hosts_to_check:
33
+ hosts_to_check = set(event.resolved_hosts)
34
+ with suppress(KeyError):
35
+ hosts_to_check.remove(event.host_original)
36
+ hosts_to_check = [event.host_original] + list(hosts_to_check)
37
+
38
+ for i, host in enumerate(hosts_to_check):
39
+ host_is_ip = self.helpers.is_ip(host)
35
40
  for provider, provider_type, subnet in self.helpers.cloudcheck(host):
36
41
  if provider:
37
42
  event.add_tag(f"{provider_type}-{provider}")
43
+ if host_is_ip:
44
+ event.add_tag(f"{provider_type}-ip")
45
+ else:
46
+ # if the original hostname is a cloud domain, tag it as such
47
+ if i == 0:
48
+ event.add_tag(f"{provider_type}-domain")
49
+ # any children are tagged as CNAMEs
50
+ else:
51
+ event.add_tag(f"{provider_type}-cname")
38
52
 
39
53
  found = set()
54
+ str_hosts_to_check = [str(host) for host in hosts_to_check]
40
55
  # look for cloud assets in hosts, http responses
41
56
  # loop through each provider
42
57
  for provider in self.helpers.cloud.providers.values():
@@ -54,7 +69,7 @@ class CloudCheck(BaseInterceptModule):
54
69
  if event.type == "HTTP_RESPONSE":
55
70
  matches = await self.helpers.re.findall(sig, event.data.get("body", ""))
56
71
  elif event.type.startswith("DNS_NAME"):
57
- for host in hosts_to_check:
72
+ for host in str_hosts_to_check:
58
73
  match = sig.match(host)
59
74
  if match:
60
75
  matches.append(match.groups())
@@ -0,0 +1,51 @@
1
+ from bbot.modules.templates.sql import SQLTemplate
2
+
3
+
4
+ class MySQL(SQLTemplate):
5
+ watched_events = ["*"]
6
+ meta = {"description": "Output scan data to a MySQL database"}
7
+ options = {
8
+ "username": "root",
9
+ "password": "bbotislife",
10
+ "host": "localhost",
11
+ "port": 3306,
12
+ "database": "bbot",
13
+ }
14
+ options_desc = {
15
+ "username": "The username to connect to MySQL",
16
+ "password": "The password to connect to MySQL",
17
+ "host": "The server running MySQL",
18
+ "port": "The port to connect to MySQL",
19
+ "database": "The database name to connect to",
20
+ }
21
+ deps_pip = ["sqlmodel", "aiomysql"]
22
+ protocol = "mysql+aiomysql"
23
+
24
+ async def create_database(self):
25
+ from sqlalchemy import text
26
+ from sqlalchemy.ext.asyncio import create_async_engine
27
+
28
+ # Create the engine for the initial connection to the server
29
+ initial_engine = create_async_engine(self.connection_string().rsplit("/", 1)[0])
30
+
31
+ async with initial_engine.connect() as conn:
32
+ # Check if the database exists
33
+ result = await conn.execute(text(f"SHOW DATABASES LIKE '{self.database}'"))
34
+ database_exists = result.scalar() is not None
35
+
36
+ # Create the database if it does not exist
37
+ if not database_exists:
38
+ # Use aiomysql directly to create the database
39
+ import aiomysql
40
+
41
+ raw_conn = await aiomysql.connect(
42
+ user=self.username,
43
+ password=self.password,
44
+ host=self.host,
45
+ port=self.port,
46
+ )
47
+ try:
48
+ async with raw_conn.cursor() as cursor:
49
+ await cursor.execute(f"CREATE DATABASE {self.database}")
50
+ finally:
51
+ await raw_conn.ensure_closed()
@@ -6,6 +6,9 @@ from radixtarget import RadixTarget
6
6
  from bbot.modules.base import BaseModule
7
7
 
8
8
 
9
+ # TODO: this module is getting big. It should probably be two modules: one for ping and one for SYN.
10
+
11
+
9
12
  class portscan(BaseModule):
10
13
  flags = ["active", "portscan", "safe"]
11
14
  watched_events = ["IP_ADDRESS", "IP_RANGE", "DNS_NAME"]
@@ -27,6 +30,8 @@ class portscan(BaseModule):
27
30
  "adapter_ip": "",
28
31
  "adapter_mac": "",
29
32
  "router_mac": "",
33
+ "cdn_tags": "cdn-",
34
+ "allowed_cdn_ports": None,
30
35
  }
31
36
  options_desc = {
32
37
  "top_ports": "Top ports to scan (default 100) (to override, specify 'ports')",
@@ -39,6 +44,8 @@ class portscan(BaseModule):
39
44
  "adapter_ip": "Send packets using this IP address. Not needed unless masscan's autodetection fails",
40
45
  "adapter_mac": "Send packets using this as the source MAC address. Not needed unless masscan's autodetection fails",
41
46
  "router_mac": "Send packets to this MAC address as the destination. Not needed unless masscan's autodetection fails",
47
+ "cdn_tags": "Comma-separated list of tags to skip, e.g. 'cdn,cloud'",
48
+ "allowed_cdn_ports": "Comma-separated list of ports that are allowed to be scanned for CDNs",
42
49
  }
43
50
  deps_common = ["masscan"]
44
51
  batch_size = 1000000
@@ -60,7 +67,15 @@ class portscan(BaseModule):
60
67
  try:
61
68
  self.helpers.parse_port_string(self.ports)
62
69
  except ValueError as e:
63
- return False, f"Error parsing ports: {e}"
70
+ return False, f"Error parsing ports '{self.ports}': {e}"
71
+ self.cdn_tags = [t.strip() for t in self.config.get("cdn_tags", "").split(",")]
72
+ self.allowed_cdn_ports = self.config.get("allowed_cdn_ports", None)
73
+ if self.allowed_cdn_ports is not None:
74
+ try:
75
+ self.allowed_cdn_ports = [int(p.strip()) for p in self.allowed_cdn_ports.split(",")]
76
+ except Exception as e:
77
+ return False, f"Error parsing allowed CDN ports '{self.allowed_cdn_ports}': {e}"
78
+
64
79
  # whether we've finished scanning our original scan targets
65
80
  self.scanned_initial_targets = False
66
81
  # keeps track of individual scanned IPs and their open ports
@@ -227,9 +242,20 @@ class portscan(BaseModule):
227
242
  parent=parent_event,
228
243
  context=f"{{module}} executed a {scan_type} scan against {parent_event.data} and found: {{event.type}}: {{event.data}}",
229
244
  )
230
- await self.emit_event(event)
245
+
246
+ await self.emit_event(event, abort_if=self.abort_if)
231
247
  return event
232
248
 
249
+ def abort_if(self, event):
250
+ if self.allowed_cdn_ports is not None:
251
+ # if the host is a CDN
252
+ for cdn_tag in self.cdn_tags:
253
+ if any(t.startswith(str(cdn_tag)) for t in event.tags):
254
+ # and if its port isn't in the list of allowed CDN ports
255
+ if event.port not in self.allowed_cdn_ports:
256
+ return True, "event is a CDN and port is not in the allowed list"
257
+ return False
258
+
233
259
  def parse_json_line(self, line):
234
260
  try:
235
261
  j = json.loads(line)
@@ -1,3 +1,4 @@
1
+ from contextlib import suppress
1
2
  from sqlmodel import SQLModel
2
3
  from sqlalchemy.orm import sessionmaker
3
4
  from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
@@ -88,3 +89,7 @@ class SQLTemplate(BaseOutputModule):
88
89
  if self.database:
89
90
  connection_string += f"/{self.database}"
90
91
  return connection_string
92
+
93
+ async def cleanup(self):
94
+ with suppress(Exception):
95
+ await self.engine.dispose()
@@ -169,7 +169,7 @@ class subdomain_enum(BaseModule):
169
169
  if any(t.startswith("cloud-") for t in event.tags):
170
170
  is_cloud = True
171
171
  # reject if it's a cloud resource and not in our target
172
- if is_cloud and event not in self.scan.target:
172
+ if is_cloud and event not in self.scan.target.whitelist:
173
173
  return False, "Event is a cloud resource and not a direct target"
174
174
  # optionally reject events with wildcards / errors
175
175
  if self.reject_wildcards:
@@ -36,6 +36,8 @@ dns:
36
36
  - example.com
37
37
  - evilcorp.com
38
38
  - one
39
+ deps:
40
+ behavior: retry_failed
39
41
  engine:
40
42
  debug: true
41
43
  agent_url: ws://127.0.0.1:8765
@@ -51,6 +51,10 @@ class TestCloudCheck(ModuleTestBase):
51
51
  await module.handle_event(event)
52
52
  assert "cloud-amazon" in event.tags, f"{event} was not properly cloud-tagged"
53
53
 
54
+ assert "cloud-domain" in aws_event1.tags
55
+ assert "cloud-ip" in other_event2.tags
56
+ assert "cloud-cname" in other_event3.tags
57
+
54
58
  for event in (aws_event3, other_event1):
55
59
  await module.handle_event(event)
56
60
  assert "cloud-amazon" not in event.tags, f"{event} was improperly cloud-tagged"
@@ -0,0 +1,76 @@
1
+ import asyncio
2
+ import time
3
+
4
+ from .base import ModuleTestBase
5
+
6
+
7
+ class TestMySQL(ModuleTestBase):
8
+ targets = ["evilcorp.com"]
9
+ skip_distro_tests = True
10
+
11
+ async def setup_before_prep(self, module_test):
12
+ process = await asyncio.create_subprocess_exec(
13
+ "docker",
14
+ "run",
15
+ "--name",
16
+ "bbot-test-mysql",
17
+ "--rm",
18
+ "-e",
19
+ "MYSQL_ROOT_PASSWORD=bbotislife",
20
+ "-e",
21
+ "MYSQL_DATABASE=bbot",
22
+ "-p",
23
+ "3306:3306",
24
+ "-d",
25
+ "mysql",
26
+ stdout=asyncio.subprocess.PIPE,
27
+ stderr=asyncio.subprocess.PIPE,
28
+ )
29
+ stdout, stderr = await process.communicate()
30
+
31
+ import aiomysql
32
+
33
+ # wait for the container to start
34
+ start_time = time.time()
35
+ while True:
36
+ try:
37
+ conn = await aiomysql.connect(user="root", password="bbotislife", db="bbot", host="localhost")
38
+ conn.close()
39
+ break
40
+ except Exception as e:
41
+ if time.time() - start_time > 60: # timeout after 60 seconds
42
+ self.log.error("MySQL server did not start in time.")
43
+ raise e
44
+ await asyncio.sleep(1)
45
+
46
+ if process.returncode != 0:
47
+ self.log.error(f"Failed to start MySQL server: {stderr.decode()}")
48
+
49
+ async def check(self, module_test, events):
50
+ import aiomysql
51
+
52
+ # Connect to the MySQL database
53
+ conn = await aiomysql.connect(user="root", password="bbotislife", db="bbot", host="localhost")
54
+
55
+ try:
56
+ async with conn.cursor() as cur:
57
+ await cur.execute("SELECT * FROM event")
58
+ events = await cur.fetchall()
59
+ assert len(events) == 3, "No events found in MySQL database"
60
+
61
+ await cur.execute("SELECT * FROM scan")
62
+ scans = await cur.fetchall()
63
+ assert len(scans) == 1, "No scans found in MySQL database"
64
+
65
+ await cur.execute("SELECT * FROM target")
66
+ targets = await cur.fetchall()
67
+ assert len(targets) == 1, "No targets found in MySQL database"
68
+ finally:
69
+ conn.close()
70
+ process = await asyncio.create_subprocess_exec(
71
+ "docker", "stop", "bbot-test-mysql", stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
72
+ )
73
+ stdout, stderr = await process.communicate()
74
+
75
+ if process.returncode != 0:
76
+ raise Exception(f"Failed to stop MySQL server: {stderr.decode()}")
@@ -109,10 +109,12 @@ class TestPortscan(ModuleTestBase):
109
109
  if e.type == "DNS_NAME" and e.data == "dummy.asdf.evilcorp.net" and str(e.module) == "dummy_module"
110
110
  ]
111
111
  )
112
- assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.8.8"]) <= 3
113
- assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.4"]) <= 3
114
- assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.5"]) <= 3
115
- assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.6"]) <= 3
112
+ # the reason these numbers aren't exactly predictable is because we can't predict which one arrives first
113
+ # to the portscan module. Sometimes, one that would normally be deduped is force-emitted because it led to a new open port.
114
+ assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.8.8"]) <= 4
115
+ assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.4"]) <= 4
116
+ assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.5"]) <= 4
117
+ assert 2 <= len([e for e in events if e.type == "IP_ADDRESS" and e.data == "8.8.4.6"]) <= 4
116
118
  assert 1 == len([e for e in events if e.type == "OPEN_TCP_PORT" and e.data == "8.8.8.8:443"])
117
119
  assert 1 == len([e for e in events if e.type == "OPEN_TCP_PORT" and e.data == "8.8.4.5:80"])
118
120
  assert 1 == len([e for e in events if e.type == "OPEN_TCP_PORT" and e.data == "8.8.4.6:631"])
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "bbot"
3
- version = "v2.3.0.5336rc"
3
+ version = "v2.3.0.5362rc"
4
4
  description = "OSINT automation for hackers."
5
5
  authors = [
6
6
  "TheTechromancer",
File without changes
File without changes