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.
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/PKG-INFO +1 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/__init__.py +1 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/cli.py +0 -4
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/config/files.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/event/base.py +0 -3
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/dns.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/engine.py +0 -2
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/mock.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/libmagic.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/process.py +0 -2
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/validators.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/engine.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/web.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/modules.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/db/sql/models.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/baddns.py +0 -2
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/baddns_direct.py +0 -1
- bbot-2.3.0.5376rc0/bbot/modules/dnstlsrpt.py +144 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dotnetnuke.py +0 -2
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/excavate.py +18 -21
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/paramminer_headers.py +1 -4
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/trufflehog.py +1 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/args.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/environ.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +0 -1
- bbot-2.3.0.5376rc0/bbot/test/test_step_2/module_tests/test_module_dnstlsrpt.py +64 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -2
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py +0 -20
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -6
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +0 -7
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_portscan.py +0 -1
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/pyproject.toml +4 -3
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/LICENSE +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/README.md +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/config/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/config/logger.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/core.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/engine.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/event/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/event/helpers.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/flags.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/async_helpers.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/bloom.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/cache.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/command.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/depsinstaller/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/depsinstaller/installer.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/depsinstaller/sudo_askpass.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/diff.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/brute.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/dns/helpers.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/files.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/helper.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/interactsh.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/misc.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/names_generator.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/ntlm.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/ratelimiter.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/regex.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/regexes.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/url.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/client.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/web/ssl_context.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/helpers/wordcloud.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/multiprocess.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/core/shared_deps.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/defaults.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/errors.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/logger.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ajaxpro.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/anubisdb.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/apkpure.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/azure_realm.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/azure_tenant.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/baddns_zone.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/badsecrets.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/base.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bevigil.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/binaryedge.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_amazon.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_azure.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_digitalocean.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_file_enum.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_firebase.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bucket_google.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bufferoverrun.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/builtwith.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/bypass403.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/c99.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/censys.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/certspotter.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/chaos.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/code_repository.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/columbus.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/credshed.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/crt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/dastardly.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/ffuf.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/nuclei.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/deadly/vhost.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dehashed.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/digitorus.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsbimi.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsbrute.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsbrute_mutations.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnscaa.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnscommonsrv.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dnsdumpster.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/docker_pull.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/dockerhub.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/emailformat.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/extractous.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ffuf_shortnames.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/filedownload.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/fingerprintx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/fullhunt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/generic_ssrf.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/git.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/git_clone.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/github_codesearch.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/github_org.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/github_workflows.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/gitlab.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/google_playstore.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/gowitness.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/hackertarget.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/host_header.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/httpx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/hunt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/hunterio.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/iis_shortnames.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/aggregate.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/base.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/cloudcheck.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/dnsresolve.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internal/speculate.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/internetdb.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ip2location.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ipneighbor.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ipstack.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/jadx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/leakix.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/myssl.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/newsletters.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/ntlm.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/oauth.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/otx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/asset_inventory.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/base.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/csv.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/discord.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/emails.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/http.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/json.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/mysql.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/neo4j.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/postgres.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/python.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/slack.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/splunk.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/sqlite.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/stdout.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/subdomains.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/teams.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/txt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/web_report.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/output/websocket.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/paramminer_cookies.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/paramminer_getparams.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/passivetotal.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/pgp.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/portscan.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/postman.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/postman_download.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/rapiddns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/report/affiliates.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/report/asn.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/report/base.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/robots.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/secretsdb.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/securitytrails.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/securitytxt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/shodan_dns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/sitedossier.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/skymem.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/smuggler.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/social.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/sslcert.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/subdomaincenter.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/subdomainradar.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/telerik.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/bucket.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/github.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/postman.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/shodan.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/sql.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/subdomain_enum.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/templates/webhook.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/trickest.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/url_manipulation.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/urlscan.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/viewdns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/virustotal.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wafw00f.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wappalyzer.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wayback.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/wpscan.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/modules/zoomeye.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/baddns-thorough.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/cloud-enum.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/code-enum.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/email-enum.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/fast.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/kitchen-sink.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/spider.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/subdomain-enum.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/dirbust-heavy.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/dirbust-light.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/dotnet-audit.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/iis-shortnames.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web/paramminer.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web-basic.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web-screenshots.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/presets/web-thorough.yml +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/dispatcher.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/manager.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/conditions.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/path.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/preset/preset.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/scanner.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/stats.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scanner/target.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/scripts/docs.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/bbot_fixtures.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/conftest.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/coverage.cfg +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/fastapi_test.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/owasp_mastg.apk +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/run_tests.sh +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test.conf +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_output.ndjson +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test__module__tests.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_bbot_fastapi.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_bloom_filter.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_cli.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_command.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_config.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_depsinstaller.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_dns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_docs.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_engine.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_events.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_files.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_helpers.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_manager_deduplication.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_manager_scope_accuracy.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_modules_basic.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_presets.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_python_api.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_regexes.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_scan.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_scope.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_target.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_1/test_web.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/base.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_affiliates.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_aggregate.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ajaxpro.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_anubisdb.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_apkpure.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_asn.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_azure_realm.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_azure_tenant.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_baddns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_zone.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_badsecrets.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bevigil.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_binaryedge.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_digitalocean.py +0 -0
- {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
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_firebase.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_google.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_builtwith.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_bypass403.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_c99.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_certspotter.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_chaos.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_code_repository.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_columbus.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_credshed.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_crt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_csv.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dastardly.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dehashed.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_digitorus.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_discord.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnscaa.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsresolve.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_docker_pull.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dockerhub.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_emailformat.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_emails.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_extractous.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_filedownload.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_fingerprintx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_fullhunt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_generic_ssrf.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_git.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_git_clone.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_github_codesearch.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_github_org.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_github_workflows.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_gitlab.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_google_playstore.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_gowitness.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_hackertarget.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_host_header.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_http.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_httpx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_hunt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_hunterio.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_iis_shortnames.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_internetdb.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ip2location.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ipneighbor.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ipstack.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_jadx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_json.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_leakix.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_mysql.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_myssl.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_neo4j.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_newsletters.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_ntlm.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_oauth.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_otx.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_passivetotal.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_pgp.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_postgres.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_postman.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_postman_download.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_python.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_rapiddns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_robots.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_secretsdb.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_securitytrails.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_securitytxt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_sitedossier.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_skymem.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_slack.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_smuggler.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_social.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_speculate.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_splunk.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_sqlite.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_sslcert.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_stdout.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_subdomains.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_teams.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_telerik.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_trickest.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_trufflehog.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_txt.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_url_manipulation.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_urlscan.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_vhost.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_viewdns.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_virustotal.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wafw00f.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wappalyzer.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wayback.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_web_report.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_websocket.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_wpscan.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_zoomeye.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/template_tests/__init__.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/testsslcert.pem +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/testsslkey.pem +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/devops_mutations.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/ffuf_shortname_candidates.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/ms_on_prem_subdomains.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/nameservers.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/paramminer_headers.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/paramminer_parameters.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/top_open_ports_nmap.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/valid_url_schemes.txt +0 -0
- {bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/wordlists/wordninja_dns.txt.gz +0 -0
|
@@ -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", "")
|
|
@@ -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
|
|
|
@@ -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):
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
397
|
-
|
|
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
|
|
422
|
-
|
|
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
|
|
448
|
-
|
|
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 (
|
|
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:
|
|
@@ -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()
|
{bbot-2.3.0.5368rc0 → bbot-2.3.0.5376rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py
RENAMED
|
@@ -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):
|
|
@@ -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):
|