web-dev-qa-db-ja.com

クランチを使用するが、文字のような単語を使用する

単語と2桁の数字を含む単語リストを生成したいと思います。 15password15、password15、15passwordのようにクランチでシャッフルしたい...

クランチでそれを行う方法はありますか、または別のスクリプトが必要ですか?

1
s3lcuk

ユースケースに応じて、いくつかのオプションがあります。

  • 内容を細かく制御したいが、多くの順列も必要な場合は、(コメントで既に示唆されているように)自分でスクリプトを作成することが唯一の方法かもしれません。

  • それ以外の場合、hashcatファミリーのツールを使用して、特定の要素数までの可能なすべての順列を生成できます。特に「charsのような単語を使用する」という質問のタイトルの一般的な使用例では、 princeprocessor が効果的な選択肢です。

少なくとも、スクリプトを使用して可能な2桁の数字をすべて生成し、そのリストを他の辞書と組み合わせて、さまざまな組み合わせを生成するツールにそれらをフィードする必要があるようです。これを行うにはいくつかの方法があります。

いくつかの例で使用するファイルを以下に示します。

$ cat - >words.list
password
qwerty
iloveyou

$ seq -w 1 99 >digits.list

$ head -1 digits.list
01

$ tail -1 digits.list
99

文字列のリストをすべての可能な組み合わせに組み合わせることが、パスワードクラッカーが通常combinator attackと呼ぶものです。この攻撃の一部の変種は、各要素を2回または3回組み合わせるだけですが、要素数の範囲を探しているように見えます。それ以外の場合、combinatorおよび hashcat-utils のcombinator3はリストを生成できます。

$ combinator words.list digits.list | head -5
password01
password02
password03
password04
password05

$ combinator3 digits.list words.list digits.list | head -5
01password01
01password02
01password03
01password04
01password05

特定の位置(末尾または先頭)で可能なすべての数値を反復処理する必要があるだけの場合、ハイブリッド攻撃(ワードリスト+マスク)動作し、ハッシュキャットの--stdoutリストを生成するオプション:

$ hashcat --stdout -a 6 words.list ?d?d | head -5
password12
password08
password20
password31
password98

$ hashcat --stdout -a 7 ?d?d words.list | head -5
12password
08password
20password
31password
98password

ただし、結果ごとに3つ以上の要素が必要な場合(「1515password15」、「passwordpassword1515」、「15password15password」などの文字列)は、これらのアプローチの2要素または3要素の文字列あたりの制限にぶつかります。 。

構成について少しリラックスしたい場合、つまり、一部の文字列が「013522」などの数字のみのシーケンスまたは数字をまったく含まない単語でよい場合は、 princeprocessorpp64)、 そのようです:

$ cat words.list | pp64 | tail -5
iloveyouquerty
passwordpassword
iloveyoupassword
passwordiloveyou
iloveyouiloveyou

princeprocessorは、指定した要素数まで、可能なすべての順列を生成します。

潜在的な問題の1つは、princeprocessorが最初に短い文字列を優先して出力を並べ替えようとするため、単語のヒットを開始する前に多くの数値を取得することです。

$ cat digits.list words.list | pp64 | head -100000000 | tail -5
07743573
08743573
09743573
10743573
11743573

内容をより詳細に制御したい場合-たとえば、結果の文字列すべてに非数字のセットが少なくとも1つ含まれている必要がある場合は、grepで結果をフィルター処理します。

$ cat digits.list words.list | pp64 | egrep [a-z] | head
password
iloveyou
01qwerty
02qwerty
03qwerty
04qwerty
05qwerty
06qwerty
07qwerty
08qwerty
09qwerty
10qwerty


$ cat digits.list words.list | pp64 | egrep [a-z] | egrep [0-9] | head -5000 | tail
4145qwerty
4245qwerty
4345qwerty
4445qwerty
4545qwerty
4645qwerty
4745qwerty
4845qwerty
4945qwerty
5045qwerty

両方のリストから少なくとも1つの要素を保証する結果だけが必要で、可変数の要素も必要な場合は、princeprocessorからの出力をフィルタリングするのが私が知る最良の方法です。

grepを使用してprinceprocessorからの出力をフィルタリングすることは、少しの回避策です(各リストから少なくとも1つの要素が必要であることをネイティブに理解するツールがないため)。私の知る限り、それがあなたのユースケースである場合、新しい開発が必要になります(独自のスクリプトを作成するか、princeprocessorソースを変更する)。

1
Royce Williams