bbot 2.4.0.6007rc0__tar.gz → 2.4.0.6037rc0__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.4.0.6007rc0 → bbot-2.4.0.6037rc0}/PKG-INFO +2 -2
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/__init__.py +1 -1
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/cli.py +7 -1
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/config/logger.py +5 -10
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/names_generator.py +10 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/logger.py +9 -0
- bbot-2.4.0.6037rc0/bbot/modules/crt.py +40 -0
- bbot-2.4.0.6007rc0/bbot/modules/crt.py → bbot-2.4.0.6037rc0/bbot/modules/crt_db.py +8 -4
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/deadly/nuclei.py +1 -1
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/unarchive.py +3 -2
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/websocket.py +12 -6
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/trufflehog.py +1 -1
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/scanner.py +3 -6
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/bbot_fixtures.py +20 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_cli.py +12 -2
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_python_api.py +10 -10
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py +3 -3
- bbot-2.4.0.6037rc0/bbot/test/test_step_2/module_tests/test_module_crt.py +15 -0
- bbot-2.4.0.6007rc0/bbot/test/test_step_2/module_tests/test_module_crt.py → bbot-2.4.0.6037rc0/bbot/test/test_step_2/module_tests/test_module_crt_db.py +1 -3
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py +5 -5
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py +4 -7
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/pyproject.toml +2 -2
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/LICENSE +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/README.md +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/config/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/config/files.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/core.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/engine.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/event/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/event/base.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/event/helpers.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/flags.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/async_helpers.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/bloom.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/cache.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/command.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/depsinstaller/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/depsinstaller/installer.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/depsinstaller/sudo_askpass.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/diff.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/dns/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/dns/brute.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/dns/dns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/dns/engine.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/dns/helpers.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/dns/mock.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/files.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/helper.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/interactsh.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/libmagic.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/misc.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/ntlm.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/process.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/ratelimiter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/regex.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/regexes.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/url.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/validators.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/web/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/web/client.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/web/engine.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/web/ssl_context.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/web/web.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/helpers/wordcloud.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/modules.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/multiprocess.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/core/shared_deps.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/db/sql/models.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/defaults.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/errors.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/ajaxpro.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/anubisdb.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/apkpure.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/azure_realm.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/azure_tenant.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/baddns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/baddns_direct.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/baddns_zone.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/badsecrets.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/base.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bevigil.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/binaryedge.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bucket_amazon.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bucket_azure.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bucket_digitalocean.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bucket_file_enum.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bucket_firebase.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bucket_google.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bufferoverrun.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/builtwith.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/bypass403.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/c99.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/censys.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/certspotter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/chaos.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/code_repository.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/credshed.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/deadly/dastardly.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/deadly/ffuf.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/deadly/vhost.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dehashed.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/digitorus.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dnsbimi.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dnsbrute.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dnsbrute_mutations.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dnscaa.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dnscommonsrv.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dnsdumpster.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dnstlsrpt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/docker_pull.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dockerhub.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/dotnetnuke.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/emailformat.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/extractous.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/ffuf_shortnames.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/filedownload.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/fingerprintx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/fullhunt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/generic_ssrf.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/git.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/git_clone.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/gitdumper.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/github_codesearch.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/github_org.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/github_workflows.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/gitlab.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/google_playstore.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/gowitness.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/hackertarget.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/host_header.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/httpx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/hunt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/hunterio.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/iis_shortnames.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/aggregate.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/base.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/cloudcheck.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/dnsresolve.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/excavate.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/internal/speculate.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/ip2location.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/ipneighbor.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/ipstack.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/jadx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/leakix.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/myssl.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/newsletters.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/ntlm.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/oauth.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/otx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/asset_inventory.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/base.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/csv.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/discord.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/emails.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/http.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/json.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/mysql.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/neo4j.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/nmap_xml.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/postgres.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/python.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/slack.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/splunk.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/sqlite.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/stdout.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/subdomains.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/teams.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/txt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/web_parameters.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/output/web_report.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/paramminer_cookies.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/paramminer_getparams.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/paramminer_headers.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/passivetotal.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/pgp.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/portfilter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/portscan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/postman.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/postman_download.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/rapiddns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/report/affiliates.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/report/asn.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/report/base.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/robots.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/securitytrails.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/securitytxt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/shodan_dns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/shodan_idb.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/sitedossier.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/skymem.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/smuggler.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/social.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/sslcert.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/subdomaincenter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/subdomainradar.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/telerik.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/templates/bucket.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/templates/github.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/templates/postman.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/templates/shodan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/templates/sql.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/templates/subdomain_enum.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/templates/webhook.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/trickest.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/url_manipulation.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/urlscan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/viewdns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/virustotal.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/wafw00f.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/wappalyzer.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/wayback.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/wpscan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/modules/zoomeye.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/baddns-intense.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/cloud-enum.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/code-enum.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/email-enum.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/fast.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/kitchen-sink.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/nuclei/nuclei-budget.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/nuclei/nuclei-intense.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/nuclei/nuclei-technology.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/nuclei/nuclei.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/spider-intense.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/spider.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/subdomain-enum.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/tech-detect.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web/dirbust-heavy.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web/dirbust-light.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web/dotnet-audit.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web/iis-shortnames.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web/paramminer.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web-basic.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web-screenshots.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/presets/web-thorough.yml +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/dispatcher.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/manager.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/preset/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/preset/args.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/preset/conditions.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/preset/environ.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/preset/path.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/preset/preset.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/stats.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scanner/target.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/scripts/docs.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/conftest.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/coverage.cfg +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/fastapi_test.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/owasp_mastg.apk +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/run_tests.sh +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test.conf +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_output.ndjson +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test__module__tests.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_bbot_fastapi.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_bloom_filter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_command.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_config.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_depsinstaller.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_dns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_docs.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_engine.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_events.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_files.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_helpers.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_manager_deduplication.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_manager_scope_accuracy.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_modules_basic.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_presets.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_regexes.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_scan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_scope.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_target.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_1/test_web.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/base.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_affiliates.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_aggregate.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_ajaxpro.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_anubisdb.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_apkpure.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_asn.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_azure_realm.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_azure_tenant.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_baddns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_baddns_zone.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_badsecrets.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bevigil.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_binaryedge.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_digitalocean.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_file_enum.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_firebase.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bucket_google.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_builtwith.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_bypass403.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_c99.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_certspotter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_chaos.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_code_repository.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_credshed.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_csv.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dastardly.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dehashed.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_digitorus.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_discord.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnscaa.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnsresolve.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dnstlsrpt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_docker_pull.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dockerhub.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_emailformat.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_emails.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_extractous.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_filedownload.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_fingerprintx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_fullhunt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_generic_ssrf.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_git.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_git_clone.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_gitdumper.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_github_codesearch.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_github_org.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_github_workflows.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_gitlab.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_google_playstore.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_gowitness.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_hackertarget.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_host_header.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_http.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_httpx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_hunt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_hunterio.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_iis_shortnames.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_ip2location.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_ipneighbor.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_ipstack.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_jadx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_json.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_leakix.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_mysql.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_myssl.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_neo4j.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_newsletters.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_nmap_xml.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_ntlm.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_oauth.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_otx.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_passivetotal.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_pgp.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_portfilter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_portscan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_postgres.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_postman.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_postman_download.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_python.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_rapiddns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_robots.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_securitytrails.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_securitytxt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_shodan_idb.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_sitedossier.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_skymem.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_slack.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_smuggler.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_social.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_speculate.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_splunk.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_sqlite.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_sslcert.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_stdout.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_subdomains.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_teams.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_telerik.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_trickest.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_trufflehog.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_txt.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_unarchive.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_url_manipulation.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_urlscan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_vhost.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_viewdns.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_virustotal.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_wafw00f.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_wappalyzer.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_wayback.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_web_parameters.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_web_report.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_websocket.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_wpscan.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_zoomeye.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/template_tests/__init__.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/testsslcert.pem +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/testsslkey.pem +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/devops_mutations.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/ms_on_prem_subdomains.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/nameservers.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/paramminer_headers.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/paramminer_parameters.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/top_open_ports_nmap.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/valid_url_schemes.txt +0 -0
- {bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/wordlists/wordninja_dns.txt.gz +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: bbot
|
|
3
|
-
Version: 2.4.0.
|
|
3
|
+
Version: 2.4.0.6037rc0
|
|
4
4
|
Summary: OSINT automation for hackers.
|
|
5
5
|
License: GPL-3.0
|
|
6
6
|
Keywords: python,cli,automation,osint,threat-intel,intelligence,neo4j,scanner,python-library,hacking,recursion,pentesting,recon,command-line-tool,bugbounty,subdomains,security-tools,subdomain-scanner,osint-framework,attack-surface,subdomain-enumeration,osint-tool
|
|
@@ -42,7 +42,7 @@ Requires-Dist: socksio (>=1.0.0,<2.0.0)
|
|
|
42
42
|
Requires-Dist: tabulate (==0.8.10)
|
|
43
43
|
Requires-Dist: tldextract (>=5.1.1,<6.0.0)
|
|
44
44
|
Requires-Dist: unidecode (>=1.3.8,<2.0.0)
|
|
45
|
-
Requires-Dist: websockets (>=
|
|
45
|
+
Requires-Dist: websockets (>=14.0.0,<16.0.0)
|
|
46
46
|
Requires-Dist: wordninja (>=2.0.0,<3.0.0)
|
|
47
47
|
Requires-Dist: xmltojson (>=2.0.2,<3.0.0)
|
|
48
48
|
Requires-Dist: yara-python (>=4.5.1,<5.0.0)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
|
+
import io
|
|
3
4
|
import sys
|
|
4
5
|
import logging
|
|
5
6
|
import multiprocessing
|
|
@@ -240,7 +241,12 @@ async def _main():
|
|
|
240
241
|
|
|
241
242
|
# set stdout and stderr to blocking mode
|
|
242
243
|
# this is needed to prevent BlockingIOErrors in logging etc.
|
|
243
|
-
fds = [
|
|
244
|
+
fds = []
|
|
245
|
+
for stream in [sys.stdout, sys.stderr]:
|
|
246
|
+
try:
|
|
247
|
+
fds.append(stream.fileno())
|
|
248
|
+
except io.UnsupportedOperation:
|
|
249
|
+
log.debug(f"Can't get fileno for {stream}")
|
|
244
250
|
for fd in fds:
|
|
245
251
|
flags = fcntl.fcntl(fd, fcntl.F_GETFL)
|
|
246
252
|
fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~os.O_NONBLOCK)
|
|
@@ -9,9 +9,8 @@ from pathlib import Path
|
|
|
9
9
|
from contextlib import suppress
|
|
10
10
|
|
|
11
11
|
from ..helpers.misc import mkdir, error_and_exit
|
|
12
|
-
from ...logger import colorize, loglevel_mapping
|
|
13
12
|
from ..multiprocess import SHARED_INTERPRETER_STATE
|
|
14
|
-
|
|
13
|
+
from ...logger import colorize, loglevel_mapping, GzipRotatingFileHandler
|
|
15
14
|
|
|
16
15
|
debug_format = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s %(filename)s:%(lineno)s %(message)s")
|
|
17
16
|
|
|
@@ -216,15 +215,11 @@ class BBOTLogger:
|
|
|
216
215
|
if not mkdir(log_dir, raise_error=False):
|
|
217
216
|
error_and_exit(f"Failure creating or error writing to BBOT logs directory ({log_dir})")
|
|
218
217
|
|
|
219
|
-
# Main log file
|
|
220
|
-
main_handler =
|
|
221
|
-
f"{log_dir}/bbot.log", when="d", interval=1, backupCount=14
|
|
222
|
-
)
|
|
218
|
+
# Main log file (compressed)
|
|
219
|
+
main_handler = GzipRotatingFileHandler(f"{log_dir}/bbot.log", when="d", interval=1, backupCount=14)
|
|
223
220
|
|
|
224
|
-
# Separate log file for debugging
|
|
225
|
-
debug_handler =
|
|
226
|
-
f"{log_dir}/bbot.debug.log", when="d", interval=1, backupCount=14
|
|
227
|
-
)
|
|
221
|
+
# Separate log file for debugging (compressed)
|
|
222
|
+
debug_handler = GzipRotatingFileHandler(f"{log_dir}/bbot.debug.log", when="d", interval=1, backupCount=14)
|
|
228
223
|
|
|
229
224
|
# Log to stderr
|
|
230
225
|
stderr_handler = logging.StreamHandler(sys.stderr)
|
|
@@ -81,6 +81,7 @@ adjectives = [
|
|
|
81
81
|
"expired",
|
|
82
82
|
"exquisite",
|
|
83
83
|
"extreme",
|
|
84
|
+
"fermented",
|
|
84
85
|
"ferocious",
|
|
85
86
|
"fiendish",
|
|
86
87
|
"fierce",
|
|
@@ -110,6 +111,7 @@ adjectives = [
|
|
|
110
111
|
"heinous",
|
|
111
112
|
"hellish",
|
|
112
113
|
"hideous",
|
|
114
|
+
"hubristic",
|
|
113
115
|
"hysterical",
|
|
114
116
|
"imaginary",
|
|
115
117
|
"immense",
|
|
@@ -182,6 +184,7 @@ adjectives = [
|
|
|
182
184
|
"plump",
|
|
183
185
|
"powerful",
|
|
184
186
|
"premature",
|
|
187
|
+
"pretentious",
|
|
185
188
|
"profound",
|
|
186
189
|
"promiscuous",
|
|
187
190
|
"psychedelic",
|
|
@@ -214,6 +217,7 @@ adjectives = [
|
|
|
214
217
|
"sneaky",
|
|
215
218
|
"soft",
|
|
216
219
|
"sophisticated",
|
|
220
|
+
"spasmodic",
|
|
217
221
|
"spicy",
|
|
218
222
|
"spiteful",
|
|
219
223
|
"squishy",
|
|
@@ -268,6 +272,7 @@ adjectives = [
|
|
|
268
272
|
"voluptuous",
|
|
269
273
|
"wasted",
|
|
270
274
|
"wet",
|
|
275
|
+
"wheedling",
|
|
271
276
|
"whimsical",
|
|
272
277
|
"white",
|
|
273
278
|
"wicked",
|
|
@@ -370,6 +375,7 @@ names = [
|
|
|
370
375
|
"daniel",
|
|
371
376
|
"danielle",
|
|
372
377
|
"danny",
|
|
378
|
+
"daryl",
|
|
373
379
|
"data",
|
|
374
380
|
"david",
|
|
375
381
|
"dawn",
|
|
@@ -436,6 +442,7 @@ names = [
|
|
|
436
442
|
"george",
|
|
437
443
|
"gerald",
|
|
438
444
|
"geralt",
|
|
445
|
+
"gertrude",
|
|
439
446
|
"gimli",
|
|
440
447
|
"gladys",
|
|
441
448
|
"glenn",
|
|
@@ -516,6 +523,7 @@ names = [
|
|
|
516
523
|
"kerry",
|
|
517
524
|
"kevin",
|
|
518
525
|
"kimberly",
|
|
526
|
+
"kronk",
|
|
519
527
|
"kyle",
|
|
520
528
|
"kylie",
|
|
521
529
|
"lantern",
|
|
@@ -580,6 +588,7 @@ names = [
|
|
|
580
588
|
"obama",
|
|
581
589
|
"olivia",
|
|
582
590
|
"padme",
|
|
591
|
+
"palpatine",
|
|
583
592
|
"pamela",
|
|
584
593
|
"patricia",
|
|
585
594
|
"patrick",
|
|
@@ -604,6 +613,7 @@ names = [
|
|
|
604
613
|
"robert",
|
|
605
614
|
"robin",
|
|
606
615
|
"rodney",
|
|
616
|
+
"rodriguez",
|
|
607
617
|
"roger",
|
|
608
618
|
"ron",
|
|
609
619
|
"ronald",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import sys
|
|
2
|
+
import logging.handlers
|
|
2
3
|
|
|
3
4
|
loglevel_mapping = {
|
|
4
5
|
"DEBUG": "DBUG",
|
|
@@ -50,3 +51,11 @@ def log_to_stderr(msg, level="INFO", logname=True):
|
|
|
50
51
|
if logname:
|
|
51
52
|
msg = f"{levelshort} {msg}"
|
|
52
53
|
print(msg, file=sys.stderr)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# Create a compressed file handler for logs
|
|
57
|
+
class GzipRotatingFileHandler(logging.handlers.TimedRotatingFileHandler):
|
|
58
|
+
def _open(self):
|
|
59
|
+
import gzip
|
|
60
|
+
|
|
61
|
+
return gzip.open(f"{self.baseFilename}.gz", mode="at", encoding=self.encoding)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from bbot.modules.templates.subdomain_enum import subdomain_enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class crt(subdomain_enum):
|
|
5
|
+
flags = ["subdomain-enum", "passive", "safe"]
|
|
6
|
+
watched_events = ["DNS_NAME"]
|
|
7
|
+
produced_events = ["DNS_NAME"]
|
|
8
|
+
meta = {
|
|
9
|
+
"description": "Query crt.sh (certificate transparency) for subdomains",
|
|
10
|
+
"created_date": "2022-05-13",
|
|
11
|
+
"author": "@TheTechromancer",
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
base_url = "https://crt.sh"
|
|
15
|
+
reject_wildcards = False
|
|
16
|
+
|
|
17
|
+
async def setup(self):
|
|
18
|
+
self.cert_ids = set()
|
|
19
|
+
return await super().setup()
|
|
20
|
+
|
|
21
|
+
async def request_url(self, query):
|
|
22
|
+
params = {"q": f"%.{query}", "output": "json"}
|
|
23
|
+
url = self.helpers.add_get_params(self.base_url, params).geturl()
|
|
24
|
+
return await self.api_request(url, timeout=self.http_timeout + 30)
|
|
25
|
+
|
|
26
|
+
async def parse_results(self, r, query):
|
|
27
|
+
results = set()
|
|
28
|
+
j = r.json()
|
|
29
|
+
for cert_info in j:
|
|
30
|
+
if not type(cert_info) == dict:
|
|
31
|
+
continue
|
|
32
|
+
cert_id = cert_info.get("id")
|
|
33
|
+
if cert_id:
|
|
34
|
+
if hash(cert_id) not in self.cert_ids:
|
|
35
|
+
self.cert_ids.add(hash(cert_id))
|
|
36
|
+
domain = cert_info.get("name_value")
|
|
37
|
+
if domain:
|
|
38
|
+
for d in domain.splitlines():
|
|
39
|
+
results.add(d.lower())
|
|
40
|
+
return results
|
|
@@ -4,13 +4,13 @@ import asyncpg
|
|
|
4
4
|
from bbot.modules.templates.subdomain_enum import subdomain_enum
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
class
|
|
7
|
+
class crt_db(subdomain_enum):
|
|
8
8
|
flags = ["subdomain-enum", "passive", "safe"]
|
|
9
9
|
watched_events = ["DNS_NAME"]
|
|
10
10
|
produced_events = ["DNS_NAME"]
|
|
11
11
|
meta = {
|
|
12
|
-
"description": "Query crt.sh (certificate transparency) for subdomains",
|
|
13
|
-
"created_date": "
|
|
12
|
+
"description": "Query crt.sh (certificate transparency) for subdomains via PostgreSQL",
|
|
13
|
+
"created_date": "2025-03-27",
|
|
14
14
|
"author": "@TheTechromancer",
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -29,7 +29,11 @@ class crt(subdomain_enum):
|
|
|
29
29
|
async def request_url(self, query):
|
|
30
30
|
if not self.db_conn:
|
|
31
31
|
self.db_conn = await asyncpg.connect(
|
|
32
|
-
host=self.db_host,
|
|
32
|
+
host=self.db_host,
|
|
33
|
+
port=self.db_port,
|
|
34
|
+
user=self.db_user,
|
|
35
|
+
database=self.db_name,
|
|
36
|
+
statement_cache_size=0, # Disable automatic statement preparation
|
|
33
37
|
)
|
|
34
38
|
|
|
35
39
|
sql = """
|
|
@@ -29,8 +29,9 @@ class unarchive(BaseInternalModule):
|
|
|
29
29
|
|
|
30
30
|
async def filter_event(self, event):
|
|
31
31
|
if "file" in event.tags:
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
magic_mime_type = event.data.get("magic_mime_type", "")
|
|
33
|
+
if magic_mime_type in self.ignore_compressions:
|
|
34
|
+
return False, f"Ignoring file type: {magic_mime_type}, {event.data['path']}"
|
|
34
35
|
if "compression" in event.data:
|
|
35
36
|
if not event.data["compression"] in self.compression_methods:
|
|
36
37
|
return (
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import asyncio
|
|
3
|
+
import ssl
|
|
3
4
|
import websockets
|
|
4
5
|
|
|
5
6
|
from bbot.modules.output.base import BaseOutputModule
|
|
@@ -8,11 +9,12 @@ from bbot.modules.output.base import BaseOutputModule
|
|
|
8
9
|
class Websocket(BaseOutputModule):
|
|
9
10
|
watched_events = ["*"]
|
|
10
11
|
meta = {"description": "Output to websockets", "created_date": "2022-04-15", "author": "@TheTechromancer"}
|
|
11
|
-
options = {"url": "", "token": "", "preserve_graph": True}
|
|
12
|
+
options = {"url": "", "token": "", "preserve_graph": True, "ignore_ssl": False}
|
|
12
13
|
options_desc = {
|
|
13
14
|
"url": "Web URL",
|
|
14
15
|
"token": "Authorization Bearer token",
|
|
15
16
|
"preserve_graph": "Preserve full chains of events in the graph (prevents orphans)",
|
|
17
|
+
"ignore_ssl": "Ignores all Websocket SSL related errors (like Self-Signed Certificates, etc.)",
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
async def setup(self):
|
|
@@ -31,12 +33,16 @@ class Websocket(BaseOutputModule):
|
|
|
31
33
|
if self._ws is None or rebuild:
|
|
32
34
|
kwargs = {"close_timeout": 0.5}
|
|
33
35
|
if self.token:
|
|
34
|
-
kwargs.update({"
|
|
35
|
-
verbs = ("Building", "Built")
|
|
36
|
-
if rebuild:
|
|
37
|
-
verbs = ("Rebuilding", "Rebuilt")
|
|
36
|
+
kwargs.update({"additional_headers": {"Authorization": f"Bearer {self.token}"}})
|
|
37
|
+
verbs = ("Building", "Built") if not rebuild else ("Rebuilding", "Rebuilt")
|
|
38
38
|
self.debug(f"{verbs[0]} websocket connection to {self.url}")
|
|
39
|
-
self.
|
|
39
|
+
if self.config.get("ignore_ssl", False):
|
|
40
|
+
ssl_context = ssl.create_default_context()
|
|
41
|
+
ssl_context.check_hostname = False
|
|
42
|
+
ssl_context.verify_mode = ssl.CERT_NONE
|
|
43
|
+
self._ws = await websockets.connect(self.url, ssl=ssl_context, **kwargs)
|
|
44
|
+
else:
|
|
45
|
+
self._ws = await websockets.connect(self.url, **kwargs)
|
|
40
46
|
self.debug(f"{verbs[1]} websocket connection to {self.url}")
|
|
41
47
|
return self._ws
|
|
42
48
|
|
|
@@ -14,6 +14,7 @@ from bbot.core.event import make_event
|
|
|
14
14
|
from .manager import ScanIngress, ScanEgress
|
|
15
15
|
from bbot.core.helpers.misc import sha1, rand_string
|
|
16
16
|
from bbot.core.helpers.names_generator import random_name
|
|
17
|
+
from bbot.core.config.logger import GzipRotatingFileHandler
|
|
17
18
|
from bbot.core.multiprocess import SHARED_INTERPRETER_STATE
|
|
18
19
|
from bbot.core.helpers.async_helpers import async_to_sync_gen
|
|
19
20
|
from bbot.errors import BBOTError, ScanError, ValidationError
|
|
@@ -1228,13 +1229,9 @@ class Scanner:
|
|
|
1228
1229
|
def _log_handlers(self):
|
|
1229
1230
|
if self.__log_handlers is None:
|
|
1230
1231
|
self.helpers.mkdir(self.home)
|
|
1231
|
-
main_handler =
|
|
1232
|
-
str(self.home / "scan.log"), when="d", interval=1, backupCount=14
|
|
1233
|
-
)
|
|
1232
|
+
main_handler = GzipRotatingFileHandler(str(self.home / "scan.log"), when="d", interval=1, backupCount=14)
|
|
1234
1233
|
main_handler.addFilter(lambda x: x.levelno != logging.TRACE and x.levelno >= logging.VERBOSE)
|
|
1235
|
-
debug_handler =
|
|
1236
|
-
str(self.home / "debug.log"), when="d", interval=1, backupCount=14
|
|
1237
|
-
)
|
|
1234
|
+
debug_handler = GzipRotatingFileHandler(str(self.home / "debug.log"), when="d", interval=1, backupCount=14)
|
|
1238
1235
|
debug_handler.addFilter(lambda x: x.levelno >= logging.DEBUG)
|
|
1239
1236
|
self.__log_handlers = [main_handler, debug_handler]
|
|
1240
1237
|
return self.__log_handlers
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os # noqa
|
|
2
2
|
import sys
|
|
3
|
+
import zlib
|
|
3
4
|
import pytest
|
|
4
5
|
import shutil # noqa
|
|
5
6
|
import asyncio # noqa
|
|
@@ -49,6 +50,25 @@ def tempapkfile():
|
|
|
49
50
|
return apk_file
|
|
50
51
|
|
|
51
52
|
|
|
53
|
+
def read_gzipped_file(file_path):
|
|
54
|
+
"""
|
|
55
|
+
Read and decompress a gzipped file, tolerating missing end markers.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
file_path: Path to the gzipped file
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
The decompressed content as a string
|
|
62
|
+
"""
|
|
63
|
+
with open(file_path, "rb") as f:
|
|
64
|
+
data = f.read()
|
|
65
|
+
decompressor = zlib.decompressobj(
|
|
66
|
+
16 + zlib.MAX_WBITS
|
|
67
|
+
) # This is needed because the file doesn't have an end marker
|
|
68
|
+
content = decompressor.decompress(data).decode("utf-8", errors="ignore")
|
|
69
|
+
return content
|
|
70
|
+
|
|
71
|
+
|
|
52
72
|
@pytest.fixture
|
|
53
73
|
def clean_default_config(monkeypatch):
|
|
54
74
|
clean_config = OmegaConf.merge(
|
|
@@ -129,6 +129,11 @@ async def test_cli_scan(monkeypatch):
|
|
|
129
129
|
dns_success = True
|
|
130
130
|
assert ip_success and dns_success, "IP_ADDRESS and/or DNS_NAME are not present in output.txt"
|
|
131
131
|
|
|
132
|
+
# Check for gzipped scan log file
|
|
133
|
+
scan_log_gz = scan_home / "scan.log.gz"
|
|
134
|
+
assert scan_log_gz.is_file(), "scan.log.gz not found"
|
|
135
|
+
assert "[INFO]" in read_gzipped_file(scan_log_gz)
|
|
136
|
+
|
|
132
137
|
|
|
133
138
|
@pytest.mark.asyncio
|
|
134
139
|
async def test_cli_args(monkeypatch, caplog, capsys, clean_default_config):
|
|
@@ -187,14 +192,19 @@ async def test_cli_args(monkeypatch, caplog, capsys, clean_default_config):
|
|
|
187
192
|
output_dir = bbot_test_dir / "bbot_cli_args_output"
|
|
188
193
|
scan_name = "bbot_cli_args_scan_name"
|
|
189
194
|
scan_dir = output_dir / scan_name
|
|
190
|
-
|
|
195
|
+
if output_dir.exists():
|
|
196
|
+
shutil.rmtree(output_dir)
|
|
191
197
|
monkeypatch.setattr("sys.argv", ["bbot", "-o", str(output_dir), "-n", scan_name, "-y"])
|
|
192
198
|
result = await cli._main()
|
|
193
199
|
assert result is True
|
|
194
200
|
assert output_dir.is_dir()
|
|
195
201
|
assert scan_dir.is_dir()
|
|
196
202
|
assert "[SCAN]" in open(scan_dir / "output.txt").read()
|
|
197
|
-
|
|
203
|
+
|
|
204
|
+
# Check for gzipped scan log file
|
|
205
|
+
scan_log_gz = scan_dir / "scan.log.gz"
|
|
206
|
+
assert scan_log_gz.is_file(), "scan.log.gz not found"
|
|
207
|
+
assert "[INFO]" in read_gzipped_file(scan_log_gz)
|
|
198
208
|
shutil.rmtree(output_dir)
|
|
199
209
|
|
|
200
210
|
# list module options
|
|
@@ -17,28 +17,28 @@ async def test_python_api():
|
|
|
17
17
|
scan_home = scan2.helpers.scans_dir / "python_api_test"
|
|
18
18
|
out_file = scan_home / "output.json"
|
|
19
19
|
assert list(scan2.helpers.read_file(out_file))
|
|
20
|
-
scan_log = scan_home / "scan.log"
|
|
21
|
-
debug_log = scan_home / "debug.log"
|
|
20
|
+
scan_log = scan_home / "scan.log.gz"
|
|
21
|
+
debug_log = scan_home / "debug.log.gz"
|
|
22
22
|
assert scan_log.is_file()
|
|
23
|
-
assert "python_api_test" in
|
|
23
|
+
assert "python_api_test" in read_gzipped_file(scan_log)
|
|
24
24
|
assert debug_log.is_file()
|
|
25
|
-
assert "python_api_test" in
|
|
25
|
+
assert "python_api_test" in read_gzipped_file(debug_log)
|
|
26
26
|
|
|
27
27
|
scan3 = Scanner("127.0.0.1", output_modules=["json"], scan_name="scan_logging_test")
|
|
28
28
|
await scan3.async_start_without_generator()
|
|
29
29
|
|
|
30
|
-
assert "scan_logging_test" not in
|
|
31
|
-
assert "scan_logging_test" not in
|
|
30
|
+
assert "scan_logging_test" not in read_gzipped_file(scan_log)
|
|
31
|
+
assert "scan_logging_test" not in read_gzipped_file(debug_log)
|
|
32
32
|
|
|
33
33
|
scan_home = scan3.helpers.scans_dir / "scan_logging_test"
|
|
34
34
|
out_file = scan_home / "output.json"
|
|
35
35
|
assert list(scan3.helpers.read_file(out_file))
|
|
36
|
-
scan_log = scan_home / "scan.log"
|
|
37
|
-
debug_log = scan_home / "debug.log"
|
|
36
|
+
scan_log = scan_home / "scan.log.gz"
|
|
37
|
+
debug_log = scan_home / "debug.log.gz"
|
|
38
38
|
assert scan_log.is_file()
|
|
39
39
|
assert debug_log.is_file()
|
|
40
|
-
assert "scan_logging_test" in
|
|
41
|
-
assert "scan_logging_test" in
|
|
40
|
+
assert "scan_logging_test" in read_gzipped_file(scan_log)
|
|
41
|
+
assert "scan_logging_test" in read_gzipped_file(debug_log)
|
|
42
42
|
|
|
43
43
|
# make sure config loads properly
|
|
44
44
|
bbot_home = "/tmp/.bbot_python_api_test"
|
{bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_censys.py
RENAMED
|
@@ -7,7 +7,7 @@ class TestCensys(ModuleTestBase):
|
|
|
7
7
|
async def setup_before_prep(self, module_test):
|
|
8
8
|
module_test.httpx_mock.add_response(
|
|
9
9
|
url="https://search.censys.io/api/v1/account",
|
|
10
|
-
match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
|
|
10
|
+
# match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
|
|
11
11
|
json={
|
|
12
12
|
"email": "info@blacklanternsecurity.com",
|
|
13
13
|
"login": "nope",
|
|
@@ -18,7 +18,7 @@ class TestCensys(ModuleTestBase):
|
|
|
18
18
|
)
|
|
19
19
|
module_test.httpx_mock.add_response(
|
|
20
20
|
url="https://search.censys.io/api/v2/certificates/search",
|
|
21
|
-
match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
|
|
21
|
+
# match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
|
|
22
22
|
match_content=b'{"q": "names: blacklanternsecurity.com", "per_page": 100}',
|
|
23
23
|
json={
|
|
24
24
|
"code": 200,
|
|
@@ -47,7 +47,7 @@ class TestCensys(ModuleTestBase):
|
|
|
47
47
|
)
|
|
48
48
|
module_test.httpx_mock.add_response(
|
|
49
49
|
url="https://search.censys.io/api/v2/certificates/search",
|
|
50
|
-
match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
|
|
50
|
+
# match_headers={"Authorization": "Basic YXBpX2lkOmFwaV9zZWNyZXQ="},
|
|
51
51
|
match_content=b'{"q": "names: blacklanternsecurity.com", "per_page": 100, "cursor": "NextToken"}',
|
|
52
52
|
json={
|
|
53
53
|
"code": 200,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from .base import ModuleTestBase
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestCRT(ModuleTestBase):
|
|
5
|
+
async def setup_after_prep(self, module_test):
|
|
6
|
+
module_test.module.abort_if = lambda e: False
|
|
7
|
+
for t in self.targets:
|
|
8
|
+
module_test.httpx_mock.add_response(
|
|
9
|
+
url="https://crt.sh?q=%25.blacklanternsecurity.com&output=json",
|
|
10
|
+
json=[{"id": 1, "name_value": "asdf.blacklanternsecurity.com\nzzzz.blacklanternsecurity.com"}],
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
def check(self, module_test, events):
|
|
14
|
+
assert any(e.data == "asdf.blacklanternsecurity.com" for e in events), "Failed to detect subdomain"
|
|
15
|
+
assert any(e.data == "zzzz.blacklanternsecurity.com" for e in events), "Failed to detect subdomain"
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
from .base import ModuleTestBase
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
class
|
|
4
|
+
class TestCRT_DB(ModuleTestBase):
|
|
5
5
|
async def setup_after_prep(self, module_test):
|
|
6
6
|
class AsyncMock:
|
|
7
7
|
async def fetch(self, *args, **kwargs):
|
|
8
|
-
print("mock_fetch", args, kwargs)
|
|
9
8
|
return [
|
|
10
9
|
{"name_value": "asdf.blacklanternsecurity.com"},
|
|
11
10
|
{"name_value": "zzzz.blacklanternsecurity.com"},
|
|
@@ -15,7 +14,6 @@ class TestCRT(ModuleTestBase):
|
|
|
15
14
|
pass
|
|
16
15
|
|
|
17
16
|
async def mock_connect(*args, **kwargs):
|
|
18
|
-
print("mock_connect", args, kwargs)
|
|
19
17
|
return AsyncMock()
|
|
20
18
|
|
|
21
19
|
module_test.monkeypatch.setattr("asyncpg.connect", mock_connect)
|
{bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_excavate.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from ...bbot_fixtures import *
|
|
1
2
|
from bbot.modules.base import BaseModule
|
|
2
3
|
from .base import ModuleTestBase, tempwordlist
|
|
3
4
|
|
|
@@ -1033,13 +1034,12 @@ class TestExcavateBadURLs(ModuleTestBase):
|
|
|
1033
1034
|
module_test.set_expect_requests({"uri": "/"}, {"response_data": self.bad_url_data})
|
|
1034
1035
|
|
|
1035
1036
|
def check(self, module_test, events):
|
|
1036
|
-
|
|
1037
|
-
log_text = log_file.read_text()
|
|
1037
|
+
debug_log_content = read_gzipped_file(module_test.scan.home / "debug.log.gz")
|
|
1038
1038
|
# make sure our logging is working
|
|
1039
|
-
assert "Setting scan status to STARTING" in
|
|
1039
|
+
assert "Setting scan status to STARTING" in debug_log_content
|
|
1040
1040
|
# make sure we don't have any URL validation errors
|
|
1041
|
-
assert "Error Parsing reconstructed URL" not in
|
|
1042
|
-
assert "Error sanitizing event data" not in
|
|
1041
|
+
assert "Error Parsing reconstructed URL" not in debug_log_content
|
|
1042
|
+
assert "Error sanitizing event data" not in debug_log_content
|
|
1043
1043
|
|
|
1044
1044
|
url_events = [e for e in events if e.type == "URL_UNVERIFIED"]
|
|
1045
1045
|
assert sorted([e.data for e in url_events]) == sorted(["https://ssl/", "http://127.0.0.1:8888/"])
|
{bbot-2.4.0.6007rc0 → bbot-2.4.0.6037rc0}/bbot/test/test_step_2/module_tests/test_module_nuclei.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from ...bbot_fixtures import *
|
|
1
2
|
from .base import ModuleTestBase
|
|
2
3
|
|
|
3
4
|
|
|
@@ -100,9 +101,7 @@ class TestNucleiTechnology(TestNucleiManual):
|
|
|
100
101
|
|
|
101
102
|
def check(self, module_test, events):
|
|
102
103
|
assert any(e.type == "TECHNOLOGY" and "apache" in e.data["technology"].lower() for e in events)
|
|
103
|
-
|
|
104
|
-
with open(module_test.scan.home / "debug.log") as f:
|
|
105
|
-
assert "Using Interactsh Server" not in f.read()
|
|
104
|
+
assert "Using Interactsh Server" not in read_gzipped_file(module_test.scan.home / "debug.log.gz")
|
|
106
105
|
|
|
107
106
|
|
|
108
107
|
class TestNucleiBudget(TestNucleiManual):
|
|
@@ -141,8 +140,7 @@ class TestNucleiRetries(TestNucleiManual):
|
|
|
141
140
|
module_test.set_expect_requests(expect_args=expect_args, respond_args=respond_args)
|
|
142
141
|
|
|
143
142
|
def check(self, module_test, events):
|
|
144
|
-
|
|
145
|
-
assert "-retries 0" in f.read()
|
|
143
|
+
assert "-retries 0" in read_gzipped_file(module_test.scan.home / "debug.log.gz")
|
|
146
144
|
|
|
147
145
|
|
|
148
146
|
class TestNucleiRetriesCustom(TestNucleiRetries):
|
|
@@ -152,8 +150,7 @@ class TestNucleiRetriesCustom(TestNucleiRetries):
|
|
|
152
150
|
}
|
|
153
151
|
|
|
154
152
|
def check(self, module_test, events):
|
|
155
|
-
|
|
156
|
-
assert "-retries 1" in f.read()
|
|
153
|
+
assert "-retries 1" in read_gzipped_file(module_test.scan.home / "debug.log.gz")
|
|
157
154
|
|
|
158
155
|
|
|
159
156
|
class TestNucleiCustomHeaders(TestNucleiManual):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "bbot"
|
|
3
|
-
version = "v2.4.0.
|
|
3
|
+
version = "v2.4.0.6037rc"
|
|
4
4
|
description = "OSINT automation for hackers."
|
|
5
5
|
authors = [
|
|
6
6
|
"TheTechromancer",
|
|
@@ -35,7 +35,7 @@ xmltojson = "^2.0.2"
|
|
|
35
35
|
pycryptodome = "^3.17"
|
|
36
36
|
idna = "^3.4"
|
|
37
37
|
tabulate = "0.8.10"
|
|
38
|
-
websockets = ">=
|
|
38
|
+
websockets = ">=14.0.0,<16.0.0"
|
|
39
39
|
pyjwt = "^2.7.0"
|
|
40
40
|
beautifulsoup4 = "^4.12.2"
|
|
41
41
|
lxml = ">=4.9.2,<6.0.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|