Skip to content

DNS

Ports : 53 (tcp/udp)

Le port TCP/53 est utilisé dans les transferts de zone

Popular types of DNS attacks : https://securitytrails.com/blog/most-popular-types-dns-attacks

Enumeration

nmap -p53 -Pn -sV -sC $TARGET

Version

En plus de l'énumération classique nmap ou l'usage du script NSE dns-id, on peut parfois utiliser dig

dig CH TXT version.bind $TARGET

ou host

host -c CH -t TXT version.bind $TARGET

Liste des serveurs DNS d'une Zone

# récupère la liste des nameserver depuis le serveur DNS $TARGET_IP
dig ns $DOMAIN @$TARGET
nslookup -query=NS $DOMAIN $TARGET

Liste des enregistrements disponibles

dig any $DOMAIN @$TARGET

Attaques / Exploitations

Transfert de zone

dig axfr $DOMAIN @$TARGET | tee axfr_$DOMAIN
# create hostlist
cat axfr_$DOMAIN | grep -v ';' | tr "\t" " " | cut -d ' ' -f1 | sed 's/\.$//g' | tee found_axfr_subdomains.txt

Bruteforce des sous domaines

Manuelle

for sub in $(cat /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt);do dig $sub.$DOMAIN @$TARGET | grep -v ';\|SOA' | sed -r '/^\s*$/d' | grep $sub | tee -a subdomains.txt;done
dnsenum
# Google scrapping désactivé (-s 0 -p 0)
dnsenum --dnsserver $TARGET --enum -p 0 -s 0 -o /workspace/Scans/Service/DNS-SUBDOMAINS-$DOMAIN.txt -f /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-110000.txt $DOMAIN
gobuster

Bruteforce classique

dns -q -c -i -d "$DOMAIN" -w "/usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt" --resolver $TARGET 

Bruteforce des sous domaines selon un motif (pattern) spécifique

```title="patterns.txt" lert-api-shv-{GOBUSTER}-sin6 atlas-pp-shv-{GOBUSTER}-sin6

```shell title="exécution de gobuster"
export TARGET="facebook.com"
export NS="d.ns.facebook.com"
export WORDLIST="numbers.txt"
gobuster dns -q -r "${NS}" -d "${TARGET}" -w "${WORDLIST}" -p ./patterns.txt -o "gobuster_${TARGET}.txt"

Found: lert-api-shv-01-sin6.facebook.com
Found: atlas-pp-shv-01-sin6.facebook.com
Found: atlas-pp-shv-02-sin6.facebook.com
Found: atlas-pp-shv-03-sin6.facebook.com
Found: lert-api-shv-03-sin6.facebook.com
[...]
fierce
fierce --domain $DOMAIN --dns-servers $TARGET_IP --subdomain-file names.txt 
subfinder
# https://github.com/projectdiscovery/subfinder
./subfinder -d inlanefreight.com -v   

https://github.com/aboul3la/Sublist3r

subbrute

On peut utiliser subbrute pour trouver des sous domaines qui pourront ensuite resservir à trouver d'autres sous domaines.

Au lancement, subbrute essaie de faire une requête ANY. Si elle ne fonctionne pas, on obtiens une message : Warning: No nameservers found, trying fallback list.

Dans ce cas, on peut passer au domaine suivant.

# https://github.com/TheRook/subbrute
echo "rebrec.local" > ./resolvers.txt
./subbrute.py -s ../names.txt  $DOMAIN -r ../resolvers.txt -P
Warning: Fewer than 16 resolvers per process, consider adding more nameservers to resolvers.txt.
rebrec.local,SOA,ns1.rebrec.local. root.rebrec.local. 3 86400 3600 604800 3600
rebrec.local,NS,ns1.rebrec.local.
ns1.rebrec.local,A,127.0.0.1
www.rebrec.local,A,172.24.0.3
www1.rebrec.local,TXT,"Some Text !"
www2.rebrec.local,CNAME,www.rebrec.local.

Découverte de sous domaines

Lorsqu'on cherche des sous domaines, on constate que le serveur DNS retourne des messages d'erreur différents selon si le domaine existe ou non.

Exemple avec un serveur DNS gérant la zone inlanefreight.htb

 host -t any aaa.inlanefreight.htb $TARGET_IP 
Using domain server:
Name: 10.129.243.143
Address: 10.129.243.143#53
Aliases: 

Host aaa.inlanefreight.htb not found: 3(NXDOMAIN)