John the Ripper
基本の使い方
unshadow
/etc/passwd
と/etc/shadow
のどちらも入手できる場合はunshadow
で2つのファイルを結合したものに対してJohnを実行できる。
Rule Based Attack
Intro
TryHackMeのCrack The Hash Level 2でJohnのRule Based Attackを使う機会があったのでまとめる。
基本的にJohn the RipperやHashcatなどパスワードクラッキングに使用されるツールでは、パスワードに使用されることが多い単語がリスト化されたもの(いわゆる「辞書」)を利用するが、たいていは辞書にそのまま載っているパスワードは当たらない。なので次にどんな単語を用意しようと考えたときに、辞書に記載されている単語に数字を足してみたり、大文字・小文字変換をしてみたり、Leet表記を使用してみたりと、辞書の単語に一定のルールをもって変換を加える。
しかしながらディスクスペースを圧迫してしまうことや汎用性の観点から、辞書内の単語をルールで変換して生成した大量の単語を静的なファイルとして用意するのはよろしくない。そこで辞書内の単語を一定の規則で変化させるルールを、JohnやHashcat実行時に与えることができる。
JohnでRule Based Attackを使用する際には、以下のように--rules
オプションを与える。
ここに登場するRULENAME
は自身でJohnの設定ファイルに定義したルールの名称。
ルールを作成する
Johnの設定ファイルを編集して、外部の設定ファイルをIncludeすることができる。
ルールの本体を書く。以下でルールの例を記載しているが、c
は先頭だけ大文字にするコマンド、u
はすべて大文字にするコマンド、l
はすべて小文字にするコマンド。コマンドの一覧はこのあとの「ルールに使用できるコマンド一覧」を参照すること。
ひとつのルールの中に複数のコマンドを使用することができるが、改行を入れたパターンと入れないパターンでは生成される単語のリストが異なる点に注意。
ルールに使用できるコマンド一覧
文字を変換するコマンド
コマンド | 効果 | 入力 | ルールの例 | 生成される単語 |
---|---|---|---|---|
: | 何もしない | example | : | example |
c | 最初を大文字にする(capitalize) | example | c | Example |
C | 最初を小文字に、他は大文字にする | example | C | eXAMPLE |
V | 母音は小文字に、子音は大文字に | example | V | eXaMPLe |
R | キーボードの右隣のキーに変換する | exampl3 | R | rcs,[;4 |
L | キーボードの左隣のキーに変換する | exampl3 | L | wzanok2 |
l | すべて小文字にする(lowercase) | EXAMPLE | l | example |
u | すべて大文字にする(uppercase) | example | u | EXAMPLE |
t | すべての小文字は大文字に、大文字は小文字にする(toggle) | ExAmPlE | t | eXaMpLe |
TN | N 番目の文字について、小文字は大文字に、大文字は小文字にする(toggle N) | ExAmPlE | T3 | ExAMPlE |
WN | N 番目の文字について、Shiftを押しながら入力したときの文字に変換する | exampl3 | W6 | exampl# |
S | すべての文字について、Shiftを押しながら入力したときの文字に変換する | exampl3 | S | EXAMPL# |
r | 文字列を逆にする(reverse) | example | W6 | elpmaxe |
{ | 文字列を左にローテートする | example | { | xamplee |
} | 文字列を右にローテートする | example | { | eexampl |
文字列に追加/削除するコマンド
コマンド | 効果 | 入力 | ルールの例 | 生成される単語 |
---|---|---|---|---|
d | 文字列を複製する(duplicate) | example | d | exampleexample |
pN | 文字列をN 回複製する(duplicate N) | example | p3 | exampleexampleexampleexample |
zN | 最初の文字をN 回複製する | example | z3 | eeeexample |
q | すべての文字を複製する | example | q | eexxaammppllee |
f | 逆にした文字列を追加する(reflect) | example | f | exampleelpmaxe |
$ | 文字を末尾に追加する | example | $1 | example1 |
^ | 文字を先頭に追加する | example | ^1 | 1example |
[ | 最初の文字を削除する | example | [ | xample |
] | 最後の文字を削除する | example | ] | exampl |
'N | N 番目以降の文字を削除する | example | '3 | exa |
DN | N 番目の文字を削除する(Delete) | example | D3 | exaple |
xNM | N 番目から始まるM 文字を抽出する(Extract) | example | x14 | xamp |
ONM | N 番目から始まるM 文字を削除する(Omit) | example | x14 | ele |
iNX | N 番目に文字X を挿入する(insert) | example | i2@ | ex@ample |
oNX | N 番目を文字X で置換する(overwrite) | example | o2@ | ex@mple |
sXY | すべての文字X を文字Y で置換する | example | se$ | 3xampl3 |
@X | すべての文字X を削除する | example | @e | xampl |
英単語の操作をするコマンド
コマンド | 効果 | 入力 | ルールの例 | 生成される単語 |
---|---|---|---|---|
p | 単語に複数形のsをつける(pluralize) | crack | p | cracks |
P | 単語に過去形のd/edをつける | crack | P | cracked |
I | 単語を名詞化するingをつける | crack | I | cracking |
ルールを適用する条件を設定するコマンド - 文字列の長さ編
コマンド | 効果 | 入力 | ルールの例 | 生成される単語 |
---|---|---|---|---|
<L | 長さL より短い文字列にルールを適用する | example | c<9 | EXAMPLE |
>L | 長さL より長い文字列にルールを適用する | example | c>3 | EXAMPLE |
_L | 長さL の文字列にルールを適用する | example | c_7 | EXAMPLE |
単語を保存したり、保存した単語を活用するコマンド
コマンド | 効果 | 入力 | ルールの例 | 生成される単語 |
---|---|---|---|---|
M | 左からコマンドを適用していったその時点での単語を保存する | example | M | example |
4 | M で保存した単語を末尾に追加する | example | uM4 | exampleEXAMPLE |
6 | M で保存した単語を先頭に追加する | example | uM6 | EXAMPLEexample |
XNLI | 保存した単語のN 番目から長さL を取り出しI 番目に挿入する | example | MuX253 | EXAampleMPLE |