
Uma ferramenta rápida e abrangente para varredura de rede organizacional
Funcionalidades • Uso • Instalação • Uso • Contribuição • Notas Adicionais
Domainim é uma ferramenta rápida de reconhecimento de domínios para varredura de rede organizacional. A ferramenta visa fornecer uma visão geral da estrutura de uma organização usando técnicas como OSINT, força bruta, resolução DNS etc.
Funcionalidades atuais (v1.0.1)-

Enumeração de hostnames virtuais
Consulta DNS reversa
Detecta subdomínios curinga (para força bruta)
Varredura básica de portas TCP
Subdomínios são aceitos como entrada
Exportar resultados para arquivo JSON
Algumas funcionalidades estão em desenvolvimento. Veja Funcionalidades planejadas para mais detalhes.
O projeto é inspirado por Sublist3r. O módulo de varredura de portas é fortemente baseado em NimScan.
Você pode compilar este repositório a partir do código-fonte-
git clone [email protected]:pptx704/domainim
nimble build
./domainim <domínio> [--ports=<portas>]
Ou, você pode baixar o binário diretamente da página de releases. Lembre-se de que o binário foi testado apenas em sistemas baseados em Debian.
./domainim <domínio> [--ports=<portas> | -p:<portas>] [--wordlist=<arquivo> | l:<arquivo> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<arquivo> | -o:<arquivo>]
<domínio> é o domínio a ser enumerado. Pode ser também um subdomínio.--ports | -p é uma string que especifica as portas a serem varridas. Pode ser uma das seguintes-
all - Varre todas as portas (1-65535)none - Ignora a varredura de portas (padrão)t<n> - Varre as n portas mais comuns (igual ao nmap). Exemplo: t100 varre as 100 portas mais comuns. Valor máximo é 5000. Se n for maior que 5000, será ajustado para 5000.80 varre a porta 8080-100 varre as portas 80 a 10080,443,8080 varre as portas 80, 443 e 808080,443,8080-8090,t500 varre as portas 80, 443, 8080 a 8090 e as 500 portas mais comunsExemplos
./domainim nmap.org --ports=all./domainim google.com --ports=none --dns=8.8.8.8#53./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --rps=1500./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --outfile=results.json./domainim mysite.com --ports=t50,5432,7000-9000 --dns=1.1.1.1O menu de ajuda pode ser acessado usando ./domainim --help ou ./domainim -h.
Uso:
domainim <domínio> [--ports=<portas> | -p:<portas>] [--wordlist=<arquivo> | l:<arquivo> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<arquivo> | -o:<arquivo>]
domainim (-h | --help)
Opções:
-h, --help Mostra esta tela.
-p, --ports Portas a varrer. [padrão: `none`]
Pode ser `all`, `none`, `t<n>`, valor único, intervalo, combinação
-l, --wordlist Wordlist para força bruta de subdomínios. A força bruta é ignorada se o arquivo for inválido.
-d, --dns IP e Porta para o resolvedor DNS. Deve ser um IPv4 válido com porta opcional [padrão: sistema padrão]
-r, --rps Consultas DNS por segundo [padrão: 1024 req/s]
-o, --out Arquivo JSON onde a saída será salva. O nome do arquivo deve terminar com `.json`
Exemplos:
domainim domainim.com -p:t500 -l:wordlist.txt --dns:1.1.1.1#53 --out=results.json
domainim sub.domainim.com --ports=all --dns:8.8.8.8 -t:1500 -o:results.json
O esquema JSON para os resultados é o seguinte-
[
{
"subdomain": string,
"data": [
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
]
}
]
Exemplo de JSON para nmap.org pode ser encontrado aqui.
Contribuições são bem-vindas. Sinta-se à vontade para abrir um pull request ou uma issue.
Este projeto ainda está em estágios iniciais. Existem várias limitações que tenho conhecimento.
Os dois mecanismos que estou usando (estou chamando de mecanismos porque o Sublist3r faz o mesmo) atualmente possuem algum tipo de limite de resposta. O dnsdumpster pode buscar até 100 subdomínios. O crt.sh também randomiza os resultados em caso de muitos resultados. Outro problema com o crt.sh é que ele retorna algum erro SQL às vezes. Portanto, para alguns domínios, os resultados podem ser diferentes em execuções diferentes. Estou planejando adicionar mais mecanismos no futuro (pelo menos um mecanismo de força bruta).
O varredor de portas possui apenas o tempo limite de tempo de resposta ping + 750ms. Isso pode levar a falsos negativos. Como o domainim não é destinado a varredura de portas, mas sim a fornecer uma visão geral rápida, esses casos são aceitáveis. No entanto, estou planejando adicionar uma opção para aumentar o tempo limite. Pelo mesmo motivo, portas filtradas não são exibidas. Para varredura de portas mais abrangente, recomendo usar o Nmap. O Domainim também não contorna limitação de taxa (se houver).
Pode parecer que a forma como os vhostnames são exibidos apenas traz repetição à tona.

