bbot 2.7.2.7254rc0__py3-none-any.whl → 2.7.2.7271rc0__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.7.2.7254rc"
2
+ __version__ = "v2.7.2.7271rc"
3
3
 
4
4
  from .scanner import Scanner, Preset
5
5
 
bbot/cli.py CHANGED
@@ -7,7 +7,7 @@ import multiprocessing
7
7
  from bbot.errors import *
8
8
  from bbot import __version__
9
9
  from bbot.logger import log_to_stderr
10
- from bbot.core.helpers.misc import chain_lists
10
+ from bbot.core.helpers.misc import chain_lists, rm_rf
11
11
 
12
12
 
13
13
  if multiprocessing.current_process().name == "MainProcess":
@@ -173,13 +173,27 @@ async def _main():
173
173
 
174
174
  # --install-all-deps
175
175
  if options.install_all_deps:
176
- all_modules = list(preset.module_loader.preloaded())
177
- scan.helpers.depsinstaller.force_deps = True
178
- succeeded, failed = await scan.helpers.depsinstaller.install(*all_modules)
179
- if failed:
180
- log.hugewarning(f"Failed to install dependencies for the following modules: {', '.join(failed)}")
176
+ preloaded_modules = preset.module_loader.preloaded()
177
+ scan_modules = [k for k, v in preloaded_modules.items() if str(v.get("type", "")) == "scan"]
178
+ output_modules = [k for k, v in preloaded_modules.items() if str(v.get("type", "")) == "output"]
179
+ log.verbose("Creating dummy scan with all modules + output modules for deps installation")
180
+ dummy_scan = Scanner(preset=preset, modules=scan_modules, output_modules=output_modules)
181
+ dummy_scan.helpers.depsinstaller.force_deps = True
182
+ log.info("Installing module dependencies")
183
+ await dummy_scan.load_modules()
184
+ log.verbose("Running module setups")
185
+ succeeded, hard_failed, soft_failed = await dummy_scan.setup_modules(deps_only=True)
186
+ # remove any leftovers from the dummy scan
187
+ rm_rf(dummy_scan.home, ignore_errors=True)
188
+ rm_rf(dummy_scan.temp_dir, ignore_errors=True)
189
+ if succeeded:
190
+ log.success(
191
+ f"Successfully installed dependencies for {len(succeeded):,} modules: {','.join(succeeded)}"
192
+ )
193
+ if soft_failed or hard_failed:
194
+ failed = soft_failed + hard_failed
195
+ log.warning(f"Failed to install dependencies for {len(failed):,} modules: {', '.join(failed)}")
181
196
  return False
182
- log.hugesuccess(f"Successfully installed dependencies for the following modules: {', '.join(succeeded)}")
183
197
  return True
184
198
 
185
199
  scan_name = str(scan.name)
@@ -267,7 +267,8 @@ class WebHelper(EngineClient):
267
267
  if not path:
268
268
  raise WordlistError(f"Invalid wordlist: {path}")
269
269
  if "cache_hrs" not in kwargs:
270
- kwargs["cache_hrs"] = 720
270
+ # 4320 hrs = 180 days = 6 months
271
+ kwargs["cache_hrs"] = 4320
271
272
  if self.parent_helper.is_url(path):
272
273
  filename = await self.download(str(path), **kwargs)
273
274
  if filename is None:
bbot/core/modules.py CHANGED
@@ -56,7 +56,6 @@ class ModuleLoader:
56
56
  self._shared_deps = dict(SHARED_DEPS)
57
57
 
58
58
  self.__preloaded = {}
59
- self._modules = {}
60
59
  self._configs = {}
61
60
  self.flag_choices = set()
62
61
  self.all_module_choices = set()
@@ -463,7 +462,6 @@ class ModuleLoader:
463
462
  for module_name in module_names:
464
463
  module = self.load_module(module_name)
465
464
  modules[module_name] = module
466
- self._modules[module_name] = module
467
465
  return modules
468
466
 
469
467
  def load_module(self, module_name):
bbot/modules/base.py CHANGED
@@ -213,6 +213,14 @@ class BaseModule:
213
213
 
214
214
  return True
215
215
 
216
+ async def setup_deps(self):
217
+ """
218
+ Similar to setup(), but reserved for installing dependencies not covered by Ansible.
219
+
220
+ This should always be used to install static dependencies like AI models, wordlists, etc.
221
+ """
222
+ return True
223
+
216
224
  async def handle_event(self, event, **kwargs):
