Script-Time: [update] Domain-Routing

Script-Time: [update] Domain-Routing
Photo by Mohammad Rahmani / Unsplash

Welche Subdomains gibt es in einer Domäne? Sind sie ein Alias für eine andere Domäne? Unter welcher IP-Adresse wird sie gehostet? Wem gehört diese IP?

So kann man sofort sehen, welche Dienste von einem Unternehmen selbst administriert werden, aber auch jene, die an einen Cloud-Dienstleister abgegeben wurden.

Die zusätzlichen Informationen über eine IP werden bei shodan abgeholt.

domain_routing_detailed(){
    DOMAINS=$*
    outfile=/tmp/domain_routing.png
    GV="digraph G { graph [overlap=scale]; rankdir=LR; node [margin=0.2 fontcolor=blue shape=box3d style=filled]; splines=ortho"

    SUBDOMAINS="$( for DOMAIN in $* ; do ( wget -qO - "https://crt.sh/?q=${DOMAIN}&exclude=expired&output=json" | jq -r .[].name_value ; ) ; done | sort -u ; )"

    GV="${GV}""$( echo "$SUBDOMAINS" | while read domain; do host $domain | grep -E "alias|address" | sed -e 's/ is an alias for /" -> "/;s/ has.*address /" -> "/;s/$/"/;s/\."$/"/;s/^/"/' ; done | sort -u )"
    while read IP
    do
    INFO=$(wget -qO - "https://api.shodan.io/shodan/host/${IP}")
    PORTS="$(echo $( echo "$INFO" | jq .ports | sed -e 's/\[//g;s/\]//g' ))"
    ORG="$(echo $( echo "$INFO" | jq -r .org | sed -e 's/\[//g;s/\]//g' ))"
    GV=$( echo "$GV" | sed -e "s/${IP}/${IP}\\nPorts open: ${PORTS}\\n\\n${ORG}/")
    done < <(echo "$GV" | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | sort -u)
    GV="${GV}""}"
    echo "$GV" | dot -Tpng -Goverlap=scale -o $outfile

    xdg-open $outfile
}

Aufgerufen wird es zum Beispiel folgendermaßen:

domain_routing_detailed swr3.de

Die Ausgabe sieht so aus: