DNS
Resumo do conceito
O serviço de DNS serve para, resumidamente, traduzir IPs para nomes. Só pra ficar fácil de usuários comuns lembrarem os nomes dos sites, dado que é mais fácil lembrar de nomes do que de números separados por pontos.
A porta de consumo desse serviço é a 53 Tanto UDP quanto TCP
DNS (53/tcp, 53/udp)
Tipos de regitros de DNS:
https://ns1.com/resources/dns-types-records-servers-and-queries
Fonte: https://medium.com/@dancovic/dns-enumeration-tutorial-dig-nslookup-host-8eadef72977e
Detecção de versão do DNS server + NSE scripts
sudo nmap -Pn -sU -sV -p 53 "--script=banner,(dns* or ssl*) and not (brute or broadcast or dos or external or fuzzer)" -oN udp_53_dns_nmap.txt <hostname>
Vale considerar a entrada de DNS no arquivo resolv.conf, porque caso contrário, as ferramentas que automatizam o processo de enumeração de DNS podem retornar falsos positivos por não deterem a diretiva de DNS devidamente configurada:
echo "nameserver <ip_dns_server>" >> /etc/resolv.conf
Enumeração (uma menção importante que, de acordo com a minha experiência é interessante fazer os testes com cada comando e utilizando ferramentas diferentes, porque os resultados podem variar:
Lembrando que os DNS servers podem ser tanto internos quanto externos/públicos. Os testes já abrangem os dois casos
Enumeração de dominio
Essa seria a enumeração mais apropriada para um primeiro momento (cuidado pra não onerar a rede com as ferramentas automatizadas)
host -t soa dominio.com.br
host -t ns dominio.com.br
host -t any dominio.com.br <soa_dns_server>
host -t txt dominio.com.br
host -t cname dominio.com.br
host -t mx dominio.com.br
Em resumo (automatizado, podendo trazer falsos positivos):
dnsenum dominio.br --dnsserver <soa_dns_server>
Resolucao de nome reversa
Aqui o objetivo é, por meio de um endereço IP, encontrarmos um nome pertencente aquela máquina/host:
Pode aparecer um registro de ns na qual constará o nome de domínio
nslookup <endereco_ip> <dns_server>
Temos a opção com fping também que obedece o mesmo conceito:
fping -d -a -g 10.0.0.0/24 # -> reverse DNS lookup
#ou
fping -d -A -a -g 10.0.0.0/24 #(para obter o endereço de IP ao lado do hostname)
Transferencia de zona
Ataque de transferência de zona (só funciona na porta 53/tcp). Esse cara seria a cereja do bolo, visto que, sendo possívl a transferência de zona, conseguiríamos todos os registros de DNS daquela zona.
host -t axfr dominio.com.br <ns_server>
dig axfr @<ip_dns_server> dominio.com.br 2>&1 | tee "tcp53_dns_dig.txt"
dnsrecon -d target.com -t axfr
or
host -l target.com <dns_server_address>
OBS: Primeiro encontrar qual dns server corresponde aquele domínio:
host -t ns target.com
Encontrando subdominios
via bruteforce
gobuster dns -d $domain -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 16 -o "tcp_53_dns_gobuster.txt"
dnsrecon -d _msdcs.thinc.local -D /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t brt
Primeiro temos que verificar se a gente consegue obter o nome do domínio por meio de uma resolução inversa de DNS da seguinte maneira: Informar o serviço de DNS encontrado por meio do comando abaixo:
sudo nmap -sU -p 53 192.168.134.0/24 -oG dns_enum_lab.txt
#Assim que achado o DNS server (porta 53 aberta), fazemos um nslookup ou host para um host da rede
#host <IPS_DA_REDE> <IP_DNS_SERVER>
host 192.168.134.149 192.168.134.149
nslookup
server 192.168.134.149
host -t ns mailman.com # Para encontrar o name server do domínio
Brute-force:
dnsrecon -d target.com -D wordlist.txt -t brt
DNS cache snooping:
dnsrecon -t snoop -D wordlist.txt -n 2.2.2.2 where 2.2.2.2 is the IP of the target’s NS server
Options --threads 8: Number of threads -n nsserver.com: Use a custom name server Output options --db: SQLite 3 file --xml: XML file --json: JSON file --csv: CSV file
Enumeracao de DNS (especifico para testes internos de dominio)
Preimeiro temos que identificar qual o servidor de DNS que responde por este serviço:
nmap -p 53 -sU --open 10.11.1.0/24 -oG dns_servers.txt
Assim que obtido o servidor, ou seja, obter a resposta do comando acima para os IPs que responderam com "open", configuramos ele no arquivo /etc/resolv.conf ccom a seguinte diretiva:
nameserver <IP_SERVER_DNS>
Feito isso, executamos o seguinte comando para obter o nome de domínio da rede alvo:
fping -d -a -g 10.0.0.0/24 # -> reverse DNS lookup
#ou
fping -d -A -a -g 10.0.0.0/24 #(para obter o endereço de IP ao lado do hostname)
Depois, tentamos realizar uma transferência de zona para obter informações a respeito do domínio:
host -t axfr thinc.local <IP_DNS_SERVER>
#ou
dig axfr thinc.local @<IP_DNS_SERVER> #Esse não funionou e não entendi o porquê
#ou
dnsenum thinc.local # pode ser informado a flag --dnsserver <IP_DNS_SERVER> para especificar o server de DNS
Dessa forma obtemos todas as informações a respeito daquele domínio. ALém disto, observamos um subdomínio especial ali e tentamos uma transferência de zona lá também, sem sucesso, mas anda temos mais uma possibilidade que é enumerar os subdomínios da seguinte forma:
dnsrecon -d _msdcs.thinc.local -D /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t brt