
Lepus ist ein Werkzeug zum Aufzählen von Subdomains, zum Prüfen auf Subdomain-Übernahmen und zum Durchführen von Portscans – und es ist verdammt schnell!
lepus.py yahoo.com
Die Aufzählungsmodi sind verschiedene Wege, die lepus verwendet, um Subdomains für eine bestimmte Domain zu identifizieren. Diese Modi sind:
Darüber hinaus:
Der Sammler-Modus sammelt Subdomains von folgenden Diensten:
Sie können Ihre API-Schlüssel in der Datei config.ini hinzufügen.
Das Sammler-Modul wird standardmäßig bei lepus ausgeführt. Wenn Sie die Sammler während eines lepus-Laufs nicht verwenden möchten (um Ihre API-Schlüssel-Limits nicht zu erschöpfen), können Sie das Argument -nc oder --no-collectors verwenden.
Der Wörterbuch-Modus kann verwendet werden, wenn Sie lepus eine Liste von Subdomains bereitstellen möchten. Sie können das Argument -w oder --wordlist gefolgt von der Datei verwenden. Eine benutzerdefinierte Liste wird mit lepus unter lists/subdomains.txt mitgeliefert. Ein Beispielaufruf wäre:
lepus.py -w lists/subdomains.txt yahoo.com
Der Permutationen-Modus führt Änderungen an der Liste der identifizierten Subdomains durch. Für jede Subdomain wird eine Reihe von Permutationen basierend auf der Datei lists/words.txt durchgeführt. Sie können auch eine benutzerdefinierte Wortliste für Permutationen mit dem Argument -pw oder --permutation-wordlist gefolgt vom Dateinamen angeben. Ein Beispielaufruf wäre:
lepus.py --permutate yahoo.com
oder
lepus.py --permutate -pw customsubdomains.txt yahoo.com
Der Reverse-DNS-Modus sammelt alle aufgelösten IP-Adressen und führt auf jeder eine reverse DNS-Abfrage durch, um weitere Subdomains zu erkennen. Wenn zum Beispiel www.example.com auf 1.2.3.4 aufgelöst wird, führt lepus eine reverse DNS-Abfrage für 1.2.3.4 durch und sammelt alle anderen Subdomains, die zu example.com gehören, wie z. B. www2, internal oder oldsite.
Verwenden Sie das Argument --reverse, um das Reverse-DNS-Modul auszuführen. Zusätzlich kann --ripe (oder -ripe) verwendet werden, um das Modul anzuweisen, die RIPE-Datenbank mit der Second-Level-Domain nach möglichen Netzwerkbereichen abzufragen. Darüber hinaus unterstützt lepus das Argument --ranges (oder -r). Sie können es verwenden, um Reverse-DNS-Abfragen gegen CIDRs durchzuführen, die zur Zieldomain gehören.
Standardmäßig berücksichtigt dieses Modul alle zuvor identifizierten IPs, dann definierte Bereiche, dann durch die RIPE-Datenbank identifizierte Bereiche. Falls Sie das Modul nur gegen bestimmte oder von RIPE identifizierte Bereiche ausführen möchten, und nicht gegen alle bereits identifizierten IPs, können Sie das Argument --only-ranges (-or) verwenden.
Ein Beispielaufruf wäre:
lepus.py --reverse yahoo.com
oder
lepus.py --reverse -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
oder nur gegen die definierten oder von RIPE identifizierten Bereiche
lepus.py --reverse -or -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
Hinweis: lepus wird während der Aufzählung ASNs und Netzwerke identifizieren, sodass Sie diese Bereiche auch verwenden können, um mit einem nachfolgenden Durchlauf weitere Subdomains zu identifizieren.
Mit diesem Modul nutzt Lepus Markov-Ketten, um sich selbst zu trainieren und dann Subdomains basierend auf den bereits bekannten zu generieren. Je größer die allgemeine Oberfläche, desto besser kann sich das Werkzeug trainieren und desto besser sind die Ergebnisse.
Das Modul kann mit dem Argument --markovify aktiviert werden. Zu den Parametern gehören auch die Markov-Zustandsgröße, die maximale Länge der generierten Kandidatenergänzung und die Anzahl der generierten Kandidaten. Voreingestellte Werte sind 3, 5 bzw. 5. Diese Argumente können mit -ms (--markov-state), -ml (--markov-length) und -mq (--markov-quantity) an Ihre Bedürfnisse angepasst werden. Beachten Sie, dass mit größeren Werten Lepus mehr Zeit für die Generierung der Kandidaten benötigt.
Es ist zu beachten, dass verschiedene Ausführungen dieses Moduls unterschiedliche Kandidaten generieren können. Führen Sie es daher ruhig mehrmals hintereinander aus. Denken Sie daran: Je höher die Werte von -ms, -ml und -mq, desto mehr Zeit wird für die Kandidatengenerierung benötigt.
lepus.py --markovify yahoo.com
oder
lepus.py --markovify -ms 5 -ml 10 -mq 10
Lepus verfügt über eine Liste von Signaturen, um zu identifizieren, ob eine Domain übernommen werden kann. Sie können es verwenden, indem Sie das Argument --takeover angeben. Dieses Modul unterstützt auch Slack-Benachrichtigungen, sobald eine potenzielle Übernahme identifiziert wurde, indem Sie einen Slack-Token in der Datei config.ini hinzufügen. Die Prüfungen werden gegen die folgenden Dienste durchgeführt:
Das Port-Scan-Modul prüft offene Ports gegen ein Ziel und protokolliert sie in den Ergebnissen. Sie können das Argument --portscan verwenden, das standardmäßig die Ports 80, 443, 8000, 8080, 8443 scannt. Sie können auch benutzerdefinierte Ports verwenden oder einen vordefinierten Portsatz wählen.
| Portsatz | Ports |
|---|---|
| small | 80, 443 |
| medium (Standard) | 80, 443, 8000, 8080, 8443 |
Ein Beispielaufruf wäre:
lepus.py --portscan yahoo.com
oder
lepus.py --portscan -p huge yahoo.com
oder
lepus.py --portscan -p 80,443,8082,65123 yahoo.com
Normale Installation:
$ python3.7 -m pip install -r requirements.txt
Vorzugsweise in einer Virtualenv installieren:
$ pyenv virtualenv 3.7.4 lepus
$ pyenv activate lepus
$ pip install -r requirements.txt
Aktuelles Python auf Debian installieren:
$ 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
Infrastructure OSINT
positional arguments:
domain zu durchsuchende Domain
optional arguments:
-h, --help zeigt diese Hilfemeldung an und beendet das Programm
-w WORDLIST, --wordlist WORDLIST
Wörterliste mit Subdomains
-hw, --hide-wildcards
Wildcard-Auflösungen ausblenden
-t THREADS, --threads THREADS
Anzahl der Threads [Standard ist 100]
-nc, --no-collectors passive Subdomain-Aufzählung überspringen
-zt, --zone-transfer versuchen, Zonentransfer von identifizierten Nameservern durchzuführen
--permutate Permutationen auf aufgelösten Domains durchführen
-pw PERMUTATION_WORDLIST, --permutation-wordlist PERMUTATION_WORDLIST
Wörterliste für Permutationen [Standard ist lists/words.txt]
--reverse Reverse-DNS-Abfragen auf aufgelösten öffentlichen IP-Adressen durchführen
-ripe, --ripe RIPE-Datenbank mit der Second-Level-Domain abfragen,
um Netzwerke für Reverse-Abfragen zu verwenden
-r RANGES, --ranges RANGES
durch Komma getrennte IP-Bereiche für Reverse-DNS-Abfragen
-or, --only-ranges nur die mit -r oder -ripe angegebenen Bereiche verwenden,
nicht alle zuvor identifizierten IPs
--portscan aufgelöste öffentliche IP-Adressen auf offene Ports scannen
-p PORTS, --ports PORTS
Portsatz für das Portscann-Modul [Standard ist medium]
--takeover identifizierte Hosts auf potenzielle Subdomain-Übernahmen prüfen
--markovify Markov-Ketten verwenden, um weitere Subdomains zu identifizieren
-ms MARKOV_STATE, --markov-state MARKOV_STATE
Größe des Markov-Zustands [Standard ist 3]
-ml MARKOV_LENGTH, --markov-length MARKOV_LENGTH
maximale Länge der Markov-Ersetzungen [Standard ist 5]
-mq MARKOV_QUANTITY, --markov-quantity MARKOV_QUANTITY
maximale Anzahl von Markov-Ergebnissen pro Kandidatenlänge [Standard ist 5]
-f, --flush alle Einträge der angegebenen Domain aus der Datenbank löschen
-v, --version Programmversionsnummer anzeigen und beenden
Das Folgende ist ein Beispiellauf mit allen verfügbaren aktiven Argumenten:
./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
Der folgende Befehl löscht alle Datenbankeinträge für eine bestimmte Domain:
./lepus.py python.org --flush
| Service | API erforderlich |
|---|
| Censys | Ja |
| CertSpotter | Nein |
| CRT | Nein |
| DNSTrails | Ja |
| FOFA | Ja |
| Google Transparency | Nein |
| HackerTarget | Nein |
| PassiveTotal | Ja |
| Project Discovery Chaos | Ja |
| Project Crobat | Nein |
| Project Sonar | Nein |
| Riddler | Ja |
| Shodan | Ja |
| Spyse | Ja |
| ThreatCrowd | Nein |
| ThreatMiner | Nein |
| VirusTotal | Ja |
| Wayback Machine | Nein |
| ZoomEye | Ja |
| 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 |