
Lepus est un outil pour énumérer les sous-domaines, vérifier les prises de contrôle de sous-domaines et effectuer des scans de ports – et il est rapide, c'est le cas de le dire !
lepus.py yahoo.com
Les modes d'énumération sont les différentes façons dont lepus utilise pour identifier les sous-domaines pour un domaine donné. Ces modes sont :
De plus :
Le mode Collecteurs collecte les sous-domaines à partir des services suivants :
Vous pouvez ajouter vos clés API dans le fichier config.ini.
Le module Collecteurs s'exécutera par défaut sur lepus. Si vous ne souhaitez pas utiliser les collecteurs lors d'une exécution de lepus (pour ne pas épuiser vos limites de clés API), vous pouvez utiliser l'argument -nc ou --no-collectors.
Le mode dictionnaire peut être utilisé lorsque vous souhaitez fournir à lepus une liste de sous-domaines. Vous pouvez utiliser l'argument -w ou --wordlist suivi du fichier. Une liste personnalisée est fournie avec lepus, située dans lists/subdomains.txt. Un exemple d'exécution serait :
lepus.py -w lists/subdomains.txt yahoo.com
Le mode Permutations effectue des modifications sur la liste des sous-domaines identifiés. Pour chaque sous-domaine, un certain nombre de permutations aura lieu en fonction du fichier lists/words.txt. Vous pouvez également fournir une wordlist personnalisée pour les permutations avec l'argument -pw ou --permutation-wordlist, suivi du nom du fichier. Un exemple d'exécution serait :
lepus.py --permutate yahoo.com
ou
lepus.py --permutate -pw customsubdomains.txt yahoo.com
Le mode ReverseDNS rassemblera toutes les adresses IP résolues et effectuera un DNS inversé sur chacune d'elles afin de détecter plus de sous-domaines. Par exemple, si www.example.com résout en 1.2.3.4, lepus effectuera un DNS inversé pour 1.2.3.4 et rassemblera tous les autres sous-domaines appartenant à example.com, par exemple www2, internal ou oldsite.
Pour exécuter le module ReverseDNS, utilisez l'argument --reverse. De plus, --ripe (ou -ripe) peut être utilisé pour demander au module d'interroger la base de données RIPE en utilisant le domaine de second niveau pour les plages réseau potentielles. De plus, lepus prend en charge l'argument --ranges (ou -r). Vous pouvez l'utiliser pour effectuer des résolutions DNS inversées contre les CIDR appartenant au domaine cible.
Par défaut, ce module prendra en compte toutes les IP précédemment identifiées, puis les plages définies, puis les plages identifiées via la base de données RIPE. Si vous souhaitez exécuter le module uniquement contre des plages spécifiques ou identifiées par RIPE, et non contre toutes les IP déjà identifiées, vous pouvez utiliser l'argument --only-ranges (-or).
Un exemple d'exécution serait :
lepus.py --reverse yahoo.com
ou
lepus.py --reverse -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
ou uniquement contre les plages définies ou identifiées par RIPE
lepus.py --reverse -or -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
Astuce : lepus identifiera les ASN et les Réseaux pendant l'énumération, vous pouvez donc également utiliser ces plages pour identifier plus de sous-domaines avec une exécution ultérieure.
Avec ce module, Lepus utilisera les chaînes de Markov afin de s'entraîner, puis de générer des sous-domaines basés sur ceux déjà connus. Plus la surface générale est grande, mieux l'outil pourra s'entraîner et, par conséquent, meilleurs seront les résultats.
Le module peut être activé avec l'argument --markovify. Les paramètres incluent également la taille de l'état de Markov, la longueur maximale de l'ajout de candidat généré et la quantité de candidats générés. Les valeurs prédéfinies sont respectivement 3, 5 et 5. Ces arguments peuvent être modifiés avec -ms (--markov-state), -ml (--markov-length) et -mq (--markov-quantity) selon vos besoins. Gardez à l'esprit que plus ces valeurs sont grandes, plus Lepus aura besoin de temps pour générer les candidats.
Il est à noter que différentes exécutions de ce module peuvent générer des candidats différents, n'hésitez donc pas à l'exécuter plusieurs fois consécutivement. Gardez à l'esprit que plus les valeurs -ms, -ml et -mq sont élevées, plus le temps nécessaire à la génération de candidats sera long.
lepus.py --markovify yahoo.com
ou
lepus.py --markovify -ms 5 -ml 10 -mq 10
Lepus dispose d'une liste de signatures pour identifier si un domaine peut être pris en contrôle. Vous pouvez l'utiliser en fournissant l'argument --takeover. Ce module prend également en charge les notifications Slack, une fois qu'une prise de contrôle potentielle a été identifiée, en ajoutant un token Slack dans le fichier config.ini. Les vérifications sont effectuées contre les services suivants :
Le module de scan de ports vérifiera les ports ouverts sur une cible et les enregistrera dans les résultats. Vous pouvez utiliser l'argument --portscan qui, par défaut, analysera les ports 80, 443, 8000, 8080, 8443. Vous pouvez également utiliser des ports personnalisés ou choisir un ensemble prédéfini de ports.
| Ensemble de ports | Ports |
|---|---|
| small | 80, 443 |
| medium (par défaut) | 80, 443, 8000, 8080, 8443 |
Un exemple d'exécution serait :
lepus.py --portscan yahoo.com
ou
lepus.py --portscan -p huge yahoo.com
ou
lepus.py --portscan -p 80,443,8082,65123 yahoo.com
Installation normale :
$ python3.7 -m pip install -r requirements.txt
De préférence, installez dans un virtualenv :
$ pyenv virtualenv 3.7.4 lepus
$ pyenv activate lepus
$ pip install -r requirements.txt
Installation du dernier python sur debian :
$ apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget
$ curl -O https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
$ tar -xf Python-3.7.4.tar.xz
$ cd Python-3.7.4
$ ./configure --enable-optimizations --enable-loadable-sqlite-extensions
$ make
$ make altinstall
usage: lepus.py [-h] [-w WORDLIST] [-hw] [-t THREADS] [-nc] [-zt]
[--permutate] [-pw PERMUTATION_WORDLIST] [--reverse]
[-r RANGES] [--portscan] [-p PORTS] [--takeover] [--markovify]
[-ms MARKOV_STATE] [-ml MARKOV_LENGTH] [-mq MARKOV_QUANTITY]
[-f] [-v]
domain
OSINT d'infrastructure
arguments positionnels :
domain domaine à rechercher
arguments optionnels :
-h, --help affiche ce message d'aide et quitte
-w WORDLIST, --wordlist WORDLIST
wordlist avec les sous-domaines
-hw, --hide-wildcards
masquer les résolutions wildcard
-t THREADS, --threads THREADS
nombre de threads [par défaut 100]
-nc, --no-collectors ignorer l'énumération passive de sous-domaines
-zt, --zone-transfer tenter un transfert de zone à partir des serveurs de noms identifiés
--permutate effectuer des permutations sur les domaines résolus
-pw PERMUTATION_WORDLIST, --permutation-wordlist PERMUTATION_WORDLIST
wordlist pour effectuer les permutations [par défaut lists/words.txt]
--reverse effectuer des recherches DNS inversées sur les adresses IP publiques résolues
-ripe, --ripe interroger la base de données ripe avec le domaine de 2ème niveau pour les réseaux à utiliser pour les recherches inversées
-r RANGES, --ranges RANGES
plages IP séparées par des virgules sur lesquelles effectuer des recherches DNS inversées
-or, --only-ranges utiliser uniquement les plages fournies avec -r ou -ripe et non toutes les IP précédemment identifiées
--portscan analyser les adresses IP publiques résolues pour les ports ouverts
-p PORTS, --ports PORTS
ensemble de ports à utiliser par le module de scan [par défaut medium]
--takeover vérifier les hôtes identifiés pour des prises de contrôle potentielles de sous-domaines
--markovify utiliser les chaînes de Markov pour identifier plus de sous-domaines
-ms MARKOV_STATE, --markov-state MARKOV_STATE
taille de l'état de Markov [par défaut 3]
-ml MARKOV_LENGTH, --markov-length MARKOV_LENGTH
longueur maximale des substitutions de Markov [par défaut 5]
-mq MARKOV_QUANTITY, --markov-quantity MARKOV_QUANTITY
quantité maximale de résultats de Markov par longueur de candidat [par défaut 5]
-f, --flush supprimer toutes les entrées du domaine spécifié dans la base de données
-v, --version affiche le numéro de version du programme et quitte
Ce qui suit est un exemple d'exécution avec tous les arguments actifs disponibles :
./lepus.py python.org --wordlist lists/subdomains.txt --permutate -pw ~/mypermsword.lst --reverse -ripe -r 10.11.12.0/24 --portscan -p huge --takeover --markovify -ms 3 -ml 10 -mq 10
La commande suivante vide toutes les entrées de la base de données pour un domaine spécifique :
./lepus.py python.org --flush
| Service | API Requise |
|---|
| Censys | Oui |
| CertSpotter | Non |
| CRT | Non |
| DNSTrails | Oui |
| FOFA | Oui |
| Google Transparency | Non |
| HackerTarget | Non |
| PassiveTotal | Oui |
| Project Discovery Chaos | Oui |
| Project Crobat | Non |
| Project Sonar | Non |
| Riddler | Oui |
| Shodan | Oui |
| Spyse | Oui |
| ThreatCrowd | Non |
| ThreatMiner | Non |
| VirusTotal | Oui |
| Wayback Machine | Non |
| ZoomEye | Oui |
| large | 80, 81, 443, 591, 2082, 2087, 2095, 2096, 3000, 8000, 8001, 8008, 8080, 8083, 8443, 8834, 8888, 9000, 9090, 9443 |
| huge | 80, 81, 300, 443, 591, 593, 832, 981, 1010, 1311, 2082, 2087, 2095, 2096, 2480, 3000, 3128, 3333, 4243, 4567, 4711, 4712, 4993, 5000, 5104, 5108, 5800, 6543, 7000, 7396, 7474, 8000, 8001, 8008, 8014, 8042, 8069, 8080, 8081, 8088, 8090, 8091, 8118, 8123, 8172, 8222, 8243, 8280, 8281, 8333, 8443, 8500, 8834, 8880, 8888, 8983, 9000, 9043, 9060, 9080, 9090, 9091, 9200, 9443, 9800, 9943, 9980, 9981, 12443, 16080, 18091, 18092, 20720, 28017 |