Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
8bb989e
[SignatureBot] Add or update signature nucleitemplates_wasabi-bucket-…
actions-user Oct 18, 2024
a95e960
Merge branch 'dev' into new-signature-nucleitemplates_wasabi-bucket-t…
liquidsec Nov 21, 2024
b91b1df
Merge branch 'dev' into new-signature-nucleitemplates_wasabi-bucket-t…
liquidsec Nov 21, 2024
38c1fcf
Update nucleitemplates_wasabi-bucket-takeover.yml
liquidsec Nov 21, 2024
6328089
Merge branch 'dev' into new-signature-nucleitemplates_wasabi-bucket-t…
liquidsec Sep 22, 2025
898cc36
Bump pyyaml from 6.0.2 to 6.0.3
dependabot[bot] Sep 26, 2025
f20c72c
Bump mkdocs-material from 9.6.20 to 9.6.21
dependabot[bot] Oct 1, 2025
bf5f61c
[SignatureBot] Add or update signature dnsreaper_bettermode.yml and u…
actions-user Oct 4, 2025
e01a06d
[SignatureBot] Add or update signature dnsreaper_hatenablog.yml and u…
actions-user Oct 4, 2025
b127b29
[SignatureBot] Add or update signature dnsreaper_helpscout.yml and up…
actions-user Oct 4, 2025
06c5abb
[SignatureBot] Add or update signature dnsreaper_teamwork.yml and upd…
actions-user Oct 4, 2025
67d6083
[SignatureBot] Add or update signature nucleitemplates_wix-takeover.y…
actions-user Oct 6, 2025
1fa56bf
Bump python-whois from 0.9.5 to 0.9.6
dependabot[bot] Oct 7, 2025
e89d30b
Merge pull request #653 from blacklanternsecurity/dependabot/pip/dev/…
liquidsec Oct 9, 2025
821efb8
Merge branch 'dev' into new-signature-nucleitemplates_wasabi-bucket-t…
liquidsec Oct 9, 2025
0faac44
Merge pull request #657 from blacklanternsecurity/new-signature-dnsre…
liquidsec Oct 9, 2025
ca23436
Merge branch 'dev' into new-signature-dnsreaper_teamwork.yml
liquidsec Oct 9, 2025
d1bf15b
Merge pull request #658 from blacklanternsecurity/new-signature-dnsre…
liquidsec Oct 9, 2025
d8492dc
Merge branch 'dev' into new-signature-nucleitemplates_wix-takeover.yml
liquidsec Oct 9, 2025
c876a59
Merge pull request #503 from blacklanternsecurity/new-signature-nucle…
liquidsec Oct 9, 2025
77f59be
Merge pull request #654 from blacklanternsecurity/dependabot/pip/dev/…
liquidsec Oct 9, 2025
45d77da
Merge branch 'dev' into new-signature-nucleitemplates_wix-takeover.yml
liquidsec Oct 9, 2025
6a273af
Merge branch 'dev' into new-signature-dnsreaper_hatenablog.yml
liquidsec Oct 9, 2025
2258bd6
Merge pull request #656 from blacklanternsecurity/new-signature-dnsre…
liquidsec Oct 9, 2025
fc22f05
Merge branch 'dev' into new-signature-nucleitemplates_wix-takeover.yml
liquidsec Oct 9, 2025
c5ad7af
Merge pull request #659 from blacklanternsecurity/new-signature-nucle…
liquidsec Oct 9, 2025
c37b7c2
Merge branch 'dev' into new-signature-dnsreaper_bettermode.yml
liquidsec Oct 9, 2025
eb19028
Merge pull request #655 from blacklanternsecurity/new-signature-dnsre…
liquidsec Oct 9, 2025
722f696
fix whois 0.96 incompatability
liquidsec Oct 9, 2025
8f71cf5
Merge pull request #660 from blacklanternsecurity/dependabot/pip/dev/…
liquidsec Oct 9, 2025
5ba9d03
[SignatureBot] Add or update signature dnsreaper_hatenablog.yml and u…
actions-user Oct 10, 2025
14cc053
[SignatureBot] Add or update signature nucleitemplates_wix-takeover.y…
actions-user Oct 10, 2025
23ae628
Bump pyfakefs from 5.9.3 to 5.10.0
dependabot[bot] Oct 13, 2025
22e7a78
Merge pull request #674 from blacklanternsecurity/dependabot/pip/dev/…
liquidsec Oct 14, 2025
442407f
Bump mkdocs-material from 9.6.21 to 9.6.22
dependabot[bot] Oct 16, 2025
b1562c5
Merge pull request #675 from blacklanternsecurity/dependabot/pip/dev/…
liquidsec Oct 16, 2025
bd59a19
[SignatureBot] Add or update signature nucleitemplates_redirect-pizza…
actions-user Oct 18, 2025
945eeea
[SignatureBot] Add or update signature nucleitemplates_leadpages-take…
actions-user Oct 19, 2025
c156c0a
Bump pyfakefs from 5.10.0 to 5.10.1
dependabot[bot] Oct 28, 2025
9d71c3d
Merge pull request #678 from blacklanternsecurity/dependabot/pip/dev/…
liquidsec Oct 29, 2025
90484e5
Merge branch 'dev' into new-signature-nucleitemplates_leadpages-takeo…
liquidsec Oct 29, 2025
002797d
adjusting to latest whois version
liquidsec Oct 29, 2025
36531de
Merge branch 'dev' into python-whois-update
liquidsec Oct 29, 2025
913d198
lint
liquidsec Oct 29, 2025
fb85ddd
Merge remote-tracking branch 'refs/remotes/origin/python-whois-update…
liquidsec Oct 29, 2025
b85287d
bump python-whois version
liquidsec Oct 29, 2025
f437c0d
poetry.lock
liquidsec Oct 29, 2025
9625f09
Merge branch 'dev' into new-signature-nucleitemplates_redirect-pizza-…
liquidsec Oct 29, 2025
60c8527
Merge pull request #676 from blacklanternsecurity/new-signature-nucle…
liquidsec Oct 29, 2025
e16aadb
Merge pull request #679 from blacklanternsecurity/python-whois-update
liquidsec Oct 29, 2025
28c8424
bump version
liquidsec Oct 29, 2025
a8c3a5f
Merge branch 'dev' into new-signature-nucleitemplates_leadpages-takeo…
liquidsec Oct 29, 2025
4ee18ba
Merge pull request #677 from blacklanternsecurity/new-signature-nucle…
liquidsec Oct 29, 2025
6085e37
Merge branch 'dev' into new-signature-nucleitemplates_wix-takeover.yml
liquidsec Oct 29, 2025
57f9df6
Merge pull request #673 from blacklanternsecurity/new-signature-nucle…
liquidsec Oct 29, 2025
9bc7f3b
Merge branch 'dev' into new-signature-dnsreaper_hatenablog.yml
liquidsec Oct 29, 2025
20c4787
Merge pull request #669 from blacklanternsecurity/new-signature-dnsre…
liquidsec Oct 29, 2025
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
20 changes: 15 additions & 5 deletions baddns/lib/dnsmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,19 +67,29 @@ def process_answer(self, answer, rdatatype):

