
Un outil rapide et complet pour le scan de réseaux organisationnels.
Fonctionnalités • Utilisation • Installation • Utilisation • Contribuer • Notes supplémentaires
Domainim est un outil de reconnaissance rapide de domaines pour le scan réseau d'une organisation. L'outil vise à fournir un aperçu rapide de la structure d'une organisation en utilisant des techniques comme l'OSINT, le bruteforcing, la résolution DNS, etc.
Fonctionnalités actuelles (v1.0.1)-

Énumération de noms d'hôtes virtuels
Recherche DNS inverse
Détection des sous-domaines wildcard (pour le bruteforcing)
Scan de ports TCP de base
Les sous-domaines sont acceptés comme entrée
Exportation des résultats vers un fichier JSON
Quelques fonctionnalités sont en cours de développement. Voir Fonctionnalités prévues pour plus de détails.
Le projet est inspiré par Sublist3r. Le module de scan de ports est largement basé sur NimScan.
Vous pouvez compiler ce dépôt à partir des sources-
git clone [email protected]:pptx704/domainim
nimble build
./domainim <domain> [--ports=<ports>]
Ou, vous pouvez simplement télécharger le binaire depuis la page des versions. Gardez à l'esprit que le binaire est testé uniquement sur les systèmes basés sur Debian.
./domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | l:<filename> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
<domain> est le domaine à énumérer. Il peut aussi être un sous-domaine.--ports | -p est une spécification textuelle des ports à scanner. Il peut être l'un des suivants-
all - Scanner tous les ports (1-65535)none - Ignorer le scan de ports (par défaut)t<n> - Scanner les n premiers ports (comme nmap). Par exemple t100 scanne les 100 premiers ports. Valeur max 5000. Si n est supérieur à 5000, il sera fixé à 5000.80 scanne le port 8080-100 scanne les ports de 80 à 10080,443,8080 scanne les ports 80, 443 et 808080,443,8080-8090,t500 scanne les ports 80, 443, 8080 à 8090 et les 500 premiers portsExemples
./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.1Le menu d'aide peut être consulté avec ./domainim --help ou ./domainim -h.
Usage:
domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | l:<filename> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
domainim (-h | --help)
Options:
-h, --help Afficher cet écran.
-p, --ports Ports à scanner. [default: `none`]
Peut être `all`, `none`, `t<n>`, une valeur unique, une plage, une combinaison
-l, --wordlist Liste de mots pour le bruteforcing de sous-domaines. Ignoré si le fichier est invalide.
-d, --dns IP et port du résolveur DNS. Doit être une IPv4 valide avec un port optionnel [default: système par défaut]
-r, --rps Requêtes DNS par seconde [default: 1024 req/s]
-o, --out Fichier JSON où la sortie sera sauvegardée. Le nom doit se terminer par `.json`
Exemples:
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
Le schéma JSON pour les résultats est le suivant-
[
{
"subdomain": string,
"data": [
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
]
}
]
Un exemple de JSON pour nmap.org peut être trouvé ici.
Les contributions sont les bienvenues. N'hésitez pas à ouvrir une pull request ou un issue.
Ce projet en est encore à ses débuts. Plusieurs limitations sont connues.
Les deux moteurs que j'utilise (je les appelle moteurs car Sublist3r fait de même) ont actuellement une sorte de limite de réponse. dnsdumpster peut récupérer jusqu'à 100 sous-domaines. crt.sh randomise également les résultats en cas de trop grand nombre. Un autre problème avec crt.sh est qu'il renvoie parfois une erreur SQL. Donc pour certains domaines, les résultats peuvent être différents entre deux exécutions. Je prévois d'ajouter plus de moteurs à l'avenir (au moins un moteur de brute force).
Le scanner de ports a un délai d'attente de temps de réponse ping + 750 ms seulement. Cela peut entraîner des faux négatifs. Comme domainim n'est pas conçu pour le scan de ports mais pour fournir un aperçu rapide, de tels cas sont acceptables. Cependant, je prévois d'ajouter un indicateur pour augmenter le délai d'attente. Pour la même raison, les ports filtrés ne sont pas affichés. Pour un scan de ports plus complet, je recommande d'utiliser Nmap. Domainim ne contourne pas non plus la limitation de débit (si elle existe).
Il peut sembler que la manière d'afficher les noms d'hôtes virtuels entraîne des répétitions.