217
225
  """Asynchronously handles incoming events that the module is configured to watch.
218
226
 
@@ -620,39 +628,26 @@ class BaseModule:
620
628
  name=f"{self.scan.name}.{self.name}._event_handler_watchdog()",
621
629
  )
622
630
 
623
- async def _setup(self):
624
- """
625
- Asynchronously sets up the module by invoking its 'setup()' method.
626
-
627
- This method catches exceptions during setup, sets the module's error state if necessary, and determines the
628
- status code based on the result of the setup process.
629
-
630
- Args:
631
- None
632
-
633
- Returns:
634
- tuple: A tuple containing the module's name, status (True for success, False for hard-fail, None for soft-fail),
635
- and an optional status message.
636
-
637
- Raises:
638
- Exception: Captured exceptions from the 'setup()' method are logged, but not propagated.
639
-
640
- Notes:
641
- - The 'setup()' method can return either a simple boolean status or a tuple of status and message.
642
- - A WordlistError exception triggers a soft-fail status.
643
- - The debug log will contain setup status information for the module.
644
- """
631
+ async def _setup(self, deps_only=False):
632
+ """ """
645
633
  status_codes = {False: "hard-fail", None: "soft-fail", True: "success"}
646
634
 
647
635
  status = False
648
636
  self.debug(f"Setting up module {self.name}")
649
637
  try:
650
- result = await self.setup()
651
- if type(result) == tuple and len(result) == 2:
652
- status, msg = result
653
- else:
654
- status = result
655
- msg = status_codes[status]
638
+ funcs = [self.setup_deps]
639
+ if not deps_only:
640
+ funcs.append(self.setup)
641
+ for func in funcs:
642
+ self.debug(f"Running {self.name}.{func.__name__}()")
643
+ result = await func()
644
+ if type(result) == tuple and len(result) == 2:
645
+ status, msg = result
646
+ else:
647
+ status = result
648
+ msg = status_codes[status]
649
+ if status is False:
650
+ break
656
651
  self.debug(f"Finished setting up module {self.name}")
657
652
  except Exception as e:
658
653
  self.set_error_state(f"Unexpected error during module setup: {e}", critical=True)
bbot/modules/dnsbrute.py CHANGED
@@ -23,9 +23,14 @@ class dnsbrute(subdomain_enum):
23
23
  dedup_strategy = "lowest_parent"
24
24
  _qsize = 10000
25
25
 
26
+ async def setup_deps(self):
27
+ self.subdomain_file = await self.helpers.wordlist(self.config.get("wordlist"))
28
+ # tell the dnsbrute helper to fetch the resolver file
29
+ await self.helpers.dns.brute.resolver_file()
30
+ return True
31
+
26
32
  async def setup(self):
27
33
  self.max_depth = max(1, self.config.get("max_depth", 5))
28
- self.subdomain_file = await self.helpers.wordlist(self.config.get("wordlist"))
29
34
  self.subdomain_list = set(self.helpers.read_file(self.subdomain_file))
30
35
  self.wordlist_size = len(self.subdomain_list)
31
36
  return await super().setup()
bbot/modules/ffuf.py CHANGED
@@ -37,12 +37,15 @@ class ffuf(BaseModule):
37
37
 
38
38
  in_scope_only = True
39
39
 
40
+ async def setup_deps(self):
41
+ self.wordlist = await self.helpers.wordlist(self.config.get("wordlist"))
42
+ return True
43
+
40
44
  async def setup(self):
41
45
  self.proxy = self.scan.web_config.get("http_proxy", "")
42
46
  self.canary = "".join(random.choice(string.ascii_lowercase) for i in range(10))
43
47
  wordlist_url = self.config.get("wordlist", "")
44
48
  self.debug(f"Using wordlist [{wordlist_url}]")
45
- self.wordlist = await self.helpers.wordlist(wordlist_url)
46
49
  self.wordlist_lines = self.generate_wordlist(self.wordlist)
47
50
  self.tempfile, tempfile_len = self.generate_templist()
48
51
  self.rate = self.config.get("rate", 0)
@@ -87,14 +87,17 @@ class ffuf_shortnames(ffuf):
87
87
  found_prefixes.add(prefix)
88
88
  return list(found_prefixes)
89
89
 
90
- async def setup(self):
91
- self.proxy = self.scan.web_config.get("http_proxy", "")
92
- self.canary = "".join(random.choice(string.ascii_lowercase) for i in range(10))
90
+ async def setup_deps(self):
93
91
  wordlist_extensions = self.config.get("wordlist_extensions", "")
94
92
  if not wordlist_extensions:
95
93
  wordlist_extensions = f"{self.helpers.wordlist_dir}/raft-small-extensions-lowercase_CLEANED.txt"
96
94
  self.debug(f"Using [{wordlist_extensions}] for shortname candidate extension list")
97
95
  self.wordlist_extensions = await self.helpers.wordlist(wordlist_extensions)
96
+ return True
97
+
98
+ async def setup(self):
99
+ self.proxy = self.scan.web_config.get("http_proxy", "")
100
+ self.canary = "".join(random.choice(string.ascii_lowercase) for i in range(10))
98
101
  self.ignore_redirects = self.config.get("ignore_redirects")
99
102
  self.max_predictions = self.config.get("max_predictions")
100
103
  self.find_subwords = self.config.get("find_subwords")
@@ -94,6 +94,12 @@ class filedownload(BaseModule):
94
94
 
95
95
  scope_distance_modifier = 3
96
96
 
97
+ async def setup_deps(self):
98
+ self.mime_db_file = await self.helpers.wordlist(
99
+ "https://raw.githubusercontent.com/jshttp/mime-db/master/db.json"
100
+ )
101
+ return True
102
+
97
103
  async def setup(self):
98
104
  self.extensions = list({e.lower().strip(".") for e in self.config.get("extensions", [])})
99
105
  self.max_filesize = self.config.get("max_filesize", "10MB")
@@ -105,9 +111,6 @@ class filedownload(BaseModule):
105
111
  else:
106
112
  self.download_dir = self.scan.temp_dir / "filedownload"
107
113
  self.helpers.mkdir(self.download_dir)
108
- self.mime_db_file = await self.helpers.wordlist(
109
- "https://raw.githubusercontent.com/jshttp/mime-db/master/db.json"
110
- )
111
114
  self.mime_db = {}
112
115
  with open(self.mime_db_file) as f:
113
116
  mime_db = json.load(f)
bbot/modules/medusa.py CHANGED
@@ -1,6 +1,5 @@
1
1
  import re
2
2
  from bbot.modules.base import BaseModule
3
- from bbot.errors import WordlistError
4
3
 
5
4
 
6
5
  class medusa(BaseModule):
@@ -102,13 +101,11 @@ class medusa(BaseModule):
102
101
  },
103
102
  ]
104
103
 
105
- async def setup(self):
106
- # Try to cache wordlist
107
- try:
108
- self.snmp_wordlist_path = await self.helpers.wordlist(self.config.get("snmp_wordlist"))
109
- except WordlistError as e:
110
- return False, f"Error retrieving wordlist: {e}"
104
+ async def setup_deps(self):
105
+ self.snmp_wordlist_path = await self.helpers.wordlist(self.config.get("snmp_wordlist"))
106
+ return True
111
107
 
108
+ async def setup(self):
112
109
  self.password_match_regex = re.compile(r"Password:\s*(\S+)")
113
110
  self.success_indicator_match_regex = re.compile(r"\[([^\]]+)\]\s*$")
114
111
 
@@ -82,18 +82,21 @@ class paramminer_headers(BaseModule):
82
82
 
83
83
  header_regex = re.compile(r"^[!#$%&\'*+\-.^_`|~0-9a-zA-Z]+: [^\r\n]+$")
84
84
 
85
- async def setup(self):
86
- self.recycle_words = self.config.get("recycle_words", True)
87
- self.event_dict = {}
88
- self.already_checked = set()
85
+ async def setup_deps(self):
89
86
  wordlist = self.config.get("wordlist", "")
90
87
  if not wordlist:
91
88
  wordlist = f"{self.helpers.wordlist_dir}/{self.default_wordlist}"
89
+ self.wordlist_file = await self.helpers.wordlist(wordlist)
92
90
  self.debug(f"Using wordlist: [{wordlist}]")
91
+ return True
92
+
93
+ async def setup(self):
94
+ self.recycle_words = self.config.get("recycle_words", True)
95
+ self.event_dict = {}
96
+ self.already_checked = set()
97
+
93
98
  self.wl = {
94
- h.strip().lower()
95
- for h in self.helpers.read_file(await self.helpers.wordlist(wordlist))
96
- if len(h) > 0 and "%" not in h
99
+ h.strip().lower() for h in self.helpers.read_file(self.wordlist_file) if len(h) > 0 and "%" not in h
97
100
  }
98
101
 
99
102
  # check against the boring list (if the option is set)
@@ -41,11 +41,14 @@ class trufflehog(BaseModule):
41
41
 
42
42
  scope_distance_modifier = 2
43
43
 
44
- async def setup(self):
45
- self.verified = self.config.get("only_verified", True)
44
+ async def setup_deps(self):
46
45
  self.config_file = self.config.get("config", "")
47
46
  if self.config_file:
48
47
  self.config_file = await self.helpers.wordlist(self.config_file)
48
+ return True
49
+
50
+ async def setup(self):
51
+ self.verified = self.config.get("only_verified", True)
49
52
  self.concurrency = int(self.config.get("concurrency", 8))
50
53
 
51
54
  self.deleted_forks = self.config.get("deleted_forks", False)
bbot/scanner/scanner.py CHANGED
@@ -484,7 +484,7 @@ class Scanner:
484
484
  for module in self.modules.values():
485
485
  module.start()
486
486
 
487
- async def setup_modules(self, remove_failed=True):
487
+ async def setup_modules(self, remove_failed=True, deps_only=False):
488
488
  """Asynchronously initializes all loaded modules by invoking their `setup()` methods.
