
Lepus é uma ferramenta para enumerar subdomínios, verificar possibilidade de tomada de subdomínios e realizar varreduras de portas – e, rapaz, como é rápida!
lepus.py yahoo.com
Os modos de enumeração são diferentes maneiras que o lepus usa para identificar subdomínios para um determinado domínio. Esses modos são:
Além disso:
O modo Coletores coleta subdomínios dos seguintes serviços:
Você pode adicionar suas chaves de API no arquivo config.ini.
O módulo Coletores será executado por padrão no lepus. Se você não quiser usar os coletores durante uma execução do lepus (para não esgotar os limites da sua chave de API), utilize o argumento -nc ou --no-collectors.
O modo dicionário pode ser usado quando você quiser fornecer ao lepus uma lista de subdomínios. Você pode usar o argumento -w ou --wordlist seguido pelo arquivo. Uma lista personalizada acompanha o lepus, localizada em lists/subdomains.txt. Um exemplo de execução seria:
lepus.py -w lists/subdomains.txt yahoo.com
O modo Permutações realiza alterações na lista de subdomínios que foram identificados. Para cada subdomínio, um número de permutações ocorrerá com base no arquivo lists/words.txt. Você também pode fornecer uma wordlist personalizada para permutações com o argumento -pw ou --permutation-wordlist, seguido pelo nome do arquivo. Um exemplo de execução seria:
lepus.py --permutate yahoo.com
ou
lepus.py --permutate -pw customsubdomains.txt yahoo.com
O modo DNS Reverso irá coletar todos os endereços IP que foram resolvidos e realizar um DNS reverso em cada um deles para detectar mais subdomínios. Por exemplo, se www.example.com resolver para 1.2.3.4, o lepus realizará um DNS reverso para 1.2.3.4 e coletará quaisquer outros subdomínios pertencentes a example.com, como www2, internal ou oldsite.
Para executar o módulo DNS Reverso, use o argumento --reverse. Adicionalmente, --ripe (ou -ripe) pode ser usado para instruir o módulo a consultar o banco de dados RIPE usando o domínio de segundo nível para faixas de rede potenciais. Além disso, o lepus suporta o argumento --ranges (ou -r). Você pode usá-lo para fazer resoluções de DNS reverso contra CIDRs que pertencem ao domínio alvo.
Por padrão, este módulo levará em conta todos os IPs previamente identificados, depois as faixas definidas e depois as faixas identificadas através do banco RIPE. Caso você queira executar o módulo apenas contra faixas específicas ou identificadas pelo RIPE, e não contra todos os IPs já identificados, utilize o argumento --only-ranges (-or).
Um exemplo de execução seria:
lepus.py --reverse yahoo.com
ou
lepus.py --reverse -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
ou apenas contra as faixas definidas ou identificadas pelo RIPE
lepus.py --reverse -or -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
Dica: o lepus identificará ASNs e Redes durante a enumeração, então você também pode usar essas faixas para identificar mais subdomínios em uma execução subsequente.
Com este módulo, o Lepus utilizará cadeias de Markov para se treinar e então gerar subdomínios com base nos já conhecidos. Quanto maior a superfície geral, melhor a ferramenta conseguirá se treinar e, consequentemente, melhores serão os resultados.
O módulo pode ser ativado com o argumento --markovify. Os parâmetros também incluem o tamanho do estado de Markov, o comprimento máximo da adição candidata gerada e a quantidade de candidatos gerados. Os valores predefinidos são 3, 5 e 5 respectivamente. Esses argumentos podem ser alterados com -ms (--markov-state), -ml (--markov-length) e -mq (--markov-quantity) para atender às suas necessidades. Lembre-se de que quanto maiores esses valores, mais tempo o Lepus precisará para gerar os candidatos.
Vale notar que diferentes execuções deste módulo podem gerar candidatos diferentes, então sinta-se à vontade para executá-lo algumas vezes consecutivas. Lembre-se de que quanto maiores os valores de -ms, -ml e -mq, mais tempo será necessário para a geração de candidatos.
lepus.py --markovify yahoo.com
ou
lepus.py --markovify -ms 5 -ml 10 -mq 10
O Lepus possui uma lista de assinaturas para identificar se um domínio pode ser tomado. Você pode usá-lo fornecendo o argumento --takeover. Este módulo também suporta notificações do Slack, uma vez que uma potencial tomada tenha sido identificada, adicionando um token do Slack no arquivo config.ini. As verificações são feitas contra os seguintes serviços:
O módulo de varredura de portas verificará portas abertas contra um alvo e as registrará nos resultados. Você pode usar o argumento --portscan, que por padrão irá escanear as portas 80, 443, 8000, 8080, 8443. Você também pode usar portas personalizadas ou escolher um conjunto predefinido de portas.
| Conjunto de portas | Portas |
|---|---|
| small | 80, 443 |
| medium (padrão) | 80, 443, 8000, 8080, 8443 |
Um exemplo de execução seria:
lepus.py --portscan yahoo.com
ou
lepus.py --portscan -p huge yahoo.com
ou
lepus.py --portscan -p 80,443,8082,65123 yahoo.com
Instalação normal:
$ python3.7 -m pip install -r requirements.txt
Preferencialmente instale em um virtualenv:
$ pyenv virtualenv 3.7.4 lepus
$ pyenv activate lepus
$ pip install -r requirements.txt
Instalando a versão mais recente do Python no 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 domínio a ser pesquisado
optional arguments:
-h, --help mostra esta mensagem de ajuda e sai
-w WORDLIST, --wordlist WORDLIST
wordlist com subdomínios
-hw, --hide-wildcards
ocultar resoluções wildcard
-t THREADS, --threads THREADS
número de threads [padrão é 100]
-nc, --no-collectors ignorar enumeração passiva de subdomínios
-zt, --zone-transfer tentar transferência de zona a partir dos servidores de nomes identificados
--permutate realizar permutações nos domínios resolvidos
-pw PERMUTATION_WORDLIST, --permutation-wordlist PERMUTATION_WORDLIST
wordlist para realizar permutações [padrão é lists/words.txt]
--reverse realizar consultas DNS reversas nos endereços IP públicos resolvidos
-ripe, --ripe consultar o banco de dados RIPE com o domínio de segundo nível
para redes a serem usadas em consultas reversas
-r RANGES, --ranges RANGES
faixas de IP separadas por vírgula para realizar consultas DNS reversas
-or, --only-ranges usar apenas faixas fornecidas com -r ou -ripe e não todos os IPs previamente identificados
--portscan escanear endereços IP públicos resolvidos em busca de portas abertas
-p PORTS, --ports PORTS
conjunto de portas a ser usado pelo módulo de varredura de portas
[padrão é medium]
--takeover verificar hosts identificados para potenciais tomadas de subdomínio
--markovify usar cadeias de Markov para identificar mais subdomínios
-ms MARKOV_STATE, --markov-state MARKOV_STATE
tamanho do estado de Markov [padrão é 3]
-ml MARKOV_LENGTH, --markov-length MARKOV_LENGTH
comprimento máximo das substituições de Markov [padrão é 5]
-mq MARKOV_QUANTITY, --markov-quantity MARKOV_QUANTITY
quantidade máxima de resultados de Markov por comprimento de candidato [padrão é 5]
-f, --flush limpar todos os registros do domínio especificado do banco de dados
-v, --version mostra o número da versão do programa e sai
A seguir, um exemplo de execução com todos os argumentos ativos disponíveis:
./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
O comando a seguir limpa todas as entradas do banco de dados para um domínio específico:
./lepus.py python.org --flush
| Serviço | Requer API |
|---|
| Censys | Sim |
| CertSpotter | Não |
| CRT | Não |
| DNSTrails | Sim |
| FOFA | Sim |
| Google Transparency | Não |
| HackerTarget | Não |
| PassiveTotal | Sim |
| Project Discovery Chaos | Sim |
| Project Crobat | Não |
| Project Sonar | Não |
| Riddler | Sim |
| Shodan | Sim |
| Spyse | Sim |
| ThreatCrowd | Não |
| ThreatMiner | Não |
| VirusTotal | Sim |
| Wayback Machine | Não |
| ZoomEye | Sim |
| 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 |