rdtype = str(record.rdtype.name).upper()
if rdtype in ("A", "AAAA", "NS", "CNAME", "PTR"):
results.add(self._clean_dns_record(record))
cleaned = self._clean_dns_record(record)
if cleaned:
results.add(cleaned)
elif rdtype == "SOA":
results.add(self._clean_dns_record(record.mname))
cleaned = self._clean_dns_record(record.mname)
if cleaned:
results.add(cleaned)
elif rdtype == "MX":
results.add(self._clean_dns_record(record.exchange))
cleaned = self._clean_dns_record(record.exchange)
if cleaned:
results.add(cleaned)
elif rdtype == "SRV":
results.add(self._clean_dns_record(record.target))
cleaned = self._clean_dns_record(record.target)
if cleaned:
results.add(cleaned)
elif rdtype == "TXT":
for s in record.strings:
s = s.decode()
results.add(s)
elif rdtype == "NSEC":
results.add(self._clean_dns_record(record.next))
cleaned = self._clean_dns_record(record.next)
if cleaned:
results.add(cleaned)
else:
log.debug(f'Unknown DNS record type "{rdtype}"')
return list(results)
Expand Down
9 changes: 8 additions & 1 deletion baddns/lib/whoismanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import tldextract
from datetime import datetime, timezone, timedelta, date
from dateutil import parser as date_parser
from whois.exceptions import PywhoisError