489
489
 
490
490
  Args:
@@ -509,7 +509,7 @@ class Scanner:
509
509
  hard_failed = []
510
510
  soft_failed = []
511
511
 
512
- async for task in self.helpers.as_completed([m._setup() for m in self.modules.values()]):
512
+ async for task in self.helpers.as_completed([m._setup(deps_only=deps_only) for m in self.modules.values()]):
513
513
  module, status, msg = await task
514
514
  if status is True:
515
515
  self.debug(f"Setup succeeded for {module.name} ({msg})")
@@ -342,6 +342,31 @@ async def test_modules_basic_perdomainonly(bbot_scanner, monkeypatch):
342
342
  await per_domain_scan._cleanup()
343
343
 
344
344
 
345
+ @pytest.mark.asyncio
346
+ async def test_modules_basic_setup_deps(bbot_scanner):
347
+ from bbot.modules.base import BaseModule
348
+
349
+ class dummy(BaseModule):
350
+ _name = "dummy"
351
+ deps_ran = False
352
+ setup_ran = False
353
+
354
+ async def setup_deps(self):
355
+ self.deps_ran = True
356
+ return True
357
+
358
+ async def setup(self):
359
+ self.setup_ran = True
360
+ return True
361
+
362
+ scan = bbot_scanner()
363
+ scan.modules["dummy"] = dummy(scan)
364
+ await scan.setup_modules(deps_only=True)
365
+ assert scan.modules["dummy"].deps_ran
366
+ assert not scan.modules["dummy"].setup_ran
367
+ await scan._cleanup()
368
+
369
+
345
370
  @pytest.mark.asyncio
