bbot 2.5.0.6790rc0__py3-none-any.whl → 2.5.0.6807rc0__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 CHANGED
@@ -1,5 +1,5 @@
1
1
  # version placeholder (replaced by poetry-dynamic-versioning)
2
- __version__ = "v2.5.0.6790rc"
2
+ __version__ = "v2.5.0.6807rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
5
5
 
@@ -223,11 +223,6 @@ class DepsInstaller:
223
223
  success = True
224
224
  preloaded = self.all_modules_preloaded[module]
225
225
 
226
- # ansible tasks
227
- ansible_tasks = preloaded["deps"]["ansible"]
228
- if ansible_tasks:
229
- success &= self.tasks(module, ansible_tasks)
230
-
231
226
  # apt
232
227
  deps_apt = preloaded["deps"]["apt"]
233
228
  if deps_apt:
@@ -258,6 +253,11 @@ class DepsInstaller:
258
253
  self.setup_status[dep_common] = result
259
254
  success &= result
260
255
 
256
+ # ansible tasks
257
+ ansible_tasks = preloaded["deps"]["ansible"]
258
+ if ansible_tasks:
259
+ success &= self.tasks(module, ansible_tasks)
260
+
261
261
  return success
262
262
 
263
263
  async def pip_install(self, packages, constraints=None):
bbot/modules/gowitness.py CHANGED
@@ -16,7 +16,7 @@ class gowitness(BaseModule):
16
16
  flags = ["active", "safe", "web-screenshots"]
17
17
  meta = {"description": "Take screenshots of webpages", "created_date": "2022-07-08", "author": "@TheTechromancer"}
