😀

任意サイトのサブドメインを列挙する

2021/09/28に公開

何?

あるサイトのサブドメインを探して列挙したい。
例えばexample.comならftp.example.comws3.example.comなどがサブドメインに当たる。
調べたところいくつかツールがヒットした。その中でもsublist3rがシンプルで良かったので紹介する。

sublist3r

aboul3la/Sublist3rは、各検索エンジンのクローラが拾ったレコードからサブドメインを検索し列挙するコマンド。(メンテされてるか微妙だが2020-03-25現在使用できた。)

インストールは:

Terminal
# pypiには第三者がアップロードしているので本家repoから
$ git clone https://github.com/aboul3la/Sublist3r && cd Sublist3r
$ pip install -r requirements.txt
$ pip install -e .
$ sublist3r --help
Help
usage: sublist3r [-h] -d DOMAIN [-b [BRUTEFORCE]] [-p PORTS] [-v [VERBOSE]] [-t THREADS]
                 [-e ENGINES] [-o OUTPUT] [-n]

OPTIONS:
  -h, --help            show this help message and exit
  -d DOMAIN, --domain DOMAIN
                        Domain name to enumerate it's subdomains
  -b [BRUTEFORCE], --bruteforce [BRUTEFORCE]
                        Enable the subbrute bruteforce module
  -p PORTS, --ports PORTS
                        Scan the found subdomains against specified tcp ports
  -v [VERBOSE], --verbose [VERBOSE]
                        Enable Verbosity and display results in realtime
  -t THREADS, --threads THREADS
                        Number of threads to use for subbrute bruteforce
  -e ENGINES, --engines ENGINES
                        Specify a comma-separated list of search engines
  -o OUTPUT, --output OUTPUT
                        Save the results to text file
  -n, --no-color        Output without color

Example: python /home/eggplants/.local/bin/sublist3r -d google.com

実際に列挙

sublist3r -d <domain>で実行できる。プレーンテキストで保存するには-o <filename>を使う。

今回は筑波大学のドメインtsukuba.ac.jpで試してみる。

Terminal
$ LANG=C date
Thu Mar 25 11:25:01 JST 2021 
$ sublist3r -d tsukuba.ac.jp -o subdomains.txt
...()...
$ wc -l subdomains.txt
13876

結果はこちら

応用

Terminal
# 自己責任で
$ (echo 'url,res_code,content_type,res_time'
  cat subdomains.txt | xargs -n 1 -P 5 -I@ \
  curl "@" -m 2 -s -o /dev/null \
       -w "@,%{http_code},%{content_type},%{time_starttransfer}s\n" | sort) > res.csv
# httpでなにか配信されているものの列挙
$ (sed 1\!d res.csv;grep -v ,, res.csv | grep ,200,) > res_200.csv
$ echo $[`wc -l<res_200.csv`-1]
279
# httpsとかへの転送(301)
$ (sed 1\!d res.csv;grep -v ,, res.csv | grep ,301,) > res_301.csv
$ echo $[`wc -l<res_301.csv`-1]
180

結果はこちら
またこれらの処理をまとめたスクリプトを書いた。

結論

お手軽。

GitHubで編集を提案

Discussion