346
371
  async def test_modules_basic_stats(helpers, events, bbot_scanner, httpx_mock, monkeypatch):
347
372
  from bbot.modules.base import BaseModule
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bbot
3
- Version: 2.7.2.7254rc0
3
+ Version: 2.7.2.7271rc0
4
4
  Summary: OSINT automation for hackers.
5
5
  License: GPL-3.0
6
6
  License-File: LICENSE
@@ -1,5 +1,5 @@
1
- bbot/__init__.py,sha256=EqXFKA9XrSnBr9t8uzsLmLvzeOMSNL0LWOUMh9RieY4,163
2
- bbot/cli.py,sha256=1QJbANVw9Q3GFM92H2QRV2ds5756ulm08CDZwzwPpeI,11888
1
+ bbot/__init__.py,sha256=mzX1fioFjIfbuMCUdqxHKWZtvwkr1KdOqpKsmuve0MA,163
2
+ bbot/cli.py,sha256=lcBQ7TxDxJEQVu89UJSkti_W-rc40Nfw4AlgRUvrT6E,12783
3
3
  bbot/core/__init__.py,sha256=l255GJE_DvUnWvrRb0J5lG-iMztJ8zVvoweDOfegGtI,46
4
4
  bbot/core/config/__init__.py,sha256=zYNw2Me6tsEr8hOOkLb4BQ97GB7Kis2k--G81S8vofU,342
5
5
  bbot/core/config/files.py,sha256=zANvrTRLJQIOWSNkxd9MpWmf9cQFr0gRZLUxeIbTwQc,1412
