bbot 2.1.2.5156rc0__tar.gz → 2.2.0.5263rc0__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 (414) hide show
  1. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/PKG-INFO +3 -1
  2. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/README.md +1 -0
  3. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/__init__.py +1 -1
  4. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/config/logger.py +6 -3
  5. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/core.py +20 -3
  6. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/engine.py +3 -3
  7. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/event/base.py +46 -24
  8. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/command.py +4 -3
  9. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/depsinstaller/installer.py +6 -0
  10. bbot-2.2.0.5263rc0/bbot/core/helpers/libmagic.py +68 -0
  11. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/process.py +0 -18
  12. bbot-2.2.0.5263rc0/bbot/core/multiprocess.py +58 -0
  13. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/shared_deps.py +46 -3
  14. bbot-2.2.0.5263rc0/bbot/db/sql/models.py +147 -0
  15. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/apkpure.py +15 -5
  16. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/baddns.py +1 -1
  17. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/baddns_direct.py +1 -1
  18. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/baddns_zone.py +1 -1
  19. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/badsecrets.py +1 -1
  20. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/censys.py +9 -13
  21. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/deadly/dastardly.py +1 -1
  22. bbot-2.2.0.5263rc0/bbot/modules/dnsbimi.py +145 -0
  23. bbot-2.1.2.5156rc0/bbot/modules/unstructured.py → bbot-2.2.0.5263rc0/bbot/modules/extractous.py +23 -49
  24. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internal/dnsresolve.py +12 -1
  25. bbot-2.2.0.5263rc0/bbot/modules/jadx.py +87 -0
  26. bbot-2.2.0.5263rc0/bbot/modules/output/sqlite.py +29 -0
  27. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/passivetotal.py +9 -11
  28. bbot-2.2.0.5263rc0/bbot/modules/templates/sql.py +89 -0
  29. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/trufflehog.py +1 -1
  30. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/preset/preset.py +3 -0
  31. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/scanner.py +5 -2
  32. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/conftest.py +0 -1
  33. bbot-2.2.0.5263rc0/bbot/test/fastapi_test.py +17 -0
  34. bbot-2.2.0.5263rc0/bbot/test/test_step_1/test_bbot_fastapi.py +82 -0
  35. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_dns.py +36 -0
  36. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_events.py +73 -0
  37. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_apkpure.py +6 -4
  38. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py +4 -1
  39. bbot-2.2.0.5263rc0/bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +103 -0
  40. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py +6 -6
  41. bbot-2.2.0.5263rc0/bbot/test/test_step_2/module_tests/test_module_extractous.py +54 -0
  42. bbot-2.2.0.5263rc0/bbot/test/test_step_2/module_tests/test_module_jadx.py +55 -0
  43. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_passivetotal.py +3 -1
  44. bbot-2.2.0.5263rc0/bbot/test/test_step_2/module_tests/test_module_sqlite.py +18 -0
  45. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/pyproject.toml +6 -3
  46. bbot-2.1.2.5156rc0/bbot/test/test_step_2/module_tests/test_module_unstructured.py +0 -102
  47. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/LICENSE +0 -0
  48. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/cli.py +0 -0
  49. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/__init__.py +0 -0
  50. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/config/__init__.py +0 -0
  51. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/config/files.py +0 -0
  52. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/event/__init__.py +0 -0
  53. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/event/helpers.py +0 -0
  54. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/flags.py +0 -0
  55. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/__init__.py +0 -0
  56. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/async_helpers.py +0 -0
  57. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/bloom.py +0 -0
  58. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/cache.py +0 -0
  59. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/depsinstaller/__init__.py +0 -0
  60. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/depsinstaller/sudo_askpass.py +0 -0
  61. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/diff.py +0 -0
  62. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/dns/__init__.py +0 -0
  63. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/dns/brute.py +0 -0
  64. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/dns/dns.py +0 -0
  65. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/dns/engine.py +0 -0
  66. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/dns/helpers.py +0 -0
  67. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/dns/mock.py +0 -0
  68. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/files.py +0 -0
  69. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/helper.py +0 -0
  70. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/interactsh.py +0 -0
  71. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/misc.py +0 -0
  72. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/names_generator.py +0 -0
  73. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/ntlm.py +0 -0
  74. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/ratelimiter.py +0 -0
  75. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/regex.py +0 -0
  76. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/regexes.py +0 -0
  77. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/url.py +0 -0
  78. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/validators.py +0 -0
  79. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/web/__init__.py +0 -0
  80. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/web/client.py +0 -0
  81. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/web/engine.py +0 -0
  82. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/web/ssl_context.py +0 -0
  83. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/web/web.py +0 -0
  84. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/helpers/wordcloud.py +0 -0
  85. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/core/modules.py +0 -0
  86. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/defaults.yml +0 -0
  87. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/errors.py +0 -0
  88. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/logger.py +0 -0
  89. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/__init__.py +0 -0
  90. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/ajaxpro.py +0 -0
  91. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/anubisdb.py +0 -0
  92. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/azure_realm.py +0 -0
  93. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/azure_tenant.py +0 -0
  94. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/base.py +0 -0
  95. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bevigil.py +0 -0
  96. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/binaryedge.py +0 -0
  97. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bucket_amazon.py +0 -0
  98. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bucket_azure.py +0 -0
  99. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bucket_digitalocean.py +0 -0
  100. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bucket_file_enum.py +0 -0
  101. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bucket_firebase.py +0 -0
  102. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bucket_google.py +0 -0
  103. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bufferoverrun.py +0 -0
  104. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/builtwith.py +0 -0
  105. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/bypass403.py +0 -0
  106. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/c99.py +0 -0
  107. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/certspotter.py +0 -0
  108. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/chaos.py +0 -0
  109. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/code_repository.py +0 -0
  110. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/columbus.py +0 -0
  111. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/credshed.py +0 -0
  112. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/crt.py +0 -0
  113. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/deadly/ffuf.py +0 -0
  114. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/deadly/nuclei.py +0 -0
  115. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/deadly/vhost.py +0 -0
  116. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dehashed.py +0 -0
  117. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/digitorus.py +0 -0
  118. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dnsbrute.py +0 -0
  119. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dnsbrute_mutations.py +0 -0
  120. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dnscaa.py +0 -0
  121. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dnscommonsrv.py +0 -0
  122. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dnsdumpster.py +0 -0
  123. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/docker_pull.py +0 -0
  124. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dockerhub.py +0 -0
  125. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/dotnetnuke.py +0 -0
  126. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/emailformat.py +0 -0
  127. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/ffuf_shortnames.py +0 -0
  128. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/filedownload.py +0 -0
  129. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/fingerprintx.py +0 -0
  130. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/fullhunt.py +0 -0
  131. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/generic_ssrf.py +0 -0
  132. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/git.py +0 -0
  133. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/git_clone.py +0 -0
  134. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/github_codesearch.py +0 -0
  135. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/github_org.py +0 -0
  136. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/github_workflows.py +0 -0
  137. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/gitlab.py +0 -0
  138. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/google_playstore.py +0 -0
  139. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/gowitness.py +0 -0
  140. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/hackertarget.py +0 -0
  141. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/host_header.py +0 -0
  142. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/httpx.py +0 -0
  143. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/hunt.py +0 -0
  144. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/hunterio.py +0 -0
  145. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/iis_shortnames.py +0 -0
  146. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internal/__init__.py +0 -0
  147. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internal/aggregate.py +0 -0
  148. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internal/base.py +0 -0
  149. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internal/cloudcheck.py +0 -0
  150. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internal/excavate.py +0 -0
  151. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internal/speculate.py +0 -0
  152. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/internetdb.py +0 -0
  153. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/ip2location.py +0 -0
  154. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/ipneighbor.py +0 -0
  155. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/ipstack.py +0 -0
  156. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/leakix.py +0 -0
  157. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/myssl.py +0 -0
  158. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/newsletters.py +0 -0
  159. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/ntlm.py +0 -0
  160. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/oauth.py +0 -0
  161. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/otx.py +0 -0
  162. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/__init__.py +0 -0
  163. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/asset_inventory.py +0 -0
  164. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/base.py +0 -0
  165. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/csv.py +0 -0
  166. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/discord.py +0 -0
  167. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/emails.py +0 -0
  168. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/http.py +0 -0
  169. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/json.py +0 -0
  170. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/neo4j.py +0 -0
  171. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/python.py +0 -0
  172. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/slack.py +0 -0
  173. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/splunk.py +0 -0
  174. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/stdout.py +0 -0
  175. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/subdomains.py +0 -0
  176. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/teams.py +0 -0
  177. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/txt.py +0 -0
  178. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/web_report.py +0 -0
  179. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/output/websocket.py +0 -0
  180. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/paramminer_cookies.py +0 -0
  181. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/paramminer_getparams.py +0 -0
  182. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/paramminer_headers.py +0 -0
  183. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/pgp.py +0 -0
  184. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/portscan.py +0 -0
  185. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/postman.py +0 -0
  186. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/postman_download.py +0 -0
  187. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/rapiddns.py +0 -0
  188. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/report/affiliates.py +0 -0
  189. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/report/asn.py +0 -0
  190. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/report/base.py +0 -0
  191. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/robots.py +0 -0
  192. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/secretsdb.py +0 -0
  193. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/securitytrails.py +0 -0
  194. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/securitytxt.py +0 -0
  195. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/shodan_dns.py +0 -0
  196. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/sitedossier.py +0 -0
  197. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/skymem.py +0 -0
  198. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/smuggler.py +0 -0
  199. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/social.py +0 -0
  200. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/sslcert.py +0 -0
  201. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/subdomaincenter.py +0 -0
  202. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/subdomainradar.py +0 -0
  203. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/telerik.py +0 -0
  204. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/templates/bucket.py +0 -0
  205. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/templates/github.py +0 -0
  206. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/templates/postman.py +0 -0
  207. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/templates/shodan.py +0 -0
  208. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/templates/subdomain_enum.py +0 -0
  209. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/templates/webhook.py +0 -0
  210. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/trickest.py +0 -0
  211. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/url_manipulation.py +0 -0
  212. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/urlscan.py +0 -0
  213. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/viewdns.py +0 -0
  214. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/virustotal.py +0 -0
  215. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/wafw00f.py +0 -0
  216. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/wappalyzer.py +0 -0
  217. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/wayback.py +0 -0
  218. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/wpscan.py +0 -0
  219. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/modules/zoomeye.py +0 -0
  220. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/baddns-thorough.yml +0 -0
  221. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/cloud-enum.yml +0 -0
  222. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/code-enum.yml +0 -0
  223. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/email-enum.yml +0 -0
  224. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/kitchen-sink.yml +0 -0
  225. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/spider.yml +0 -0
  226. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/subdomain-enum.yml +0 -0
  227. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web/dirbust-heavy.yml +0 -0
  228. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web/dirbust-light.yml +0 -0
  229. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web/dotnet-audit.yml +0 -0
  230. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web/iis-shortnames.yml +0 -0
  231. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web/paramminer.yml +0 -0
  232. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web-basic.yml +0 -0
  233. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web-screenshots.yml +0 -0
  234. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/presets/web-thorough.yml +0 -0
  235. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/__init__.py +0 -0
  236. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/dispatcher.py +0 -0
  237. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/manager.py +0 -0
  238. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/preset/__init__.py +0 -0
  239. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/preset/args.py +0 -0
  240. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/preset/conditions.py +0 -0
  241. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/preset/environ.py +0 -0
  242. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/preset/path.py +0 -0
  243. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/stats.py +0 -0
  244. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scanner/target.py +0 -0
  245. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/scripts/docs.py +0 -0
  246. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/__init__.py +0 -0
  247. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/bbot_fixtures.py +0 -0
  248. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/coverage.cfg +0 -0
  249. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/owasp_mastg.apk +0 -0
  250. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/run_tests.sh +0 -0
  251. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test.conf +0 -0
  252. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_output.ndjson +0 -0
  253. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/__init__.py +0 -0
  254. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test__module__tests.py +0 -0
  255. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_bloom_filter.py +0 -0
  256. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_cli.py +0 -0
  257. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_command.py +0 -0
  258. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_config.py +0 -0
  259. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_depsinstaller.py +0 -0
  260. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_docs.py +0 -0
  261. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_engine.py +0 -0
  262. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_files.py +0 -0
  263. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_helpers.py +0 -0
  264. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_manager_deduplication.py +0 -0
  265. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_manager_scope_accuracy.py +0 -0
  266. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_modules_basic.py +0 -0
  267. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_presets.py +0 -0
  268. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_python_api.py +0 -0
  269. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_regexes.py +0 -0
  270. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_scan.py +0 -0
  271. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_scope.py +0 -0
  272. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_target.py +0 -0
  273. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_1/test_web.py +0 -0
  274. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/__init__.py +0 -0
  275. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/__init__.py +0 -0
  276. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/base.py +0 -0
  277. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_affiliates.py +0 -0
  278. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_aggregate.py +0 -0
  279. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_ajaxpro.py +0 -0
  280. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_anubisdb.py +0 -0
  281. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_asn.py +0 -0
  282. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -0
  283. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_azure_realm.py +0 -0
  284. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_azure_tenant.py +0 -0
  285. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_baddns.py +0 -0
  286. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +0 -0
  287. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_zone.py +0 -0
  288. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_badsecrets.py +0 -0
  289. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bevigil.py +0 -0
  290. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_binaryedge.py +0 -0
  291. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +0 -0
  292. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +0 -0
  293. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_digitalocean.py +0 -0
  294. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_file_enum.py +0 -0
  295. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_firebase.py +0 -0
  296. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_google.py +0 -0
  297. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +0 -0
  298. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_builtwith.py +0 -0
  299. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_bypass403.py +0 -0
  300. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_c99.py +0 -0
  301. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_certspotter.py +0 -0
  302. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_chaos.py +0 -0
  303. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +0 -0
  304. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_code_repository.py +0 -0
  305. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_columbus.py +0 -0
  306. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_credshed.py +0 -0
  307. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_crt.py +0 -0
  308. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_csv.py +0 -0
  309. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dastardly.py +0 -0
  310. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dehashed.py +0 -0
  311. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_digitorus.py +0 -0
  312. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_discord.py +0 -0
  313. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +0 -0
  314. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +0 -0
  315. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dnscaa.py +0 -0
  316. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +0 -0
  317. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +0 -0
  318. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dnsresolve.py +0 -0
  319. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_docker_pull.py +0 -0
  320. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dockerhub.py +0 -0
  321. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -0
  322. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_emailformat.py +0 -0
  323. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_emails.py +0 -0
  324. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf.py +0 -0
  325. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +0 -0
  326. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_filedownload.py +0 -0
  327. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_fingerprintx.py +0 -0
  328. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_fullhunt.py +0 -0
  329. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_generic_ssrf.py +0 -0
  330. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_git.py +0 -0
  331. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_git_clone.py +0 -0
  332. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_github_codesearch.py +0 -0
  333. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_github_org.py +0 -0
  334. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_github_workflows.py +0 -0
  335. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_gitlab.py +0 -0
  336. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_google_playstore.py +0 -0
  337. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_gowitness.py +0 -0
  338. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_hackertarget.py +0 -0
  339. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_host_header.py +0 -0
  340. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_http.py +0 -0
  341. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_httpx.py +0 -0
  342. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_hunt.py +0 -0
  343. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_hunterio.py +0 -0
  344. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_iis_shortnames.py +0 -0
  345. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_internetdb.py +0 -0
  346. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_ip2location.py +0 -0
  347. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_ipneighbor.py +0 -0
  348. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_ipstack.py +0 -0
  349. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_json.py +0 -0
  350. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_leakix.py +0 -0
  351. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_myssl.py +0 -0
  352. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_neo4j.py +0 -0
  353. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_newsletters.py +0 -0
  354. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_ntlm.py +0 -0
  355. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py +0 -0
  356. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_oauth.py +0 -0
  357. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_otx.py +0 -0
  358. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +0 -0
  359. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -0
  360. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +0 -0
  361. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_pgp.py +0 -0
  362. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_portscan.py +0 -0
  363. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_postman.py +0 -0
  364. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_postman_download.py +0 -0
  365. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_python.py +0 -0
  366. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_rapiddns.py +0 -0
  367. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_robots.py +0 -0
  368. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_secretsdb.py +0 -0
  369. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_securitytrails.py +0 -0
  370. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_securitytxt.py +0 -0
  371. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +0 -0
  372. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_sitedossier.py +0 -0
  373. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_skymem.py +0 -0
  374. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_slack.py +0 -0
  375. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_smuggler.py +0 -0
  376. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_social.py +0 -0
  377. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_speculate.py +0 -0
  378. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_splunk.py +0 -0
  379. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_sslcert.py +0 -0
  380. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_stdout.py +0 -0
  381. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +0 -0
  382. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +0 -0
  383. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_subdomains.py +0 -0
  384. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_teams.py +0 -0
  385. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_telerik.py +0 -0
  386. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_trickest.py +0 -0
  387. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_trufflehog.py +0 -0
  388. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_txt.py +0 -0
  389. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_url_manipulation.py +0 -0
  390. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_urlscan.py +0 -0
  391. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_vhost.py +0 -0
  392. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_viewdns.py +0 -0
  393. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_virustotal.py +0 -0
  394. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_wafw00f.py +0 -0
  395. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_wappalyzer.py +0 -0
  396. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_wayback.py +0 -0
  397. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_web_report.py +0 -0
  398. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_websocket.py +0 -0
  399. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_wpscan.py +0 -0
  400. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/module_tests/test_module_zoomeye.py +0 -0
  401. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/template_tests/__init__.py +0 -0
  402. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +0 -0
  403. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/testsslcert.pem +0 -0
  404. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/test/testsslkey.pem +0 -0
  405. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/devops_mutations.txt +0 -0
  406. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/ffuf_shortname_candidates.txt +0 -0
  407. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/ms_on_prem_subdomains.txt +0 -0
  408. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/nameservers.txt +0 -0
  409. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/paramminer_headers.txt +0 -0
  410. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/paramminer_parameters.txt +0 -0
  411. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +0 -0
  412. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/top_open_ports_nmap.txt +0 -0
  413. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/bbot/wordlists/valid_url_schemes.txt +0 -0
  414. {bbot-2.1.2.5156rc0 → bbot-2.2.0.5263rc0}/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.1.2.5156rc0