Imprimir da seguinte forma poderia ter sido melhor-
ack.nmap.org, issues.nmap.org, nmap.org, research.nmap.org, scannme.nmap.org, svn.nmap.org, www.nmap.org
↳ 45.33.49.119
↳ Reverse DNS: ack.nmap.org.
Mas, durante os testes anteriores, encontrei casos em que nem todos os IPs são compartilhados pelo mesmo conjunto de vhostnames. Por isso decidi manter dessa forma.

O servidor DNS pode ter algum tipo de limitação de taxa. Por isso adicionei atrasos aleatórios (entre 0-300ms) para resolução de IPv4 por consulta. Isso é para não fazer com que o servidor DNS receba todas as consultas de uma vez, mas sim de uma forma mais natural. Para o método de força bruta, o valor padrão está entre 0-1000ms, mas pode ser alterado usando a opção --rps | -t.
Uma limitação particular que me incomoda é que o resolvedor DNS não retorna todos os IPs para um domínio. Portanto, é necessário fazer várias consultas para obter todos (ou a maioria) dos IPs. Mas, novamente, não é possível saber quantos IPs existem para um domínio. Ainda preciso encontrar uma solução para isso. Além disso, o nim-ndns não suporta registros CNAME. Portanto, se um domínio tiver um registro CNAME, ele não será resolvido. Estou aguardando uma resposta do autor para isso.
Por enquanto, a força bruta é ignorada se um possível subdomínio curinga for encontrado. Isso porque, se um domínio tiver um subdomínio curinga, a força bruta resolverá IPv4 para todos os subdomínios possíveis. No entanto, isso também ignorará subdomínios válidos (ou seja, scanme.nmap.org será ignorado mesmo não sendo um valor curinga). Adicionarei uma opção --force-brute | -fb posteriormente para forçar a força bruta.
Algo semelhante é verdade para a enumeração de VHost para entradas de subdomínio. Como as URLs que terminam com o subdomínio fornecido são retornadas, subdomínios de domínios semelhantes não são considerados. Por exemplo, scannme.nmap.org não será impresso para ack.nmap.org, mas something.ack.nmap.org pode ser. Posso pesquisar por todos os subdomínios de nmap.org, mas isso anula o propósito de ter um subdomínio como entrada.
Licença MIT. Veja LICENSE para o texto completo.
--dns | -da.b.c.d - Usa o servidor DNS em a.b.c.d na porta 53a.b.c.d#n - Usa o servidor DNS em a.b.c.d na porta e--wordlist | -l - Caminho para o arquivo de wordlist. Usado para força bruta de subdomínios. Se o arquivo for inválido, a força bruta será ignorada. Você pode obter uma wordlist no SecLists. Uma wordlist também é fornecida na página de releases.--rps | -r - Número de requisições por segundo durante a força bruta. O valor padrão é 1024 req/s. Note que as consultas DNS são feitas em lotes e o próximo lote só é iniciado após o término do anterior. Como as consultas podem ser limitadas (rate limited), aumentar o valor nem sempre garante resultados mais rápidos.--out | -o - Caminho para o arquivo de saída. A saída será salva no formato JSON. O nome do arquivo deve terminar com .json.