@@ -44,10 +44,10 @@ bbot/core/helpers/web/client.py,sha256=RPm4kYdHzqPom0EdVFvAiUPuDpztW8cuqGaLfl2Tx
44
44
  bbot/core/helpers/web/engine.py,sha256=XmyDMXsJWasOklfPWOcJ6SzuLaUXP3HGJUBO5Gj2xFk,9221
45
45
  bbot/core/helpers/web/envelopes.py,sha256=mMmr4QGi28KJSwCkaogMGYhiqeqm3_kO9KziLtEKefc,10074
46
46
  bbot/core/helpers/web/ssl_context.py,sha256=aWVgl-d0HoE8B4EBKNxaa5UAzQmx79DjDByfBw9tezo,356
47
- bbot/core/helpers/web/web.py,sha256=q9X6JNufbZzRijzsc6bXkxH0ntly7rDr-uptscSKxRo,24042
47
+ bbot/core/helpers/web/web.py,sha256=Imi29a1lxfcFeFpAwGui3Ckzxki3oTBGJ5np-JdGOhc,24088
48
48
  bbot/core/helpers/wordcloud.py,sha256=QM8Z1N01_hXrRFKQjvRL-IzOOC7ZMKjuSBID3u77Sxg,19809
49
49
  bbot/core/helpers/yara_helper.py,sha256=ypwC_H_ovJp9BpOwqgPkIdZEwqWfvqrRdKlwzBLfm8Q,1592
50
- bbot/core/modules.py,sha256=_h-TFaMw7NmpEO1orJ9kVgeVbATbMxo7zlGoa8p9Cs8,29354
50
+ bbot/core/modules.py,sha256=aQtltmNVDBZuvaSzCpI7wxvzXy0thL6z9oN_HIkTYCo,29279
51
51
  bbot/core/multiprocess.py,sha256=ocQHanskJ09gHwe7RZmwNdZyCOQyeyUoIHCtLbtvXUk,1771
52
52
  bbot/core/shared_deps.py,sha256=NeJmyakKxQQjN-H3rYGwGuHeVxDiVM_KnDfeVEeIbf4,9498
53
53
  bbot/db/sql/models.py,sha256=SrUdDOBCICzXJBY29p0VvILhMQ1JCuh725bqvIYogX0,4884
@@ -65,7 +65,7 @@ bbot/modules/baddns.py,sha256=vSWWBiPfVowAg1yrBAx0rm8ViSh1O3VX7nI9Pn2Z5mo,6694
65
65
  bbot/modules/baddns_direct.py,sha256=G5WTKQ-jKJnSLijsOjyQKoR2Sx49fvACBvAC-b_yPck,3820
66
66
  bbot/modules/baddns_zone.py,sha256=8s2vIbU2MsLW6w12bDyw8FWBfdDRn2A2gWoMFEX4gPw,1036
67
67
  bbot/modules/badsecrets.py,sha256=2M515_nmDg24WTDqM01w-2DNN2H8BewvqnG_8hG6n3o,5110
68
- bbot/modules/base.py,sha256=uatsSs15fcaawbu7JTfQiY8WhkKQ-6WGGG41hIT2YeQ,78811
68
+ bbot/modules/base.py,sha256=mRGn1Td9V58P9saNQ8KOJkEGA3fmfwEf6FP_ZuWSIug,78508
69
69
  bbot/modules/bevigil.py,sha256=0VLIxmeXRUI2-EoR6IzuHJMcX8KCHNNta-WYa3gVlDg,2862
70
70
  bbot/modules/bucket_amazon.py,sha256=mwjYeEAcdfOpjbOa1sD8U9KBMMVY_c8FoHjSGR9GQbg,730
71
71
  bbot/modules/bucket_azure.py,sha256=Jaa9XEL7w7VM0a-WAp05MOGdP5nt7hMpLzBsPq74_IM,1284
@@ -86,7 +86,7 @@ bbot/modules/crt_db.py,sha256=xaIm2457_xGJjnKss73l1HpPn7pLPHksVzejsimTfZA,2198
86
86
  bbot/modules/dehashed.py,sha256=0lzcqMEgwRmprwurZ2-8Y8aOO4KTueJgpY_vh0DWQwA,5155
87
87
  bbot/modules/digitorus.py,sha256=XQY0eAQrA7yo8S57tGncP1ARud-yG4LiWxx5VBYID34,1027
88
88
  bbot/modules/dnsbimi.py,sha256=XqqZj_7dipYn-ByXC6IBTJ2bUSY3QOAG4e8F40kHuAI,6931