Afficher comme suit aurait peut-être été mieux-
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.
Mais lors de tests précédents, j'ai rencontré des cas où tous les IPs n'étaient pas partagés par le même ensemble de noms d'hôtes virtuels. C'est pourquoi j'ai décidé de conserver cette présentation.

Le serveur DNS peut avoir une forme de limitation de débit. C'est pourquoi j'ai ajouté des délais aléatoires (entre 0 et 300 ms) pour la résolution IPv4 par requête. Cela évite que le serveur DNS reçoive toutes les requêtes en même temps, mais plutôt de manière plus naturelle. Pour la méthode de bruteforcing, la valeur est entre 0 et 1000 ms par défaut, mais cela peut être modifié avec l'indicateur --rps | -t.
Une limitation particulière qui me gêne est que le résolveur DNS ne renvoie pas toutes les IPs d'un domaine. Il est donc nécessaire d'effectuer plusieurs requêtes pour obtenir toutes (ou la plupart) des IPs. Mais encore une fois, il n'est pas possible de savoir combien d'IPs existent pour un domaine. Je dois encore trouver une solution à ce problème. De plus, nim-ndns ne prend pas en charge les enregistrements CNAME. Donc, si un domaine a un enregistrement CNAME, il ne sera pas résolu. J'attends une réponse de l'auteur à ce sujet.
Pour l'instant, le bruteforcing est ignoré si un sous-domaine wildcard possible est trouvé. En effet, si un domaine a un sous-domaine wildcard, le bruteforcing résoudra l'IPv4 pour tous les sous-domaines possibles. Cependant, cela ignorera également les sous-domaines valides (par exemple, scanme.nmap.org sera ignoré même s'il ne s'agit pas d'une valeur wildcard). J'ajouterai plus tard un indicateur --force-brute | -fb pour forcer le bruteforcing.
Un problème similaire existe pour l'énumération des hôtes virtuels pour les entrées de sous-domaines. Comme les URLs se terminant par les sous-domaines donnés sont renvoyées, les sous-domaines de domaines similaires ne sont pas pris en compte. Par exemple, scannme.nmap.org ne sera pas affiché pour ack.nmap.org mais something.ack.nmap.org pourrait l'être. Je pourrais rechercher tous les sous-domaines de nmap.org, mais cela irait à l'encontre de l'objectif d'avoir un sous-domaine comme entrée.
Licence MIT. Voir LICENSE pour le texte complet.
--dns | -da.b.c.d - Utiliser le serveur DNS à a.b.c.d sur le port 53a.b.c.d#n - Utiliser le serveur DNS à a.b.c.d sur le port e--wordlist | -l - Chemin vers le fichier de liste de mots. Utilisé pour le bruteforcing des sous-domaines. Si le fichier est invalide, le bruteforcing sera ignoré. Vous pouvez obtenir une liste de mots depuis SecLists. Une liste de mots est également fournie dans la page des versions.--rps | -r - Nombre de requêtes par seconde pendant le bruteforcing. La valeur par défaut est 1024 req/s. Il est à noter que les requêtes DNS sont effectuées par lots et que le lot suivant n'est effectué qu'une fois le précédent terminé. Étant donné que les requêtes peuvent être limitées en débit, augmenter la valeur ne garantit pas des résultats plus rapides.--out | -o - Chemin vers le fichier de sortie. La sortie sera sauvegardée au format JSON. Le nom du fichier doit se terminer par .json.