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.

Files changed (278) hide show
  1. bbot/__init__.py +1 -1
  2. bbot/cli.py +3 -7
  3. bbot/core/config/files.py +0 -1
  4. bbot/core/config/logger.py +34 -4
  5. bbot/core/core.py +21 -4
  6. bbot/core/engine.py +9 -8
  7. bbot/core/event/base.py +131 -52
  8. bbot/core/helpers/bloom.py +10 -3
  9. bbot/core/helpers/command.py +8 -7
  10. bbot/core/helpers/depsinstaller/installer.py +31 -13
  11. bbot/core/helpers/diff.py +10 -10
  12. bbot/core/helpers/dns/brute.py +7 -4
  13. bbot/core/helpers/dns/dns.py +1 -2
  14. bbot/core/helpers/dns/engine.py +4 -6
  15. bbot/core/helpers/dns/helpers.py +2 -2
  16. bbot/core/helpers/dns/mock.py +0 -1
  17. bbot/core/helpers/files.py +1 -1
  18. bbot/core/helpers/helper.py +7 -4
  19. bbot/core/helpers/interactsh.py +3 -3
  20. bbot/core/helpers/libmagic.py +65 -0
  21. bbot/core/helpers/misc.py +65 -22
  22. bbot/core/helpers/names_generator.py +17 -3
  23. bbot/core/helpers/process.py +0 -20
  24. bbot/core/helpers/regex.py +1 -1
  25. bbot/core/helpers/regexes.py +12 -6
  26. bbot/core/helpers/validators.py +1 -2
  27. bbot/core/helpers/web/client.py +1 -1
  28. bbot/core/helpers/web/engine.py +1 -2
  29. bbot/core/helpers/web/web.py +4 -114
  30. bbot/core/helpers/wordcloud.py +5 -5
  31. bbot/core/modules.py +36 -27
  32. bbot/core/multiprocess.py +58 -0
  33. bbot/core/shared_deps.py +46 -3
  34. bbot/db/sql/models.py +147 -0
  35. bbot/defaults.yml +12 -10
  36. bbot/modules/anubisdb.py +2 -2
  37. bbot/modules/apkpure.py +63 -0
  38. bbot/modules/azure_tenant.py +2 -2
  39. bbot/modules/baddns.py +35 -19
  40. bbot/modules/baddns_direct.py +92 -0
  41. bbot/modules/baddns_zone.py +3 -8
  42. bbot/modules/badsecrets.py +4 -3
  43. bbot/modules/base.py +195 -51
  44. bbot/modules/bevigil.py +7 -7
  45. bbot/modules/binaryedge.py +7 -4
  46. bbot/modules/bufferoverrun.py +47 -0
  47. bbot/modules/builtwith.py +6 -10
  48. bbot/modules/bypass403.py +5 -5
  49. bbot/modules/c99.py +10 -7
  50. bbot/modules/censys.py +9 -13
  51. bbot/modules/certspotter.py +5 -3
  52. bbot/modules/chaos.py +9 -7
  53. bbot/modules/code_repository.py +1 -0
  54. bbot/modules/columbus.py +3 -3
  55. bbot/modules/crt.py +5 -3
  56. bbot/modules/deadly/dastardly.py +1 -1
  57. bbot/modules/deadly/ffuf.py +9 -9
  58. bbot/modules/deadly/nuclei.py +3 -3
  59. bbot/modules/deadly/vhost.py +4 -3
  60. bbot/modules/dehashed.py +1 -1
  61. bbot/modules/digitorus.py +1 -1
  62. bbot/modules/dnsbimi.py +145 -0
  63. bbot/modules/dnscaa.py +3 -3
  64. bbot/modules/dnsdumpster.py +4 -4
  65. bbot/modules/dnstlsrpt.py +144 -0
  66. bbot/modules/docker_pull.py +7 -5
  67. bbot/modules/dockerhub.py +2 -2
  68. bbot/modules/dotnetnuke.py +20 -21
  69. bbot/modules/emailformat.py +1 -1
  70. bbot/modules/extractous.py +122 -0
  71. bbot/modules/filedownload.py +9 -7
  72. bbot/modules/fullhunt.py +7 -4
  73. bbot/modules/generic_ssrf.py +5 -5
  74. bbot/modules/github_codesearch.py +3 -2
  75. bbot/modules/github_org.py +4 -4
  76. bbot/modules/github_workflows.py +4 -4
  77. bbot/modules/gitlab.py +2 -5
  78. bbot/modules/google_playstore.py +93 -0
  79. bbot/modules/gowitness.py +48 -50
  80. bbot/modules/hackertarget.py +5 -3
  81. bbot/modules/host_header.py +5 -5
  82. bbot/modules/httpx.py +1 -4
  83. bbot/modules/hunterio.py +3 -9
  84. bbot/modules/iis_shortnames.py +19 -30
  85. bbot/modules/internal/cloudcheck.py +29 -12
  86. bbot/modules/internal/dnsresolve.py +22 -22
  87. bbot/modules/internal/excavate.py +97 -59
  88. bbot/modules/internal/speculate.py +41 -32
  89. bbot/modules/internetdb.py +4 -2
  90. bbot/modules/ip2location.py +3 -5
  91. bbot/modules/ipneighbor.py +1 -1
  92. bbot/modules/ipstack.py +3 -8
  93. bbot/modules/jadx.py +87 -0
  94. bbot/modules/leakix.py +11 -10
  95. bbot/modules/myssl.py +2 -2
  96. bbot/modules/newsletters.py +2 -2
  97. bbot/modules/otx.py +5 -3
  98. bbot/modules/output/asset_inventory.py +7 -7
  99. bbot/modules/output/base.py +1 -1
  100. bbot/modules/output/csv.py +1 -1
  101. bbot/modules/output/http.py +20 -14
  102. bbot/modules/output/mysql.py +51 -0
  103. bbot/modules/output/neo4j.py +7 -2
  104. bbot/modules/output/postgres.py +49 -0
  105. bbot/modules/output/slack.py +0 -1
  106. bbot/modules/output/sqlite.py +29 -0
  107. bbot/modules/output/stdout.py +2 -2
  108. bbot/modules/output/teams.py +107 -6
  109. bbot/modules/paramminer_headers.py +8 -11
  110. bbot/modules/passivetotal.py +13 -13
  111. bbot/modules/portscan.py +32 -6
  112. bbot/modules/postman.py +50 -126
  113. bbot/modules/postman_download.py +220 -0
  114. bbot/modules/rapiddns.py +3 -8
  115. bbot/modules/report/asn.py +18 -11
  116. bbot/modules/robots.py +3 -3
  117. bbot/modules/securitytrails.py +7 -10
  118. bbot/modules/securitytxt.py +1 -1
  119. bbot/modules/shodan_dns.py +7 -9
  120. bbot/modules/sitedossier.py +1 -1
  121. bbot/modules/skymem.py +2 -2
  122. bbot/modules/social.py +2 -1
  123. bbot/modules/subdomaincenter.py +1 -1
  124. bbot/modules/subdomainradar.py +160 -0
  125. bbot/modules/telerik.py +8 -8
  126. bbot/modules/templates/bucket.py +1 -1
  127. bbot/modules/templates/github.py +22 -14
  128. bbot/modules/templates/postman.py +21 -0
  129. bbot/modules/templates/shodan.py +14 -13
  130. bbot/modules/templates/sql.py +95 -0
  131. bbot/modules/templates/subdomain_enum.py +51 -16
  132. bbot/modules/templates/webhook.py +2 -4
  133. bbot/modules/trickest.py +8 -37
  134. bbot/modules/trufflehog.py +10 -12
  135. bbot/modules/url_manipulation.py +3 -3
  136. bbot/modules/urlscan.py +1 -1
  137. bbot/modules/viewdns.py +1 -1
  138. bbot/modules/virustotal.py +8 -30
  139. bbot/modules/wafw00f.py +1 -1
  140. bbot/modules/wayback.py +1 -1
  141. bbot/modules/wpscan.py +17 -11
  142. bbot/modules/zoomeye.py +11 -6
  143. bbot/presets/baddns-thorough.yml +12 -0
  144. bbot/presets/fast.yml +16 -0
  145. bbot/presets/kitchen-sink.yml +1 -2
  146. bbot/presets/spider.yml +4 -0
  147. bbot/presets/subdomain-enum.yml +7 -7
  148. bbot/presets/web/dotnet-audit.yml +0 -1
  149. bbot/scanner/manager.py +5 -16
  150. bbot/scanner/preset/args.py +46 -26
  151. bbot/scanner/preset/environ.py +7 -2
  152. bbot/scanner/preset/path.py +7 -4
  153. bbot/scanner/preset/preset.py +36 -23
  154. bbot/scanner/scanner.py +172 -62
  155. bbot/scanner/target.py +236 -434
  156. bbot/scripts/docs.py +1 -1
  157. bbot/test/bbot_fixtures.py +13 -3
  158. bbot/test/conftest.py +132 -100
  159. bbot/test/fastapi_test.py +17 -0
  160. bbot/test/owasp_mastg.apk +0 -0
  161. bbot/test/run_tests.sh +4 -4
  162. bbot/test/test.conf +2 -0
  163. bbot/test/test_step_1/test__module__tests.py +0 -1
  164. bbot/test/test_step_1/test_bbot_fastapi.py +79 -0
  165. bbot/test/test_step_1/test_bloom_filter.py +2 -1
  166. bbot/test/test_step_1/test_cli.py +138 -64
  167. bbot/test/test_step_1/test_dns.py +61 -27
  168. bbot/test/test_step_1/test_engine.py +17 -19
  169. bbot/test/test_step_1/test_events.py +183 -30
  170. bbot/test/test_step_1/test_helpers.py +64 -29
  171. bbot/test/test_step_1/test_manager_deduplication.py +1 -1
  172. bbot/test/test_step_1/test_manager_scope_accuracy.py +333 -330
  173. bbot/test/test_step_1/test_modules_basic.py +68 -70
  174. bbot/test/test_step_1/test_presets.py +183 -100
  175. bbot/test/test_step_1/test_python_api.py +7 -2
  176. bbot/test/test_step_1/test_regexes.py +35 -5
  177. bbot/test/test_step_1/test_scan.py +39 -5
  178. bbot/test/test_step_1/test_scope.py +4 -3
  179. bbot/test/test_step_1/test_target.py +242 -145
  180. bbot/test/test_step_1/test_web.py +14 -10
  181. bbot/test/test_step_2/module_tests/base.py +15 -7
  182. bbot/test/test_step_2/module_tests/test_module_anubisdb.py +1 -1
  183. bbot/test/test_step_2/module_tests/test_module_apkpure.py +71 -0
  184. bbot/test/test_step_2/module_tests/test_module_asset_inventory.py +0 -1
  185. bbot/test/test_step_2/module_tests/test_module_azure_realm.py +1 -1
  186. bbot/test/test_step_2/module_tests/test_module_baddns.py +6 -6
  187. bbot/test/test_step_2/module_tests/test_module_baddns_direct.py +62 -0
  188. bbot/test/test_step_2/module_tests/test_module_bevigil.py +29 -2
  189. bbot/test/test_step_2/module_tests/test_module_binaryedge.py +4 -2
  190. bbot/test/test_step_2/module_tests/test_module_bucket_amazon.py +2 -2
  191. bbot/test/test_step_2/module_tests/test_module_bucket_azure.py +1 -1
  192. bbot/test/test_step_2/module_tests/test_module_bufferoverrun.py +35 -0
  193. bbot/test/test_step_2/module_tests/test_module_builtwith.py +2 -2
  194. bbot/test/test_step_2/module_tests/test_module_bypass403.py +1 -1
  195. bbot/test/test_step_2/module_tests/test_module_c99.py +126 -0
  196. bbot/test/test_step_2/module_tests/test_module_censys.py +4 -1
  197. bbot/test/test_step_2/module_tests/test_module_cloudcheck.py +4 -0
  198. bbot/test/test_step_2/module_tests/test_module_code_repository.py +11 -1
  199. bbot/test/test_step_2/module_tests/test_module_columbus.py +1 -1
  200. bbot/test/test_step_2/module_tests/test_module_credshed.py +3 -3
  201. bbot/test/test_step_2/module_tests/test_module_dastardly.py +2 -1
  202. bbot/test/test_step_2/module_tests/test_module_dehashed.py +2 -2
  203. bbot/test/test_step_2/module_tests/test_module_digitorus.py +1 -1
  204. bbot/test/test_step_2/module_tests/test_module_discord.py +1 -1
  205. bbot/test/test_step_2/module_tests/test_module_dnsbimi.py +103 -0
  206. bbot/test/test_step_2/module_tests/test_module_dnsbrute.py +9 -10
  207. bbot/test/test_step_2/module_tests/test_module_dnsbrute_mutations.py +1 -2
  208. bbot/test/test_step_2/module_tests/test_module_dnscommonsrv.py +1 -2
  209. bbot/test/test_step_2/module_tests/test_module_dnsdumpster.py +4 -4
  210. bbot/test/test_step_2/module_tests/test_module_dnstlsrpt.py +64 -0
  211. bbot/test/test_step_2/module_tests/test_module_dotnetnuke.py +0 -8
  212. bbot/test/test_step_2/module_tests/test_module_excavate.py +28 -48
  213. bbot/test/test_step_2/module_tests/test_module_extractous.py +54 -0
  214. bbot/test/test_step_2/module_tests/test_module_ffuf_shortnames.py +1 -1
  215. bbot/test/test_step_2/module_tests/test_module_filedownload.py +14 -14
  216. bbot/test/test_step_2/module_tests/test_module_git_clone.py +2 -2
  217. bbot/test/test_step_2/module_tests/test_module_github_org.py +19 -8
  218. bbot/test/test_step_2/module_tests/test_module_github_workflows.py +1 -1
  219. bbot/test/test_step_2/module_tests/test_module_gitlab.py +9 -4
  220. bbot/test/test_step_2/module_tests/test_module_google_playstore.py +83 -0
  221. bbot/test/test_step_2/module_tests/test_module_gowitness.py +4 -6
  222. bbot/test/test_step_2/module_tests/test_module_host_header.py +1 -1
  223. bbot/test/test_step_2/module_tests/test_module_http.py +4 -4
  224. bbot/test/test_step_2/module_tests/test_module_httpx.py +10 -8
  225. bbot/test/test_step_2/module_tests/test_module_hunterio.py +68 -4
  226. bbot/test/test_step_2/module_tests/test_module_jadx.py +55 -0
  227. bbot/test/test_step_2/module_tests/test_module_json.py +22 -9
  228. bbot/test/test_step_2/module_tests/test_module_leakix.py +7 -3
  229. bbot/test/test_step_2/module_tests/test_module_mysql.py +76 -0
  230. bbot/test/test_step_2/module_tests/test_module_myssl.py +1 -1
  231. bbot/test/test_step_2/module_tests/test_module_neo4j.py +1 -1
  232. bbot/test/test_step_2/module_tests/test_module_newsletters.py +16 -16
  233. bbot/test/test_step_2/module_tests/test_module_ntlm.py +8 -7
  234. bbot/test/test_step_2/module_tests/test_module_oauth.py +1 -1
  235. bbot/test/test_step_2/module_tests/test_module_otx.py +1 -1
  236. bbot/test/test_step_2/module_tests/test_module_paramminer_cookies.py +1 -2
  237. bbot/test/test_step_2/module_tests/test_module_paramminer_getparams.py +0 -6
  238. bbot/test/test_step_2/module_tests/test_module_paramminer_headers.py +2 -9
  239. bbot/test/test_step_2/module_tests/test_module_passivetotal.py +3 -1
  240. bbot/test/test_step_2/module_tests/test_module_pgp.py +2 -2
  241. bbot/test/test_step_2/module_tests/test_module_portscan.py +9 -8
  242. bbot/test/test_step_2/module_tests/test_module_postgres.py +74 -0
  243. bbot/test/test_step_2/module_tests/test_module_postman.py +84 -253
  244. bbot/test/test_step_2/module_tests/test_module_postman_download.py +439 -0
  245. bbot/test/test_step_2/module_tests/test_module_rapiddns.py +93 -1
  246. bbot/test/test_step_2/module_tests/test_module_shodan_dns.py +20 -1
  247. bbot/test/test_step_2/module_tests/test_module_sitedossier.py +2 -2
  248. bbot/test/test_step_2/module_tests/test_module_smuggler.py +14 -14
  249. bbot/test/test_step_2/module_tests/test_module_social.py +11 -1
  250. bbot/test/test_step_2/module_tests/test_module_speculate.py +4 -8
  251. bbot/test/test_step_2/module_tests/test_module_splunk.py +4 -4
  252. bbot/test/test_step_2/module_tests/test_module_sqlite.py +18 -0
  253. bbot/test/test_step_2/module_tests/test_module_sslcert.py +1 -1
  254. bbot/test/test_step_2/module_tests/test_module_stdout.py +5 -3
  255. bbot/test/test_step_2/module_tests/test_module_subdomaincenter.py +1 -1
  256. bbot/test/test_step_2/module_tests/test_module_subdomainradar.py +208 -0
  257. bbot/test/test_step_2/module_tests/test_module_subdomains.py +1 -1
  258. bbot/test/test_step_2/module_tests/test_module_teams.py +8 -6
  259. bbot/test/test_step_2/module_tests/test_module_telerik.py +1 -1
  260. bbot/test/test_step_2/module_tests/test_module_trufflehog.py +317 -14
  261. bbot/test/test_step_2/module_tests/test_module_viewdns.py +1 -1
  262. bbot/test/test_step_2/module_tests/test_module_wayback.py +1 -1
  263. bbot/test/test_step_2/template_tests/test_template_subdomain_enum.py +2 -2
  264. bbot/wordlists/devops_mutations.txt +1 -1
  265. bbot/wordlists/ffuf_shortname_candidates.txt +1 -1
  266. bbot/wordlists/nameservers.txt +1 -1
  267. bbot/wordlists/paramminer_headers.txt +1 -1
  268. bbot/wordlists/paramminer_parameters.txt +1 -1
  269. bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt +1 -1
  270. bbot/wordlists/valid_url_schemes.txt +1 -1
  271. {bbot-2.0.1.4720rc0.dist-info → bbot-2.3.0.5401rc0.dist-info}/METADATA +48 -18
  272. bbot-2.3.0.5401rc0.dist-info/RECORD +421 -0
  273. {bbot-2.0.1.4720rc0.dist-info → bbot-2.3.0.5401rc0.dist-info}/WHEEL +1 -1
  274. bbot/modules/unstructured.py +0 -163
  275. bbot/test/test_step_2/module_tests/test_module_unstructured.py +0 -102
  276. bbot-2.0.1.4720rc0.dist-info/RECORD +0 -387
  277. {bbot-2.0.1.4720rc0.dist-info → bbot-2.3.0.5401rc0.dist-info}/LICENSE +0 -0
  278. {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 (e.data["host"] == "hub.docker.com" or e.data["host"] == "github.com")
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 3 verifiable secrets, 1 from the github, 1 from the workflow log and 1 from the docker image. Unstructured will extract the text file but trufflehog should reject it as its already scanned the containing folder
859
- assert 3 == len(vuln_events), "Failed to find secret in events"
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 if "bbot" in e.data["description"]]
867
- assert len(filesystem_events) == 3
868
- assert all([e.type == "FILESYSTEM" for e in filesystem_events])
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 (e.data["host"] == "hub.docker.com" or e.data["host"] == "github.com")
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 3 unverifiable secrets, 1 from the github, 1 from the workflow log and 1 from the docker image. Unstructured will extract the text file but trufflehog should reject it as its already scanned the containing folder
907
- assert 3 == len(finding_events), "Failed to find secret in events"
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 if "bbot" in e.data["description"]]
915
- assert len(filesystem_events) == 3
916
- assert all([e.type == "FILESYSTEM" for e in filesystem_events])
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=f"http://web.archive.org/cdx/search/cdx?url=blacklanternsecurity.com&matchType=domain&output=json&fl=original&collapse=original",
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) == 6
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) == 6
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
  )
