Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
fecac39
Add virtualhost module for virtual host discovery
liquidsec Mar 27, 2026
cf42bca
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Mar 27, 2026
e500ace
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Mar 27, 2026
434bfb7
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Mar 27, 2026
5ebe7d1
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Mar 27, 2026
d9fc318
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Apr 3, 2026
f6d0f8f
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Apr 3, 2026
f06c300
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Apr 3, 2026
ae7ccf2
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec Apr 4, 2026
ff2db12
virtualhost: run simhash in CPU thread pool, drop stale CurlError refs
liquidsec May 3, 2026
62ca1ca
simhash: update docstring to reflect cpu thread-pool usage
liquidsec May 4, 2026
50c92f8
virtualhost: pass normalized_url (not event.data) to SAN analyzer for…
liquidsec May 4, 2026
f1f85cb
virtualhost: use event.url in log/context strings, rename curl_virtua…
liquidsec May 4, 2026
4c14cbe
drop dead CurlError class and stale curl reference in ssrf comment
liquidsec May 4, 2026
c9ac70e
virtualhost: add SAN-path test, virtualhost and virtualhost-heavy pre…
liquidsec May 4, 2026
835f992
Merge branch 'blasthttp-mock-migration' into add-virtualhost-module
liquidsec May 7, 2026
4a0cb11
virtualhost: use response.peer_ip and filter resolved_hosts to real IPs
liquidsec May 7, 2026
146ee35
virtualhost: return None instead of raising on canary mismatch
liquidsec May 11, 2026
0c7ac6a
Merge branch 'blasthttp-integration-clean' into add-virtualhost-module
liquidsec May 11, 2026
ad6fc0e
Merge branch 'dev' into add-virtualhost-module
liquidsec Jun 9, 2026
451d14d
virtualhost: migrate options to Config(BaseModuleConfig)
liquidsec Jun 9, 2026
b34f1b4
Merge branch 'dev' into add-virtualhost-module
liquidsec Jun 16, 2026
b547718
Merge remote-tracking branch 'origin/dev' into add-virtualhost-module
liquidsec Jun 16, 2026
1f3adf1
Address review findings for virtualhost module
liquidsec Jun 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions bbot/core/event/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2005,6 +2005,31 @@ def _data_human(self):
return tech


class VIRTUAL_HOST(DictHostEvent):
class _data_validator(BaseModel):
host: str
virtual_host: str
url: Optional[str] = None
description: Optional[str] = None
ip: Optional[str] = None
_validate_url = field_validator("url")(validators.validate_url)
_validate_host = field_validator("host")(validators.validate_host)

def _data_id(self):
virtual_host = self.data.get("virtual_host", "")
return f"{self.host}:{virtual_host}"

def _pretty_string(self):
return self.data.get("virtual_host", "")

def _data_human(self):
virtual_host = self.data.get("virtual_host", "")
url = self.data.get("url", "")
if url:
return f"{virtual_host} ({url})"
return virtual_host


class PROTOCOL(DictHostEvent):
class _data_validator(BaseModel):
host: str
Expand Down
7 changes: 4 additions & 3 deletions bbot/core/helpers/simhash.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ def __init__(self, bits=64):
@staticmethod
def compute_simhash(text, bits=64, truncate=True, normalization_filter=None):
"""
Static method for computing SimHash that can be used with multiprocessing.
Static method for computing a SimHash fingerprint.

This method is designed to be used with run_in_executor_mp() for CPU-intensive
SimHash computations across multiple processes.
Designed to be called via run_in_executor_cpu(): the work is short and the
input is truncated to ~3KB inside the helper, so a thread pool avoids the
pickle/spawn overhead of a process pool.

Args:
text (str): The text to hash
Expand Down
4 changes: 0 additions & 4 deletions bbot/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,6 @@ class WordlistError(BBOTError):
pass


class CurlError(BBOTError):
pass


class PresetNotFoundError(BBOTError):
pass

Expand Down
3 changes: 1 addition & 2 deletions bbot/modules/generic_ssrf.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,7 @@ async def test(self, event):
post_data_list = [(subdomain_tag, post_data), (subdomain_tag_lower, post_data_lower)]

for tag, pd in post_data_list:
# Send raw body (not URL-encoded) so payload URLs like http://... reach the
# server literally — matching old curl -d behavior.
# Send raw body (not URL-encoded) so payload URLs like http://... reach the server literally.
raw_body = "&".join(f"{k}={v}" for k, v in pd.items())
r = await self.generic_ssrf.helpers.request(url=test_url, method="POST", body=raw_body)
if r:
Expand Down
Loading