Lepus 是一个用于枚举子域名、检测子域名接管风险并执行端口扫描的工具——而且速度飞快!
lepus.py yahoo.com
枚举模式是 Lepus 用于识别给定域名的子域名的不同方法。这些模式包括:
此外:
收集器模式从以下服务收集子域名:
你可以在 config.ini 文件中添加你的 API 密钥。
收集器模块默认会在 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 地址,并对每个 IP 执行反向 DNS 查找,以发现更多子域名。例如,如果 www.example.com 解析为 1.2.3.4,Lepus 会对 1.2.3.4 执行反向 DNS,收集属于 example.com 的其他子域名,比如 www2、internal 或 oldsite。
要运行反向 DNS 模块,请使用 --reverse 参数。此外,--ripe(或 -ripe)可以用来指示模块使用二级域名查询 RIPE 数据库以获得潜在的网络范围。另外,Lepus 支持 --ranges(或 -r)参数。你可以用它来针对属于目标域名的 CIDR 范围进行反向 DNS 解析。
默认情况下,此模块会考虑所有之前识别的 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 通知,一旦发现潜在的接管,你可以在 config.ini 文件中添加 Slack token 来接收通知。检测涉及以下服务:
端口扫描模块会检查目标的开放端口并将结果记录在日志中。你可以使用 --portscan 参数,默认情况下会扫描 80、443、8000、8080、8443 端口。你也可以自定义端口,或选择预定义的端口集合。
| 端口集合 | 端口号 |
|---|---|
| small | 80, 443 |
| medium (默认) | 80, 443, 8000, 8080, 8443 |
| large |
示例运行:
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
在 Debian 上安装最新版 Python:
$ 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 隐藏通配符解析结果
-t THREADS, --threads THREADS
线程数 [默认是 100]
-nc, --no-collectors 跳过被动子域名枚举
-zt, --zone-transfer 尝试针对已识别的域名服务器进行区域传输
--permutate 对已解析的域名执行排列操作
-pw PERMUTATION_WORDLIST, --permutation-wordlist PERMUTATION_WORDLIST
用于排列操作的字典 [默认是 lists/words.txt]
--reverse 对已解析的公网 IP 地址执行反向 DNS 查询
-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 |
|---|
| 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 |