#!/bin/sh
# sds - subdomain scanner via Certificate Transparency logs (crt.sh)
# Usage: sds <domain>
[ -z "$1" ] && echo "Usage: sds <domain>" && exit 1
domain="$(echo "$1" | sed 's|^https\?://||;s|/.*||' | tr '[:upper:]' '[:lower:]')"
printf "Scanning CT logs for *.%s ...\n\n" "$domain"
curl -sf "https://crt.sh/?q=%25.${domain}&output=json" |
jq -r '.[].common_name, .[].name_value' 2>/dev/null |
tr '\n' '\n' |
sed 's/\r//g' |
tr '[:upper:]' '[:lower:]' |
grep -v "^${domain}$" |
grep "\.${domain}$\|^\*\.${domain}$" |
sort -u |
awk -v dom="$domain" '
/^\*\./ { wild[NR] = $0; next }
{ reg[NR] = $0 }
END {
n = 0
for (i in reg) n++
for (i in wild) n++
printf "%d subdomains found for %s\n\n", n, dom
printf "%-4s %s\n", "#", "SUBDOMAIN"
printf "%-4s %s\n", "---", "---"
c = 0
for (i in reg) { c++; printf "%-4d %s\n", c, reg[i] }
for (i in wild) { c++; printf "%-4d %s\n", c, wild[i] }
}
'