bbot 2.3.0.5368rc0__tar.gz → 2.3.0.5376rc0__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 (420) hide show
  1. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/PKG-INFO +1 -1
  2. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/__init__.py +1 -1
  3. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/cli.py +0 -4
  4. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/config/files.py +0 -1
  5. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/event/base.py +0 -3
  6. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/dns.py +0 -1
  7. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/engine.py +0 -2
  8. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/mock.py +0 -1
  9. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/libmagic.py +0 -1
  10. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/process.py +0 -2
  11. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/validators.py +0 -1
  12. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/engine.py +0 -1
  13. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/web.py +0 -1
  14. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/modules.py +0 -1
  15. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/db/sql/models.py +0 -1
  16. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/baddns.py +0 -2
  17. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/baddns_direct.py +0 -1
  18. bbot-2.3.0.5376rc0/bbot/modules/dnstlsrpt.py +144 -0
  19. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dotnetnuke.py +0 -2
  20. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/excavate.py +18 -21
  21. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/paramminer_headers.py +1 -4
  22. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/trufflehog.py +1 -1
  23. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/args.py +0 -1
  24. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/environ.py +0 -1
  25. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -1
  26. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +0 -1
  27. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +0 -1
  28. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +0 -1
  29. bbot-2.3.0.5376rc0/bbot/test/test_step_2/module_tests/test_module_dnstlsrpt.py +64 -0
  30. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -2
  31. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py +0 -20
  32. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +0 -1
  33. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -6
  34. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +0 -7
  35. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_portscan.py +0 -1
  36. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/pyproject.toml +4 -3
  37. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/LICENSE +0 -0
  38. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/README.md +0 -0
  39. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/__init__.py +0 -0
  40. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/config/__init__.py +0 -0
  41. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/config/logger.py +0 -0
  42. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/core.py +0 -0
  43. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/engine.py +0 -0
  44. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/event/__init__.py +0 -0
  45. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/event/helpers.py +0 -0
  46. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/flags.py +0 -0
  47. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/__init__.py +0 -0
  48. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/async_helpers.py +0 -0
  49. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/bloom.py +0 -0
  50. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/cache.py +0 -0
  51. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/command.py +0 -0
  52. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/depsinstaller/__init__.py +0 -0
  53. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/depsinstaller/installer.py +0 -0
  54. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/depsinstaller/sudo_askpass.py +0 -0
  55. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/diff.py +0 -0
  56. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/__init__.py +0 -0
  57. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/brute.py +0 -0
  58. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/helpers.py +0 -0
  59. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/files.py +0 -0
  60. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/helper.py +0 -0
  61. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/interactsh.py +0 -0
  62. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/misc.py +0 -0
  63. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/names_generator.py +0 -0
  64. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/ntlm.py +0 -0
  65. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/ratelimiter.py +0 -0
  66. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/regex.py +0 -0
  67. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/regexes.py +0 -0
  68. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/url.py +0 -0
  69. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/__init__.py +0 -0
  70. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/client.py +0 -0
  71. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/ssl_context.py +0 -0
  72. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/wordcloud.py +0 -0
  73. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/multiprocess.py +0 -0
  74. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/shared_deps.py +0 -0
  75. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/defaults.yml +0 -0
  76. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/errors.py +0 -0
  77. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/logger.py +0 -0
  78. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/__init__.py +0 -0
  79. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ajaxpro.py +0 -0
  80. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/anubisdb.py +0 -0
  81. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/apkpure.py +0 -0
  82. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/azure_realm.py +0 -0
  83. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/azure_tenant.py +0 -0
  84. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/baddns_zone.py +0 -0
  85. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/badsecrets.py +0 -0
  86. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/base.py +0 -0
  87. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bevigil.py +0 -0
  88. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/binaryedge.py +0 -0
  89. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_amazon.py +0 -0
  90. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_azure.py +0 -0
  91. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_digitalocean.py +0 -0
  92. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_file_enum.py +0 -0
  93. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_firebase.py +0 -0
  94. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_google.py +0 -0
  95. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bufferoverrun.py +0 -0
  96. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/builtwith.py +0 -0
  97. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bypass403.py +0 -0
  98. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/c99.py +0 -0
  99. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/censys.py +0 -0
  100. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/certspotter.py +0 -0
  101. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/chaos.py +0 -0
  102. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/code_repository.py +0 -0
  103. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/columbus.py +0 -0
  104. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/credshed.py +0 -0
  105. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/crt.py +0 -0
  106. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/dastardly.py +0 -0
  107. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/ffuf.py +0 -0
  108. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/nuclei.py +0 -0
  109. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/vhost.py +0 -0
  110. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dehashed.py +0 -0
  111. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/digitorus.py +0 -0
  112. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsbimi.py +0 -0
  113. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsbrute.py +0 -0
  114. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsbrute_mutations.py +0 -0
  115. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnscaa.py +0 -0
  116. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnscommonsrv.py +0 -0
  117. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsdumpster.py +0 -0
  118. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/docker_pull.py +0 -0
  119. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dockerhub.py +0 -0
  120. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/emailformat.py +0 -0
  121. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/extractous.py +0 -0
  122. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ffuf_shortnames.py +0 -0
  123. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/filedownload.py +0 -0
  124. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/fingerprintx.py +0 -0
  125. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/fullhunt.py +0 -0
  126. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/generic_ssrf.py +0 -0
  127. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/git.py +0 -0
  128. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/git_clone.py +0 -0
  129. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/github_codesearch.py +0 -0
  130. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/github_org.py +0 -0
  131. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/github_workflows.py +0 -0
  132. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/gitlab.py +0 -0
  133. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/google_playstore.py +0 -0
  134. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/gowitness.py +0 -0
  135. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/hackertarget.py +0 -0
  136. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/host_header.py +0 -0
  137. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/httpx.py +0 -0
  138. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/hunt.py +0 -0
  139. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/hunterio.py +0 -0
  140. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/iis_shortnames.py +0 -0
  141. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/__init__.py +0 -0
  142. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/aggregate.py +0 -0
  143. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/base.py +0 -0
  144. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/cloudcheck.py +0 -0
  145. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/dnsresolve.py +0 -0
  146. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/speculate.py +0 -0
  147. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internetdb.py +0 -0
  148. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ip2location.py +0 -0
  149. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ipneighbor.py +0 -0
  150. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ipstack.py +0 -0
  151. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/jadx.py +0 -0
  152. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/leakix.py +0 -0
  153. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/myssl.py +0 -0
  154. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/newsletters.py +0 -0
  155. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ntlm.py +0 -0
  156. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/oauth.py +0 -0
  157. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/otx.py +0 -0
  158. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/__init__.py +0 -0
  159. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/asset_inventory.py +0 -0
  160. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/base.py +0 -0
  161. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/csv.py +0 -0
  162. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/discord.py +0 -0
  163. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/emails.py +0 -0
  164. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/http.py +0 -0
  165. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/json.py +0 -0
  166. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/mysql.py +0 -0
  167. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/neo4j.py +0 -0
  168. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/postgres.py +0 -0
  169. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/python.py +0 -0
  170. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/slack.py +0 -0
  171. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/splunk.py +0 -0
  172. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/sqlite.py +0 -0
  173. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/stdout.py +0 -0
  174. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/subdomains.py +0 -0
  175. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/teams.py +0 -0
  176. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/txt.py +0 -0
  177. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/web_report.py +0 -0
  178. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/websocket.py +0 -0
  179. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/paramminer_cookies.py +0 -0
  180. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/paramminer_getparams.py +0 -0
  181. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/passivetotal.py +0 -0
  182. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/pgp.py +0 -0
  183. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/portscan.py +0 -0
  184. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/postman.py +0 -0
  185. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/postman_download.py +0 -0
  186. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/rapiddns.py +0 -0
  187. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/report/affiliates.py +0 -0
  188. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/report/asn.py +0 -0
  189. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/report/base.py +0 -0
  190. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/robots.py +0 -0
  191. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/secretsdb.py +0 -0
  192. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/securitytrails.py +0 -0
  193. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/securitytxt.py +0 -0
  194. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/shodan_dns.py +0 -0
  195. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/sitedossier.py +0 -0
  196. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/skymem.py +0 -0
  197. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/smuggler.py +0 -0
  198. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/social.py +0 -0
  199. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/sslcert.py +0 -0
  200. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/subdomaincenter.py +0 -0
  201. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/subdomainradar.py +0 -0
  202. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/telerik.py +0 -0
  203. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/bucket.py +0 -0
  204. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/github.py +0 -0
  205. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/postman.py +0 -0
  206. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/shodan.py +0 -0
  207. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/sql.py +0 -0
  208. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/subdomain_enum.py +0 -0
  209. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/webhook.py +0 -0
  210. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/trickest.py +0 -0
  211. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/url_manipulation.py +0 -0
  212. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/urlscan.py +0 -0
  213. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/viewdns.py +0 -0
  214. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/virustotal.py +0 -0
  215. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wafw00f.py +0 -0
  216. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wappalyzer.py +0 -0
  217. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wayback.py +0 -0
  218. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wpscan.py +0 -0
  219. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/zoomeye.py +0 -0
  220. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/baddns-thorough.yml +0 -0
  221. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/cloud-enum.yml +0 -0
  222. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/code-enum.yml +0 -0
  223. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/email-enum.yml +0 -0
  224. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/fast.yml +0 -0
  225. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/kitchen-sink.yml +0 -0
  226. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/spider.yml +0 -0
  227. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/subdomain-enum.yml +0 -0
  228. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/dirbust-heavy.yml +0 -0
  229. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/dirbust-light.yml +0 -0
  230. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/dotnet-audit.yml +0 -0
  231. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/iis-shortnames.yml +0 -0
  232. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/paramminer.yml +0 -0
  233. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web-basic.yml +0 -0
  234. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web-screenshots.yml +0 -0
  235. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web-thorough.yml +0 -0
  236. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/__init__.py +0 -0
  237. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/dispatcher.py +0 -0
  238. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/manager.py +0 -0
  239. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/__init__.py +0 -0
  240. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/conditions.py +0 -0
  241. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/path.py +0 -0
  242. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/preset.py +0 -0
  243. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/scanner.py +0 -0
  244. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/stats.py +0 -0
  245. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/target.py +0 -0
  246. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scripts/docs.py +0 -0
  247. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/__init__.py +0 -0
  248. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/bbot_fixtures.py +0 -0
  249. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/conftest.py +0 -0
  250. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/coverage.cfg +0 -0
  251. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/fastapi_test.py +0 -0
  252. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/owasp_mastg.apk +0 -0
  253. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/run_tests.sh +0 -0
  254. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test.conf +0 -0
  255. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_output.ndjson +0 -0
  256. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/__init__.py +0 -0
  257. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test__module__tests.py +0 -0
  258. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_bbot_fastapi.py +0 -0
  259. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_bloom_filter.py +0 -0
  260. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_cli.py +0 -0
  261. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_command.py +0 -0
  262. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_config.py +0 -0
  263. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_depsinstaller.py +0 -0
  264. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_dns.py +0 -0
  265. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_docs.py +0 -0
  266. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_engine.py +0 -0
  267. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_events.py +0 -0
  268. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_files.py +0 -0
  269. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_helpers.py +0 -0
  270. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_manager_deduplication.py +0 -0
  271. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_manager_scope_accuracy.py +0 -0
  272. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_modules_basic.py +0 -0
  273. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_presets.py +0 -0
  274. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_python_api.py +0 -0
  275. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_regexes.py +0 -0
  276. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_scan.py +0 -0
  277. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_scope.py +0 -0
  278. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_target.py +0 -0
  279. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_web.py +0 -0
  280. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/__init__.py +0 -0
  281. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/__init__.py +0 -0
  282. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/base.py +0 -0
  283. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_affiliates.py +0 -0
  284. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_aggregate.py +0 -0
  285. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ajaxpro.py +0 -0
  286. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_anubisdb.py +0 -0
  287. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_apkpure.py +0 -0
  288. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_asn.py +0 -0
  289. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_azure_realm.py +0 -0
  290. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_azure_tenant.py +0 -0
  291. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_baddns.py +0 -0
  292. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +0 -0
  293. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_zone.py +0 -0
  294. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_badsecrets.py +0 -0
  295. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bevigil.py +0 -0
  296. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_binaryedge.py +0 -0
  297. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +0 -0
  298. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +0 -0
  299. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_digitalocean.py +0 -0
  300. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_file_enum.py +0 -0
  301. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_firebase.py +0 -0
  302. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_google.py +0 -0
  303. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +0 -0
  304. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_builtwith.py +0 -0
  305. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bypass403.py +0 -0
  306. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_c99.py +0 -0
  307. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py +0 -0
  308. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_certspotter.py +0 -0
  309. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_chaos.py +0 -0
  310. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +0 -0
  311. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_code_repository.py +0 -0
  312. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_columbus.py +0 -0
  313. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_credshed.py +0 -0
  314. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_crt.py +0 -0
  315. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_csv.py +0 -0
  316. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dastardly.py +0 -0
  317. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dehashed.py +0 -0
  318. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_digitorus.py +0 -0
  319. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_discord.py +0 -0
  320. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +0 -0
  321. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnscaa.py +0 -0
  322. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +0 -0
  323. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsresolve.py +0 -0
  324. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_docker_pull.py +0 -0
  325. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dockerhub.py +0 -0
  326. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_emailformat.py +0 -0
  327. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_emails.py +0 -0
  328. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_extractous.py +0 -0
  329. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf.py +0 -0
  330. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +0 -0
  331. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_filedownload.py +0 -0
  332. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_fingerprintx.py +0 -0
  333. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_fullhunt.py +0 -0
  334. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_generic_ssrf.py +0 -0
  335. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_git.py +0 -0
  336. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_git_clone.py +0 -0
  337. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_github_codesearch.py +0 -0
  338. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_github_org.py +0 -0
  339. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_github_workflows.py +0 -0
  340. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_gitlab.py +0 -0
  341. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_google_playstore.py +0 -0
  342. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_gowitness.py +0 -0
  343. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_hackertarget.py +0 -0
  344. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_host_header.py +0 -0
  345. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_http.py +0 -0
  346. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_httpx.py +0 -0
  347. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_hunt.py +0 -0
  348. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_hunterio.py +0 -0
  349. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_iis_shortnames.py +0 -0
  350. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_internetdb.py +0 -0
  351. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ip2location.py +0 -0
  352. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ipneighbor.py +0 -0
  353. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ipstack.py +0 -0
  354. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_jadx.py +0 -0
  355. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_json.py +0 -0
  356. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_leakix.py +0 -0
  357. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_mysql.py +0 -0
  358. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_myssl.py +0 -0
  359. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_neo4j.py +0 -0
  360. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_newsletters.py +0 -0
  361. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ntlm.py +0 -0
  362. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py +0 -0
  363. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_oauth.py +0 -0
  364. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_otx.py +0 -0
  365. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_passivetotal.py +0 -0
  366. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_pgp.py +0 -0
  367. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_postgres.py +0 -0
  368. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_postman.py +0 -0
  369. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_postman_download.py +0 -0
  370. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_python.py +0 -0
  371. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_rapiddns.py +0 -0
  372. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_robots.py +0 -0
  373. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_secretsdb.py +0 -0
  374. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_securitytrails.py +0 -0
  375. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_securitytxt.py +0 -0
  376. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +0 -0
  377. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_sitedossier.py +0 -0
  378. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_skymem.py +0 -0
  379. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_slack.py +0 -0
  380. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_smuggler.py +0 -0
  381. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_social.py +0 -0
  382. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_speculate.py +0 -0
  383. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_splunk.py +0 -0
  384. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_sqlite.py +0 -0
  385. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_sslcert.py +0 -0
  386. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_stdout.py +0 -0
  387. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +0 -0
  388. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +0 -0
  389. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_subdomains.py +0 -0
  390. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_teams.py +0 -0
  391. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_telerik.py +0 -0
  392. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_trickest.py +0 -0
  393. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_trufflehog.py +0 -0
  394. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_txt.py +0 -0
  395. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_url_manipulation.py +0 -0
  396. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_urlscan.py +0 -0
  397. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_vhost.py +0 -0
  398. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_viewdns.py +0 -0
  399. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_virustotal.py +0 -0
  400. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wafw00f.py +0 -0
  401. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wappalyzer.py +0 -0
  402. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wayback.py +0 -0
  403. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_web_report.py +0 -0
  404. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_websocket.py +0 -0
  405. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wpscan.py +0 -0
  406. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_zoomeye.py +0 -0
  407. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/template_tests/__init__.py +0 -0
  408. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +0 -0
  409. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/testsslcert.pem +0 -0
  410. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/testsslkey.pem +0 -0
  411. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/devops_mutations.txt +0 -0
  412. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/ffuf_shortname_candidates.txt +0 -0
  413. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/ms_on_prem_subdomains.txt +0 -0
  414. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/nameservers.txt +0 -0
  415. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/paramminer_headers.txt +0 -0
  416. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/paramminer_parameters.txt +0 -0
  417. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +0 -0
  418. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/top_open_ports_nmap.txt +0 -0
  419. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/valid_url_schemes.txt +0 -0
  420. {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/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.5368rc0
3
+ Version: 2.3.0.5376rc0
4
4
  Summary: OSINT automation for hackers.
5
5
  Home-page: https://github.com/blacklanternsecurity/bbot
6
6
  License: GPL-3.0
@@ -1,4 +1,4 @@
1
1
  # version placeholder (replaced by poetry-dynamic-versioning)
2
- __version__ = "v2.3.0.5368rc"
2
+ __version__ = "v2.3.0.5376rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
@@ -29,7 +29,6 @@ scan_name = ""
29
29
 
30
30
 
31
31
  async def _main():
32
-
33
32
  import asyncio
34
33
  import traceback
35
34
  from contextlib import suppress
@@ -45,7 +44,6 @@ async def _main():
45
44
  global scan_name
46
45
 
47
46
  try:
48
-
49
47
  # start by creating a default scan preset
50
48
  preset = Preset(_log=True, name="bbot_cli_main")
51
49
  # parse command line arguments and merge into preset
@@ -81,7 +79,6 @@ async def _main():
81
79
 
82
80
  # if we're listing modules or their options
83
81
  if options.list_modules or options.list_module_options:
84
-
85
82
  # if no modules or flags are specified, enable everything
86
83
  if not (options.modules or options.output_modules or options.flags):
87
84
  for module, preloaded in preset.module_loader.preloaded().items():
@@ -172,7 +169,6 @@ async def _main():
172
169
  log.trace(f"Command: {' '.join(sys.argv)}")
173
170
 
174
171
  if sys.stdin.isatty():
175
-
176
172
  # warn if any targets belong directly to a cloud provider
177
173
  for event in scan.target.seeds.events:
178
174
  if event.type == "DNS_NAME":
@@ -10,7 +10,6 @@ bbot_code_dir = Path(__file__).parent.parent.parent
10
10
 
11
11
 
12
12
  class BBOTConfigFiles:
13
-
14
13
  config_dir = (Path.home() / ".config" / "bbot").resolve()
15
14
  defaults_filename = (bbot_code_dir / "defaults.yml").resolve()
16
15
  config_filename = (config_dir / "bbot.yml").resolve()
@@ -1180,7 +1180,6 @@ class URL_UNVERIFIED(BaseEvent):
1180
1180
  self.num_redirects = getattr(self.parent, "num_redirects", 0)
1181
1181
 
1182
1182
  def _data_id(self):
1183
-
1184
1183
  data = super()._data_id()
1185
1184
 
1186
1185
  # remove the querystring for URL/URL_UNVERIFIED events, because we will conditionally add it back in (based on settings)
@@ -1267,7 +1266,6 @@ class URL_UNVERIFIED(BaseEvent):
1267
1266
 
1268
1267
 
1269
1268
  class URL(URL_UNVERIFIED):
1270
-
1271
1269
  def __init__(self, *args, **kwargs):
1272
1270
  super().__init__(*args, **kwargs)
1273
1271
 
@@ -1309,7 +1307,6 @@ class URL_HINT(URL_UNVERIFIED):
1309
1307
 
1310
1308
 
1311
1309
  class WEB_PARAMETER(DictHostEvent):
1312
-
1313
1310
  def _data_id(self):
1314
1311
  # dedupe by url:name:param_type
1315
1312
  url = self.data.get("url", "")
@@ -16,7 +16,6 @@ log = logging.getLogger("bbot.core.helpers.dns")
16
16
 
17
17
 
18
18
  class DNSHelper(EngineClient):
19
-
20
19
  SERVER_CLASS = DNSEngine
21
20
  ERROR_CLASS = DNSError
22
21
 
@@ -24,7 +24,6 @@ all_rdtypes = ["A", "AAAA", "SRV", "MX", "NS", "SOA", "CNAME", "TXT"]
24
24
 
25
25
 
26
26
  class DNSEngine(EngineServer):
27
-
28
27
  CMDS = {
29
28
  0: "resolve",
30
29
  1: "resolve_raw",
@@ -476,7 +475,6 @@ class DNSEngine(EngineServer):
476
475
  # for every parent domain, starting with the shortest
477
476
  parents = list(domain_parents(query))
478
477
  for parent in parents[::-1]:
479
-
480
478
  # check if the parent domain is set up with wildcards
481
479
  wildcard_results = await self.is_wildcard_domain(parent, rdtypes_to_check)
482
480
 
@@ -5,7 +5,6 @@ log = logging.getLogger("bbot.core.helpers.dns.mock")
5
5
 
6
6
 
7
7
  class MockResolver:
8
-
9
8
  def __init__(self, mock_data=None, custom_lookup_fn=None):
10
9
  self.mock_data = mock_data if mock_data else {}
11
10
  self._custom_lookup_fn = custom_lookup_fn
@@ -2,7 +2,6 @@ import puremagic
2
2
 
3
3
 
4
4
  def get_magic_info(file):
5
-
6
5
  magic_detections = puremagic.magic_file(file)
7
6
  if magic_detections:
8
7
  magic_detections.sort(key=lambda x: x.confidence, reverse=True)
@@ -7,7 +7,6 @@ from .misc import in_exception_chain
7
7
 
8
8
 
9
9
  class BBOTThread(threading.Thread):
10
-
11
10
  default_name = "default bbot thread"
12
11
 
13
12
  def __init__(self, *args, **kwargs):
@@ -24,7 +23,6 @@ class BBOTThread(threading.Thread):
24
23
 
25
24
 
26
25
  class BBOTProcess(SpawnProcess):
27
-
28
26
  default_name = "bbot process pool"
29
27
 
30
28
  def __init__(self, *args, **kwargs):
@@ -299,7 +299,6 @@ def is_email(email):
299
299
 
300
300
 
301
301
  class Validators:
302
-
303
302
  def __init__(self, parent_helper):
304
303
  self.parent_helper = parent_helper
305
304
 
@@ -14,7 +14,6 @@ log = logging.getLogger("bbot.core.helpers.web.engine")
14
14
 
15
15
 
16
16
  class HTTPEngine(EngineServer):
17
-
18
17
  CMDS = {
19
18
  0: "request",
20
19
  1: "request_batch",
@@ -19,7 +19,6 @@ log = logging.getLogger("bbot.core.helpers.web")
19
19
 
20
20
 
21
21
  class WebHelper(EngineClient):
22
-
23
22
  SERVER_CLASS = HTTPEngine
24
23
  ERROR_CLASS = WebError
25
24
 
@@ -337,7 +337,6 @@ class ModuleLoader:
337
337
  # look for classes
338
338
  if type(root_element) == ast.ClassDef:
339
339
  for class_attr in root_element.body:
340
-
341
340
  # class attributes that are dictionaries
342
341
  if type(class_attr) == ast.Assign and type(class_attr.value) == ast.Dict:
343
342
  # module options
@@ -69,7 +69,6 @@ class BBOTBaseModel(SQLModel):
69
69
 
70
70
 
71
71
  class Event(BBOTBaseModel, table=True):
72
-
73
72
  def __init__(self, *args, **kwargs):
74
73
  super().__init__(*args, **kwargs)
75
74
  data = self._get_data(self.data, self.type)
@@ -55,7 +55,6 @@ class baddns(BaseModule):
55
55
  return True
56
56
 
57
57
  async def handle_event(self, event):
58
-
59
58
  tasks = []
60
59
  for ModuleClass in self.select_modules():
61
60
  kwargs = {
@@ -75,7 +74,6 @@ class baddns(BaseModule):
75
74
  tasks.append((module_instance, task))
76
75
 
77
76
  async for completed_task in self.helpers.as_completed([task for _, task in tasks]):
78
-
79
77
  module_instance = next((m for m, t in tasks if t == completed_task), None)
80
78
  try:
81
79
  task_result = await completed_task
@@ -51,7 +51,6 @@ class baddns_direct(BaseModule):
51
51
 
52
52
  CNAME_direct_instance = CNAME_direct_module(event.host, **kwargs)
53
53
  if await CNAME_direct_instance.dispatch():
54
-
55
54
  results = CNAME_direct_instance.analyze()
56
55
  if results and len(results) > 0:
57
56
  for r in results:
@@ -0,0 +1,144 @@
1
+ # dnstlsrpt.py
2
+ #
3
+ # Checks for and parses common TLS-RPT TXT records, e.g. _smtp._tls.target.domain
4
+ #
5
+ # TLS-RPT policies may contain email addresses or URL's for reporting destinations, typically the email addresses are software processed inboxes, but they may also be to individual humans or team inboxes.
6
+ #
7
+ # The domain portion of any email address or URL is also passively checked and added as appropriate, for additional inspection by other modules.
8
+ #
9
+ # Example records,
10
+ # _smtp._tls.example.com TXT "v=TLSRPTv1;rua=https://tlsrpt.azurewebsites.net/report"
11
+ # _smtp._tls.example.net TXT "v=TLSRPTv1; rua=mailto:sts-reports@example.net;"
12
+ #
13
+ # TODO: extract %{UNIQUE_ID}% from hosted services as ORG_STUB ?
14
+ # e.g. %{UNIQUE_ID}%@tlsrpt.hosted.service.provider is usually a tenant specific ID.
15
+ # e.g. tlsrpt@%{UNIQUE_ID}%.hosted.service.provider is usually a tenant specific ID.
16
+
17
+ from bbot.modules.base import BaseModule
18
+ from bbot.core.helpers.dns.helpers import service_record
19
+
20
+ import re
21
+
22
+ from bbot.core.helpers.regexes import email_regex, url_regexes
23
+
24
+ _tlsrpt_regex = r"^v=(?P<v>TLSRPTv[0-9]+); *(?P<kvps>.*)$"
25
+ tlsrpt_regex = re.compile(_tlsrpt_regex, re.I)
26
+
27
+ _tlsrpt_kvp_regex = r"(?P<k>\w+)=(?P<v>[^;]+);*"
28
+ tlsrpt_kvp_regex = re.compile(_tlsrpt_kvp_regex)
29
+
30
+ _csul = r"(?P<uri>[^, ]+)"
31
+ csul = re.compile(_csul)
32
+
33
+
34
+ class dnstlsrpt(BaseModule):
35
+ watched_events = ["DNS_NAME"]
36
+ produced_events = ["EMAIL_ADDRESS", "URL_UNVERIFIED", "RAW_DNS_RECORD"]
37
+ flags = ["subdomain-enum", "cloud-enum", "email-enum", "passive", "safe"]
38
+ meta = {
39
+ "description": "Check for TLS-RPT records",
40
+ "author": "@colin-stubbs",
41
+ "created_date": "2024-07-26",
42
+ }
43
+ options = {
44
+ "emit_emails": True,
45
+ "emit_raw_dns_records": False,
46
+ "emit_urls": True,
47
+ "emit_vulnerabilities": True,
48
+ }
49
+ options_desc = {
50
+ "emit_emails": "Emit EMAIL_ADDRESS events",
51
+ "emit_raw_dns_records": "Emit RAW_DNS_RECORD events",
52
+ "emit_urls": "Emit URL_UNVERIFIED events",
53
+ "emit_vulnerabilities": "Emit VULNERABILITY events",
54
+ }
55
+
56
+ async def setup(self):
57
+ self.emit_emails = self.config.get("emit_emails", True)
58
+ self.emit_raw_dns_records = self.config.get("emit_raw_dns_records", False)
59
+ self.emit_urls = self.config.get("emit_urls", True)
60
+ self.emit_vulnerabilities = self.config.get("emit_vulnerabilities", True)
61
+ return await super().setup()
62
+
63
+ def _incoming_dedup_hash(self, event):
64
+ # dedupe by parent
65
+ parent_domain = self.helpers.parent_domain(event.data)
66
+ return hash(parent_domain), "already processed parent domain"
67
+
68
+ async def filter_event(self, event):
69
+ if "_wildcard" in str(event.host).split("."):
70
+ return False, "event is wildcard"
71
+
72
+ # there's no value in inspecting service records
73
+ if service_record(event.host) == True:
74
+ return False, "service record detected"
75
+
76
+ return True
77
+
78
+ async def handle_event(self, event):
79
+ rdtype = "TXT"
80
+ tags = ["tlsrpt-record"]
81
+ hostname = f"_smtp._tls.{event.host}"
82
+
83
+ r = await self.helpers.resolve_raw(hostname, type=rdtype)
84
+
85
+ if r:
86
+ raw_results, errors = r
87
+ for answer in raw_results:
88
+ if self.emit_raw_dns_records:
89
+ await self.emit_event(
90
+ {"host": hostname, "type": rdtype, "answer": answer.to_text()},
91
+ "RAW_DNS_RECORD",
92
+ parent=event,
93
+ tags=tags.append(f"{rdtype.lower()}-record"),
94
+ context=f"{rdtype} lookup on {hostname} produced {{event.type}}",
95
+ )
96
+
97
+ # we need to fix TXT data that may have been split across two different rdata's
98
+ # e.g. we will get a single string, but within that string we may have two parts such as:
99
+ # answer = '"part 1 that was really long" "part 2 that did not fit in part 1"'
100
+ # NOTE: the leading and trailing double quotes are essential as part of a raw DNS TXT record, or another record type that contains a free form text string as a component.
101
+ s = answer.to_text().strip('"').replace('" "', "")
102
+
103
+ # validate TLSRPT record, tag appropriately
104
+ tlsrpt_match = tlsrpt_regex.search(s)
105
+
106
+ if (
107
+ tlsrpt_match
108
+ and tlsrpt_match.group("v")
109
+ and tlsrpt_match.group("kvps")
110
+ and tlsrpt_match.group("kvps") != ""
111
+ ):
112
+ for kvp_match in tlsrpt_kvp_regex.finditer(tlsrpt_match.group("kvps")):
113
+ key = kvp_match.group("k").lower()
114
+
115
+ if key == "rua":
116
+ for csul_match in csul.finditer(kvp_match.group("v")):
117
+ if csul_match.group("uri"):
118
+ for match in email_regex.finditer(csul_match.group("uri")):
119
+ start, end = match.span()
120
+ email = csul_match.group("uri")[start:end]
121
+
122
+ if self.emit_emails:
123
+ await self.emit_event(
124
+ email,
125
+ "EMAIL_ADDRESS",
126
+ tags=tags.append(f"tlsrpt-record-{key}"),
127
+ parent=event,
128
+ )
129
+
130
+ for url_regex in url_regexes:
131
+ for match in url_regex.finditer(csul_match.group("uri")):
132
+ start, end = match.span()
133
+ url = csul_match.group("uri")[start:end]
134
+
135
+ if self.emit_urls:
136
+ await self.emit_event(
137
+ url,
138
+ "URL_UNVERIFIED",
139
+ tags=tags.append(f"tlsrpt-record-{key}"),
140
+ parent=event,
141
+ )
142
+
143
+
144
+ # EOF
@@ -32,7 +32,6 @@ class dotnetnuke(BaseModule):
32
32
  self.interactsh_instance = None
33
33
 
34
34
  if self.scan.config.get("interactsh_disable", False) == False:
35
-
36
35
  try:
37
36
  self.interactsh_instance = self.helpers.interactsh()
38
37
  self.interactsh_domain = await self.interactsh_instance.register(callback=self.interactsh_callback)
@@ -114,7 +113,6 @@ class dotnetnuke(BaseModule):
114
113
  )
115
114
 
116
115
  if "endpoint" not in event.tags:
117
-
118
116
  # NewsArticlesSlider ImageHandler.ashx File Read
119
117
  result = await self.helpers.request(
120
118
  f'{event.data["url"]}/DesktopModules/dnnUI_NewsArticlesSlider/ImageHandler.ashx?img=~/web.config'
@@ -62,7 +62,6 @@ def _exclude_key(original_dict, key_to_exclude):
62
62
 
63
63
 
64
64
  def extract_params_url(parsed_url):
65
-
66
65
  params = parse_qs(parsed_url.query)
67
66
  flat_params = {k: v[0] for k, v in params.items()}
68
67
 
@@ -94,7 +93,6 @@ def extract_params_location(location_header_value, original_parsed_url):
94
93
 
95
94
 
96
95
  class YaraRuleSettings:
97
-
98
96
  def __init__(self, description, tags, emit_match):
99
97
  self.description = description
100
98
  self.tags = tags
@@ -263,7 +261,6 @@ class ExcavateRule:
263
261
 
264
262
 
265
263
  class CustomExtractor(ExcavateRule):
266
-
267
264
  def __init__(self, excavate):
268
265
  super().__init__(excavate)
269
266
 
@@ -358,7 +355,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
358
355
  )
359
356
 
360
357
  class ParameterExtractor(ExcavateRule):
361
-
362
358
  yara_rules = {}
363
359
 
364
360
  class ParameterExtractorRule:
@@ -372,7 +368,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
372
368
  self.result = result
373
369
 
374
370
  class GetJquery(ParameterExtractorRule):
375
-
376
371
  name = "GET jquery"
377
372
  discovery_regex = r"/\$.get\([^\)].+\)/ nocase"
378
373
  extraction_regex = re.compile(r"\$.get\([\'\"](.+)[\'\"].+(\{.+\})\)")
@@ -393,8 +388,12 @@ class excavate(BaseInternalModule, BaseInterceptModule):
393
388
  for action, extracted_parameters in extracted_results:
394
389
  extracted_parameters_dict = self.convert_to_dict(extracted_parameters)
395
390
  for parameter_name, original_value in extracted_parameters_dict.items():
396
- yield self.output_type, parameter_name, original_value, action, _exclude_key(
397
- extracted_parameters_dict, parameter_name
391
+ yield (
392
+ self.output_type,
393
+ parameter_name,
394
+ original_value,
395
+ action,
396
+ _exclude_key(extracted_parameters_dict, parameter_name),
398
397
  )
399
398
 
400
399
  class PostJquery(GetJquery):
@@ -418,8 +417,12 @@ class excavate(BaseInternalModule, BaseInterceptModule):
418
417
  k: v[0] if isinstance(v, list) and len(v) == 1 else v for k, v in query_strings.items()
419
418
  }
420
419
  for parameter_name, original_value in query_strings_dict.items():
421
- yield self.output_type, parameter_name, original_value, url, _exclude_key(
422
- query_strings_dict, parameter_name
420
+ yield (
421
+ self.output_type,
422
+ parameter_name,
423
+ original_value,
424
+ url,
425
+ _exclude_key(query_strings_dict, parameter_name),
423
426
  )
424
427
 
425
428
  class GetForm(ParameterExtractorRule):
@@ -444,8 +447,12 @@ class excavate(BaseInternalModule, BaseInterceptModule):
444
447
  form_parameters[parameter_name] = original_value
445
448
 
446
449
  for parameter_name, original_value in form_parameters.items():
447
- yield self.output_type, parameter_name, original_value, form_action, _exclude_key(
448
- form_parameters, parameter_name
450
+ yield (
451
+ self.output_type,
452
+ parameter_name,
453
+ original_value,
454
+ form_action,
455
+ _exclude_key(form_parameters, parameter_name),
449
456
  )
450
457
 
451
458
  class PostForm(GetForm):
@@ -485,7 +492,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
485
492
  endpoint,
486
493
  additional_params,
487
494
  ) in extracted_params:
488
-
489
495
  self.excavate.debug(
490
496
  f"Found Parameter [{parameter_name}] in [{parameterExtractorSubModule.name}] ParameterExtractor Submodule"
491
497
  )
@@ -497,7 +503,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
497
503
  )
498
504
 
499
505
  if self.excavate.helpers.validate_parameter(parameter_name, parameter_type):
500
-
501
506
  if self.excavate.in_bl(parameter_name) == False:
502
507
  parsed_url = urlparse(url)
503
508
  description = f"HTTP Extracted Parameter [{parameter_name}] ({parameterExtractorSubModule.name} Submodule)"
@@ -532,7 +537,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
532
537
  await self.report(domain, event, yara_rule_settings, discovery_context, event_type="DNS_NAME")
533
538
 
534
539
  class EmailExtractor(ExcavateRule):
535
-
536
540
  yara_rules = {
537
541
  "email": 'rule email { meta: description = "contains email address" strings: $email = /[^\\W_][\\w\\-\\.\\+\']{0,100}@[a-zA-Z0-9\\-]{1,100}(\\.[a-zA-Z0-9\\-]{1,100})*\\.[a-zA-Z]{2,63}/ nocase fullword condition: $email }',
538
542
  }
@@ -551,7 +555,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
551
555
  }
552
556
 
553
557
  class ErrorExtractor(ExcavateRule):
554
-
555
558
  signatures = {
556
559
  "PHP_1": r"/\.php on line [0-9]+/",
557
560
  "PHP_2": r"/\.php<\/b> on line <b>[0-9]+/",
@@ -589,7 +592,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
589
592
  await self.report(event_data, event, yara_rule_settings, discovery_context, event_type="FINDING")
590
593
 
591
594
  class SerializationExtractor(ExcavateRule):
592
-
593
595
  regexes = {
594
596
  "Java": re.compile(r"[^a-zA-Z0-9\/+]rO0[a-zA-Z0-9+\/]+={0,2}"),
595
597
  "DOTNET": re.compile(r"[^a-zA-Z0-9\/+]AAEAAAD\/\/[a-zA-Z0-9\/+]+={0,2}"),
@@ -619,7 +621,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
619
621
  await self.report(event_data, event, yara_rule_settings, discovery_context, event_type="FINDING")
620
622
 
621
623
  class FunctionalityExtractor(ExcavateRule):
622
-
623
624
  yara_rules = {
624
625
  "File_Upload_Functionality": r'rule File_Upload_Functionality { meta: description = "contains file upload functionality" strings: $fileuploadfunc = /<input[^>]+type=["\']?file["\']?[^>]+>/ nocase condition: $fileuploadfunc }',
625
626
  "Web_Service_WSDL": r'rule Web_Service_WSDL { meta: emit_match = "True" description = "contains a web service WSDL URL" strings: $wsdl = /https?:\/\/[^\s]*\.(wsdl)/ nocase condition: $wsdl }',
@@ -704,7 +705,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
704
705
  tag_attribute_regex = bbot_regexes.tag_attribute_regex
705
706
 
706
707
  async def process(self, yara_results, event, yara_rule_settings, discovery_context):
707
-
708
708
  for identifier, results in yara_results.items():
709
709
  urls_found = 0
710
710
  final_url = ""
@@ -897,7 +897,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
897
897
  decoded_data = await self.helpers.re.recursive_decode(data)
898
898
 
899
899
  if self.parameter_extraction:
900
-
901
900
  content_type_lower = content_type.lower() if content_type else ""
902
901
  extraction_map = {
903
902
  "json": self.helpers.extract_params_json,
@@ -934,7 +933,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
934
933
  self.hugewarning(f"YARA Rule {rule_name} not found in pre-compiled rules")
935
934
 
936
935
  async def handle_event(self, event):
937
-
938
936
  if event.type == "HTTP_RESPONSE":
939
937
  # Harvest GET parameters from URL, if it came directly from the target, and parameter extraction is enabled
940
938
  if (
@@ -1023,7 +1021,6 @@ class excavate(BaseInternalModule, BaseInterceptModule):
1023
1021
 
1024
1022
  # Try to extract parameters from the redirect URL
1025
1023
  if self.parameter_extraction:
1026
-
1027
1024
  for (
1028
1025
  method,
1029
1026
  parsed_url,
@@ -82,7 +82,6 @@ class paramminer_headers(BaseModule):
82
82
  header_regex = re.compile(r"^[!#$%&\'*+\-.^_`|~0-9a-zA-Z]+: [^\r\n]+$")
83
83
 
84
84
  async def setup(self):
85
-
86
85
  self.recycle_words = self.config.get("recycle_words", True)
87
86
  self.event_dict = {}
88
87
  self.already_checked = set()
@@ -157,7 +156,6 @@ class paramminer_headers(BaseModule):
157
156
  )
158
157
 
159
158
  async def handle_event(self, event):
160
-
161
159
  # If recycle words is enabled, we will collect WEB_PARAMETERS we find to build our list in finish()
162
160
  # We also collect any parameters of type "SPECULATIVE"
163
161
  if event.type == "WEB_PARAMETER":
@@ -201,7 +199,7 @@ class paramminer_headers(BaseModule):
201
199
  return
202
200
  for count, args, kwargs in self.gen_count_args(url):
203
201
  r = await self.helpers.request(*args, **kwargs)
204
- if r is not None and not ((str(r.status_code)[0] in ("4", "5"))):
202
+ if r is not None and not (str(r.status_code)[0] in ("4", "5")):
205
203
  return count
206
204
 
207
205
  def gen_count_args(self, url):
@@ -240,7 +238,6 @@ class paramminer_headers(BaseModule):
240
238
  return await compare_helper.compare(url, headers=test_headers, check_reflection=(len(header_list) == 1))
241
239
 
242
240
  async def finish(self):
243
-
244
241
  untested_matches = sorted(list(self.extracted_words_master.copy()))
245
242
  for url, (event, batch_size) in list(self.event_dict.items()):
246
243
  try:
@@ -13,7 +13,7 @@ class trufflehog(BaseModule):
13
13
  }
14
14
 
15
15
  options = {
16
- "version": "3.84.0",
16
+ "version": "3.84.1",
17
17
  "config": "",
18
18
  "only_verified": True,
19
19
  "concurrency": 8,
@@ -10,7 +10,6 @@ log = logging.getLogger("bbot.presets.args")
10
10
 
11
11
 
12
12
  class BBOTArgs:
13
-
14
13
  # module config options to exclude from validation
15
14
  exclude_from_validation = re.compile(r".*modules\.[a-z0-9_]+\.(?:batch_size|module_threads)$")
16
15
 
@@ -65,7 +65,6 @@ omegaconf.OmegaConf.register_new_resolver("env", env_resolver)
65
65
 
66
66
 
67
67
  class BBOTEnviron:
68
-
69
68
  def __init__(self, preset):
70
69
  self.preset = preset
71
70
 
@@ -10,7 +10,6 @@ class TestAsset_Inventory(ModuleTestBase):
10
10
  masscan_output = """{ "ip": "127.0.0.1", "timestamp": "1680197558", "ports": [ {"port": 9999, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 54} ] }"""
11
11
 
12
12
  async def setup_before_prep(self, module_test):
13
-
14
13
  async def run_masscan(command, *args, **kwargs):
15
14
  if "masscan" in command[:2]:
16
15
  targets = open(command[11]).read().splitlines()
@@ -7,7 +7,6 @@ class TestDnsbrute(ModuleTestBase):
7
7
  config_overrides = {"modules": {"dnsbrute": {"wordlist": str(subdomain_wordlist), "max_depth": 3}}}
8
8
 
9
9
  async def setup_after_prep(self, module_test):
10
-
11
10
  old_run_live = module_test.scan.helpers.run_live
12
11
 
13
12
  async def new_run_live(*command, check=False, text=True, **kwargs):
@@ -11,7 +11,6 @@ class TestDnsbrute_mutations(ModuleTestBase):
11
11
  ]
12
12
 
13
13
  async def setup_after_prep(self, module_test):
14
-
15
14
  old_run_live = module_test.scan.helpers.run_live
16
15
 
17
16
  async def new_run_live(*command, check=False, text=True, **kwargs):
@@ -8,7 +8,6 @@ class TestDNSCommonSRV(ModuleTestBase):
8
8
  config_overrides = {"dns": {"minimal": False}}
9
9
 
10
10
  async def setup_after_prep(self, module_test):
11
-
12
11
  old_run_live = module_test.scan.helpers.run_live
13
12
 
14
13
  async def new_run_live(*command, check=False, text=True, **kwargs):