89
- bbot/modules/dnsbrute.py,sha256=Y2bSbG2IcwIJID1FSQ6Qe9fdpWwG7GIO-wVQw7MdQFM,2439
89
+ bbot/modules/dnsbrute.py,sha256=w396XpfNmU3QDnByrgYL4FNXuD9sV9TA_jnYGw41nT8,2607
90
90
  bbot/modules/dnsbrute_mutations.py,sha256=EbAZ-ZOqk98OAMacc8PuX_zx6eXyn6gJxgFuZ8A71YA,7242
91
91
  bbot/modules/dnscaa.py,sha256=pyaLqHrdsVhqtd1JBZVjKKcuYT_ywUbFYkrnfXcGD5s,5014
92
92
  bbot/modules/dnscommonsrv.py,sha256=wrCRTlqVuxFIScWH0Cb0UQAVk0TWxgVc5fo5awl3R24,1568
@@ -97,9 +97,9 @@ bbot/modules/dockerhub.py,sha256=JQkujjqvQRzQuvHjQ7JbFs_VlJj8dLRPRObAkBgUQhc,349
97
97
  bbot/modules/dotnetnuke.py,sha256=zipcHyNYr2FEecStb1Yrm938ps01RvHV8NnyqAvnGGc,10537
98
98
  bbot/modules/emailformat.py,sha256=Koi2aSng-FSRJVhpbFaclrqZxo4lQoPMcUMn_qXTfVE,1518
99
99
  bbot/modules/extractous.py,sha256=VSGKmHPAA_4r62jaN8Yqi3JcjehjxpI2lhe8i2j786s,4648
100
- bbot/modules/ffuf.py,sha256=94TJ5xvqKwH0JaWmC_t1dLTpRsO8HEy4lnbsu8LF_HY,14965
101
- bbot/modules/ffuf_shortnames.py,sha256=y5vnypLPN-KrjpmoG5zlqcX8VwfcLBpNg1yQI7bP9Hg,18737
102
- bbot/modules/filedownload.py,sha256=ri5mUNm-kTXE3ZsamsA_5jE29SMrGcdW5MO7doh8vsM,8915
100
+ bbot/modules/ffuf.py,sha256=M08iRvt7HjpmwuvmS8OgKhCuNg2PU1LbZt_DZmZauEs,15033
101
+ bbot/modules/ffuf_shortnames.py,sha256=saAW_csgMyGd1OVAPQa5hfdHkxf98VWRPiUIZWm29LY,18790
102
+ bbot/modules/filedownload.py,sha256=IOmoK7_Y784hkUP27ImMFWcHqOYg441KJ0XkoLV6KFg,8968
103
103
  bbot/modules/fingerprintx.py,sha256=rdlR9d64AntAhbS_eJzh8bZCeLPTJPSKdkdKdhH_qAo,3269
104
104
  bbot/modules/fullhunt.py,sha256=2ntu1yBh51N4e_l-kpXc1UBoVVcxEE2JPkyaMYCuUb4,1336
105
105
  bbot/modules/generic_ssrf.py,sha256=KFdcHpUV9-Z7oN7emzbirimsNc2xZ_1IFqnsfIkEbcM,9196
@@ -144,7 +144,7 @@ bbot/modules/lightfuzz/submodules/serial.py,sha256=Vry3J0Bs3QJqgVPzxhDFmEZQt4FYz
144
144
  bbot/modules/lightfuzz/submodules/sqli.py,sha256=HX0wP-aVn02zzBDujpLgzXPos7w_eiSiALTNCN2O_Bo,8597
145
145
  bbot/modules/lightfuzz/submodules/ssti.py,sha256=Pib49rXFuf567msnlec-A1Tnvolw4aILjqn7INLWQTY,1413
146
146
  bbot/modules/lightfuzz/submodules/xss.py,sha256=BZz1_nqzV8dqJptpoqZEMdVBdtZHmRae3HWo3S9yzIc,9507
147
- bbot/modules/medusa.py,sha256=44psluRg9VFo6WNLKlnTtH66afqhrOF0STBbLhFkHCE,8859
147
+ bbot/modules/medusa.py,sha256=K_U_s2cZJi8UvzMB8qN61qj_x0uD16xdZUpC5ejUaGA,8729
148
148
  bbot/modules/myssl.py,sha256=DoMF7o6MxIrcglCrC-W3nM-GPcyJRM4PlGdKfnOlIvs,942