log = logging.getLogger(__name__)

Expand All @@ -19,13 +20,19 @@ async def dispatchWHOIS(self):
registered_domain = self.target
else:
registered_domain = ext.registered_domain

# Guard against empty/invalid domains
if not registered_domain or "." not in registered_domain:
log.debug(f"Skipping WHOIS for invalid domain [{registered_domain}] from [{self.target}]")
self.whois_result = {"type": "error", "data": "Invalid domain for WHOIS"}
return
log.debug(f"Extracted base domain [{registered_domain}] from [{self.target}]")
log.debug(f"Submitting WHOIS query for {registered_domain}")
try:
w = await asyncio.to_thread(whois.whois, registered_domain, quiet=True)
log.debug(f"Got response to whois request for {registered_domain}")
self.whois_result = {"type": "response", "data": w}
except whois.parser.PywhoisError as e:
except PywhoisError as e:
log.debug(f"Got PywhoisError for whois request for {registered_domain}")
self.whois_result = {"type": "error", "data": str(e)}
except Exception as e:
Expand Down
2 changes: 2 additions & 0 deletions baddns/modules/mx.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ async def dispatch(self):
return False

for mx_record in self.target_dnsmanager.answers["MX"]:
if not mx_record:
continue
log.debug(f"performing WHOIS lookup for [{mx_record}]")
self.mx_whoismanager[mx_record] = WhoisManager(mx_record)
await self.mx_whoismanager[mx_record].dispatchWHOIS()
Expand Down
15 changes: 15 additions & 0 deletions baddns/signatures/dnsreaper_bettermode.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
identifiers:
cnames:
- type: word
value: domains.bettermode.io
ips: []
nameservers: []
not_cnames: []
matcher_rule:
matchers:
- status: 409
type: status
matchers-condition: and
mode: http
service_name: bettermode.com
source: dnsreaper
2 changes: 1 addition & 1 deletion baddns/signatures/dnsreaper_hatenablog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ matcher_rule:
part: body
type: word
words:
- 404 Blog is not found
- The request could not be satisfied.
matchers-condition: and
mode: http
service_name: hatenablog.com
Expand Down
7 changes: 2 additions & 5 deletions baddns/signatures/dnsreaper_helpscout.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@ identifiers:
not_cnames: []
matcher_rule:
matchers:
- condition: or
part: body
type: word
words:
- Not Found
- status: 0
type: status
matchers-condition: and
mode: http
service_name: helpscoutdocs.com
Expand Down
2 changes: 1 addition & 1 deletion baddns/signatures/dnsreaper_teamwork.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ matcher_rule:
part: body
type: word
words:
- Unable to determine installationID from domain
- The request could not be satisfied.
matchers-condition: and
mode: http
service_name: teamwork
Expand Down
7 changes: 4 additions & 3 deletions baddns/signatures/nucleitemplates_leadpages-takeover.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ matcher_rule:
part: body
type: word
words:
- <h1>We couldn't find that page</h1>
- "The page you\u2019re looking for may have been moved"
- Double-check that you have the right web address and give it another go!
- <h2 class="lp-headline text-align-center subhead">This page couldn't be found,
so let's get you turned around!</h2>
- The page you're looking for may have moved.
- Double check that you have the right web address and give it another go!
matchers-condition: and
mode: http
service_name: Leadpages takeover detection
Expand Down
17 changes: 17 additions & 0 deletions baddns/signatures/nucleitemplates_redirect-pizza-takeover.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
identifiers:
cnames: []
ips: []
nameservers: []
not_cnames: []
matcher_rule:
matchers:
- condition: and
dsl:
- Host != ip
- contains_all(body, "Unable to redirect","redirect.pizza")
- contains(content_type, "text/html")
type: dsl
matchers-condition: and
mode: http
service_name: Redirect.pizza Subdomain Takeover Detection
source: nucleitemplates
24 changes: 24 additions & 0 deletions baddns/signatures/nucleitemplates_wasabi-bucket-takeover.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
identifiers:
cnames:
- type: word
value: wasabisys.com
ips: []
nameservers: []
not_cnames: []
matcher_rule:
matchers:
- condition: and
dsl:
- Host != ip
- contains(tolower(header), "wasabis3")
type: dsl
- condition: and
part: body
type: word
words:
- The specified bucket does not exist
- BucketName
matchers-condition: and
mode: http
service_name: wasabi Bucket Takeover - Detection
source: nucleitemplates
7 changes: 6 additions & 1 deletion baddns/signatures/nucleitemplates_wix-takeover.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
identifiers:
cnames: []
cnames:
- type: word
value: wix.com
ips: []
nameservers: []
not_cnames: []
Expand All @@ -16,6 +18,9 @@ matcher_rule:
- wixErrorPagesApp
- status: 404
type: status
- dsl:
- '!contains(host,"wix.com")'
type: dsl
matchers-condition: and
mode: http
service_name: Wix Takeover Detection
Expand Down
10 changes: 10 additions & 0 deletions baddns/signatures/signature_history.txt
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ e155aed36a19a0437650f5d1033a64a47f39a8981de9f1b5f39e2dfe7e14996d #nucleitemplate
ad913111f8c498e0e5b0ef30714e6074832914e936f61c4dd3b10dad2dd9e436 #dnsreaper_surveysparrow.yml
9075b7665514a4ed5e342152a2f80c804959bb5ee5f94c1e8dfdb50858e969bd #dnsreaper_wix.yml
d3ec2dfaec7ac79042848aee837c2391958e46e2c7824dedb6a9590939d25f44 #dnsreaper_simplebooklet.yml
ab314bbf1d879ea9ada35b4ca6735663c209d481a359426a2bec478a53ea4833 #nucleitemplates_wasabi-bucket-takeover.yml
4882b47122e85dd71cab1cee417c23f5ed8f495c305922cffa57627bd86a8271 #nucleitemplates_greatpages-takeover.yml
c52773fd1de7ba1e3a9137626b0c9c0232964eeb5e779fbf549ecab8c22d3817 #nucleitemplates_framer-takeover.yml
b3d1600a3fe2c2d3739e9024d89f205ee65d9d733fcb2765ad58dba215e9bd57 #nucleitemplates_zendesk-takeover.yml
Expand All @@ -123,3 +124,12 @@ b3d1600a3fe2c2d3739e9024d89f205ee65d9d733fcb2765ad58dba215e9bd57 #nucleitemplate
cd698c5180cba3ee1bee876cf4a6ebc65be5e57f95b02de27ff7521c3b9f73da #nucleitemplates_cargo-takeover.yml
653b478bb93f7657f4c0b01c0376c349903e4e5701ba206c9720d9c9f1efdfd2 #nucleitemplates_uptimerobot-takeover.yml
f8188d3aea41c1711498ec5ed36aceb864168d6907b5f1297176068cae04452f #dnsreaper_short.yml
b9218825ff262b6f94d43ae05c8178f738cc1901cc5937a2fe39e0d2139fccfe #dnsreaper_hatenablog.yml
cd7d0669e80ab911f274e09a8ef390cf295f2e1a2421980ee715bc575e3267ba #nucleitemplates_wix-takeover.yml
72829905abfc7a663ee8360005dcd6105440794a0330792b1fbf0f3eb4b00849 #nucleitemplates_leadpages-takeover.yml
ee0f1a8b0eb221e3cf23fd98ce652d68485fca06d2a57d943fa220af972e6acc #nucleitemplates_redirect-pizza-takeover.yml
91eedb328aa6c1bf2d5073a1627f10c8ee79d5bddad2320df43da95e44fa297b #dnsreaper_bettermode.yml
cd7d0669e80ab911f274e09a8ef390cf295f2e1a2421980ee715bc575e3267ba #nucleitemplates_wix-takeover.yml
b9218825ff262b6f94d43ae05c8178f738cc1901cc5937a2fe39e0d2139fccfe #dnsreaper_hatenablog.yml
4a68439abb82bac01c40fa285322d704531f0521fcbedb20e503e07cc528721d #dnsreaper_teamwork.yml
9e80e1a3303e74eaa5ac1e212d26f494d29ded7aef7a80a7384b36b9296cc94e #dnsreaper_helpscout.yml
Loading