
Lepus — это инструмент для перечисления поддоменов, проверки возможности перехвата поддоменов и сканирования портов — и, чёрт возьми, он быстр!
lepus.py yahoo.com
Режимы перечисления — это различные способы, которые lepus использует для идентификации поддоменов для заданного домена. Эти режимы:
Кроме того:
Режим сборщиков собирает поддомены из следующих сервисов:
Вы можете добавить свои ключи API в файл config.ini.
Модуль сборщиков будет запускаться по умолчанию в lepus. Если вы не хотите использовать сборщики во время выполнения lepus (чтобы не исчерпать лимиты ключей API), вы можете использовать аргумент -nc или --no-collectors.
Режим словаря можно использовать, когда вы хотите предоставить lepus список поддоменов. Вы можете использовать аргумент -w или --wordlist, за которым следует имя файла. С lepus поставляется собственный список, расположенный в lists/subdomains.txt. Пример запуска:
lepus.py -w lists/subdomains.txt yahoo.com
Режим перестановок выполняет изменения в списке идентифицированных поддоменов. Для каждого поддомена выполняется ряд перестановок на основе файла lists/words.txt. Вы также можете предоставить собственный файл со словами для перестановок с помощью аргумента -pw или --permutation-wordlist, после которого указывается имя файла. Пример запуска:
lepus.py --permutate yahoo.com
или
lepus.py --permutate -pw customsubdomains.txt yahoo.com
Режим обратного DNS собирает все IP-адреса, которые были разрешены, и выполняет обратный DNS-запрос для каждого из них, чтобы обнаружить больше поддоменов. Например, если www.example.com разрешается в 1.2.3.4, lepus выполнит обратный DNS для 1.2.3.4 и соберёт любые другие поддомены, принадлежащие example.com, например www2, internal или oldsite.
Чтобы запустить модуль обратного DNS, используйте аргумент --reverse. Кроме того, можно использовать --ripe (или -ripe), чтобы указать модулю запрашивать базу данных RIPE, используя домен второго уровня для поиска возможных сетевых диапазонов. Более того, lepus поддерживает аргумент --ranges (или -r). Вы можете использовать его для выполнения обратных DNS-запросов к CIDR, принадлежащим целевому домену.
По умолчанию этот модуль учитывает все ранее определённые IP-адреса, затем заданные диапазоны, затем диапазоны, определённые через базу данных RIPE. Если вы хотите запустить модуль только для указанных или определённых через RIPE диапазонов, а не для всех уже определённых IP-адресов, используйте аргумент --only-ranges (-or).
Пример запуска:
lepus.py --reverse yahoo.com
или
lepus.py --reverse -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
или только для определённых или определённых через RIPE диапазонов
lepus.py --reverse -or -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
Подсказка: lepus будет идентифицировать ASN и Сети во время перечисления, поэтому вы также можете использовать эти диапазоны для обнаружения дополнительных поддоменов при последующем запуске.
С помощью этого модуля Lepus будет использовать цепи Маркова для самообучения и последующей генерации поддоменов на основе уже известных. Чем больше общая поверхность, тем лучше инструмент сможет обучиться и, соответственно, тем лучше будут результаты.
Модуль активируется аргументом --markovify. Параметры также включают размер состояния Маркова, максимальную длину сгенерированного кандидата и количество генерируемых кандидатов. Предопределённые значения — 3, 5 и 5 соответственно. Эти аргументы можно изменить с помощью -ms (--markov-state), -ml (--markov-length) и -mq (--markov-quantity) в соответствии с вашими потребностями. Имейте в виду, что чем больше эти значения, тем больше времени потребуется Lepus для генерации кандидатов.
Следует отметить, что разные выполнения этого модуля могут порождать разных кандидатов, поэтому не стесняйтесь запускать его несколько раз подряд. Имейте в виду, что чем выше значения -ms, -ml и -mq, тем больше времени потребуется для генерации кандидатов.
lepus.py --markovify yahoo.com
или
lepus.py --markovify -ms 5 -ml 10 -mq 10
Lepus имеет список сигнатур для определения возможности перехвата домена. Вы можете использовать его, указав аргумент --takeover. Этот модуль также поддерживает уведомления Slack после обнаружения потенциального перехвата, добавив токен Slack в файл config.ini. Проверки выполняются для следующих сервисов:
Модуль сканирования портов проверяет открытые порты на целевом хосте и записывает их в результаты. Вы можете использовать аргумент --portscan, который по умолчанию сканирует порты 80, 443, 8000, 8080, 8443. Вы также можете использовать пользовательские порты или выбрать предопределённый набор портов.
| Набор портов | Порты |
|---|---|
| small | 80, 443 |
| medium (по умолчанию) | 80, 443, 8000, 8080, 8443 |
Пример запуска:
lepus.py --portscan yahoo.com
или
lepus.py --portscan -p huge yahoo.com
или
lepus.py --portscan -p 80,443,8082,65123 yahoo.com
Обычная установка:
$ python3.7 -m pip install -r requirements.txt
Предпочтительно установка в virtualenv:
$ pyenv virtualenv 3.7.4 lepus
$ pyenv activate lepus
$ pip install -r requirements.txt
Установка последней версии Python на 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 домен для поиска
optional arguments:
-h, --help показать это справочное сообщение и выйти
-w WORDLIST, --wordlist WORDLIST
файл со списком поддоменов
-hw, --hide-wildcards
скрыть wildcard-разрешения
-t THREADS, --threads THREADS
количество потоков [по умолчанию 100]
-nc, --no-collectors пропустить пассивное перечисление поддоменов
-zt, --zone-transfer попытаться выполнить передачу зоны от определённых серверов имён
--permutate выполнить перестановки для разрешённых доменов
-pw PERMUTATION_WORDLIST, --permutation-wordlist PERMUTATION_WORDLIST
файл со списком слов для перестановок [по умолчанию lists/words.txt]
--reverse выполнить обратные DNS-запросы к разрешённым общедоступным IP-адресам
-ripe, --ripe запросить базу данных RIPE с доменом второго уровня
для сетей, используемых для обратных запросов
-r RANGES, --ranges RANGES
диапазоны IP через запятую для выполнения обратных DNS-запросов
-or, --only-ranges использовать только диапазоны, указанные с -r или -ripe, а не все ранее определённые IP
--portscan сканировать разрешённые общедоступные IP-адреса на наличие открытых портов
-p PORTS, --ports PORTS
набор портов, используемых модулем сканирования портов
[по умолчанию medium]
--takeover проверить определённые хосты на возможность перехвата поддоменов
--markovify использовать цепи Маркова для обнаружения дополнительных поддоменов
-ms MARKOV_STATE, --markov-state MARKOV_STATE
размер состояния Маркова [по умолчанию 3]
-ml MARKOV_LENGTH, --markov-length MARKOV_LENGTH
максимальная длина подстановок Маркова [по умолчанию 5]
-mq MARKOV_QUANTITY, --markov-quantity MARKOV_QUANTITY
максимальное количество результатов Маркова на длину кандидата [по умолчанию 5]
-f, --flush удалить все записи указанного домена из базы данных
-v, --version показать номер версии программы и выйти
Ниже приведён пример запуска со всеми доступными активными аргументами:
./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
Следующая команда очищает все записи базы данных для определённого домена:
./lepus.py python.org --flush
| Сервис | Требуется API |
|---|
| 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 |