
dnsx v1.3.1
dnsx é um kit de ferramentas DNS rápido e multifuncional que permite executar múltiplas consultas DNS de sua escolha com uma lista de resolvedores fornecidos pelo usuário.
Um kit de ferramentas DNS rápido e multi-propósito projetado para executar consultas DNS
Funcionalidades • Instalação • Uso • Executando `dnsx` • Wildcard • Notas • Junte-se ao Discord
dnsx é um kit de ferramentas DNS rápido e multi-propósito projetado para executar várias sondas através da biblioteca retryabledns. Ele suporta múltiplas consultas DNS, resolvedores fornecidos pelo usuário, filtragem de wildcard DNS como shuffledns etc.
Funcionalidades
- Utilitário simples e prático para consultar registros DNS.
- Suporte a consulta A, AAAA, CNAME, PTR, NS, MX, TXT, SRV, SOA
- Suporte a Resolução / Força bruta de DNS
- Suporte a entrada de resolvedor personalizado
- Suporte a múltiplos formatos de resolvedor (TCP/UDP/DOH/DOT)
- Suporte a stdin e stdout
- Suporte automático a tratamento de wildcard
Instruções de Instalação
dnsx requer go1.21 para instalar com sucesso. Execute o seguinte comando para instalar a versão mais recente:
go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest
Uso
dnsx -h
Isso exibirá a ajuda da ferramenta. Aqui estão todas as opções que ela suporta.
INPUT:
-l, -list string list of sub(domains)/hosts to resolve (file or stdin)
-d, -domain string list of domain to bruteforce (file or comma separated or stdin)
-w, -wordlist string list of words to bruteforce (file or comma separated or stdin)
QUERY:
-a query A record (default)
-aaaa query AAAA record
-cname query CNAME record
-ns query NS record
-txt query TXT record
-srv query SRV record
-ptr query PTR record
-mx query MX record
-soa query SOA record
-any query ANY record
-axfr query AXFR
-caa query CAA record
-recon query all the dns records (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa)
-e, -exclude-type value dns query type to exclude (a,aaaa,cname,ns,txt,srv,ptr,mx,soa,axfr,caa) (default none)
FILTER:
-re, -resp display dns response
-ro, -resp-only display dns response only
-rc, -rcode string filter result by dns status code (eg. -rcode noerror,servfail,refused)
PROBE:
-cdn display cdn name
-asn display host asn information
RATE-LIMIT:
-t, -threads int number of concurrent threads to use (default 100)
-rl, -rate-limit int number of dns request/second to make (disabled as default) (default -1)
UPDATE:
-up, -update update dnsx to latest version
-duc, -disable-update-check disable automatic dnsx update check
OUTPUT:
-o, -output string file to write output
-j, -json write output in JSONL(ines) format
-omit-raw, -or omit raw dns response from jsonl output
-ot, -output-template string custom output template (e.g. -ot '{{host}} {{a}}')
DEBUG:
-hc, -health-check run diagnostic check up
-silent display only results in the output
-v, -verbose display verbose output
-raw, -debug display raw dns response
-stats display stats of the running scan
-version display version of dnsx
-nc, -no-color disable color in output
OPTIMIZATION:
-retry int number of dns attempts to make (must be at least 1) (default 2)
-hf, -hostsfile use system host file
-trace perform dns tracing
-trace-max-recursion int Max recursion for dns trace (default 32767)
-resume resume existing scan
-stream stream mode (wordlist, wildcard, stats and stop/resume will be disabled)
-timeout value maximum time to wait for a DNS query to complete (default 3s)
CONFIGURATIONS:
-auth configure projectdiscovery cloud (pdcp) api key (default true)
-r, -resolver string list of resolvers to use (file or comma separated)
-wt, -wildcard-threshold int wildcard filter threshold (default 5)
-auto-wildcard automatically detect wildcard domains for filtering
-wd, -wildcard-domain string domain name for manual wildcard filtering (mutually exclusive with -auto-wildcard; other flags will be ignored - json output recommended)
Executando dnsx
Resolução DNS
Filtre nomes de host ativos a partir da lista de subdomínios passivos, obtidos de várias fontes:
subfinder -silent -d hackerone.com | dnsx -silent
a.ns.hackerone.com
www.hackerone.com
api.hackerone.com
docs.hackerone.com
mta-sts.managed.hackerone.com
mta-sts.hackerone.com
resources.hackerone.com
b.ns.hackerone.com
mta-sts.forwarding.hackerone.com
events.hackerone.com
support.hackerone.com
Imprima os registros A para a lista de subdomínios fornecida:
subfinder -silent -d hackerone.com | dnsx -silent -a -resp
www.hackerone.com [104.16.100.52]
www.hackerone.com [104.16.99.52]
hackerone.com [104.16.99.52]
hackerone.com [104.16.100.52]
api.hackerone.com [104.16.99.52]
api.hackerone.com [104.16.100.52]
mta-sts.forwarding.hackerone.com [185.199.108.153]
mta-sts.forwarding.hackerone.com [185.199.109.153]
mta-sts.forwarding.hackerone.com [185.199.110.153]
mta-sts.forwarding.hackerone.com [185.199.111.153]
a.ns.hackerone.com [162.159.0.31]
resources.hackerone.com [52.60.160.16]
resources.hackerone.com [3.98.63.202]
resources.hackerone.com [52.60.165.183]
resources.hackerone.com [read.uberflip.com]
mta-sts.hackerone.com [185.199.110.153]
mta-sts.hackerone.com [185.199.111.153]
mta-sts.hackerone.com [185.199.109.153]
mta-sts.hackerone.com [185.199.108.153]
gslink.hackerone.com [13.35.210.17]
gslink.hackerone.com [13.35.210.38]
gslink.hackerone.com [13.35.210.83]
gslink.hackerone.com [13.35.210.19]
b.ns.hackerone.com [162.159.1.31]
docs.hackerone.com [185.199.109.153]
docs.hackerone.com [185.199.110.153]
docs.hackerone.com [185.199.111.153]
docs.hackerone.com [185.199.108.153]
support.hackerone.com [104.16.51.111]
support.hackerone.com [104.16.53.111]
mta-sts.managed.hackerone.com [185.199.108.153]
mta-sts.managed.hackerone.com [185.199.109.153]
mta-sts.managed.hackerone.com [185.199.110.153]
mta-sts.managed.hackerone.com [185.199.111.153]
Extraia os registros A para a lista de subdomínios fornecida:
subfinder -silent -d hackerone.com | dnsx -silent -a -resp-only
104.16.99.52
104.16.100.52
162.159.1.31
104.16.99.52
104.16.100.52
185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153
104.16.99.52
104.16.100.52
104.16.51.111
104.16.53.111
185.199.108.153
185.199.111.153
185.199.110.153
185.199.111.153
Extraia os registros CNAME para a lista de subdomínios fornecida:
subfinder -silent -d hackerone.com | dnsx -silent -cname -resp
support.hackerone.com [hackerone.zendesk.com]
resources.hackerone.com [read.uberflip.com]
mta-sts.hackerone.com [hacker0x01.github.io]
mta-sts.forwarding.hackerone.com [hacker0x01.github.io]
events.hackerone.com [whitelabel.bigmarker.com]
Extraia os registros ASN para a lista de subdomínios fornecida:
subfinder -silent -d hackerone.com | dnsx -silent -asn
b.ns.hackerone.com [AS13335, CLOUDFLARENET, US]
a.ns.hackerone.com [AS13335, CLOUDFLARENET, US]
hackerone.com [AS13335, CLOUDFLARENET, US]
www.hackerone.com [AS13335, CLOUDFLARENET, US]
api.hackerone.com [AS13335, CLOUDFLARENET, US]
support.hackerone.com [AS13335, CLOUDFLARENET, US]
Sonde usando código de status DNS na lista de (sub)domínios fornecida:
subfinder -silent -d hackerone.com | dnsx -silent -rcode noerror,servfail,refused
ns.hackerone.com [NOERROR]
a.ns.hackerone.com [NOERROR]
b.ns.hackerone.com [NOERROR]
support.hackerone.com [NOERROR]
resources.hackerone.com [NOERROR]
mta-sts.hackerone.com [NOERROR]
www.hackerone.com [NOERROR]
mta-sts.forwarding.hackerone.com [NOERROR]
docs.hackerone.com [NOERROR]
Extraia subdomínios de uma faixa de rede fornecida usando consulta PTR:
echo 173.0.84.0/24 | dnsx -silent -resp-only -ptr
cors.api.paypal.com
trinityadminauth.paypal.com
cld-edge-origin-api.paypal.com
appmanagement.paypal.com
svcs.paypal.com
trinitypie-serv.paypal.com
ppn.paypal.com
pointofsale-new.paypal.com
pointofsale.paypal.com
slc-a-origin-pointofsale.paypal.com
fpdbs.paypal.com
Extraia subdomínios de um ASN fornecido usando consulta PTR:
echo AS17012 | dnsx -silent -resp-only -ptr
apiagw-a.paypal.com
notify.paypal.com
adnormserv-slc-a.paypal.com
a.sandbox.paypal.com
apps2.paypal-labs.com
pilot-payflowpro.paypal.com
www.paypallabs.com
paypal-portal.com
micropayments.paypal-labs.com
minicart.paypal-labs.com
Formato de Saída Personalizado
A flag -output-template (-ot) permite personalizar o formato de saída usando um modelo, em vez do layout padrão entre colchetes (ex.: example.com [A] [104.20.23.154]). Você especifica o modelo diretamente na linha de comando para controlar como os dados resolvidos são apresentados.
As variáveis do modelo correspondem aos mesmos nomes de campo usados na saída JSONL (-json), portanto, qualquer um dos seguintes pode ser referenciado como {{field}}:
host, a, aaaa, cname, ns, txt, mx, srv, ptr, soa, caa, ttl, resolver, status_code, cdn-name, cdn-type, asn, query-time. Um alias conveniente {{ip}} contém os registros combinados A e AAAA.
Registros com múltiplos valores (ex.: vários registros A) são unidos por vírgula dentro de um único campo.
echo example.com | dnsx -silent -a -ot '{{host}} {{a}}'
example.com 104.20.23.154,172.66.147.243
echo example.com | dnsx -silent -a -ot '{{ip}} - {{host}}'
104.20.23.154,172.66.147.243 - example.com
[!NOTE] Se um campo especificado não existir ou não contiver um valor, ele será simplesmente omitido da saída.
-output-templatenão pode ser combinado com-jsonou-raw.
DNS Bruteforce
Faça bruteforce de subdomínios para um domínio ou lista de domínios usando as flags d e w:
dnsx -silent -d facebook.com -w dns_worldlist.txt
blog.facebook.com
booking.facebook.com
api.facebook.com
analytics.facebook.com
beta.facebook.com
apollo.facebook.com
ads.facebook.com
box.facebook.com
alpha.facebook.com
apps.facebook.com
connect.facebook.com
c.facebook.com
careers.facebook.com
code.facebook.com
Faça bruteforce de subdomínio direcionado usando entrada de palavra-chave única ou múltipla, já que as flags d ou w suportam arquivo ou entradas de palavra-chave separadas por vírgula:
dnsx -silent -d domains.txt -w jira,grafana,jenkins
grafana.1688.com
grafana.8x8.vc
grafana.airmap.com
grafana.aerius.nl
jenkins.1688.com
jenkins.airbnb.app
jenkins.airmap.com
jenkins.ahn.nl
jenkins.achmea.nl
jira.amocrm.com
jira.amexgbt.com
jira.amitree.com
jira.arrival.com
jira.atlassian.net
jira.atlassian.com
Valores são aceitos a partir de stdin para todos os tipos de entrada (-list, -domain, -wordlist). A flag -list assume stdin como padrão, mas o mesmo pode ser alcançado para outros tipos de entrada adicionando um - (traço) como parâmetro:
cat domains.txt | dnsx -silent -w jira,grafana,jenkins -d -
grafana.1688.com
grafana.8x8.vc
grafana.airmap.com
grafana.aerius.nl
jenkins.1688.com
jenkins.airbnb.app
jenkins.airmap.com
jenkins.ahn.nl
jenkins.achmea.nl
jira.amocrm.com
jira.amexgbt.com
jira.amitree.com
jira.arrival.com
jira.atlassian.net
jira.atlassian.com
DNS Bruteforce com wordlist baseada em placeholder
$ cat tld.txt
com
by
de
be
al
bi
cg
dj
bs
dnsx -d google.FUZZ -w tld.txt -resp
_ __ __
__| | _ __ ___ \ \/ /
/ _' || '_ \ / __| \ /
| (_| || | | |\__ \ / \
\__,_||_| |_||___//_/\_\ v1.1.2
projectdiscovery.io
google.de [142.250.194.99]
google.com [142.250.76.206]
google.be [172.217.27.163]
google.bs [142.251.42.35]
google.bi [216.58.196.67]
google.al [216.58.196.68]
google.by [142.250.195.4]
google.cg [142.250.183.131]
google.dj [142.250.192.3]
Filtragem de Wildcard
Um recurso especial do dnsx é sua capacidade de lidar com wildcards DNS baseados em múltiplos níveis, e fazer isso com um número muito reduzido de requisições DNS. Às vezes, todos os subdomínios serão resolvidos, o que leva a muitos resultados indesejados na saída. A forma como o dnsx lida com isso é rastreando quantos subdomínios apontam para um IP e, se a contagem de subdomínios ultrapassar um certo limite, ele verificará iterativamente wildcards em todos os níveis dos hosts para aquele IP.
dnsx -l subdomain_list.txt -wd airbnb.com -o output.txt
Para detectar e filtrar wildcard DNS automaticamente em vários domínios em uma única execução, preservando o modo de saída selecionado:
dnsx -l subdomain_list.txt -auto-wildcard -o output.txt
-auto-wildcard e -wd / -wildcard-domain são mutuamente exclusivos. Use -wd quando quiser o fluxo existente de filtragem manual de wildcard para um único domínio; use -auto-wildcard quando quiser que o dnsx detecte automaticamente raízes de wildcard em entradas de domínios mistos.
Dnsx como biblioteca
É possível usar a biblioteca diretamente em seus programas Go. Os trechos de código a seguir são um exemplo de uso em programas Go. Consulte aqui para obter configuração detalhada do pacote e uso.
package main
import (
"fmt"
"github.com/projectdiscovery/dnsx/libs/dnsx"
)
func main() {
// Create DNS Resolver with default options
dnsClient, err := dnsx.New(dnsx.DefaultOptions)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
// DNS A question and returns corresponding IPs
result, err := dnsClient.Lookup("hackerone.com")
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
for idx, msg := range result {
fmt.Printf("%d: %s\n", idx+1, msg)
}
// Query
rawResp, err := dnsClient.QueryOne("hackerone.com")
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
fmt.Printf("rawResp: %v\n", rawResp)
jsonStr, err := rawResp.JSON()
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
fmt.Println(jsonStr)
return
}
📋 Notas
- Por padrão, o
dnsxverifica o registro A. - Por padrão, o
dnsxusa os resolvedores Google, Cloudflare e Quad9 resolver. - Uma lista personalizada de resolvedores pode ser carregada usando a flag
r. -auto-wildcarddetecta automaticamente domínios wildcard em várias raízes registráveis em uma única execução.- O nome de domínio (
-wd) é necessário apenas para filtragem manual de wildcard e não pode ser usado junto com-auto-wildcard. - Ao usar filtragem manual de wildcard com
-wd, outras flags de registro DNS são ignoradas e a saída JSON é recomendada. - A resolução DNS (
l) e a força bruta DNS (w) não podem ser usadas juntas. - Operadores de VPN tendem a filtrar tráfego DNS/UDP intenso, portanto a ferramenta pode sofrer perda de pacotes (ex.: Mullvad VPN). Verifique esta solução potencial.
dnsx é feito com 🖤 pela equipe do projectdiscovery.