bbot 2.0.1.4720rc0__py3-none-any.whl → 2.3.0.5401rc0__py3-none-any.whl
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/__init__.py +1 -1
- bbot/cli.py +3 -7
- bbot/core/config/files.py +0 -1
- bbot/core/config/logger.py +34 -4
- bbot/core/core.py +21 -4
- bbot/core/engine.py +9 -8
- bbot/core/event/base.py +131 -52
- bbot/core/helpers/bloom.py +10 -3
- bbot/core/helpers/command.py +8 -7
- bbot/core/helpers/depsinstaller/installer.py +31 -13
- bbot/core/helpers/diff.py +10 -10
- bbot/core/helpers/dns/brute.py +7 -4
- bbot/core/helpers/dns/dns.py +1 -2
- bbot/core/helpers/dns/engine.py +4 -6
- bbot/core/helpers/dns/helpers.py +2 -2
- bbot/core/helpers/dns/mock.py +0 -1
- bbot/core/helpers/files.py +1 -1
- bbot/core/helpers/helper.py +7 -4
- bbot/core/helpers/interactsh.py +3 -3
- bbot/core/helpers/libmagic.py +65 -0
- bbot/core/helpers/misc.py +65 -22
- bbot/core/helpers/names_generator.py +17 -3
- bbot/core/helpers/process.py +0 -20
- bbot/core/helpers/regex.py +1 -1
- bbot/core/helpers/regexes.py +12 -6
- bbot/core/helpers/validators.py +1 -2
- bbot/core/helpers/web/client.py +1 -1
- bbot/core/helpers/web/engine.py +1 -2
- bbot/core/helpers/web/web.py +4 -114
- bbot/core/helpers/wordcloud.py +5 -5
- bbot/core/modules.py +36 -27
- bbot/core/multiprocess.py +58 -0
- bbot/core/shared_deps.py +46 -3
- bbot/db/sql/models.py +147 -0
- bbot/defaults.yml +12 -10
- bbot/modules/anubisdb.py +2 -2
- bbot/modules/apkpure.py +63 -0
- bbot/modules/azure_tenant.py +2 -2
- bbot/modules/baddns.py +35 -19
- bbot/modules/baddns_direct.py +92 -0
- bbot/modules/baddns_zone.py +3 -8
- bbot/modules/badsecrets.py +4 -3
- bbot/modules/base.py +195 -51
- bbot/modules/bevigil.py +7 -7
- bbot/modules/binaryedge.py +7 -4
- bbot/modules/bufferoverrun.py +47 -0
- bbot/modules/builtwith.py +6 -10
- bbot/modules/bypass403.py +5 -5
- bbot/modules/c99.py +10 -7
- bbot/modules/censys.py +9 -13
- bbot/modules/certspotter.py +5 -3
- bbot/modules/chaos.py +9 -7
- bbot/modules/code_repository.py +1 -0
- bbot/modules/columbus.py +3 -3
- bbot/modules/crt.py +5 -3
- bbot/modules/deadly/dastardly.py +1 -1
- bbot/modules/deadly/ffuf.py +9 -9
- bbot/modules/deadly/nuclei.py +3 -3
- bbot/modules/deadly/vhost.py +4 -3
- bbot/modules/dehashed.py +1 -1
- bbot/modules/digitorus.py +1 -1
- bbot/modules/dnsbimi.py +145 -0
- bbot/modules/dnscaa.py +3 -3
- bbot/modules/dnsdumpster.py +4 -4
- bbot/modules/dnstlsrpt.py +144 -0
- bbot/modules/docker_pull.py +7 -5
- bbot/modules/dockerhub.py +2 -2
- bbot/modules/dotnetnuke.py +20 -21
- bbot/modules/emailformat.py +1 -1
- bbot/modules/extractous.py +122 -0
- bbot/modules/filedownload.py +9 -7
- bbot/modules/fullhunt.py +7 -4
- bbot/modules/generic_ssrf.py +5 -5
- bbot/modules/github_codesearch.py +3 -2
- bbot/modules/github_org.py +4 -4
- bbot/modules/github_workflows.py +4 -4
- bbot/modules/gitlab.py +2 -5
- bbot/modules/google_playstore.py +93 -0
- bbot/modules/gowitness.py +48 -50
- bbot/modules/hackertarget.py +5 -3
- bbot/modules/host_header.py +5 -5
- bbot/modules/httpx.py +1 -4
- bbot/modules/hunterio.py +3 -9
- bbot/modules/iis_shortnames.py +19 -30
- bbot/modules/internal/cloudcheck.py +29 -12
- bbot/modules/internal/dnsresolve.py +22 -22
- bbot/modules/internal/excavate.py +97 -59
- bbot/modules/internal/speculate.py +41 -32
- bbot/modules/internetdb.py +4 -2
- bbot/modules/ip2location.py +3 -5
- bbot/modules/ipneighbor.py +1 -1
- bbot/modules/ipstack.py +3 -8
- bbot/modules/jadx.py +87 -0
- bbot/modules/leakix.py +11 -10
- bbot/modules/myssl.py +2 -2
- bbot/modules/newsletters.py +2 -2
- bbot/modules/otx.py +5 -3
- bbot/modules/output/asset_inventory.py +7 -7
- bbot/modules/output/base.py +1 -1
- bbot/modules/output/csv.py +1 -1
- bbot/modules/output/http.py +20 -14
- bbot/modules/output/mysql.py +51 -0
- bbot/modules/output/neo4j.py +7 -2
- bbot/modules/output/postgres.py +49 -0
- bbot/modules/output/slack.py +0 -1
- bbot/modules/output/sqlite.py +29 -0
- bbot/modules/output/stdout.py +2 -2
- bbot/modules/output/teams.py +107 -6
- bbot/modules/paramminer_headers.py +8 -11
- bbot/modules/passivetotal.py +13 -13
- bbot/modules/portscan.py +32 -6
- bbot/modules/postman.py +50 -126
- bbot/modules/postman_download.py +220 -0
- bbot/modules/rapiddns.py +3 -8
- bbot/modules/report/asn.py +18 -11
- bbot/modules/robots.py +3 -3
- bbot/modules/securitytrails.py +7 -10
- bbot/modules/securitytxt.py +1 -1
- bbot/modules/shodan_dns.py +7 -9
- bbot/modules/sitedossier.py +1 -1
- bbot/modules/skymem.py +2 -2
- bbot/modules/social.py +2 -1
- bbot/modules/subdomaincenter.py +1 -1
- bbot/modules/subdomainradar.py +160 -0
- bbot/modules/telerik.py +8 -8
- bbot/modules/templates/bucket.py +1 -1
- bbot/modules/templates/github.py +22 -14
- bbot/modules/templates/postman.py +21 -0
- bbot/modules/templates/shodan.py +14 -13
- bbot/modules/templates/sql.py +95 -0
- bbot/modules/templates/subdomain_enum.py +51 -16
- bbot/modules/templates/webhook.py +2 -4
- bbot/modules/trickest.py +8 -37
- bbot/modules/trufflehog.py +10 -12
- bbot/modules/url_manipulation.py +3 -3
- bbot/modules/urlscan.py +1 -1
- bbot/modules/viewdns.py +1 -1
- bbot/modules/virustotal.py +8 -30
- bbot/modules/wafw00f.py +1 -1
- bbot/modules/wayback.py +1 -1
- bbot/modules/wpscan.py +17 -11
- bbot/modules/zoomeye.py +11 -6
- bbot/presets/baddns-thorough.yml +12 -0
- bbot/presets/fast.yml +16 -0
- bbot/presets/kitchen-sink.yml +1 -2
- bbot/presets/spider.yml +4 -0
- bbot/presets/subdomain-enum.yml +7 -7
- bbot/presets/web/dotnet-audit.yml +0 -1
- bbot/scanner/manager.py +5 -16
- bbot/scanner/preset/args.py +46 -26
- bbot/scanner/preset/environ.py +7 -2
- bbot/scanner/preset/path.py +7 -4
- bbot/scanner/preset/preset.py +36 -23
- bbot/scanner/scanner.py +172 -62
- bbot/scanner/target.py +236 -434
- bbot/scripts/docs.py +1 -1
- bbot/test/bbot_fixtures.py +13 -3
- bbot/test/conftest.py +132 -100
- bbot/test/fastapi_test.py +17 -0
- bbot/test/owasp_mastg.apk +0 -0
- bbot/test/run_tests.sh +4 -4
- bbot/test/test.conf +2 -0
- bbot/test/test_step_1/test__module__tests.py +0 -1
- bbot/test/test_step_1/test_bbot_fastapi.py +79 -0
- bbot/test/test_step_1/test_bloom_filter.py +2 -1
- bbot/test/test_step_1/test_cli.py +138 -64
- bbot/test/test_step_1/test_dns.py +61 -27
- bbot/test/test_step_1/test_engine.py +17 -19
- bbot/test/test_step_1/test_events.py +183 -30
- bbot/test/test_step_1/test_helpers.py +64 -29
- bbot/test/test_step_1/test_manager_deduplication.py +1 -1
- bbot/test/test_step_1/test_manager_scope_accuracy.py +333 -330
- bbot/test/test_step_1/test_modules_basic.py +68 -70
- bbot/test/test_step_1/test_presets.py +183 -100
- bbot/test/test_step_1/test_python_api.py +7 -2
- bbot/test/test_step_1/test_regexes.py +35 -5
- bbot/test/test_step_1/test_scan.py +39 -5
- bbot/test/test_step_1/test_scope.py +4 -3
- bbot/test/test_step_1/test_target.py +242 -145
- bbot/test/test_step_1/test_web.py +14 -10
- bbot/test/test_step_2/module_tests/base.py +15 -7
- bbot/test/test_step_2/module_tests/test_module_anubisdb.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_apkpure.py +71 -0
- bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -1
- bbot/test/test_step_2/module_tests/test_module_azure_realm.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_baddns.py +6 -6
- bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +62 -0
- bbot/test/test_step_2/module_tests/test_module_bevigil.py +29 -2
- bbot/test/test_step_2/module_tests/test_module_binaryedge.py +4 -2
- bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +2 -2
- bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +35 -0
- bbot/test/test_step_2/module_tests/test_module_builtwith.py +2 -2
- bbot/test/test_step_2/module_tests/test_module_bypass403.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_c99.py +126 -0
- bbot/test/test_step_2/module_tests/test_module_censys.py +4 -1
- bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +4 -0
- bbot/test/test_step_2/module_tests/test_module_code_repository.py +11 -1
- bbot/test/test_step_2/module_tests/test_module_columbus.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_credshed.py +3 -3
- bbot/test/test_step_2/module_tests/test_module_dastardly.py +2 -1
- bbot/test/test_step_2/module_tests/test_module_dehashed.py +2 -2
- bbot/test/test_step_2/module_tests/test_module_digitorus.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_discord.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +103 -0
- bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +9 -10
- bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +1 -2
- bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +1 -2
- bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +4 -4
- bbot/test/test_step_2/module_tests/test_module_dnstlsrpt.py +64 -0
- bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -8
- bbot/test/test_step_2/module_tests/test_module_excavate.py +28 -48
- bbot/test/test_step_2/module_tests/test_module_extractous.py +54 -0
- bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_filedownload.py +14 -14
- bbot/test/test_step_2/module_tests/test_module_git_clone.py +2 -2
- bbot/test/test_step_2/module_tests/test_module_github_org.py +19 -8
- bbot/test/test_step_2/module_tests/test_module_github_workflows.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_gitlab.py +9 -4
- bbot/test/test_step_2/module_tests/test_module_google_playstore.py +83 -0
- bbot/test/test_step_2/module_tests/test_module_gowitness.py +4 -6
- bbot/test/test_step_2/module_tests/test_module_host_header.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_http.py +4 -4
- bbot/test/test_step_2/module_tests/test_module_httpx.py +10 -8
- bbot/test/test_step_2/module_tests/test_module_hunterio.py +68 -4
- bbot/test/test_step_2/module_tests/test_module_jadx.py +55 -0
- bbot/test/test_step_2/module_tests/test_module_json.py +22 -9
- bbot/test/test_step_2/module_tests/test_module_leakix.py +7 -3
- bbot/test/test_step_2/module_tests/test_module_mysql.py +76 -0
- bbot/test/test_step_2/module_tests/test_module_myssl.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_neo4j.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_newsletters.py +16 -16
- bbot/test/test_step_2/module_tests/test_module_ntlm.py +8 -7
- bbot/test/test_step_2/module_tests/test_module_oauth.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_otx.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +1 -2
- bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -6
- bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +2 -9
- bbot/test/test_step_2/module_tests/test_module_passivetotal.py +3 -1
- bbot/test/test_step_2/module_tests/test_module_pgp.py +2 -2
- bbot/test/test_step_2/module_tests/test_module_portscan.py +9 -8
- bbot/test/test_step_2/module_tests/test_module_postgres.py +74 -0
- bbot/test/test_step_2/module_tests/test_module_postman.py +84 -253
- bbot/test/test_step_2/module_tests/test_module_postman_download.py +439 -0
- bbot/test/test_step_2/module_tests/test_module_rapiddns.py +93 -1
- bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +20 -1
- bbot/test/test_step_2/module_tests/test_module_sitedossier.py +2 -2
- bbot/test/test_step_2/module_tests/test_module_smuggler.py +14 -14
- bbot/test/test_step_2/module_tests/test_module_social.py +11 -1
- bbot/test/test_step_2/module_tests/test_module_speculate.py +4 -8
- bbot/test/test_step_2/module_tests/test_module_splunk.py +4 -4
- bbot/test/test_step_2/module_tests/test_module_sqlite.py +18 -0
- bbot/test/test_step_2/module_tests/test_module_sslcert.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_stdout.py +5 -3
- bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +208 -0
- bbot/test/test_step_2/module_tests/test_module_subdomains.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_teams.py +8 -6
- bbot/test/test_step_2/module_tests/test_module_telerik.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_trufflehog.py +317 -14
- bbot/test/test_step_2/module_tests/test_module_viewdns.py +1 -1
- bbot/test/test_step_2/module_tests/test_module_wayback.py +1 -1
- bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +2 -2
- bbot/wordlists/devops_mutations.txt +1 -1
- bbot/wordlists/ffuf_shortname_candidates.txt +1 -1
- bbot/wordlists/nameservers.txt +1 -1
- bbot/wordlists/paramminer_headers.txt +1 -1
- bbot/wordlists/paramminer_parameters.txt +1 -1
- bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +1 -1
- bbot/wordlists/valid_url_schemes.txt +1 -1
- {bbot-2.0.1.4720rc0.dist-info → bbot-2.3.0.5401rc0.dist-info}/METADATA +48 -18
- bbot-2.3.0.5401rc0.dist-info/RECORD +421 -0
- {bbot-2.0.1.4720rc0.dist-info → bbot-2.3.0.5401rc0.dist-info}/WHEEL +1 -1
- bbot/modules/unstructured.py +0 -163
- bbot/test/test_step_2/module_tests/test_module_unstructured.py +0 -102
- bbot-2.0.1.4720rc0.dist-info/RECORD +0 -387
- {bbot-2.0.1.4720rc0.dist-info → bbot-2.3.0.5401rc0.dist-info}/LICENSE +0 -0
- {bbot-2.0.1.4720rc0.dist-info → bbot-2.3.0.5401rc0.dist-info}/entry_points.txt +0 -0
|
@@ -9,14 +9,16 @@ from .base import ModuleTestBase
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class TestTrufflehog(ModuleTestBase):
|
|
12
|
+
config_overrides = {"modules": {"postman_download": {"api_key": "asdf"}}}
|
|
12
13
|
modules_overrides = [
|
|
13
14
|
"github_org",
|
|
14
15
|
"speculate",
|
|
15
16
|
"git_clone",
|
|
16
|
-
"unstructured",
|
|
17
17
|
"github_workflows",
|
|
18
18
|
"dockerhub",
|
|
19
19
|
"docker_pull",
|
|
20
|
+
"postman",
|
|
21
|
+
"postman_download",
|
|
20
22
|
"trufflehog",
|
|
21
23
|
]
|
|
22
24
|
|
|
@@ -24,6 +26,37 @@ class TestTrufflehog(ModuleTestBase):
|
|
|
24
26
|
|
|
25
27
|
async def setup_before_prep(self, module_test):
|
|
26
28
|
module_test.httpx_mock.add_response(url="https://api.github.com/zen")
|
|
29
|
+
module_test.httpx_mock.add_response(
|
|
30
|
+
url="https://api.getpostman.com/me",
|
|
31
|
+
json={
|
|
32
|
+
"user": {
|
|
33
|
+
"id": 000000,
|
|
34
|
+
"username": "test_key",
|
|
35
|
+
"email": "blacklanternsecurity@test.com",
|
|
36
|
+
"fullName": "Test Key",
|
|
37
|
+
"avatar": "",
|
|
38
|
+
"isPublic": True,
|
|
39
|
+
"teamId": 0,
|
|
40
|
+
"teamDomain": "",
|
|
41
|
+
"roles": ["user"],
|
|
42
|
+
},
|
|
43
|
+
"operations": [
|
|
44
|
+
{"name": "api_object_usage", "limit": 3, "usage": 0, "overage": 0},
|
|
45
|
+
{"name": "collection_run_limit", "limit": 25, "usage": 0, "overage": 0},
|
|
46
|
+
{"name": "file_storage_limit", "limit": 20, "usage": 0, "overage": 0},
|
|
47
|
+
{"name": "flow_count", "limit": 5, "usage": 0, "overage": 0},
|
|
48
|
+
{"name": "flow_requests", "limit": 5000, "usage": 0, "overage": 0},
|
|
49
|
+
{"name": "performance_test_limit", "limit": 25, "usage": 0, "overage": 0},
|
|
50
|
+
{"name": "postbot_calls", "limit": 50, "usage": 0, "overage": 0},
|
|
51
|
+
{"name": "reusable_packages", "limit": 3, "usage": 0, "overage": 0},
|
|
52
|
+
{"name": "test_data_retrieval", "limit": 1000, "usage": 0, "overage": 0},
|
|
53
|
+
{"name": "test_data_storage", "limit": 10, "usage": 0, "overage": 0},
|
|
54
|
+
{"name": "mock_usage", "limit": 1000, "usage": 0, "overage": 0},
|
|
55
|
+
{"name": "monitor_request_runs", "limit": 1000, "usage": 0, "overage": 0},
|
|
56
|
+
{"name": "api_usage", "limit": 1000, "usage": 0, "overage": 0},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
)
|
|
27
60
|
module_test.httpx_mock.add_response(
|
|
28
61
|
url="https://api.github.com/orgs/blacklanternsecurity",
|
|
29
62
|
json={
|
|
@@ -813,6 +846,248 @@ class TestTrufflehog(ModuleTestBase):
|
|
|
813
846
|
)
|
|
814
847
|
|
|
815
848
|
async def setup_after_prep(self, module_test):
|
|
849
|
+
module_test.httpx_mock.add_response(
|
|
850
|
+
url="https://www.postman.com/_api/ws/proxy",
|
|
851
|
+
match_content=b'{"service": "search", "method": "POST", "path": "/search-all", "body": {"queryIndices": ["collaboration.workspace"], "queryText": "blacklanternsecurity", "size": 100, "from": 0, "clientTraceId": "", "requestOrigin": "srp", "mergeEntities": "true", "nonNestedRequests": "true", "domain": "public"}}',
|
|
852
|
+
json={
|
|
853
|
+
"data": [
|
|
854
|
+
{
|
|
855
|
+
"score": 611.41156,
|
|
856
|
+
"normalizedScore": 23,
|
|
857
|
+
"document": {
|
|
858
|
+
"watcherCount": 6,
|
|
859
|
+
"apiCount": 0,
|
|
860
|
+
"forkCount": 0,
|
|
861
|
+
"isblacklisted": "false",
|
|
862
|
+
"createdAt": "2021-06-15T14:03:51",
|
|
863
|
+
"publishertype": "team",
|
|
864
|
+
"publisherHandle": "blacklanternsecurity",
|
|
865
|
+
"id": "11498add-357d-4bc5-a008-0a2d44fb8829",
|
|
866
|
+
"slug": "bbot-public",
|
|
867
|
+
"updatedAt": "2024-07-30T11:00:35",
|
|
868
|
+
"entityType": "workspace",
|
|
869
|
+
"visibilityStatus": "public",
|
|
870
|
+
"forkcount": "0",
|
|
871
|
+
"tags": [],
|
|
872
|
+
"createdat": "2021-06-15T14:03:51",
|
|
873
|
+
"forkLabel": "",
|
|
874
|
+
"publisherName": "blacklanternsecurity",
|
|
875
|
+
"name": "BlackLanternSecurity BBOT [Public]",
|
|
876
|
+
"dependencyCount": 7,
|
|
877
|
+
"collectionCount": 6,
|
|
878
|
+
"warehouse__updated_at": "2024-07-30 11:00:00",
|
|
879
|
+
"privateNetworkFolders": [],
|
|
880
|
+
"isPublisherVerified": False,
|
|
881
|
+
"publisherType": "team",
|
|
882
|
+
"curatedInList": [],
|
|
883
|
+
"creatorId": "6900157",
|
|
884
|
+
"description": "",
|
|
885
|
+
"forklabel": "",
|
|
886
|
+
"publisherId": "299401",
|
|
887
|
+
"publisherLogo": "",
|
|
888
|
+
"popularity": 5,
|
|
889
|
+
"isPublic": True,
|
|
890
|
+
"categories": [],
|
|
891
|
+
"universaltags": "",
|
|
892
|
+
"views": 5788,
|
|
893
|
+
"summary": "BLS public workspaces.",
|
|
894
|
+
"memberCount": 2,
|
|
895
|
+
"isBlacklisted": False,
|
|
896
|
+
"publisherid": "299401",
|
|
897
|
+
"isPrivateNetworkEntity": False,
|
|
898
|
+
"isDomainNonTrivial": True,
|
|
899
|
+
"privateNetworkMeta": "",
|
|
900
|
+
"updatedat": "2021-10-20T16:19:29",
|
|
901
|
+
"documentType": "workspace",
|
|
902
|
+
},
|
|
903
|
+
"highlight": {"summary": "<b>BLS</b> BBOT api test."},
|
|
904
|
+
},
|
|
905
|
+
],
|
|
906
|
+
"meta": {
|
|
907
|
+
"queryText": "blacklanternsecurity",
|
|
908
|
+
"total": {
|
|
909
|
+
"collection": 0,
|
|
910
|
+
"request": 0,
|
|
911
|
+
"workspace": 1,
|
|
912
|
+
"api": 0,
|
|
913
|
+
"team": 0,
|
|
914
|
+
"user": 0,
|
|
915
|
+
"flow": 0,
|
|
916
|
+
"apiDefinition": 0,
|
|
917
|
+
"privateNetworkFolder": 0,
|
|
918
|
+
},
|
|
919
|
+
"state": "AQ4",
|
|
920
|
+
"spellCorrection": {"count": {"all": 1, "workspace": 1}, "correctedQueryText": None},
|
|
921
|
+
"featureFlags": {
|
|
922
|
+
"enabledPublicResultCuration": True,
|
|
923
|
+
"boostByPopularity": True,
|
|
924
|
+
"reRankPostNormalization": True,
|
|
925
|
+
"enableUrlBarHostNameSearch": True,
|
|
926
|
+
},
|
|
927
|
+
},
|
|
928
|
+
},
|
|
929
|
+
)
|
|
930
|
+
module_test.httpx_mock.add_response(
|
|
931
|
+
url="https://www.postman.com/_api/ws/proxy",
|
|
932
|
+
match_content=b'{"service": "workspaces", "method": "GET", "path": "/workspaces?handle=blacklanternsecurity&slug=bbot-public"}',
|
|
933
|
+
json={
|
|
934
|
+
"meta": {"model": "workspace", "action": "find", "nextCursor": ""},
|
|
935
|
+
"data": [
|
|
936
|
+
{
|
|
937
|
+
"id": "3a7e4bdc-7ff7-4dd4-8eaa-61ddce1c3d1b",
|
|
938
|
+
"name": "BlackLanternSecurity BBOT [Public]",
|
|
939
|
+
"description": None,
|
|
940
|
+
"summary": "BLS public workspaces.",
|
|
941
|
+
"createdBy": "299401",
|
|
942
|
+
"updatedBy": "299401",
|
|
943
|
+
"team": None,
|
|
944
|
+
"createdAt": "2021-10-20T16:19:29",
|
|
945
|
+
"updatedAt": "2021-10-20T16:19:29",
|
|
946
|
+
"visibilityStatus": "public",
|
|
947
|
+
"profileInfo": {
|
|
948
|
+
"slug": "bbot-public",
|
|
949
|
+
"profileType": "team",
|
|
950
|
+
"profileId": "000000",
|
|
951
|
+
"publicHandle": "https://www.postman.com/blacklanternsecurity",
|
|
952
|
+
"publicImageURL": "",
|
|
953
|
+
"publicName": "BlackLanternSecurity",
|
|
954
|
+
"isVerified": False,
|
|
955
|
+
},
|
|
956
|
+
}
|
|
957
|
+
],
|
|
958
|
+
},
|
|
959
|
+
)
|
|
960
|
+
module_test.httpx_mock.add_response(
|
|
961
|
+
url="https://api.getpostman.com/workspaces/3a7e4bdc-7ff7-4dd4-8eaa-61ddce1c3d1b",
|
|
962
|
+
json={
|
|
963
|
+
"workspace": {
|
|
964
|
+
"id": "3a7e4bdc-7ff7-4dd4-8eaa-61ddce1c3d1b",
|
|
965
|
+
"name": "BlackLanternSecurity BBOT [Public]",
|
|
966
|
+
"type": "personal",
|
|
967
|
+
"description": None,
|
|
968
|
+
"visibility": "public",
|
|
969
|
+
"createdBy": "00000000",
|
|
970
|
+
"updatedBy": "00000000",
|
|
971
|
+
"createdAt": "2021-11-17T06:09:01.000Z",
|
|
972
|
+
"updatedAt": "2021-11-17T08:57:16.000Z",
|
|
973
|
+
"collections": [
|
|
974
|
+
{
|
|
975
|
+
"id": "2aab9fd0-3715-4abe-8bb0-8cb0264d023f",
|
|
976
|
+
"name": "BBOT Public",
|
|
977
|
+
"uid": "10197090-2aab9fd0-3715-4abe-8bb0-8cb0264d023f",
|
|
978
|
+
},
|
|
979
|
+
],
|
|
980
|
+
"environments": [
|
|
981
|
+
{
|
|
982
|
+
"id": "f770f816-9c6a-40f7-bde3-c0855d2a1089",
|
|
983
|
+
"name": "BBOT Test",
|
|
984
|
+
"uid": "10197090-f770f816-9c6a-40f7-bde3-c0855d2a1089",
|
|
985
|
+
}
|
|
986
|
+
],
|
|
987
|
+
"apis": [],
|
|
988
|
+
}
|
|
989
|
+
},
|
|
990
|
+
)
|
|
991
|
+
module_test.httpx_mock.add_response(
|
|
992
|
+
url="https://www.postman.com/_api/workspace/3a7e4bdc-7ff7-4dd4-8eaa-61ddce1c3d1b/globals",
|
|
993
|
+
json={
|
|
994
|
+
"model_id": "8be7574b-219f-49e0-8d25-da447a882e4e",
|
|
995
|
+
"meta": {"model": "globals", "action": "find"},
|
|
996
|
+
"data": {
|
|
997
|
+
"workspace": "3a7e4bdc-7ff7-4dd4-8eaa-61ddce1c3d1b",
|
|
998
|
+
"lastUpdatedBy": "00000000",
|
|
999
|
+
"lastRevision": 1637239113000,
|
|
1000
|
+
"id": "8be7574b-219f-49e0-8d25-da447a882e4e",
|
|
1001
|
+
"values": [
|
|
1002
|
+
{
|
|
1003
|
+
"key": "endpoint_url",
|
|
1004
|
+
"value": "https://api.blacklanternsecurity.com/",
|
|
1005
|
+
"enabled": True,
|
|
1006
|
+
},
|
|
1007
|
+
],
|
|
1008
|
+
"createdAt": "2021-11-17T06:09:01.000Z",
|
|
1009
|
+
"updatedAt": "2021-11-18T12:38:33.000Z",
|
|
1010
|
+
},
|
|
1011
|
+
},
|
|
1012
|
+
)
|
|
1013
|
+
module_test.httpx_mock.add_response(
|
|
1014
|
+
url="https://api.getpostman.com/environments/10197090-f770f816-9c6a-40f7-bde3-c0855d2a1089",
|
|
1015
|
+
json={
|
|
1016
|
+
"environment": {
|
|
1017
|
+
"id": "f770f816-9c6a-40f7-bde3-c0855d2a1089",
|
|
1018
|
+
"name": "BBOT Test",
|
|
1019
|
+
"owner": "00000000",
|
|
1020
|
+
"createdAt": "2021-11-17T06:29:54.000Z",
|
|
1021
|
+
"updatedAt": "2021-11-23T07:06:53.000Z",
|
|
1022
|
+
"values": [
|
|
1023
|
+
{
|
|
1024
|
+
"key": "temp_session_endpoint",
|
|
1025
|
+
"value": "https://api.blacklanternsecurity.com/",
|
|
1026
|
+
"enabled": True,
|
|
1027
|
+
},
|
|
1028
|
+
],
|
|
1029
|
+
"isPublic": True,
|
|
1030
|
+
}
|
|
1031
|
+
},
|
|
1032
|
+
)
|
|
1033
|
+
module_test.httpx_mock.add_response(
|
|
1034
|
+
url="https://api.getpostman.com/collections/10197090-2aab9fd0-3715-4abe-8bb0-8cb0264d023f",
|
|
1035
|
+
json={
|
|
1036
|
+
"collection": {
|
|
1037
|
+
"info": {
|
|
1038
|
+
"_postman_id": "62b91565-d2e2-4bcd-8248-4dba2e3452f0",
|
|
1039
|
+
"name": "BBOT Public",
|
|
1040
|
+
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
|
|
1041
|
+
"updatedAt": "2021-11-17T07:13:16.000Z",
|
|
1042
|
+
"createdAt": "2021-11-17T07:13:15.000Z",
|
|
1043
|
+
"lastUpdatedBy": "00000000",
|
|
1044
|
+
"uid": "172983-62b91565-d2e2-4bcd-8248-4dba2e3452f0",
|
|
1045
|
+
},
|
|
1046
|
+
"item": [
|
|
1047
|
+
{
|
|
1048
|
+
"name": "Generate API Session",
|
|
1049
|
+
"id": "c1bac38c-dfc9-4cc0-9c19-828cbc8543b1",
|
|
1050
|
+
"protocolProfileBehavior": {"disableBodyPruning": True},
|
|
1051
|
+
"request": {
|
|
1052
|
+
"method": "POST",
|
|
1053
|
+
"header": [{"key": "Content-Type", "value": "application/json"}],
|
|
1054
|
+
"body": {
|
|
1055
|
+
"mode": "raw",
|
|
1056
|
+
"raw": '{"username": "test", "password": "Test"}',
|
|
1057
|
+
},
|
|
1058
|
+
"url": {
|
|
1059
|
+
"raw": "https://admin:admin@the-internet.herokuapp.com/basic_auth",
|
|
1060
|
+
"host": ["https://admin:admin@the-internet.herokuapp.com/basic_auth"],
|
|
1061
|
+
},
|
|
1062
|
+
"description": "",
|
|
1063
|
+
},
|
|
1064
|
+
"response": [],
|
|
1065
|
+
"uid": "10197090-c1bac38c-dfc9-4cc0-9c19-828cbc8543b1",
|
|
1066
|
+
},
|
|
1067
|
+
{
|
|
1068
|
+
"name": "Generate API Session",
|
|
1069
|
+
"id": "c1bac38c-dfc9-4cc0-9c19-828cbc8543b1",
|
|
1070
|
+
"protocolProfileBehavior": {"disableBodyPruning": True},
|
|
1071
|
+
"request": {
|
|
1072
|
+
"method": "POST",
|
|
1073
|
+
"header": [{"key": "Content-Type", "value": "application/json"}],
|
|
1074
|
+
"body": {
|
|
1075
|
+
"mode": "raw",
|
|
1076
|
+
"raw": '{"username": "test", "password": "Test"}',
|
|
1077
|
+
},
|
|
1078
|
+
"url": {
|
|
1079
|
+
"raw": "https://admin:admin@internal.host.com",
|
|
1080
|
+
"host": ["https://admin:admin@internal.host.com"],
|
|
1081
|
+
},
|
|
1082
|
+
"description": "",
|
|
1083
|
+
},
|
|
1084
|
+
"response": [],
|
|
1085
|
+
"uid": "10197090-c1bac38c-dfc9-4cc0-9c19-828cbc8543b1",
|
|
1086
|
+
},
|
|
1087
|
+
],
|
|
1088
|
+
}
|
|
1089
|
+
},
|
|
1090
|
+
)
|
|
816
1091
|
temp_path = Path("/tmp/.bbot_test")
|
|
817
1092
|
temp_repo_path = temp_path / "test_keys"
|
|
818
1093
|
shutil.rmtree(temp_repo_path, ignore_errors=True)
|
|
@@ -850,22 +1125,26 @@ class TestTrufflehog(ModuleTestBase):
|
|
|
850
1125
|
e
|
|
851
1126
|
for e in events
|
|
852
1127
|
if e.type == "VULNERABILITY"
|
|
853
|
-
and (
|
|
1128
|
+
and (
|
|
1129
|
+
e.data["host"] == "hub.docker.com"
|
|
1130
|
+
or e.data["host"] == "github.com"
|
|
1131
|
+
or e.data["host"] == "www.postman.com"
|
|
1132
|
+
)
|
|
854
1133
|
and "Verified Secret Found." in e.data["description"]
|
|
855
1134
|
and "Raw result: [https://admin:admin@the-internet.herokuapp.com]" in e.data["description"]
|
|
856
1135
|
and "RawV2 result: [https://admin:admin@the-internet.herokuapp.com/basic_auth]" in e.data["description"]
|
|
857
1136
|
]
|
|
858
|
-
# Trufflehog should find
|
|
859
|
-
assert
|
|
1137
|
+
# Trufflehog should find 4 verifiable secrets, 1 from the github, 1 from the workflow log, 1 from the docker image and 1 from the postman.
|
|
1138
|
+
assert 4 == len(vuln_events), "Failed to find secret in events"
|
|
860
1139
|
github_repo_event = [e for e in vuln_events if "test_keys" in e.data["description"]][0].parent
|
|
861
1140
|
folder = Path(github_repo_event.data["path"])
|
|
862
1141
|
assert folder.is_dir(), "Destination folder doesn't exist"
|
|
863
1142
|
with open(folder / "keys.txt") as f:
|
|
864
1143
|
content = f.read()
|
|
865
1144
|
assert content == self.file_content, "File content doesn't match"
|
|
866
|
-
filesystem_events = [e.parent for e in vuln_events
|
|
867
|
-
assert len(filesystem_events) ==
|
|
868
|
-
assert all(
|
|
1145
|
+
filesystem_events = [e.parent for e in vuln_events]
|
|
1146
|
+
assert len(filesystem_events) == 4
|
|
1147
|
+
assert all(e.type == "FILESYSTEM" for e in filesystem_events)
|
|
869
1148
|
assert 1 == len(
|
|
870
1149
|
[
|
|
871
1150
|
e
|
|
@@ -889,31 +1168,45 @@ class TestTrufflehog(ModuleTestBase):
|
|
|
889
1168
|
and Path(e.data["path"]).is_file()
|
|
890
1169
|
]
|
|
891
1170
|
), "Docker image file does not exist"
|
|
1171
|
+
assert 1 == len(
|
|
1172
|
+
[
|
|
1173
|
+
e
|
|
1174
|
+
for e in filesystem_events
|
|
1175
|
+
if e.data["path"].endswith(
|
|
1176
|
+
"/postman_workspaces/BlackLanternSecurity BBOT [Public]/3a7e4bdc-7ff7-4dd4-8eaa-61ddce1c3d1b.zip"
|
|
1177
|
+
)
|
|
1178
|
+
and Path(e.data["path"]).is_file()
|
|
1179
|
+
]
|
|
1180
|
+
), "Failed to find blacklanternsecurity postman workspace"
|
|
892
1181
|
|
|
893
1182
|
|
|
894
1183
|
class TestTrufflehog_NonVerified(TestTrufflehog):
|
|
895
|
-
config_overrides = {"modules": {"trufflehog": {"only_verified": False}}}
|
|
1184
|
+
config_overrides = {"modules": {"trufflehog": {"only_verified": False}, "postman_download": {"api_key": "asdf"}}}
|
|
896
1185
|
|
|
897
1186
|
def check(self, module_test, events):
|
|
898
1187
|
finding_events = [
|
|
899
1188
|
e
|
|
900
1189
|
for e in events
|
|
901
1190
|
if e.type == e.type == "FINDING"
|
|
902
|
-
and (
|
|
1191
|
+
and (
|
|
1192
|
+
e.data["host"] == "hub.docker.com"
|
|
1193
|
+
or e.data["host"] == "github.com"
|
|
1194
|
+
or e.data["host"] == "www.postman.com"
|
|
1195
|
+
)
|
|
903
1196
|
and "Potential Secret Found." in e.data["description"]
|
|
904
1197
|
and "Raw result: [https://admin:admin@internal.host.com]" in e.data["description"]
|
|
905
1198
|
]
|
|
906
|
-
# Trufflehog should find
|
|
907
|
-
assert
|
|
1199
|
+
# Trufflehog should find 4 unverifiable secrets, 1 from the github, 1 from the workflow log, 1 from the docker image and 1 from the postman.
|
|
1200
|
+
assert 4 == len(finding_events), "Failed to find secret in events"
|
|
908
1201
|
github_repo_event = [e for e in finding_events if "test_keys" in e.data["description"]][0].parent
|
|
909
1202
|
folder = Path(github_repo_event.data["path"])
|
|
910
1203
|
assert folder.is_dir(), "Destination folder doesn't exist"
|
|
911
1204
|
with open(folder / "keys.txt") as f:
|
|
912
1205
|
content = f.read()
|
|
913
1206
|
assert content == self.file_content, "File content doesn't match"
|
|
914
|
-
filesystem_events = [e.parent for e in finding_events
|
|
915
|
-
assert len(filesystem_events) ==
|
|
916
|
-
assert all(
|
|
1207
|
+
filesystem_events = [e.parent for e in finding_events]
|
|
1208
|
+
assert len(filesystem_events) == 4
|
|
1209
|
+
assert all(e.type == "FILESYSTEM" for e in filesystem_events)
|
|
917
1210
|
assert 1 == len(
|
|
918
1211
|
[
|
|
919
1212
|
e
|
|
@@ -937,3 +1230,13 @@ class TestTrufflehog_NonVerified(TestTrufflehog):
|
|
|
937
1230
|
and Path(e.data["path"]).is_file()
|
|
938
1231
|
]
|
|
939
1232
|
), "Docker image file does not exist"
|
|
1233
|
+
assert 1 == len(
|
|
1234
|
+
[
|
|
1235
|
+
e
|
|
1236
|
+
for e in filesystem_events
|
|
1237
|
+
if e.data["path"].endswith(
|
|
1238
|
+
"/postman_workspaces/BlackLanternSecurity BBOT [Public]/3a7e4bdc-7ff7-4dd4-8eaa-61ddce1c3d1b.zip"
|
|
1239
|
+
)
|
|
1240
|
+
and Path(e.data["path"]).is_file()
|
|
1241
|
+
]
|
|
1242
|
+
), "Failed to find blacklanternsecurity postman workspace"
|
|
@@ -66,7 +66,7 @@ web_body = """<html>
|
|
|
66
66
|
<tr>
|
|
67
67
|
<td>
|
|
68
68
|
<font size="2">
|
|
69
|
-
<a href="/" style="color: #00721e;">ViewDNS.info</a> > <a href="/" style="color: #00721e;">Tools</a> >
|
|
69
|
+
<a href="/" style="color: #00721e;">ViewDNS.info</a> > <a href="/" style="color: #00721e;">Tools</a> >
|
|
70
70
|
<H1 style="font-size: 16; display: inline;">Reverse Whois Lookup</H1>
|
|
71
71
|
<br><br>This free tool will allow you to find domain names owned by an individual person or company. Simply enter the email address or name of the person or company to find other domains registered using those same details. <a href="#" onclick="javascript:document.getElementById('faq').style.visibility = 'visible'; document.getElementById('faq').style.display = 'block';" style="color: #00721e;">FAQ</a>.<br><br>
|
|
72
72
|
<div id="faq" style="visibility: hidden; display: none;"><u><b>Frequently Asked Questions</b></u><br>Q. Will this tool return results for all domains including ccTLD's?<br>A. Unfortunately no. Whilst we do our best to ensure our data is as complete as possible, we are not able to return results for all ccTLD's. Due to a number of technical limitations with whois data, the results from any Reverse Whois tool should not be considered as exhaustive.<br><br>Q. Is your data live?<br>A. Our data is not live. We do our best to update the data as often as possible with daily updates for selected TLD's and quarterly updates for others.<br><br>Q. How do I see all records for a specific person/company rather than the limited number you show on your site?<br>A. Please <a href="mailto:feedback@viewdns.info?subject=Reverse Whois" style="color: #00721e;">email us</a> with your request and we'll see what we can do for you.<br><br></div>
|
|
@@ -4,7 +4,7 @@ from .base import ModuleTestBase
|
|
|
4
4
|
class TestWayback(ModuleTestBase):
|
|
5
5
|
async def setup_after_prep(self, module_test):
|
|
6
6
|
module_test.httpx_mock.add_response(
|
|
7
|
-
url=
|
|
7
|
+
url="http://web.archive.org/cdx/search/cdx?url=blacklanternsecurity.com&matchType=domain&output=json&fl=original&collapse=original",
|
|
8
8
|
json=[["original"], ["http://asdf.blacklanternsecurity.com"]],
|
|
9
9
|
)
|
|
10
10
|
|
|
@@ -120,7 +120,7 @@ class TestSubdomainEnumWildcardBaseline(ModuleTestBase):
|
|
|
120
120
|
|
|
121
121
|
def check(self, module_test, events):
|
|
122
122
|
assert self.queries == ["walmart.cn"]
|
|
123
|
-
assert len(events) ==
|
|
123
|
+
assert len(events) == 7
|
|
124
124
|
assert 2 == len(
|
|
125
125
|
[
|
|
126
126
|
e
|
|
@@ -185,7 +185,7 @@ def custom_lookup(query, rdtype):
|
|
|
185
185
|
def check(self, module_test, events):
|
|
186
186
|
# no subdomain enum should happen on this domain!
|
|
187
187
|
assert self.queries == []
|
|
188
|
-
assert len(events) ==
|
|
188
|
+
assert len(events) == 7
|
|
189
189
|
assert 2 == len(
|
|
190
190
|
[e for e in events if e.type == "IP_ADDRESS" and str(e.module) == "A" and e.scope_distance == 1]
|
|
191
191
|
)
|
|
@@ -107979,4 +107979,4 @@ zzz
|
|
|
107979
107979
|
zzzindex
|
|
107980
107980
|
zzztest
|
|
107981
107981
|
zzzz
|
|
107982
|
-
zzzzz
|
|
107982
|
+
zzzzz
|
bbot/wordlists/nameservers.txt
CHANGED