
Lepus es una herramienta para enumerar subdominios, verificar la posibilidad de toma de control de subdominios y realizar escaneos de puertos. ¡Y vaya que es rápida!
lepus.py yahoo.com
Los modos de enumeración son las diferentes formas que Lepus utiliza para identificar subdominios de un dominio dado. Estos modos son:
Además:
El modo Colectores recopila subdominios de los siguientes servicios:
Puedes añadir tus claves de API en el archivo config.ini.
El módulo de Colectores se ejecutará por defecto en Lepus. Si no deseas usar los colectores durante una ejecución de Lepus (para no agotar los límites de tus claves de API), puedes usar el argumento -nc o --no-collectors.
El modo diccionario se puede usar cuando quieras proporcionar a Lepus una lista de subdominios. Puedes usar el argumento -w o --wordlist seguido del archivo. Una lista personalizada viene con Lepus ubicada en lists/subdomains.txt. Un ejemplo de ejecución sería:
lepus.py -w lists/subdomains.txt yahoo.com
El modo Permutaciones realiza cambios en la lista de subdominios que han sido identificados. Para cada subdominio, se realizarán una serie de permutaciones basadas en el archivo lists/words.txt. También puedes proporcionar una lista de palabras personalizada para las permutaciones con el argumento -pw o --permutation-wordlist, seguido del nombre del archivo. Un ejemplo de ejecución sería:
lepus.py --permutate yahoo.com
o
lepus.py --permutate -pw customsubdomains.txt yahoo.com
El modo DNS Inverso recopilará todas las direcciones IP que se resolvieron y realizará un DNS inverso en cada una para detectar más subdominios. Por ejemplo, si www.example.com resuelve a 1.2.3.4, Lepus realizará un DNS inverso para 1.2.3.4 y recopilará cualquier otro subdominio perteneciente a example.com, por ejemplo, www2, internal o oldsite.
Para ejecutar el módulo de DNS Inverso usa el argumento --reverse. Además, se puede usar --ripe (o -ripe) para indicar al módulo que consulte la base de datos de RIPE usando el dominio de segundo nivel para posibles rangos de red. Además, Lepus soporta el argumento --ranges (o -r). Puedes usarlo para realizar resoluciones DNS inversas contra CIDR que pertenezcan al dominio objetivo.
Por defecto, este módulo tomará en cuenta todas las IPs previamente identificadas, luego los rangos definidos y luego los rangos identificados a través de la base de datos de RIPE. En caso de que solo quieras ejecutar el módulo contra rangos específicos o identificados por RIPE, y no contra todas las IPs ya identificadas, puedes usar el argumento --only-ranges (-or).
Un ejemplo de ejecución sería:
lepus.py --reverse yahoo.com
o
lepus.py --reverse -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
o solo contra los rangos definidos o identificados por RIPE
lepus.py --reverse -or -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
Sugerencia: Lepus identificará ASNs y Redes durante la enumeración, por lo que también puedes usar estos rangos para identificar más subdominios en una ejecución posterior.
Con este módulo, Lepus utilizará cadenas de Markov para entrenarse y luego generar subdominios basados en los ya conocidos. Cuanto mayor sea la superficie general, mejor podrá la herramienta entrenarse y, posteriormente, mejores serán los resultados.
El módulo se puede activar con el argumento --markovify. Los parámetros también incluyen el tamaño del estado de Markov, la longitud máxima de la adición candidata generada y la cantidad de candidatos generados. Los valores predefinidos son 3, 5 y 5 respectivamente. Esos argumentos se pueden cambiar con -ms (--markov-state), -ml (--markov-length) y -mq (--markov-quantity) según tus necesidades. Ten en cuenta que cuanto mayores sean estos valores, más tiempo necesitará Lepus para generar los candidatos.
Cabe señalar que diferentes ejecuciones de este módulo pueden generar candidatos diferentes, así que siéntete libre de ejecutarlo varias veces consecutivas. Ten en cuenta que cuanto más altos sean los valores de -ms, -ml y -mq, más tiempo se necesitará para la generación de candidatos.
lepus.py --markovify yahoo.com
o
lepus.py --markovify -ms 5 -ml 10 -mq 10
Lepus tiene una lista de firmas para identificar si un dominio puede ser tomado. Puedes usarlo proporcionando el argumento --takeover. Este módulo también soporta notificaciones de Slack, una vez que se haya identificado una posible toma de control, añadiendo un token de Slack en el archivo config.ini. Las comprobaciones se realizan contra los siguientes servicios:
El módulo de escaneo de puertos verificará los puertos abiertos contra un objetivo y los registrará en los resultados. Puedes usar el argumento --portscan, que por defecto escaneará los puertos 80, 443, 8000, 8080, 8443. También puedes usar puertos personalizados o elegir un conjunto predefinido de puertos.
| Conjunto de puertos | Puertos |
|---|---|
| small | 80, 443 |
| medium (por defecto) | 80, 443, 8000, 8080, 8443 |
Un ejemplo de ejecución sería:
lepus.py --portscan yahoo.com
o
lepus.py --portscan -p huge yahoo.com
o
lepus.py --portscan -p 80,443,8082,65123 yahoo.com
Instalación normal:
$ python3.7 -m pip install -r requirements.txt
Preferiblemente instalar en un virtualenv:
$ pyenv virtualenv 3.7.4 lepus
$ pyenv activate lepus
$ pip install -r requirements.txt
Instalando la última versión de Python en 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
Infrastructure OSINT
positional arguments:
domain dominio a buscar
optional arguments:
-h, --help muestra este mensaje de ayuda y sale
-w WORDLIST, --wordlist WORDLIST
lista de palabras con subdominios
-hw, --hide-wildcards
ocultar resoluciones comodín
-t THREADS, --threads THREADS
número de hilos [por defecto es 100]
-nc, --no-collectors saltar la enumeración pasiva de subdominios
-zt, --zone-transfer intentar transferencia de zona desde los servidores de nombres identificados
--permutate realizar permutaciones en los dominios resueltos
-pw PERMUTATION_WORDLIST, --permutation-wordlist PERMUTATION_WORDLIST
lista de palabras para realizar permutaciones [por defecto es lists/words.txt]
--reverse realizar consultas DNS inversas en direcciones IP públicas resueltas
-ripe, --ripe consultar la base de datos de RIPE con el dominio de segundo nivel
para redes que se usarán en las consultas inversas
-r RANGES, --ranges RANGES
rangos de IP separados por comas para realizar consultas DNS inversas
-or, --only-ranges usar solo los rangos proporcionados con -r o -ripe y no todas las IPs identificadas previamente
--portscan escanear direcciones IP públicas resueltas en busca de puertos abiertos
-p PORTS, --ports PORTS
conjunto de puertos a usar por el módulo de escaneo de puertos
[por defecto es medium]
--takeover verificar los hosts identificados en busca de posibles tomas de control de subdominios
--markovify usar cadenas de Markov para identificar más subdominios
-ms MARKOV_STATE, --markov-state MARKOV_STATE
tamaño del estado de Markov [por defecto es 3]
-ml MARKOV_LENGTH, --markov-length MARKOV_LENGTH
longitud máxima de las sustituciones de Markov [por defecto es 5]
-mq MARKOV_QUANTITY, --markov-quantity MARKOV_QUANTITY
cantidad máxima de resultados de Markov por longitud de candidato [por defecto es 5]
-f, --flush purgar todos los registros del dominio especificado de la base de datos
-v, --version mostrar el número de versión del programa y salir
El siguiente es un ejemplo de ejecución con todos los argumentos activos 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
El siguiente comando vacía todas las entradas de la base de datos para un dominio específico:
./lepus.py python.org --flush
| Servicio | API Requerida |
|---|
| 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 |