@@ -105,4 +105,4 @@ store
105
105
  home
106
106
  production
107
107
  auto
108
- cn
108
+ cn
@@ -107979,4 +107979,4 @@ zzz
107979
107979
  zzzindex
107980
107980
  zzztest
107981
107981
  zzzz
107982
- zzzzz
107982
+ zzzzz
@@ -2370,4 +2370,4 @@
2370
2370
  8.25.185.131
2371
2371
  203.39.3.133
2372
2372
  118.69.187.252
2373
- 108.56.80.135
2373
+ 108.56.80.135
@@ -1147,4 +1147,4 @@ http_sm_userdn
1147
1147
  http_sm_usermsg
1148
1148
  x-remote-ip
1149
1149
  traceparent
1150
- tracestate
1150
+ tracestate
@@ -6520,4 +6520,4 @@ shell_path
6520
6520
  user_token
6521
6521
  adminCookie
6522
6522
  fullapp
6523
- LandingUrl
6523
+ LandingUrl
@@ -830,4 +830,4 @@
830
830
  .z
831
831
  .zdat
832
832
  .zif
833
- .zip
833
+ .zip
@@ -379,4 +379,4 @@ xri
379
379
  ymsgr
380
380
  z39.50
381
381
  z39.50r
382
- z39.50s
382
+ z39.50s