DNSTWIST(1)

πŸ“¦
version 0~20250130 Β· 3 versions
, in debian trixie, fedora 43, fedora 44, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

okay bestie, so dnstwist is literally a domain name permutation engine β€” that's the whole vibe. (also hi, this is the DNSTWIST(1) page from the User Commands manual, in case you were wondering who let me in here πŸŽ€)


✨ SYNOPSIS ✨

dnstwist [OPTION...] DOMAIN

πŸ¦‹ DESCRIPTION πŸ¦‹

so the whole point?? finding similar-looking domain names that bad actors could use to come for you. it's giving typosquatters, phishing attacks, fraud, brand impersonation β€” the full toxic ex energy of the internet πŸ’€


πŸ‘‘ COMMAND-LINE OPTIONS πŸ‘‘

one bullet per flag, no skips, no skips, periodt:

  • -a, --all β€” print all the DNS records instead of just the first ones. greedy? yes. correct? also yes.
  • -b, --banners β€” go figure out the HTTP and SMTP service banners. sniff sniff πŸ‘€
  • -d, --dictionary FILE β€” generate extra domains using a dictionary you read from FILE.
  • -f, --format FORMAT β€” pick your output format. supported values are: cli (the default, bestie), csv, list, json.
  • --fuzzers LIST β€” only use the selected fuzzing algorithms (separate them with commas, like a lil list).
  • -g, --geoip β€” do a lookup for GeoIP location. where in the world 🌍
  • --lsh [LSH] β€” evaluate web page similarity with the LSH algorithm: ssdeep (the default) or tlsh.
  • --lsh-url URL β€” override the URL used to fetch the original web page from.
  • -h, --help β€” display the help message and dip out. bye πŸ‘‹
  • -m, --mxcheck β€” check whether the MX host can be used to intercept e-mails.
  • -o, --output FILE β€” save the output to FILE.
  • -r, --registered β€” show only registered domain names.
  • -u, --unregistered β€” show only unregistered domain names.
  • -p, --phash β€” render the web pages and compare their perceptual hashes to figure out visual similarity πŸ‘οΈβœ¨
  • --phash-url URL β€” override the URL used to render the original web page from.
  • --screenshots DIR β€” save web page screenshots into DIR. πŸ“Έ
  • -t, --threads NUM β€” start NUM threads. go fast, bestie.
  • -w, --whois β€” look up the WHOIS database for creation date and registrar πŸ•΅οΈβ€β™€οΈ
  • --nameservers LIST β€” the DNS or DNS-over-HTTPS servers to query (comma-separated LIST).
  • --tld FILE β€” generate extra domains by swapping the TLD as read from FILE.
  • --useragent STRING β€” set the User-Agent STRING (default: Mozilla/5.0 (platform arch) dnstwist/version).

🌸 NOTES 🌸

DNS fuzzing is an automated workflow for discovering potentially malicious domain names. iykyk.

the tool runs your provided domain name through its fuzzing algorithms and generates a list of potential phishing domains along with DNS records. usually thousands of domain permutations get generated β€” especially for longer input domains. when that happens, it may be practical to display only the registered (resolvable) ones using the --registered argument. fr fr.

heads up bestie: make sure your local DNS server can handle thousands of requests within a short period of time. otherwise, you can specify an external DNS or DNS-over-HTTPS server with the --nameservers argument. don't crash your resolver, it's not cute 😭

🧚 Fuzzy hashing 🧚

manually checking every single domain name to see if it's serving a phishing site might be time-consuming. to address this, dnstwist makes use of so-called fuzzy hashes (locality-sensitive hash, LSH) and perceptual hashes (pHash). fuzzy hashing is a concept that involves the ability to compare two inputs (HTML code) and determine a fundamental level of similarity, while perceptual hash is a fingerprint derived from visual features of an image (web browser screenshot). the level of similarity is expressed as a percentage. math queen behavior πŸ’…

keep in mind it's rather unlikely to get a 100% match for a dynamically generated web page. however, each notification is a strong indicator and should be inspected carefully regardless of the score. no skipping the vibes check just because the number is low.

πŸ“ Dictionaries πŸ“

if the domain permutations generated by the fuzzing algorithms are insufficient, please use the --dictionary option with a file to generate more domain variants. and if you need to check whether domains with different TLDs exist, you can use the --tld argument. more options = more chaos = more coverage πŸŽ€

🌈 Coverage 🌈

along with the length of the domain, the number of variants generated by the algorithms increases considerably β€” and therefore so do the time and resources needed to verify them. it's mathematically impossible to check all domain permutations, especially for longer input domains which would require millions of DNS lookups. for this reason, this tool generates and checks domains very close to the original one. theoretically, these are the most attractive domains from the attacker's point of view. however, be aware that the imagination of the aggressors is unlimited. they will think of things you did not. scary but true πŸ’€

Unicode tables consist of thousands of characters, with many of them visually similar to each other. however, despite the fact certain characters are encodable using punycode, most TLD authorities will reject them during the domain registration process. in general, TLD authorities disallow mixing of characters coming from different Unicode scripts, or maintain their own sets of acceptable characters. with that being said, the homoglyph fuzzer was built on top of a carefully researched range of Unicode characters (homoglyphs) to ensure that generated domains can actually be registered in practice. science, but make it shady ✨


πŸ’œ AUTHOR πŸ’œ

Marcin Ulikowski <marcin@ulikowski.pl>


okay that's the whole page bestie, go forth and typosquat-hunt 🫢 this was the User Commands manual, December 2022 edition β€” and yes the date is giving vintage but she still eats. mwah πŸ’…β­