John the Ripperとかでパスワードクラックをする際に使われる辞書ファイルなのだが、ある程度パスワードに使われている文字が推測できている状況の場合、通常の辞書ファイルだと余分なパスワードもいっぱいあって処理に時間がかかる。 「ある程度推測できているパスワードだけど、文字の順番入れ替えたりしてるだけのリストがほしい」という時は、パスワードなどのワードリスト生成用のツールである『crunch』コマンドというものを使うといいようだ。

1. インストール

ペネトレーションテスト時に使われるものなので、KaliLinuxには最初から入っている様子。 CentOS などにインストールをする場合は、以下のコマンドを実行する。

wget https://downloads.sourceforge.net/project/crunch-wordlist/crunch-wordlist/crunch-3.6.tgz
tar xzvf crunch-3.6.tgz
cd crunch-3.6
make && make install

Debian/UbuntuやOS Xの場合は、以下でもインストールできる。

sudo apt install -y crunch # Debian/Ubuntu系の場合
brew install crunch # OS Xの場合

2. 使い方

使い方は簡単で、以下のようにコマンドを実行する。

crunch <出力文字列の最短の長さ> <出力文字列の最長の長さ> [options] [<使用する文字列>]

主なオプションは以下。

  • -b … -oで出力先ファイルが指定されている場合、出力ファイルのサイズを指定する
  • -c … -oで出力先ファイルが指定されている場合、出力ファイルの行数を指定する
  • -d … 重複する文字の数を制限する
  • -f … charset.lstファイルを指定して文字列を生成する
  • -i … 単語リストの文字の順序を逆転させる
  • -I … -t使用時に、@%^をそのまま解釈できるようになる
  • -o PATH … 生成した文字列を指定されたPATHに出力する
  • -p … 繰り返し文字を含まずに生成する(-sとの併用不可)
  • -q … 指定されたファイルから文字列を生成する(-pと同様、一度使用した文字は使わない)
  • -r … 前回実行した際のコマンドを再開する(-sとの併用不可)
  • -s … ワードリストを開始する特定の文字列を指定する
  • -t … @、%^の特定のパターンを設定する
  • -z … 出力ワードリストファイルを-oと一緒に圧縮する

基本的には、-pあたりを覚えておけばよいだろう。 例えば、-pを使うことで文字の順序を入れ替えただけの値を得ることができる。

[root@BS-PUB-CENT7-01 ~]# crunch 3 3 -p abc
Crunch will now generate approximately the following amount of data: 24 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 6
abc
acb
bac
bca
cab
cba

これがないと、渡した文字すべての組み合わせを総当たりで出力してしまう。 以下のようなワンライナーで、ブレース展開使って無理やりやるのと変わらなくなるので注意。

TEST=$(echo test) && eval echo  $(eval echo $(echo $TEST | xargs -I@ sh -c 'echo \"{$(echo @ | sed "s/./&,/g;s/.$//g")}\"{$(echo @ | sed "s/./,/g;s/.$//g")}') | tr -d ' ' ) | tr ' ' '\n' | sort | uniq | wc -l