149
149
  bbot/modules/newsletters.py,sha256=1Q4JjShPsxHJ-by2CbGfCvEt80blUGPX0hxQIzB_a9M,2630
150
150
  bbot/modules/ntlm.py,sha256=EGmb4k3YC_ZuHIU3mGUZ4yaMjE35wVQQSv8HwTsQJzY,4391
@@ -176,7 +176,7 @@ bbot/modules/output/web_report.py,sha256=lZ0FqRZ7Jz1lljI9JMhH9gjtWLaTCSpSnAKQGAc
176
176
  bbot/modules/output/websocket.py,sha256=oxMcYu3hIrA3BE3c3aJXe63JmGv_HWjADB2uO470-BE,2721
177
177
  bbot/modules/paramminer_cookies.py,sha256=q1PzftHQpCHLz81_VgLZsO6moia7ZtnU32igfcySi2w,1816
178
178
  bbot/modules/paramminer_getparams.py,sha256=_j6rgaqV5wGJoa8p5-KKbe2YsVGUtmWIanCVtFiF97Y,1893
179
- bbot/modules/paramminer_headers.py,sha256=GMErLmTO0w7JRIpJE2VFvRTrjmoux_-jTx3EfaWLdpM,10518
179
+ bbot/modules/paramminer_headers.py,sha256=W9fpSwFmrhiWt6wIrhzeksSbzDFzjhg6ncyEzucCm04,10596
180
180
  bbot/modules/passivetotal.py,sha256=dHYk9QWIKdO6Z8Bip4IdcButiqy_fr4FrpRUQaiH1a0,1678
181
181
  bbot/modules/pgp.py,sha256=Xu2M9WEIlwTm5-Lv29g7BblI05tD9Dl0XsYSeY6UURs,2065
182
182
  bbot/modules/portfilter.py,sha256=3iu4xqCsHafhVMbA32Mw6K_7Yn576Rz6GxXMevZQEpM,1752
@@ -211,7 +211,7 @@ bbot/modules/templates/sql.py,sha256=o-CdyyoJvHJdJBKkj3CIGXYxUta4w2AB_2Vr-k7cDDU
211
211
  bbot/modules/templates/subdomain_enum.py,sha256=epyKSly08jqaINV_AMMWbNafIeQjJqvd3aj63KD0Mck,8402
212
212
  bbot/modules/templates/webhook.py,sha256=uGFmcJ81GzGN1UI2k2O7nQF_fyh4ehLDEg2NSXaPnhk,3373
213
213
  bbot/modules/trickest.py,sha256=MRgLW0YiDWzlWdAjyqfPPLFb-a51r-Ffn_dphiJI_gA,1550
214
- bbot/modules/trufflehog.py,sha256=uW8smAJUwU5PM6jnIE_wlsz-EwgaJD-iaHmFciX59H8,8717
214
+ bbot/modules/trufflehog.py,sha256=aMHaruUX6ZdPZ-SI8iIHBAsfEqIXz3GqZtynaFeEWnc,8770
215
215
  bbot/modules/url_manipulation.py,sha256=4J3oFkqTSJPPmbKEKAHJg2Q2w4QNKtQhiN03ZJq5VtI,4326
216
216
  bbot/modules/urlscan.py,sha256=-w_3Bm6smyG2GLQyIbnMUkKmeQVauo-V6F4_kJDYG7s,3740
217
217
  bbot/modules/vhost.py,sha256=cirOe0HR4M0TEBN8JdXo2l0s2flc8ZSdxggGm79blT8,5459
@@ -257,7 +257,7 @@ bbot/scanner/preset/conditions.py,sha256=hFL9cSIWGEsv2TfM5UGurf0c91cyaM8egb5IngB
257
257
  bbot/scanner/preset/environ.py,sha256=9KbEOLWkUdoAf5Ez_2A1NNm6QduQElbnNnrPi6VDhZs,4731
258
258
  bbot/scanner/preset/path.py,sha256=X32-ZUmL7taIv37VKF1KfmeiK9fjuQOE7pWUTEbPK8c,2483
259
259
  bbot/scanner/preset/preset.py,sha256=G_aMMI33d2OlzNUwjfi5ddJdxa8nK0oF5HrYAsuregU,40708
260
- bbot/scanner/scanner.py,sha256=Zz_syqeBpzc0Df1RH5HizylM2IPbFe7ZKd6e9quHWY4,55578
260
+ bbot/scanner/scanner.py,sha256=RoVq12XXGNL4I7zu9uqBk0UG70xUpjuaYsrbALEHlho,55614
261
261
  bbot/scanner/stats.py,sha256=re93sArKXZSiD0Owgqk2J3Kdvfm3RL4Y9Qy_VOcaVk8,3623