18
18
  options = {
19
- "version": "2.4.2",
19
+ "version": "3.0.5",
20
20
  "threads": 0,
21
21
  "timeout": 10,
22
22
  "resolution_x": 1440,
@@ -161,6 +161,7 @@ class gowitness(BaseModule):
161
161
  key = e.data["url"]
162
162
  event_dict[key] = e
163
163
  stdin = "\n".join(list(event_dict))
164
+ self.hugeinfo(f"Gowitness input: {stdin}")
164
165
 
165
166
  try:
166
167
  async for line in self.run_process_live(self.command, input=stdin, idle_timeout=self.idle_timeout):
@@ -174,12 +175,14 @@ class gowitness(BaseModule):
174
175
  new_screenshots = await self.get_new_screenshots()
175
176
  for filename, screenshot in new_screenshots.items():
176
177
  url = screenshot["url"]
178
+ url = self.helpers.clean_url(url).geturl()
177
179
  final_url = screenshot["final_url"]
178
180
  filename = self.screenshot_path / screenshot["filename"]
179
181
  filename = filename.relative_to(self.scan.home)
180
182
  # NOTE: this prevents long filenames from causing problems in BBOT, but gowitness will still fail to save it.
181
183
  filename = self.helpers.truncate_filename(filename)
182
184
  webscreenshot_data = {"path": str(filename), "url": final_url}
185
+ self.hugewarning(event_dict)
183
186
  parent_event = event_dict[url]
184
187
  await self.emit_event(
185
188
  webscreenshot_data,
@@ -191,11 +194,11 @@ class gowitness(BaseModule):
191
194
  # emit URLs
192
195
  new_network_logs = await self.get_new_network_logs()
193
196
  for url, row in new_network_logs.items():
194
- ip = row["ip"]
197
+ ip = row["remote_ip"]
195
198
  status_code = row["status_code"]
196
199
  tags = [f"status-{status_code}", f"ip-{ip}", "spider-danger"]
197
200
 
198
- _id = row["url_id"]
201
+ _id = row["result_id"]
199
202
  parent_url = self.screenshots_taken[_id]
200
203
  parent_event = event_dict[parent_url]
201
204
  if url and url.startswith("http"):
@@ -210,7 +213,7 @@ class gowitness(BaseModule):
210
213
  # emit technologies
211
214
  new_technologies = await self.get_new_technologies()
212
215
  for row in new_technologies.values():
213
- parent_id = row["url_id"]
216
+ parent_id = row["result_id"]
214
217
  parent_url = self.screenshots_taken[parent_id]
215
218
  parent_event = event_dict[parent_url]
216
219
  technology = row["value"]
@@ -224,28 +227,29 @@ class gowitness(BaseModule):
224
227
 
225
228
  def construct_command(self):
226
229
  # base executable
227
- command = ["gowitness"]
230
+ command = ["gowitness", "scan"]
228
231
  # chrome path
229
232
  if self.chrome_path is not None:
230
233
  command += ["--chrome-path", str(self.chrome_path)]
231
234
  # db path
232
- command += ["--db-path", str(self.db_path)]
235
+ command += ["--write-db"]
236
+ command += ["--write-db-uri", f"sqlite://{self.db_path}"]
233
237
  # screenshot path
234
238
  command += ["--screenshot-path", str(self.screenshot_path)]
235
239
  # user agent
236
- command += ["--user-agent", f"{self.scan.useragent}"]
240
+ command += ["--chrome-user-agent", f"{self.scan.useragent}"]
237
241
  # proxy
238
242
  if self.proxy:
239
- command += ["--proxy", str(self.proxy)]
243
+ command += ["--chrome-proxy", str(self.proxy)]
240
244
  # resolution
241
- command += ["--resolution-x", str(self.resolution_x)]
242
- command += ["--resolution-y", str(self.resolution_y)]
243
- # input
244
- command += ["file", "-f", "-"]
245
+ command += ["--chrome-window-x", str(self.resolution_x)]
246
+ command += ["--chrome-window-y", str(self.resolution_y)]
245
247
  # threads
246
248
  command += ["--threads", str(self.threads)]
247
249
  # timeout
248
250
  command += ["--timeout", str(self.timeout)]
251
+ # input
252
+ command += ["file", "-f", "-"]
249
253
  return command
250
254
 
251
255
  async def get_new_screenshots(self):
@@ -254,8 +258,10 @@ class gowitness(BaseModule):
254
258
  async with aiosqlite.connect(str(self.db_path)) as con:
255
259
  con.row_factory = aiosqlite.Row
256
260
  con.text_factory = self.helpers.smart_decode
257
- async with con.execute("SELECT * FROM urls") as cur:
261
+ async with con.execute("SELECT * FROM results") as cur:
262
+ self.critical(f"CUR: {cur}")
258
263
  async for row in cur:
264
+ self.critical(f"SCREENSHOT: {row}")
259
265
  row = dict(row)
260
266
  _id = row["id"]
261
267
  if _id not in self.screenshots_taken:
@@ -270,8 +276,9 @@ class gowitness(BaseModule):
270
276
  con.row_factory = aiosqlite.Row
271
277
  async with con.execute("SELECT * FROM network_logs") as cur:
272
278
  async for row in cur:
279
+ self.critical(f"NETWORK LOG: {row}")
273
280
  row = dict(row)
274
- url = row["final_url"]
281
+ url = row["url"]
275
282
  if url not in self.connections_logged:
276
283
  self.connections_logged.add(url)
277
284
  network_logs[url] = row
@@ -284,6 +291,7 @@ class gowitness(BaseModule):
284
291
  con.row_factory = aiosqlite.Row
285
292
  async with con.execute("SELECT * FROM technologies") as cur:
286
293
  async for row in cur:
294
+ self.critical(f"TECHNOLOGY: {row}")
287
295
  _id = row["id"]
288
296
  if _id not in self.technologies_found:
289
297
  self.technologies_found.add(_id)
@@ -0,0 +1,142 @@
1
+ import json
2
+ from pathlib import Path
3
+ from bbot.modules.base import BaseModule
4
+
5
+
6
+ class graphql_introspection(BaseModule):
7
+ watched_events = ["URL"]
8
+ produced_events = ["FINDING"]
9
+ flags = ["safe", "active", "web-basic"]
10
+ meta = {
11
+ "description": "Perform GraphQL introspection on a target",
12
+ "created_date": "2025-07-01",
13
+ "author": "@mukesh-dream11",
14
+ }
15
+ options = {
16
+ "graphql_endpoint_urls": ["/", "/graphql", "/v1/graphql"],
17
+ "output_folder": "",
18
+ }
19
+ options_desc = {
20
+ "graphql_endpoint_urls": "List of GraphQL endpoint to suffix to the target URL",
21
+ "output_folder": "Folder to save the GraphQL schemas to",
22
+ }
23
+
24
+ async def setup(self):
25
+ output_folder = self.config.get("output_folder", "")
26
+ if output_folder:
27
+ self.output_dir = Path(output_folder) / "graphql-schemas"
28
+ else:
29
+ self.output_dir = self.scan.home / "graphql-schemas"
30
+ self.helpers.mkdir(self.output_dir)
31
+ return True
32
+
33
+ async def filter_event(self, event):
34
+ # Dedup by the base URL
35
+ base_url = event.parsed_url._replace(path="/", query="", fragment="").geturl()
36
+ return hash(base_url)
37
+
38
+ async def handle_event(self, event):
39
+ base_url = event.parsed_url._replace(path="/", query="", fragment="").geturl().rstrip("/")
40
+ for endpoint_url in self.config.get("graphql_endpoint_urls", []):
41
+ url = f"{base_url}{endpoint_url}"
42
+ request_args = {
43
+ "url": url,
44
+ "method": "POST",
45
+ "json": {
46
+ "query": """\
47
+ query IntrospectionQuery {
48
+ __schema {
49
+ queryType {
50
+ name
51
+ }
52
+ mutationType {
53
+ name
54
+ }
55
+ types {
56
+ name
57
+ kind
58
+ description
59
+ fields(includeDeprecated: true) {
60
+ name
61
+ description
62
+ type {
63
+ ... TypeRef
64
+ }
65
+ isDeprecated
66
+ deprecationReason
67
+ }
68
+ interfaces {
69
+ ... TypeRef
70
+ }
71
+ possibleTypes {
72
+ ... TypeRef
73
+ }
74
+ enumValues(includeDeprecated: true) {
75
+ name
76
+ description
77
+ isDeprecated
78
+ deprecationReason
79
+ }
80
+ ofType {
81
+ ... TypeRef
82
+ }
83
+ }
84
+ }
85
+ }
86
+
87
+ fragment TypeRef on __Type {
88
+ kind
89
+ name
90
+ ofType {
91
+ kind
92
+ name
93
+ ofType {
94
+ kind
95
+ name
96
+ ofType {
97
+ kind
98
+ name
99
+ ofType {
100
+ kind
101
+ name
102
+ ofType {
103
+ kind
104
+ name
105
+ ofType {
106
+ kind
107
+ name
108
+ ofType {
109
+ kind
110
+ name
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }"""
119
+ },
120
+ }
121
+ response = await self.helpers.request(**request_args)
122
+ if not response or response.status_code != 200:
123
+ self.debug(f"Failed to get GraphQL schema for {url} (status code {response.status_code})")
124
+ continue
125
+ try:
126
+ response_json = response.json()
127
+ except json.JSONDecodeError:
128
+ self.debug(f"Failed to parse JSON for {url}")
129
+ continue
130
+ if response_json.get("data", {}).get("__schema", {}).get("types", []):
131
+ filename = f"schema-{self.helpers.tagify(url)}.json"
132
+ filename = self.output_dir / filename
133
+ with open(filename, "w") as f:
134
+ json.dump(response_json, f)
135
+ await self.emit_event(
136
+ {"url": url, "description": "GraphQL schema", "path": str(filename.relative_to(self.scan.home))},
137
+ "FINDING",
138
+ event,
139
+ context=f"{{module}} found GraphQL schema at {url}",
140
+ )
141
+ # return, because we only want to find one schema per target
142
+ return
@@ -14,7 +14,7 @@ class trufflehog(BaseModule):
14
14
  }
15
15
 
16
16
  options = {
17
- "version": "3.89.2",
17
+ "version": "3.90.1",
18
18
  "config": "",
19
19
  "only_verified": True,
20
20
  "concurrency": 8,
bbot/test/conftest.py CHANGED
@@ -1,8 +1,8 @@
1
1
  import os
2
2
  import ssl
3
3
  import time
4
- import shutil
5
4
  import pytest
5
+ import shutil
6
6
  import asyncio
7
7
  import logging
8
8
  from pathlib import Path
@@ -51,9 +51,9 @@ class TestGowitness(ModuleTestBase):
51
51
  )
52
52
 
53
53
  screenshots_path = self.home_dir / "scans" / module_test.scan.name / "gowitness" / "screenshots"
54
- screenshots = list(screenshots_path.glob("*.png"))
54
+ screenshots = list(screenshots_path.glob("*.jpeg"))
55
55
  assert len(screenshots) == 1, (
56
- f"{len(screenshots):,} .png files found at {screenshots_path}, should have been 1"
56
+ f"{len(screenshots):,} .jpeg files found at {screenshots_path}, should have been 1"
57
57
  )
58
58
  assert 1 == len([e for e in events if e.type == "URL" and e.data == "http://127.0.0.1:8888/"])
59
59
  assert 1 == len(
@@ -74,9 +74,9 @@ class TestGowitness_Social(TestGowitness):
74
74
 
75
75
  def check(self, module_test, events):
76
76
  screenshots_path = self.home_dir / "scans" / module_test.scan.name / "gowitness" / "screenshots"
77
- screenshots = list(screenshots_path.glob("*.png"))
77
+ screenshots = list(screenshots_path.glob("*.jpeg"))
78
78
  assert len(screenshots) == 2, (
79
- f"{len(screenshots):,} .png files found at {screenshots_path}, should have been 2"
79
+ f"{len(screenshots):,} .jpeg files found at {screenshots_path}, should have been 2"
80
80
  )
81
81
  assert 2 == len([e for e in events if e.type == "WEBSCREENSHOT"])
82
82
  assert 1 == len(
@@ -86,7 +86,7 @@ class TestGowitness_Social(TestGowitness):
86
86
  if e.type == "WEBSCREENSHOT" and e.data["url"] == "http://127.0.0.1:8888/blacklanternsecurity"
87
87
  ]
88
88
  )
89
- assert 1 == len(
89
+ assert len(
90
90
  [
91
91
  e
92
92
  for e in events
@@ -0,0 +1,34 @@
1
+ from .base import ModuleTestBase
2
+
3
+
4
+ class TestGraphQLIntrospectionNon200(ModuleTestBase):
5
+ targets = ["http://127.0.0.1:8888"]
6
+ modules_overrides = ["graphql_introspection"]
7
+
8
+ async def setup_after_prep(self, module_test):
9
+ module_test.set_expect_requests(
10
+ expect_args={"method": "POST", "uri": "/"},
11
+ respond_args={"response_data": "ok"},
12
+ )
13
+
14
+ def check(self, module_test, events):
15
+ assert all(e.type != "FINDING" for e in events), "should have raised 0 events"
16
+
17
+
18
+ class TestGraphQLIntrospection(ModuleTestBase):
19
+ targets = ["http://127.0.0.1:8888"]
20
+ modules_overrides = ["graphql_introspection"]
21
+
22
+ async def setup_after_prep(self, module_test):
23
+ module_test.set_expect_requests(
24
+ expect_args={"method": "POST", "uri": "/"},
25
+ respond_args={
26
+ "response_data": """{"data": {"__schema": {"types": ["dummy"]}}}""",
27
+ },
28
+ )
29
+
30
+ def check(self, module_test, events):
31
+ finding = [e for e in events if e.type == "FINDING"]
32
+ assert finding, "should have raised 1 FINDING event"
33
+ assert finding[0].data["url"] == "http://127.0.0.1:8888/"
34
+ assert finding[0].data["description"] == "GraphQL schema"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bbot
3
- Version: 2.5.0.6790rc0
3
+ Version: 2.5.0.6807rc0
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
@@ -1,4 +1,4 @@
1
- bbot/__init__.py,sha256=eeeMm8A02JCgtw8Y3LIUP8V1-N0OyiK-EWMPsXQRovY,163
1
+ bbot/__init__.py,sha256=mXR46kJz4_7NK7UMuE16LjE9yGcgU-aGNljCPSHMGLA,163
2
2
  bbot/cli.py,sha256=1QJbANVw9Q3GFM92H2QRV2ds5756ulm08CDZwzwPpeI,11888
3
3
  bbot/core/__init__.py,sha256=l255GJE_DvUnWvrRb0J5lG-iMztJ8zVvoweDOfegGtI,46
4
4
  bbot/core/config/__init__.py,sha256=zYNw2Me6tsEr8hOOkLb4BQ97GB7Kis2k--G81S8vofU,342
@@ -16,7 +16,7 @@ bbot/core/helpers/bloom.py,sha256=gk02rO6x3F5MICa7ZUDsinRudwoGAifsbiyiMCwd0Gs,27
16
16
  bbot/core/helpers/cache.py,sha256=1aMr3HVD45cDtHEG5xlznDUCywRgO9oRFidscrs_5sA,1537
17
17
  bbot/core/helpers/command.py,sha256=ZiLp71iEEcnnHLkvyD_TVeBKl9Uz9PGpTcpl9EHLCgQ,12938
18
18
  bbot/core/helpers/depsinstaller/__init__.py,sha256=C2jF_ymSPIO68F649csYQql37ppPfUjFc8eq8LhgDkQ,66
19
- bbot/core/helpers/depsinstaller/installer.py,sha256=eos-Q9KUPHQRUU8iRiT5pVJccuHaLouMxxFvjPgR_1s,22154
19
+ bbot/core/helpers/depsinstaller/installer.py,sha256=6_7SehcsYRVoU9gYzve85Y5PIzJQUBCgf8THCsqjaAM,22154
20
20
  bbot/core/helpers/depsinstaller/sudo_askpass.py,sha256=yGa2OQv30RO75QkMuG1iruKqb7amQxRVRRcHmvIeGhk,1276
21
21
  bbot/core/helpers/diff.py,sha256=X9MnHfz3IjWhD2grYTHzVPYoiWI9ZqjJul2Bp_BRGcE,10841
22
22
  bbot/core/helpers/dns/__init__.py,sha256=SboBeh4o81Xd4mAKhV10QzoRPDH4g28xC5PZVqVmJ28,35
@@ -113,7 +113,8 @@ bbot/modules/github_usersearch.py,sha256=G8knkQBJsn7EKcMhcEaFPiB_Y5S96e2VaseBubs
113
113
  bbot/modules/github_workflows.py,sha256=xKntAFDeGuE4MqbEmhJyYXKbzoSh9tWYlHNlnF37PYA,10040
114
114
  bbot/modules/gitlab.py,sha256=9oWWpBijeHCjuFBfWW4HvNqt7bvJvrBgBjaaz_UPPnE,5964
115
115
  bbot/modules/google_playstore.py,sha256=N4QjzQag_bgDXfX17rytBiiWA-SQtYI2N0J_ZNEOdv0,3701
116
- bbot/modules/gowitness.py,sha256=o4nIBbHVX9tYVW9CpwTsaftWDZu41nhxS0KEp4FoiBs,13003
116
+ bbot/modules/gowitness.py,sha256=ioh66xQEQ3dz7FfZzR5dPNFdELhJrwiOIm3nGvYl8n8,13466
117
+ bbot/modules/graphql_introspection.py,sha256=-BAzNhBegup2sIYQdJ0jcafZFTGTZl3WoMygilyvfVA,4144
117
118
  bbot/modules/hackertarget.py,sha256=IsKs9PtxUHdLJKZydlRdW_loBE2KphQYi3lKDAd4odc,1029
118
119
  bbot/modules/host_header.py,sha256=uDjwidMdeNPMRfzQ2YW4REEGsZqnGOZHbOS6GgdNd9s,7686
119
120
  bbot/modules/httpx.py,sha256=z0sgnfLqIXyiadM0rKQK2p86lka7rC4pGCfTVUqU5Lk,8118
@@ -207,7 +208,7 @@ bbot/modules/templates/sql.py,sha256=o-CdyyoJvHJdJBKkj3CIGXYxUta4w2AB_2Vr-k7cDDU
207
208
  bbot/modules/templates/subdomain_enum.py,sha256=epyKSly08jqaINV_AMMWbNafIeQjJqvd3aj63KD0Mck,8402
208
209
  bbot/modules/templates/webhook.py,sha256=uGFmcJ81GzGN1UI2k2O7nQF_fyh4ehLDEg2NSXaPnhk,3373
209
210
  bbot/modules/trickest.py,sha256=MRgLW0YiDWzlWdAjyqfPPLFb-a51r-Ffn_dphiJI_gA,1550
210
- bbot/modules/trufflehog.py,sha256=e8M0HvDRImwvokeCPE-TnJGRXgAn1W4asu_BMST13Ik,8717
211
+ bbot/modules/trufflehog.py,sha256=CqF9UAEzi0JzJKitXnBWFAVypCVuKKXWPW14Txw6GMs,8717
211
212
  bbot/modules/url_manipulation.py,sha256=4J3oFkqTSJPPmbKEKAHJg2Q2w4QNKtQhiN03ZJq5VtI,4326
212
213
  bbot/modules/urlscan.py,sha256=-w_3Bm6smyG2GLQyIbnMUkKmeQVauo-V6F4_kJDYG7s,3740
213
214
  bbot/modules/vhost.py,sha256=cirOe0HR4M0TEBN8JdXo2l0s2flc8ZSdxggGm79blT8,5459
@@ -260,7 +261,7 @@ bbot/scanner/target.py,sha256=lI0Tn5prQiPiJE3WW-ZLx_l6EFqzAVabtyL-nfXJ8cE,10636
260
261
  bbot/scripts/docs.py,sha256=aYAHlcHtMAhM-XGTDiSpzccnX1dh0Xi_WxmC2bgylQ4,11373
261
262
  bbot/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
262
263
  bbot/test/bbot_fixtures.py,sha256=XrCQDLVe80BG3QTUDnXb0y-cWnBpJJoRh2Z3J3xJn_w,9961
263
- bbot/test/conftest.py,sha256=OacpJ98g00HqCoHpEnuzzMK47LkbZdJWr25Pm0SbTM0,11783
264
+ bbot/test/conftest.py,sha256=194ckIxGs5EUp2wa1VOIFwClavFSlIPOKU5tKjAaN4k,11783
264
265
  bbot/test/coverage.cfg,sha256=ko9RacAYsJxWJCL8aEuNtkAOtP9lexYiDbeFWe8Tp8Y,31
265
266
  bbot/test/fastapi_test.py,sha256=9OhOFRyagXTshMsnuzuKIcR4uzS6VW65m7h9KgB4jSA,381
266
267
  bbot/test/owasp_mastg.apk,sha256=Hai_V9JmEJ-aB8Ab9xEaGXXOAfGQudkUvNOuPb75byE,66651
@@ -363,7 +364,8 @@ bbot/test/test_step_2/module_tests/test_module_github_usersearch.py,sha256=IIQ0t
363
364
  bbot/test/test_step_2/module_tests/test_module_github_workflows.py,sha256=o_teEaskm3H22QEKod5KJayFvvcgOQoG4eItGWv8C8E,38006
364
365
  bbot/test/test_step_2/module_tests/test_module_gitlab.py,sha256=fnwE7BWTU6EQquKdGLCiaX_LwVwvzOLev3Y9GheTLSY,11859
365
366
  bbot/test/test_step_2/module_tests/test_module_google_playstore.py,sha256=uTRqpAGI9HI-rOk_6jdV44OoSqi0QQQ3aTVzvuV0dtc,3034
366
- bbot/test/test_step_2/module_tests/test_module_gowitness.py,sha256=EH3NIMDA3XgZz1yffu-PnRCrlZJODakGPfzgnU7Ls_s,6501
367
+ bbot/test/test_step_2/module_tests/test_module_gowitness.py,sha256=8kSeBowX4eejMW791mIaFqP9SDn1l2EDRJatvmZVWug,6500
368
+ bbot/test/test_step_2/module_tests/test_module_graphql_introspection.py,sha256=qac8DJ_exe6Ra4UgRvVMSdgBhLIZP9lmXyKhi9RPOK8,1241
367
369
  bbot/test/test_step_2/module_tests/test_module_hackertarget.py,sha256=ldhNKxGk5fwq87zVptQDyfQ-cn3FzbWvpadKEO3h4ic,609
368
370
  bbot/test/test_step_2/module_tests/test_module_host_header.py,sha256=w1x0MyKNiUol4hlw7CijhMwEMEL5aBddbZZjOcEgv_k,2672
369
371
  bbot/test/test_step_2/module_tests/test_module_http.py,sha256=KhsQvqpVa6zmMa79jV4liv_NAv25wrSaO6h_x0AA12c,2127
@@ -451,8 +453,8 @@ bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt,sha256=ZSIVebs7ptMvHx
451
453
  bbot/wordlists/top_open_ports_nmap.txt,sha256=LmdFYkfapSxn1pVuQC2LkOIY2hMLgG-Xts7DVtYzweM,42727
452
454
  bbot/wordlists/valid_url_schemes.txt,sha256=0B_VAr9Dv7aYhwi6JSBDU-3M76vNtzN0qEC_RNLo7HE,3310
453
455
  bbot/wordlists/wordninja_dns.txt.gz,sha256=DYHvvfW0TvzrVwyprqODAk4tGOxv5ezNmCPSdPuDUnQ,570241
454
- bbot-2.5.0.6790rc0.dist-info/LICENSE,sha256=GzeCzK17hhQQDNow0_r0L8OfLpeTKQjFQwBQU7ZUymg,32473
455
- bbot-2.5.0.6790rc0.dist-info/METADATA,sha256=NEVTJu_6hgKq-HwhDk78Vgf-WP-HSmYYiB2GaMrPcxc,18308
456
- bbot-2.5.0.6790rc0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
457
- bbot-2.5.0.6790rc0.dist-info/entry_points.txt,sha256=cWjvcU_lLrzzJgjcjF7yeGuRA_eDS8pQ-kmPUAyOBfo,38
458
- bbot-2.5.0.6790rc0.dist-info/RECORD,,
456
+ bbot-2.5.0.6807rc0.dist-info/LICENSE,sha256=GzeCzK17hhQQDNow0_r0L8OfLpeTKQjFQwBQU7ZUymg,32473
457
+ bbot-2.5.0.6807rc0.dist-info/METADATA,sha256=ZU7RYR_FtYAUEZ3P_OtV8slLhE7G-LXXGHV_7OrKYbo,18308
458
+ bbot-2.5.0.6807rc0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
459
+ bbot-2.5.0.6807rc0.dist-info/entry_points.txt,sha256=cWjvcU_lLrzzJgjcjF7yeGuRA_eDS8pQ-kmPUAyOBfo,38
460
+ bbot-2.5.0.6807rc0.dist-info/RECORD,,