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 +1 -1
- bbot/cli.py +21 -7
- bbot/core/helpers/web/web.py +2 -1
- bbot/core/modules.py +0 -2
- bbot/modules/base.py +23 -28
- bbot/modules/dnsbrute.py +6 -1
- bbot/modules/ffuf.py +4 -1
- bbot/modules/ffuf_shortnames.py +6 -3
- bbot/modules/filedownload.py +6 -3
- bbot/modules/medusa.py +4 -7
- bbot/modules/paramminer_headers.py +10 -7
- bbot/modules/trufflehog.py +5 -2
- bbot/scanner/scanner.py +2 -2
- bbot/test/test_step_1/test_modules_basic.py +25 -0
- {bbot-2.7.2.7254rc0.dist-info → bbot-2.7.2.7271rc0.dist-info}/METADATA +1 -1
- {bbot-2.7.2.7254rc0.dist-info → bbot-2.7.2.7271rc0.dist-info}/RECORD +19 -19
- {bbot-2.7.2.7254rc0.dist-info → bbot-2.7.2.7271rc0.dist-info}/WHEEL +0 -0
- {bbot-2.7.2.7254rc0.dist-info → bbot-2.7.2.7271rc0.dist-info}/entry_points.txt +0 -0
- {bbot-2.7.2.7254rc0.dist-info → bbot-2.7.2.7271rc0.dist-info}/licenses/LICENSE +0 -0
bbot/__init__.py
CHANGED
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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)
|
bbot/core/helpers/web/web.py
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
651
|
-
if
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
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)
|
bbot/modules/ffuf_shortnames.py
CHANGED
|
@@ -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
|
|
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")
|
bbot/modules/filedownload.py
CHANGED
|
@@ -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
|
|
106
|
-
|
|
107
|
-
|
|
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
|
|
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)
|
bbot/modules/trufflehog.py
CHANGED
|
@@ -41,11 +41,14 @@ class trufflehog(BaseModule):
|
|
|
41
41
|
|
|
42
42
|
scope_distance_modifier = 2
|
|
43
43
|
|
|
44
|
-
async def
|
|
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,5 +1,5 @@
|
|
|
1
|
-
bbot/__init__.py,sha256=
|
|
2
|
-
bbot/cli.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
101
|
-
bbot/modules/ffuf_shortnames.py,sha256=
|
|
102
|
-
bbot/modules/filedownload.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
467
|
-
bbot-2.7.2.
|
|
468
|
-
bbot-2.7.2.
|
|
469
|
-
bbot-2.7.2.
|
|
470
|
-
bbot-2.7.2.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|