
サブドメインファインダー
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アドレスを収集し、各IPに対してリバースDNSを実行してさらに多くのサブドメインを検出します。たとえば、www.example.com が 1.2.3.4 に解決された場合、Lepusは 1.2.3.4 に対してリバースDNSを実行し、example.com に属する他のサブドメイン(例: www2、internal、oldsite)を収集します。
リバースDNSモジュールを実行するには、--reverse 引数を使用します。さらに、--ripe(または -ripe)を使用すると、第2レベルドメインを使用して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 引数を指定して使用できます。このモジュールは、config.ini ファイルにSlackトークンを追加することで、潜在的な乗っ取りが識別された場合にSlack通知もサポートしています。チェックは次のサービスに対して行われます:
ポートスキャンモジュールは、ターゲットに対して開いているポートをチェックし、結果に記録します。--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
仮想環境にインストールすることを推奨:
$ 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 リバースルックアップに使用するネットワークを取得するために、
第2レベルドメインでRIPEデータベースに問い合わせ
-r RANGES, --ranges RANGES
リバースDNSルックアップを実行するカンマ区切りのIP範囲
-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 |