262
262
  bbot/scanner/target.py,sha256=lI0Tn5prQiPiJE3WW-ZLx_l6EFqzAVabtyL-nfXJ8cE,10636
263
263
  bbot/scripts/benchmark_report.py,sha256=kBMaKFrmURk8tFYbGKvkGQpfNxrX46CBWG9DdaXhHgs,16230
@@ -295,7 +295,7 @@ bbot/test/test_step_1/test_files.py,sha256=5Q_3jPpMXULxDHsanSDUaj8zF8bXzKdiJZHOm
295
295
  bbot/test/test_step_1/test_helpers.py,sha256=7GP6-95yWRBGhx0-p6N7zZVEDcF9EO9wc0rkhs1JDsg,40281
296
296
  bbot/test/test_step_1/test_manager_deduplication.py,sha256=hZQpDXzg6zvzxFolVOcJuY-ME8NXjZUsqS70BRNXp8A,15594
297
297
  bbot/test/test_step_1/test_manager_scope_accuracy.py,sha256=JV1bQHt9EIM0GmGS4T4Brz_L2lfcwTxtNC06cfv7r64,79763
298
- bbot/test/test_step_1/test_modules_basic.py,sha256=ELpGlsthSq8HaxB5My8-ESVHqMxqdL5Of0STMIyaWzA,20001
298
+ bbot/test/test_step_1/test_modules_basic.py,sha256=1A5saKsZ254cgdv5o9pk7iU5g6kxmcCeLfuLiYIsihs,20640
299
299
  bbot/test/test_step_1/test_presets.py,sha256=HnJhKwDnVh9Y6adgxqe85677rWpnFil_WS5GjX21ZvM,40959
300
300
  bbot/test/test_step_1/test_python_api.py,sha256=Fk5bxEsPSjsMZ_CcRMTJft8I48EizwHJivG9Fy4jIu0,5502
301
301
  bbot/test/test_step_1/test_regexes.py,sha256=GEJE4NY6ge0WnG3BcFgRiT78ksy2xpFk6UdS9vGQMPs,15254
@@ -463,8 +463,8 @@ bbot/wordlists/raft-small-extensions-lowercase_CLEANED.txt,sha256=ZSIVebs7ptMvHx
463
463
  bbot/wordlists/top_open_ports_nmap.txt,sha256=LmdFYkfapSxn1pVuQC2LkOIY2hMLgG-Xts7DVtYzweM,42727
464
464
  bbot/wordlists/valid_url_schemes.txt,sha256=0B_VAr9Dv7aYhwi6JSBDU-3M76vNtzN0qEC_RNLo7HE,3310
465
465
  bbot/wordlists/wordninja_dns.txt.gz,sha256=DYHvvfW0TvzrVwyprqODAk4tGOxv5ezNmCPSdPuDUnQ,570241
466
- bbot-2.7.2.7254rc0.dist-info/METADATA,sha256=j16BPGJz_5QPp264U8u4wYIhVBbbx9gsdcRpODo0nFo,18420
467
- bbot-2.7.2.7254rc0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
468
- bbot-2.7.2.7254rc0.dist-info/entry_points.txt,sha256=cWjvcU_lLrzzJgjcjF7yeGuRA_eDS8pQ-kmPUAyOBfo,38
469
- bbot-2.7.2.7254rc0.dist-info/licenses/LICENSE,sha256=GzeCzK17hhQQDNow0_r0L8OfLpeTKQjFQwBQU7ZUymg,32473
470
- bbot-2.7.2.7254rc0.dist-info/RECORD,,
466
+ bbot-2.7.2.7271rc0.dist-info/METADATA,sha256=_oIi9ERuKbl0buhGO6vJ8BJku9jGX5p0XII95-JjNOg,18420
467
+ bbot-2.7.2.7271rc0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
468
+ bbot-2.7.2.7271rc0.dist-info/entry_points.txt,sha256=cWjvcU_lLrzzJgjcjF7yeGuRA_eDS8pQ-kmPUAyOBfo,38
469
+ bbot-2.7.2.7271rc0.dist-info/licenses/LICENSE,sha256=GzeCzK17hhQQDNow0_r0L8OfLpeTKQjFQwBQU7ZUymg,32473
470
+ bbot-2.7.2.7271rc0.dist-info/RECORD,,