diff --git a/bbot/modules/sitedossier.py b/bbot/modules/sitedossier.py deleted file mode 100644 index b4f19b701b..0000000000 --- a/bbot/modules/sitedossier.py +++ /dev/null @@ -1,56 +0,0 @@ -from bbot.modules.templates.subdomain_enum import subdomain_enum - - -class sitedossier(subdomain_enum): - flags = ["safe", "subdomain-enum", "passive"] - watched_events = ["DNS_NAME"] - produced_events = ["DNS_NAME"] - meta = { - "description": "Query sitedossier.com for subdomains", - "created_date": "2023-08-04", - "author": "@TheTechromancer", - } - - base_url = "http://www.sitedossier.com/parentdomain" - max_pages = 10 - - async def handle_event(self, event): - query = self.make_query(event) - async for hostname in self.query(query): - try: - hostname = self.helpers.validators.validate_host(hostname) - except ValueError as e: - self.verbose(e) - continue - if hostname and hostname.endswith(f".{query}") and not hostname == event.data: - await self.emit_event( - hostname, - "DNS_NAME", - event, - abort_if=self.abort_if, - context=f'{{module}} searched sitedossier.com for "{query}" and found {{event.type}}: {{event.pretty_string}}', - ) - - async def query(self, query, parse_fn=None, request_fn=None): - results = set() - base_url = f"{self.base_url}/{self.helpers.quote(query)}" - url = str(base_url) - for i, page in enumerate(range(1, 100 * self.max_pages + 2, 100)): - self.verbose(f"Fetching page #{i + 1} for {query}") - if page > 1: - url = f"{base_url}/{page}" - response = await self.helpers.request(url) - if response is None: - self.info(f'Query "{query}" failed (no response)') - break - if response.status_code == 302: - self.verbose("Hit rate limit captcha") - break - for match in await self.helpers.re.finditer_multi(self.scan.dns_regexes, response.text): - hostname = match.group().lower() - if hostname and hostname not in results: - results.add(hostname) - yield hostname - if ' - - -Parent domain: evilcorp.com - - - - -
-
-logo -
-
-
-
-
-
-
- - - - - - -
nwne
-

Parent domain: evilcorp.com

-
- -
Displaying items 101 to 200, out of a total of 685 -
-
    -
  1.   http://asdf.evilcorp.com/
    -
  2.   http://zzzz.evilcorp.com/
    -
-Show next 100 items
-
-
swse
-
-
-
- - -""" - -page2 = """ - - - - -Parent domain: evilcorp.com - - - - -
-
-logo -
-
-
-
-
-
-
- - - - - - -
nwne
-

Parent domain: evilcorp.com

-
- -
Displaying items 101 to 200, out of a total of 685 -
-
    -
  1.   http://xxxx.evilcorp.com/
    -
  2.   http://ffff.evilcorp.com/
    -
-
-
swse
-
-
-
- - -""" - - -class TestSitedossier(ModuleTestBase): - targets = ["evilcorp.com"] - - async def setup_after_prep(self, module_test): - await module_test.mock_dns( - { - "evilcorp.com": {"A": ["127.0.0.1"]}, - "asdf.evilcorp.com": {"A": ["127.0.0.1"]}, - "zzzz.evilcorp.com": {"A": ["127.0.0.1"]}, - "xxxx.evilcorp.com": {"A": ["127.0.0.1"]}, - "ffff.evilcorp.com": {"A": ["127.0.0.1"]}, - } - ) - module_test.blasthttp_mock.add_response( - url="http://www.sitedossier.com/parentdomain/evilcorp.com", - text=page1, - ) - module_test.blasthttp_mock.add_response( - url="http://www.sitedossier.com/parentdomain/evilcorp.com/101", - text=page2, - ) - - def check(self, module_test, events): - assert any(e.data == "asdf.evilcorp.com" for e in events), "Failed to detect subdomain" - assert any(e.data == "zzzz.evilcorp.com" for e in events), "Failed to detect subdomain" - assert any(e.data == "xxxx.evilcorp.com" for e in events), "Failed to detect subdomain" - assert any(e.data == "ffff.evilcorp.com" for e in events), "Failed to detect subdomain"