3
+ Version: 2.2.0.5263rc0
4
4
  Summary: OSINT automation for hackers.
5
5
  Home-page: https://github.com/blacklanternsecurity/bbot
6
6
  License: GPL-3.0
@@ -30,6 +30,7 @@ Requires-Dist: lxml (>=4.9.2,<6.0.0)
30
30
  Requires-Dist: mmh3 (>=4.1,<6.0)
31
31
  Requires-Dist: omegaconf (>=2.3.0,<3.0.0)
32
32
  Requires-Dist: psutil (>=5.9.4,<7.0.0)
33
+ Requires-Dist: puremagic (>=1.28,<2.0)
33
34
  Requires-Dist: pycryptodome (>=3.17,<4.0)
34
35
  Requires-Dist: pydantic (>=2.4.2,<3.0.0)
35
36
  Requires-Dist: pyjwt (>=2.7.0,<3.0.0)
@@ -410,6 +411,7 @@ For details, see [Configuration](https://www.blacklanternsecurity.com/bbot/Stabl
410
411
  - **Modules**
411
412
  - [List of Modules](https://www.blacklanternsecurity.com/bbot/Stable/modules/list_of_modules)
412
413
  - [Nuclei](https://www.blacklanternsecurity.com/bbot/Stable/modules/nuclei)
414
+ - [Custom YARA Rules](https://www.blacklanternsecurity.com/bbot/Stable/modules/custom_yara_rules)
413
415
  - **Misc**
414
416
  - [Contribution](https://www.blacklanternsecurity.com/bbot/Stable/contribution)
415
417
  - [Release History](https://www.blacklanternsecurity.com/bbot/Stable/release_history)
@@ -357,6 +357,7 @@ For details, see [Configuration](https://www.blacklanternsecurity.com/bbot/Stabl
357
357
  - **Modules**
358
358
  - [List of Modules](https://www.blacklanternsecurity.com/bbot/Stable/modules/list_of_modules)
359
359
  - [Nuclei](https://www.blacklanternsecurity.com/bbot/Stable/modules/nuclei)
360
+ - [Custom YARA Rules](https://www.blacklanternsecurity.com/bbot/Stable/modules/custom_yara_rules)
360
361
  - **Misc**
361
362
  - [Contribution](https://www.blacklanternsecurity.com/bbot/Stable/contribution)
362
363
  - [Release History](https://www.blacklanternsecurity.com/bbot/Stable/release_history)
@@ -1,4 +1,4 @@
1
1
  # version placeholder (replaced by poetry-dynamic-versioning)
2
- __version__ = "v2.1.2.5156rc"
2
+ __version__ = "v2.2.0.5263rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import sys
2
3
  import atexit
3
4
  import logging
@@ -9,6 +10,7 @@ from contextlib import suppress
9
10
 
10
11
  from ..helpers.misc import mkdir, error_and_exit
11
12
  from ...logger import colorize, loglevel_mapping
13
+ from ..multiprocess import SHARED_INTERPRETER_STATE
12
14
 
13
15
 
14
16
  debug_format = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s %(filename)s:%(lineno)s %(message)s")
@@ -65,8 +67,9 @@ class BBOTLogger:
65
67
 
66
68
  self.listener = None
67
69
 
68
- self.process_name = multiprocessing.current_process().name
69
- if self.process_name == "MainProcess":
70
+ # if we haven't set up logging yet, do it now
71
+ if not "_BBOT_LOGGING_SETUP" in os.environ:
72
+ os.environ["_BBOT_LOGGING_SETUP"] = "1"
70
73
  self.queue = multiprocessing.Queue()
71
74
  self.setup_queue_handler()
72
75
  # Start the QueueListener
@@ -113,7 +116,7 @@ class BBOTLogger:
113
116
 
114
117
  self.core_logger.setLevel(log_level)
115
118
  # disable asyncio logging for child processes
116
- if self.process_name != "MainProcess":
119
+ if not SHARED_INTERPRETER_STATE.is_main_process:
117
120
  logging.getLogger("asyncio").setLevel(logging.ERROR)
118
121
 
119
122
  def addLoggingLevel(self, levelName, levelNum, methodName=None):
@@ -6,6 +6,7 @@ from contextlib import suppress
6
6
  from omegaconf import OmegaConf
7
7
 
8
8
  from bbot.errors import BBOTError
9
+ from .multiprocess import SHARED_INTERPRETER_STATE
9
10
 
10
11
 
11
12
  DEFAULT_CONFIG = None
@@ -41,9 +42,23 @@ class BBOTCore:
41
42
  self.logger
42
43
  self.log = logging.getLogger("bbot.core")
43
44
 
45
+ self._prep_multiprocessing()
46
+
47
+ def _prep_multiprocessing(self):
44
48
  import multiprocessing
49
+ from .helpers.process import BBOTProcess
50
+
51
+ if SHARED_INTERPRETER_STATE.is_main_process:
52
+ # if this is the main bbot process, set the logger and queue for the first time
53
+ from functools import partialmethod
45
54
 
46
- self.process_name = multiprocessing.current_process().name
55
+ BBOTProcess.__init__ = partialmethod(
56
+ BBOTProcess.__init__, log_level=self.logger.log_level, log_queue=self.logger.queue
57
+ )
58
+
59
+ # this makes our process class the default for process pools, etc.
60
+ mp_context = multiprocessing.get_context("spawn")
61
+ mp_context.Process = BBOTProcess
47
62
 
48
63
  @property
49
64
  def home(self):
@@ -187,12 +202,14 @@ class BBOTCore:
187
202
  if os.environ.get("BBOT_TESTING", "") == "True":
188
203
  process = self.create_thread(*args, **kwargs)
189
204
  else:
190
- if self.process_name == "MainProcess":
205
+ if SHARED_INTERPRETER_STATE.is_scan_process:
191
206
  from .helpers.process import BBOTProcess
192
207
 
193
208
  process = BBOTProcess(*args, **kwargs)
194
209
  else:
195
- raise BBOTError(f"Tried to start server from process {self.process_name}")
210
+ import multiprocessing
211
+
212
+ raise BBOTError(f"Tried to start server from process {multiprocessing.current_process().name}")
196
213
  process.daemon = True
197
214
  return process
198
215
 
@@ -10,6 +10,7 @@ import traceback
10
10
  import contextlib
11
11
  import contextvars
12
12
  import zmq.asyncio
13
+ import multiprocessing
13
14
  from pathlib import Path
14
15
  from concurrent.futures import CancelledError
15
16
  from contextlib import asynccontextmanager, suppress
@@ -17,6 +18,7 @@ from contextlib import asynccontextmanager, suppress
17
18
  from bbot.core import CORE
18
19
  from bbot.errors import BBOTEngineError
19
20
  from bbot.core.helpers.async_helpers import get_event_loop
21
+ from bbot.core.multiprocess import SHARED_INTERPRETER_STATE
20
22
  from bbot.core.helpers.misc import rand_string, in_exception_chain
21
23
 
22
24
 
@@ -264,10 +266,8 @@ class EngineClient(EngineBase):
264
266
  return [s for s in self.CMDS if isinstance(s, str)]
265
267
 
266
268
  def start_server(self):
267
- import multiprocessing
268
-
269
269
  process_name = multiprocessing.current_process().name
270
- if process_name == "MainProcess":
270
+ if SHARED_INTERPRETER_STATE.is_scan_process:
271
271
  kwargs = dict(self.server_kwargs)
272
272
  # if we're in tests, we use a single event loop to avoid weird race conditions
273
273
  # this allows us to more easily mock http, etc.
@@ -503,12 +503,13 @@ class BaseEvent:
503
503
  for t in list(self.tags):
504
504
  if t.startswith("distance-"):
505
505
  self.remove_tag(t)
506
- if scope_distance == 0:
507
- self.add_tag("in-scope")
508
- self.remove_tag("affiliate")
509
- else:
510
- self.remove_tag("in-scope")
511
- self.add_tag(f"distance-{new_scope_distance}")
506
+ if self.host:
507
+ if scope_distance == 0:
508
+ self.add_tag("in-scope")
509
+ self.remove_tag("affiliate")
510
+ else:
511
+ self.remove_tag("in-scope")
512
+ self.add_tag(f"distance-{new_scope_distance}")
512
513
  self._scope_distance = new_scope_distance
513
514
  # apply recursively to parent events
514
515
  parent_scope_distance = getattr(self.parent, "scope_distance", None)
@@ -1002,13 +1003,15 @@ class ClosestHostEvent(DictHostEvent):
1002
1003
  if parent_url is not None:
1003
1004
  self.data["url"] = parent_url.geturl()
1004
1005
  # inherit closest path
1005
- if not "path" in self.data and isinstance(parent.data, dict):
1006
+ if not "path" in self.data and isinstance(parent.data, dict) and not parent.type == "HTTP_RESPONSE":
1006
1007
  parent_path = parent.data.get("path", None)
1007
1008
  if parent_path is not None:
1008
1009
  self.data["path"] = parent_path
1009
1010
  # inherit closest host
1010
1011
  if parent.host:
1011
1012
  self.data["host"] = str(parent.host)
1013
+ # we do this to refresh the hash
1014
+ self.data = self.data
1012
1015
  break
1013
1016
  # die if we still haven't found a host
1014
1017
  if not self.host:
@@ -1018,20 +1021,21 @@ class ClosestHostEvent(DictHostEvent):
1018
1021
  class DictPathEvent(DictEvent):
1019
1022
  def sanitize_data(self, data):
1020
1023
  new_data = dict(data)
1024
+ new_data["path"] = str(new_data["path"])
1021
1025
  file_blobs = getattr(self.scan, "_file_blobs", False)
1022
1026
  folder_blobs = getattr(self.scan, "_folder_blobs", False)
1023
1027
  blob = None
1024
1028
  try:
1025
- data_path = Path(data["path"])
1026
- if data_path.is_file():
1029
+ self._data_path = Path(data["path"])
1030
+ if self._data_path.is_file():
1027
1031
  self.add_tag("file")
1028
1032
  if file_blobs:
1029
- with open(data_path, "rb") as file:
1033
+ with open(self._data_path, "rb") as file:
1030
1034
  blob = file.read()
1031
- elif data_path.is_dir():
1035
+ elif self._data_path.is_dir():
1032
1036
  self.add_tag("folder")
1033
1037
  if folder_blobs:
1034
- blob = self._tar_directory(data_path)
1038
+ blob = self._tar_directory(self._data_path)
1035
1039
  except KeyError:
1036
1040
  pass
1037
1041
  if blob:
@@ -1540,7 +1544,25 @@ class WAF(DictHostEvent):
1540
1544
 
1541
1545
 
1542
1546
  class FILESYSTEM(DictPathEvent):
1543
- pass
1547
+ def __init__(self, *args, **kwargs):
1548
+ super().__init__(*args, **kwargs)
1549
+ if self._data_path.is_file():
1550
+ # detect type of file content using magic
1551
+ from bbot.core.helpers.libmagic import get_magic_info, get_compression
1552
+
1553
+ extension, mime_type, description, confidence = get_magic_info(self.data["path"])
1554
+ self.data["magic_extension"] = extension
1555
+ self.data["magic_mime_type"] = mime_type
1556
+ self.data["magic_description"] = description
1557
+ self.data["magic_confidence"] = confidence
1558
+ # detection compression
1559
+ compression = get_compression(mime_type)
1560
+ if compression:
1561
+ self.add_tag("compressed")
1562
+ self.add_tag(f"{compression}-archive")
1563
+ self.data["compression"] = compression
1564
+ # refresh hash
1565
+ self.data = self.data
1544
1566
 
1545
1567
 
1546
1568
  class RAW_DNS_RECORD(DictHostEvent, DnsEvent):
@@ -1621,23 +1643,23 @@ def make_event(
1621
1643
  tags = set(tags)
1622
1644
 
1623
1645
  if is_event(data):
1624
- data = copy(data)
1625
- if scan is not None and not data.scan:
1626
- data.scan = scan
1627
- if scans is not None and not data.scans:
1628
- data.scans = scans
1646
+ event = copy(data)
1647
+ if scan is not None and not event.scan:
1648
+ event.scan = scan
1649
+ if scans is not None and not event.scans:
1650
+ event.scans = scans
1629
1651
  if module is not None:
1630
- data.module = module
1652
+ event.module = module
1631
1653
  if parent is not None:
1632
- data.parent = parent
1654
+ event.parent = parent
1633
1655
  if context is not None:
1634
- data.discovery_context = context
1656
+ event.discovery_context = context
1635
1657
  if internal == True:
1636
- data.internal = True
1658
+ event.internal = True
1637
1659
  if tags:
1638
- data.tags = tags.union(data.tags)
1660
+ event.tags = tags.union(event.tags)
1639
1661
  event_type = data.type
1640
- return data
1662
+ return event
1641
1663
  else:
1642
1664
  if event_type is None:
1643
1665
  event_type, data = get_event_type(data)
@@ -210,9 +210,10 @@ async def _write_proc_line(proc, chunk):
210
210
  return True
211
211
  except Exception as e:
212
212
  proc_args = [str(s) for s in getattr(proc, "args", [])]
213
- command = " ".join(proc_args)
214
- log.warning(f"Error writing line to stdin for command: {command}: {e}")
215
- log.trace(traceback.format_exc())
213
+ command = " ".join(proc_args).strip()
214
+ if command:
215
+ log.warning(f"Error writing line to stdin for command: {command}: {e}")
216
+ log.trace(traceback.format_exc())
216
217
  return False
217
218
 
218
219
 
@@ -44,6 +44,11 @@ class DepsInstaller:
44
44
  self.parent_helper.mkdir(self.command_status)
45
45
  self.setup_status = self.read_setup_status()
46
46
 
47
+ # make sure we're using a minimal git config
48
+ self.minimal_git_config = self.data_dir / "minimal_git.config"
49
+ self.minimal_git_config.touch()
50
+ os.environ["GIT_CONFIG_GLOBAL"] = str(self.minimal_git_config)
51
+
47
52
  self.deps_behavior = self.parent_helper.config.get("deps_behavior", "abort_on_failure").lower()
48
53
  self.ansible_debug = self.core.logger.log_level <= logging.DEBUG
49
54
  self.venv = ""
@@ -350,6 +355,7 @@ class DepsInstaller:
350
355
  "make": "make",
351
356
  "gcc": "gcc",
352
357
  "bash": "bash",
358
+ "which": "which",
353
359
  }
354
360
  for command, package_name in core_deps.items():
355
361
  if not self.parent_helper.which(command):
@@ -0,0 +1,68 @@
1
+ import puremagic
2
+
3
+
4
+ def get_magic_info(file):
5
+
6
+ magic_detections = puremagic.magic_file(file)
7
+ if magic_detections:
8
+ magic_detections.sort(key=lambda x: x.confidence, reverse=True)
9
+ detection = magic_detections[0]
10
+ return detection.extension, detection.mime_type, detection.name, detection.confidence
11
+ return "", "", "", 0
12
+
13
+
14
+ def get_compression(mime_type):
15
+ mime_type = mime_type.lower()
16
+ # from https://github.com/cdgriffith/puremagic/blob/master/puremagic/magic_data.json
17
+ compression_map = {
18
+ "application/gzip": "gzip", # Gzip compressed file
19
+ "application/zip": "zip", # Zip archive
20
+ "application/x-bzip2": "bzip2", # Bzip2 compressed file
21
+ "application/x-xz": "xz", # XZ compressed file
22
+ "application/x-7z-compressed": "7z", # 7-Zip archive
23
+ "application/vnd.rar": "rar", # RAR archive
24
+ "application/x-lzma": "lzma", # LZMA compressed file
25
+ "application/x-compress": "compress", # Unix compress file
26
+ "application/zstd": "zstd", # Zstandard compressed file
27
+ "application/x-lz4": "lz4", # LZ4 compressed file
28
+ "application/x-tar": "tar", # Tar archive
29
+ "application/x-zip-compressed-fb2": "zip", # Zip archive (FB2)
30
+ "application/epub+zip": "zip", # EPUB book (Zip archive)
31
+ "application/pak": "pak", # PAK archive
32
+ "application/x-lha": "lha", # LHA archive
33
+ "application/arj": "arj", # ARJ archive
34
+ "application/vnd.ms-cab-compressed": "cab", # Microsoft Cabinet archive
35
+ "application/x-sit": "sit", # StuffIt archive
36
+ "application/binhex": "binhex", # BinHex encoded file
37
+ "application/x-lrzip": "lrzip", # Long Range ZIP
38
+ "application/x-alz": "alz", # ALZip archive
39
+ "application/x-tgz": "tgz", # Gzip compressed Tar archive
40
+ "application/x-gzip": "gzip", # Gzip compressed file
41
+ "application/x-lzip": "lzip", # Lzip compressed file
42
+ "application/x-zstd-compressed-tar": "zstd", # Zstandard compressed Tar archive
43
+ "application/x-lz4-compressed-tar": "lz4", # LZ4 compressed Tar archive
44
+ "application/vnd.comicbook+zip": "zip", # Comic book archive (Zip)
45
+ "application/vnd.palm": "palm", # Palm OS data
46
+ "application/fictionbook2+zip": "zip", # FictionBook 2.0 (Zip)
47
+ "application/fictionbook3+zip": "zip", # FictionBook 3.0 (Zip)
48
+ "application/x-cpio": "cpio", # CPIO archive
49
+ "application/x-java-pack200": "pack200", # Java Pack200 archive
50
+ "application/x-par2": "par2", # PAR2 recovery file
51
+ "application/x-rar-compressed": "rar", # RAR archive
52
+ "application/java-archive": "zip", # Java Archive (JAR)
53
+ "application/x-webarchive": "zip", # Web archive (Zip)
54
+ "application/vnd.android.package-archive": "zip", # Android package (APK)
55
+ "application/x-itunes-ipa": "zip", # iOS application archive (IPA)
56
+ "application/x-stuffit": "sit", # StuffIt archive
57
+ "application/x-archive": "ar", # Unix archive
58
+ "application/x-qpress": "qpress", # Qpress archive
59
+ "application/x-xar": "xar", # XAR archive
60
+ "application/x-ace": "ace", # ACE archive
61
+ "application/x-zoo": "zoo", # Zoo archive
62
+ "application/x-arc": "arc", # ARC archive
63
+ "application/x-zstd-compressed-tar": "zstd", # Zstandard compressed Tar archive
64
+ "application/x-lz4-compressed-tar": "lz4", # LZ4 compressed Tar archive
65
+ "application/vnd.comicbook-rar": "rar", # Comic book archive (RAR)
66
+ }
67
+
68
+ return compression_map.get(mime_type, "")
@@ -1,15 +1,11 @@
1
1
  import logging
2
2
  import traceback
3
3
  import threading
4
- import multiprocessing
5
4
  from multiprocessing.context import SpawnProcess
6
5
 
7
6
  from .misc import in_exception_chain
8
7
 
9
8
 
10
- current_process = multiprocessing.current_process()
11
-
12
-
13
9
  class BBOTThread(threading.Thread):
14
10
 
15
11
  default_name = "default bbot thread"
@@ -57,17 +53,3 @@ class BBOTProcess(SpawnProcess):
57
53
  if not in_exception_chain(e, (KeyboardInterrupt,)):
58
54
  log.warning(f"Error in {self.name}: {e}")
59
55
  log.trace(traceback.format_exc())
60
-
61
-
62
- if current_process.name == "MainProcess":
63
- # if this is the main bbot process, set the logger and queue for the first time
64
- from bbot.core import CORE
65
- from functools import partialmethod
66
-
67
- BBOTProcess.__init__ = partialmethod(
68
- BBOTProcess.__init__, log_level=CORE.logger.log_level, log_queue=CORE.logger.queue
69
- )
70
-
71
- # this makes our process class the default for process pools, etc.
72
- mp_context = multiprocessing.get_context("spawn")
73
- mp_context.Process = BBOTProcess
@@ -0,0 +1,58 @@
1
+ import os
2
+ import atexit
3
+ from contextlib import suppress
4
+
5
+
6
+ class SharedInterpreterState:
7
+ """
8
+ A class to track the primary BBOT process.
9
+
10
+ Used to prevent spawning multiple unwanted processes with multiprocessing.
11
+ """
12
+
13
+ def __init__(self):
14
+ self.main_process_var_name = "_BBOT_MAIN_PID"
15
+ self.scan_process_var_name = "_BBOT_SCAN_PID"
16
+ atexit.register(self.cleanup)
17
+
18
+ @property
19
+ def is_main_process(self):
20
+ is_main_process = self.main_pid == os.getpid()
21
+ return is_main_process
22
+
23
+ @property
24
+ def is_scan_process(self):
25
+ is_scan_process = os.getpid() == self.scan_pid
26
+ return is_scan_process
27
+
28
+ @property
29
+ def main_pid(self):
30
+ main_pid = int(os.environ.get(self.main_process_var_name, 0))
31
+ if main_pid == 0:
32
+ main_pid = os.getpid()
33
+ # if main PID is not set, set it to the current PID
34
+ os.environ[self.main_process_var_name] = str(main_pid)
35
+ return main_pid
36
+
37
+ @property
38
+ def scan_pid(self):
39
+ scan_pid = int(os.environ.get(self.scan_process_var_name, 0))
40
+ if scan_pid == 0:
41
+ scan_pid = os.getpid()
42
+ # if scan PID is not set, set it to the current PID
43
+ os.environ[self.scan_process_var_name] = str(scan_pid)
44
+ return scan_pid
45
+
46
+ def update_scan_pid(self):
47
+ os.environ[self.scan_process_var_name] = str(os.getpid())
48
+
49
+ def cleanup(self):
50
+ with suppress(Exception):
51
+ if self.is_main_process:
52
+ with suppress(KeyError):
53
+ del os.environ[self.main_process_var_name]
54
+ with suppress(KeyError):
55
+ del os.environ[self.scan_process_var_name]
56
+
57
+
58
+ SHARED_INTERPRETER_STATE = SharedInterpreterState()
@@ -79,13 +79,23 @@ DEP_CHROMIUM = [
79
79
  "ignore_errors": True,
80
80
  },
81
81
  {
82
- "name": "Install Chromium dependencies (Debian)",
82
+ "name": "Install Chromium dependencies (Ubuntu 24.04)",
83
83
  "package": {
84
- "name": "libasound2,libatk-bridge2.0-0,libatk1.0-0,libcairo2,libcups2,libdrm2,libgbm1,libnss3,libpango-1.0-0,libxcomposite1,libxdamage1,libxfixes3,libxkbcommon0,libxrandr2",
84
+ "name": "libasound2t64,libatk-bridge2.0-0,libatk1.0-0,libcairo2,libcups2,libdrm2,libgbm1,libnss3,libpango-1.0-0,libglib2.0-0,libxcomposite1,libxdamage1,libxfixes3,libxkbcommon0,libxrandr2",
85
85
  "state": "present",
86
86
  },
87
87
  "become": True,
88
- "when": "ansible_facts['os_family'] == 'Debian'",
88
+ "when": "ansible_facts['distribution'] == 'Ubuntu' and ansible_facts['distribution_version'] == '24.04'",
89
+ "ignore_errors": True,
90
+ },
91
+ {
92
+ "name": "Install Chromium dependencies (Other Debian-based)",
93
+ "package": {
94
+ "name": "libasound2,libatk-bridge2.0-0,libatk1.0-0,libcairo2,libcups2,libdrm2,libgbm1,libnss3,libpango-1.0-0,libglib2.0-0,libxcomposite1,libxdamage1,libxfixes3,libxkbcommon0,libxrandr2",
95
+ "state": "present",
96
+ },
97
+ "become": True,
98
+ "when": "ansible_facts['os_family'] == 'Debian' and not (ansible_facts['distribution'] == 'Ubuntu' and ansible_facts['distribution_version'] == '24.04')",
89
99
  "ignore_errors": True,
90
100
  },
91
101
  {
@@ -149,6 +159,39 @@ DEP_MASSCAN = [
149
159
  },
150
160
  ]
151
161
 
162
+ DEP_JAVA = [
163
+ {
164
+ "name": "Check if Java is installed",
165
+ "command": "which java",
166
+ "register": "java_installed",
167
+ "ignore_errors": True,
168
+ },
169
+ {
170
+ "name": "Install latest JRE (Debian)",
171
+ "package": {"name": ["default-jre"], "state": "present"},
172
+ "become": True,
173
+ "when": "ansible_facts['os_family'] == 'Debian' and java_installed.rc != 0",
174
+ },
175
+ {
176
+ "name": "Install latest JRE (Arch)",
177
+ "package": {"name": ["jre-openjdk"], "state": "present"},
178
+ "become": True,
179
+ "when": "ansible_facts['os_family'] == 'Archlinux' and java_installed.rc != 0",
180
+ },
181
+ {
182
+ "name": "Install latest JRE (Fedora)",
183
+ "package": {"name": ["which", "java-latest-openjdk-headless"], "state": "present"},
184
+ "become": True,
185
+ "when": "ansible_facts['os_family'] == 'RedHat' and java_installed.rc != 0",
186
+ },
187
+ {
188
+ "name": "Install latest JRE (Alpine)",
189
+ "package": {"name": ["openjdk11"], "state": "present"},
190
+ "become": True,
191
+ "when": "ansible_facts['os_family'] == 'Alpine' and java_installed.rc != 0",
192
+ },
193
+ ]
194
+
152
195
  # shared module dependencies -- ffuf, massdns, chromium, etc.
153
196
  SHARED_DEPS = {}
154
197
  for var, val in list(locals().items()):