Skip to content

Lab 3.5: Hashcatによるパスワードクラッキング

オフライン演習

接続性: これはオフライン演習です。この演習のためにターゲットネットワークに接続する必要はありません。インターネットアクセスが必要です。

目的

  • HashcatをWindowsおよびLinuxシステムのパスワードハッシュのクラッキングに使用する
  • Hashcatルールファイルがハッシュのクラッキングをより成功させる方法を分析する

Walkthrough Video

Lab セットアップ

使用するVM:

  • Linux

以前にこのLabを実行したことがある場合は、クリーンアップを実行しましょう。JtRとHashcatのpotファイルを削除します。

コマンド

rm /pentest/password-recovery/hashcat/hashcat.potfile

このコマンドには出力がありません。ファイルがクリーンアップされている場合、エラーが表示されます。このエラーは問題ありません。

Lab – ステップバイステップ手順

1: Hashcatの基本

Hashcatに--helpオプションを付けて起動し、Hashcatの組み込みドキュメントを表示しましょう。かなり長いため、lessにパイプしてページングしましょう:

コマンド

hashcat --help | less

Hashcatのコマンドラインフラグをページ送りして確認しましょう。ここには非常に多くのオプションがあります。このLabでは、最も有用なものをいくつか探索します。

出力から、Hashcatには-mの後に*hash-type*が必要であることがわかります。これは、クラッキングできる275種類以上のハッシュタイプから選択する番号です。まもなくいくつかの特定のハッシュタイプを探索します。しかし、それを見る前に、attack mode(攻撃モード)の-aオプションを検討しましょう。これは、Hashcatが辞書をどのように/使用するかどうかを意味します。-aオプションは以下の値をサポートします:

  • 0: Straight(ストレート)。このモードは、辞書の単語をそのまま使用し、-rオプション(存在する場合)で指定されたルールを適用します。例: letmeinおよびpassword
  • 1: Combination(組み合わせ)。このモードは、辞書内の各単語を辞書内の各単語に追加し、単語ファイルからの潜在的なパスワードの数を本質的に2乗します。また、-rオプション(存在する場合)で示されたルールを結果の組み合わせた単語に適用します。例: letmeinpasswordおよびpasswordletmein
  • 3: Brute Force(ブルートフォース)。このモードは、指定されたキースペース内のすべての潜在的なパスワードを試し、すべての文字を反復処理します。例: 000000010002など
  • 6: Hybrid + Mask(ハイブリッド + マスク)。このモードは辞書を使用しますが、その後ブルートフォースコンポーネントを追加します。例: letmein0000password0000letmein0001など

このLabでの作業では、最も単純で一般的な攻撃形式として-a 0を使用します。Labの後半では、-rオプションを使用して、辞書に対して単語のマングリングを行うルールを指定しますが、攻撃タイプ0を引き続き適用します。

次に、-mオプションで使用するものを示すために、特定のハッシュタイプに関連付けられた特定の番号を検索しましょう。Hashcatのヘルプの出力をgrepにパイプして、いくつかの一般的なハッシュタイプを探すことができます。Hashcatの最新ビルドでは、すべてを--helpに含めるのではなく、ハッシュタイプを-hhに移動しました。Hashcatによって*LM*と省略される*LANMAN*ハッシュを探すことから始めましょう:

コマンド

hashcat --help | grep "Hash Modes"
hashcat -hh | grep LM

想定される結果

sec560@560vm:~$ hashcat --help | grep "Hash Modes"
- [ Hash Modes ] -
please use -hh to show all supported Hash Modes
sec560@560vm:~$ hashcat -hh | grep LM
5500 | NetNTLMv1 / NetNTLMv1+ESS                                  | Network Protocol
27000 | NetNTLMv1 / NetNTLMv1+ESS (NT)                             | Network Protocol
5600 | NetNTLMv2                                                  | Network Protocol
27100 | NetNTLMv2 (NT)                                             | Network Protocol
3000 | LM                                                         | Operating System
1000 | NTLM                                                       | Operating System
25500 | Stargazer Stellar Wallet XLM                               | Cryptocurrency Wallet
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ [A-Z]

出力には、3000 | LM...という行が表示されるはずです。これは、LMハッシュをクラッキングするために、Hashcatを-m 3000で呼び出すことを示しています。また、grepしたLMに一致するため、ここの出力でHashcatがNTLMv1およびNTLMv2に関連付ける番号も確認できます。

ソルト付きMD5 Linuxハッシュ(md5cryptとも呼ばれる)をクラッキングするために必要なハッシュタイプ番号を決定するには、次を実行してください:

コマンド

hashcat -hh | grep md5crypt

想定される結果

sec560@560vm:~$ hashcat -hh | grep md5crypt
    500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)                  | Operating System

ここでは、"Operating Systems"(オペレーティングシステム)に関連付けられているこれらのハッシュをクラッキングするために、Hashcatを-m 500で呼び出す必要があることがわかります。

最後に、*SHA512*ハッシュを指定する方法を確認しましょう。

コマンド

hashcat -hh | grep sha512

想定される結果

sec560@560vm:~$ hashcat -hh | grep sha512
1770 | sha512(utf16le($pass))                                     | Raw Hash
1710 | sha512($pass.$salt)                                        | Raw Hash salted and/or iterated
1720 | sha512($salt.$pass)                                        | Raw Hash salted and/or iterated
1740 | sha512($salt.utf16le($pass))                               | Raw Hash salted and/or iterated
32410 | sha512(sha512($pass).$salt)                                | Raw Hash salted and/or iterated
32420 | sha512(sha512_bin($pass).$salt)                            | Raw Hash salted and/or iterated
1730 | sha512(utf16le($pass).$salt)                               | Raw Hash salted and/or iterated
6500 | AIX {ssha512}                                              | Operating System
1800 | sha512crypt $6$, SHA512 (Unix)                             | Operating System
28400 | bcrypt(sha512($pass)) / bcryptsha512                       | Forums, CMS, E-Commerce
21600 | Web2py pbkdf2-sha512                                       | Framework
20200 | Python passlib pbkdf2-sha512                               | Framework
21000 | BitShares v0.x - sha512(sha512_bin(pass))                  | Cryptocurrency Wallet

オペレーティングシステム内の*SHA512*パスワードの場合、Hashcatは-m 1800を使用することがわかります。

それでは、*LM*ハッシュ用の-m 3000から始めて、パフォーマンスベンチマークを実行しましょう。-w 3フラグを付けてHashcatを呼び出すことに注意してください。これは、Workload Profile(-w)番号3が必要であることを意味します。-wのさまざまなオプションには以下が含まれます:

  • 1: Low(低)。GUIパフォーマンスへの影響が最小限で、低消費電力
  • 2: Default(デフォルト)。GUIへの顕著な影響と経済的な消費電力
  • 3: High(高)。高消費電力で、GUIが応答しない可能性がある
  • 4: Nightmare(悪夢)。異常な消費電力で、GUIが応答するのに十分なCPUまたはGPUがないため、ヘッドレスサーバー

このLabでは、約30%高いパフォーマンスを合理的に得られることが多く、GUIがLabを実施するのに十分応答性があるため、-w 3を使用します。

次に、一般的なハッシュアルゴリズムに対するHashcatのパフォーマンス測定を実行しましょう。

コマンド

hashcat -w 3 --benchmark -m 3000

想定される結果

sec560@560vm:~$ hashcat -w 3 --benchmark -m 3000
hashcat (v6.2.6) starting in benchmark mode

VMware: No 3D enabled (0, Success).
OpenCL API (OpenCL 3.0 PoCL 5.0+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 16.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==================================================================================================================================================
* Device #1: cpu-skylake-avx512-AMD Ryzen 7 7840HS w/ Radeon 780M Graphics, 2914/5893 MB (1024 MB allocatable), 4MCU

Benchmark relevant options:
===========================
* --backend-devices-virtual=1
* --workload-profile=3

---------------------
* Hash-Mode 3000 (LM)
---------------------

Speed.#1.........: 92190.7 kH/s (21.19ms) @ Accel:512 Loops:1024 Thr:1 Vec:16

Started: Mon Sep  9 17:04:57 2024
Stopped: Mon Sep  9 17:05:26 2024

ここでは、1秒あたりのキロハッシュ(kH/s)のパフォーマンスを確認できます。この例では、1秒あたり約9200万ハッシュですが、結果は異なります。

次に、次を実行してソルト付きMD5(md5crypt)ハッシュのクラッキングのパフォーマンスを見てみましょう:

コマンド

hashcat -w 3 --benchmark -m 500

想定される結果

sec560@560vm:~$ hashcat -w 3 --benchmark -m 500
hashcat (v6.2.6) starting in benchmark mode

VMware: No 3D enabled (0, Success).
OpenCL API (OpenCL 3.0 PoCL 5.0+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 16.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==================================================================================================================================================
* Device #1: cpu-skylake-avx512-AMD Ryzen 7 7840HS w/ Radeon 780M Graphics, 2914/5893 MB (1024 MB allocatable), 4MCU

Benchmark relevant options:
===========================
* --backend-devices-virtual=1
* --workload-profile=3

------------------------------------------------------------------------------
* Hash-Mode 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) [Iterations: 1000]
------------------------------------------------------------------------------

Speed.#1.........:    11116 H/s (51.68ms) @ Accel:256 Loops:1000 Thr:1 Vec:16

Started: Mon Sep  9 17:07:27 2024
Stopped: Mon Sep  9 17:07:45 2024

ここでは、パフォーマンスが大幅に遅くなっていることがわかります。md5cryptには1,000ラウンドのMD5ハッシュが含まれており、追加の時間がかかることを覚えておいてください。

最後に、一部のLinuxマシンに関連付けられている$6$ハッシュである*sha512crypt*のパフォーマンス特性を見てみましょう:

コマンド

hashcat -w 3 --benchmark -m 1800

想定される結果

sec560@560vm:~$ hashcat -w 3 --benchmark -m 1800
hashcat (v6.2.6) starting in benchmark mode

VMware: No 3D enabled (0, Success).
OpenCL API (OpenCL 3.0 PoCL 5.0+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 16.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==================================================================================================================================================
* Device #1: cpu-skylake-avx512-AMD Ryzen 7 7840HS w/ Radeon 780M Graphics, 2914/5893 MB (1024 MB allocatable), 4MCU

Benchmark relevant options:
===========================
* --backend-devices-virtual=1
* --workload-profile=3

--------------------------------------------------------------------
* Hash-Mode 1800 (sha512crypt $6$, SHA512 (Unix)) [Iterations: 5000]
--------------------------------------------------------------------

Speed.#1.........:     1455 H/s (69.31ms) @ Accel:512 Loops:1024 Thr:1 Vec:8

Started: Mon Sep  9 17:08:38 2024
Stopped: Mon Sep  9 17:09:03 2024

*LM*クラッキングのパフォーマンスが最も高く、*md5crypt*はそれより遅く、*sha512crypt*はさらに遅いことに注意してください。ハッシュタイプが遅いほど、同じ時間内に実行できる試行回数が制限されます。実際、*sha512crypyt*は*LM*クラッキングよりも何桁も遅くなります。

2: Hashcatによるクラッキング

Hashcatを使用して、labsディレクトリのweb01.hashesファイルからパスワードをクラッキングし、RockYouパスワードリストを使用します。hashcat(-m 3000)で*LM*ハッシュを攻撃できますが、*NT*ハッシュに焦点を当てます。

Workload Profile 3(-w 3)でHashcatを呼び出して、GUIアクセスをある程度保持しながら、できるだけ多くのコンピューティングパワーを使用し、攻撃モード0(-a 0)で辞書をそのまま使用してハッシュタイプ1000、つまり*NT*(-m 1000)をクラッキングします。その後、クラッキングするweb01.hashesファイルと辞書としてrockyou.txtを次のように指定します。

コマンド

hashcat -w 3 -a 0 -m 1000 ~/labs/web01.hashes /usr/share/wordlists/rockyou.txt

想定される結果

sec560@560vm:~$ hashcat -w 3 -a 0 -m 1000 ~/labs/web01.hashes /usr/share/wordlists/rockyou.txt
hashcat (v6.2.6) starting
...truncated for brevity...

Dictionary cache built:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344394
* Bytes.....: 139921525
* Keyspace..: 14344387
* Runtime...: 1 sec

31d6cfe0d16ae931b73c59d7e0c089c0:                         
5bd9b7b6fce76d3aabfebee9debaa932:Warrior07                
87e968ead530264915a4b295c57c37d5:Tibbetts3                
5deaec4b57b859c25cdd0513fb7bc750:Patrique2238             
d8d9eee954da5f2d42fe72f862fa493f:Packardbell350           
9b5684b030226a1203e4e7b718a3f9df:Oozle11                  
23d26a03aa7102abce4805d88e568a78:KAMTPS20!!tim       
        ...truncated for brevity...

ご覧のとおり、多くのパスワードをクラッキングしました!

それでは、Hashcatで利用可能なルールを見てみましょう。

コマンド

ls /pentest/password-recovery/hashcat/rules/

想定される結果

sec560@560vm:~$ ls /pentest/password-recovery/hashcat/rules/
best66.rule
combinator.rule
d3ad0ne.rule
dive.rule
generated2.rule
generated.rule
hybrid
Incisive-leetspeak.rule
InsidePro-HashManager.rule
InsidePro-PasswordsPro.rule
leetspeak.rule
oscommerce.rule
rockyou-30000.rule
specific.rule
stacking58.rule
T0XlC_3_rule.rule
T0XlC-insert_00-99_1950-2050_toprules_0_F.rule
T0XlC_insert_HTML_entities_0_Z.rule
T0XlC-insert_space_and_special_0_F.rule
T0XlC-insert_top_100_passwords_1_G.rule
T0XlC.rule
T0XlCv2.rule
toggles1.rule
toggles2.rule
toggles3.rule
toggles4.rule
toggles5.rule
top10_2023.rule
unix-ninja-leetspeak.rule

ご覧のとおり、Hashcatには多くの異なるルールファイルがあります。最も有用なものの1つであるbest66.ruleを見てみましょう:

コマンド

head -n 30 /pentest/password-recovery/hashcat/rules/best66.rule 

想定される結果

sec560@560vm:~$ head -n 30 /pentest/password-recovery/hashcat/rules/best66.rule 
## nothing, reverse, case... base stuff
:
r
u
T0

## simple number append
$0
$1
$2
$3
$4
$5
$6
$7
$8
$9

## special number append
$0 $0
$0 $1
$0 $2
$1 $1
$1 $2
$1 $3
$2 $1
$2 $2
$2 $3
$6 $9
$7 $7

上記の空白はHashcat自体によって無視されますが、人間にとって読みやすくするのに役立ちます。$0 $0password00を意味します(各候補に2つのゼロを追加)。

このルールファイルでは、各単語がそのまま(:)、逆順(r)、すべて大文字(u)で試行され、最初の文字の大文字小文字が切り替えられる(T0)ことがわかります。さらに、各単語($)が取得され、その末尾に1桁の数字が適用されます($0から$9まで)。次に、空白が無視されることを覚えて、数字が2回繰り返される各単語があります($0 $0)。このファイルのルールは延々と続き、多くの場合非常に巧妙です。このルールファイルを指定する-rオプションを使用して、クラッキング試行に適用しましょう:

コマンド

hashcat -w 3 -a 0 -m 1000 ~/labs/web01.hashes /usr/share/wordlists/rockyou.txt -r /pentest/password-recovery/hashcat/rules/best66.rule

想定される結果

sec560@560vm:~$ hashcat -w 3 -a 0 -m 1000 ~/labs/web01.hashes /usr/share/wordlists/rockyou.txt -r /pentest/password-recovery/hashcat/rules/best66.rule
hashcat (v6.2.6) starting

...trimmed for brevity...

INFO: Removed 11 hashes found as potfile entries.

Host memory required for this attack: 1 MB

Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344387
* Bytes.....: 139921525
* Keyspace..: 946729542

5ae44bf0a1e24c0b1ec96708f30e7b84:Smitten77                
92929561b2758f409df2b4a24a59c6f4:Alphabet23  
Approaching final keyspace - workload adjusted.           

Session..........: hashcat
Status...........: Exhausted

...truncated for brevity...

遅い

これには数分かかることがあります。パスワードを1つ取得したら、気軽にqを押して終了し、先に進んでください。

これにより、さらに2つのパスワードが見つかりました! 上記の結果で、Hashcatがすでにクラッキングしたため、*11個のハッシュを削除した*ことに注意してください。

実行が完了したら、結果を見てみましょう:

コマンド

hashcat -m 1000 --username --show --outfile-format 2 ~/labs/web01.hashes

想定される結果

sec560@560vm:~$ hashcat -m 1000 --username --show --outfile-format 2 ~/labs/web01.hashes
Mixing --show with --username or --dynamic-x can cause exponential delay in output.

Guest:
DefaultAccount:
slopez:Tibbetts3
aparker:Oozle11
rgray:KAMTPS20!!tim
wrobinson:Patrique2238
mlara:Packardbell350
lstout:2soWht!a
tandersen:Angels100%
awalker:Chirmol01
mmiller:BHLMSTz2
vcollins:Warrior07
hhopkins:Alphabet23
kcooper:Smitten77

3: Hashcatとマスキング

Hashcatに付属のルールは優れていますが、これをさらにカスタマイズできます。すべての可能な2桁の数字を追加する場合は、?d?dを使用できます。best66.ruleをよく見ると、すべての2桁の数字を使用していないことに気付くでしょう。すべての2桁の数字を使用してマスク攻撃を実行しましょう。また、ベースパスワードリストとして英語辞書を使用しましょう。多くのパスワードは大文字の単語を持つ傾向があるため、既存の辞書(/usr/share/dict/american-english-insane)を取得し、sedを使用して最初の文字を大文字にしましょう。次に、モード6を使用して、各大文字の辞書エントリの末尾に2桁を追加します(モード7はプリペンドで、各ワードリストエントリの前にマスクがあります)。

コマンド

sed 's/.*/\u&/' /usr/share/dict/american-english-insane > ~/labs/english-dictionary-capitalized.txt
hashcat -w 3 -a 6 -m 1000 ~/labs/web01.hashes ~/labs/english-dictionary-capitalized.txt ?d?d

想定される結果

sec560@560vm:~$ hashcat -w 3 -a 6 -m 1000 ~/labs/web01.hashes ~/labs/english-dictionary-capitalized.txt ?d?d
hashcat (v6.2.6) starting

...trimmed for brevity...

a6051a02b7a2bfb4cd0e2c1a9cb4a694:Civilness12              
7ce56170c73f9582fa348db88de2c192:Gathering81              
baa90a3ad89d359009ce5425063dff3e:Hemocytogenesis42  
Approaching final keyspace - workload adjusted.           


Session..........: hashcat
Status...........: Exhausted
...truncated for brevity...
sedコマンドについて知りたいですか?

sedユーティリティは、標準入力(STDIN)またはソースファイルからテキスト変換を行います。既存のファイルで操作できます(-iを使用)が、デフォルトでは変更されたテキストを出力します。この場合、sコマンドを使用して、パターン.*(任意の文字を0回以上一致させる)を\u&に置き換えています。これにより、各行の最初の文字が大文字になります。&は、一致したパターン全体を表すsedの特殊文字です。american-english-insaneファイルは1行に1つの単語のリストなので、各単語の最初の文字を大文字にしています。

必要に応じて、shufを使用してファイルのサンプルを取得し、変更を確認できます:

コマンド

shuf -n 10 /usr/share/dict/american-english-insane
shuf -n 10 ~/labs/english-dictionary-capitalized.txt

sedの詳細については、いくつかの例を確認できます。

クラッキングしたすべてのパスワードを見てみましょう:

コマンド

hashcat -m 1000 --username --show --outfile-format 2 ~/labs/web01.hashes

想定される結果

sec560@560vm:~$ hashcat -m 1000 --username --show --outfile-format 2 ~/labs/web01.hashes
Mixing --show with --username or --dynamic-x can cause exponential delay in output.

Guest:
DefaultAccount:
slopez:Tibbetts3
aparker:Oozle11
rgray:KAMTPS20!!tim
wrobinson:Patrique2238
mlara:Packardbell350
lstout:2soWht!a
tandersen:Angels100%
awalker:Chirmol01
mmiller:BHLMSTz2
vcollins:Warrior07
jrivera:Hemocytogenesis42
hhopkins:Alphabet23
kcooper:Smitten77
ksutton:Civilness12
rduarte:Gathering81

4: Hashcatを使用したLinuxパスワードのクラッキング

Hashcatを使用してweb10からのハッシュ、特にsha512cryptに関連付けられている$6$ハッシュをクラッキングしましょう。

このコースの前半で述べたように、すでにクラッキングされたパスワードを取得して辞書ファイルに追加することは非常に役立ちます。これにより、異なるアルゴリズムを使用してハッシュ化されたときにパスワードを再発見する前に、再度単語マングリングルールを適用する必要がなくなります。言い換えれば、すでにいくつかの単語をマングリングしてそのハッシュをクラッキングしたので、異なるハッシュアルゴリズムで同じパスワードに遭遇した場合、なぜそれらの単語を再度マングリングする必要があるのでしょうか? マングリングされた単語を取得してワードリストファイルに追加すると、より効率的になります。

Windowsシステムからクラッキングしたすべてのパスワードをファイルに保存しましょう。上記と同じコマンドを使用しますが、ユーザー名は必要ないため、--usernameオプションを省略します。

コマンド

hashcat -m 1000 --show --outfile-format 2 ~/labs/web01.hashes | tee /tmp/passwords.txt

想定される結果

sec560@560vm:~$ hashcat -m 1000 --show --outfile-format 2 ~/labs/web01.hashes | tee /tmp/passwords.txt

Tibbetts3
Oozle11
KAMTPS20!!tim
Patrique2238
Packardbell350
2soWht!a
Angels100%
Chirmol01
BHLMSTz2
Warrior07
Hemocytogenesis42
Alphabet23
Smitten77
Civilness12
Gathering81

すべてのパスワードをクラッキングしなかった場合

上記のクラッキングの一部には時間がかかることがあり、時間を節約するためにクラッキングセッションを中止するようお伝えしました。有用なリストを作成するには、代わりに以下のコマンドを実行できます。以下のコマンドをコピーして、ターミナルに貼り付けます。

echo 'Tibbetts3' > /tmp/passwords.txt
echo 'Oozle11' >> /tmp/passwords.txt
echo 'KAMTPS20!!tim' >> /tmp/passwords.txt
echo 'Patrique2238' >> /tmp/passwords.txt
echo 'Packardbell350' >> /tmp/passwords.txt
echo '2soWht!a' >> /tmp/passwords.txt
echo 'Angels100%' >> /tmp/passwords.txt
echo 'Chirmol01' >> /tmp/passwords.txt
echo 'BHLMSTz2' >> /tmp/passwords.txt
echo 'Warrior07' >> /tmp/passwords.txt
echo 'Hemocytogenesis42' >> /tmp/passwords.txt
echo 'Alphabet23' >> /tmp/passwords.txt
echo 'Smitten77' >> /tmp/passwords.txt
echo 'Civilness12' >> /tmp/passwords.txt
echo 'Gathering81' >> /tmp/passwords.txt

それでは、Hashcatを使用していくつかのLinuxハッシュをクラッキングしましょう!

コマンド

hashcat -w 3 -a 0 -m 1800 ~/labs/web10.shadow /tmp/passwords.txt -r /pentest/password-recovery/hashcat/rules/best66.rule

想定される結果

sec560@560vm:~$ hashcat -w 3 -a 0 -m 1800 ~/labs/web10.shadow /tmp/passwords.txt -r /pentest/password-recovery/hashcat/rules/best66.rule 
hashcat (v6.2.6) starting

...trimmed for brevity...
$6$NrJ1MrVq6RuL52OC$1cEZX4XDaBAX6rrK.XXX3ncv/AKctoe5xUfOCyfbmnYmLC02jwJ1FbxA7lBlEnhdE4nM2vYuGZJteCswLdULM0:Patrique223877
...truncated for brevity...

トークン長の例外

次のようなトークン長の例外を含む多くの行が表示されます:

Hashfile '/home/sec560/labs/web10.shadow' on line 1 (root:*:18960:0:99999:7:::): Token length exception

これらの行は、アカウントにパスワードが設定されていないため、sha512crypt形式と一致しません。これらの警告は安全に無視できます。

遅い

わずかな推測でも、マングリングルールとsha512cryptの計算の複雑さにより、このクラックには2〜3分かかります。実行させて、先を読んでください。

使用したオプションは次のとおりです:

  • -w 3: Workload "High"(高)。これにより、対話型デスクトップを犠牲にしてHashcatのパフォーマンスが向上します(これは私たちのユースケースでは問題ありません)
  • -a 0: "Straight"(ストレート)モード、辞書を変更せずに使用
  • -m 1800: "sha512crypt 6, SHA512 (Unix)"のハッシュモード
  • ~/labs/web10.shadow: ハッシュを含むファイル
  • /tmp/passwords.txt: ワードリスト
  • -r /pentest/password-recovery/hashcat/rules/best66.rule: マングリングルールファイル

sキーを押すとステータスを取得できます。これは画面にも定期的に表示されます。実行が完了したら、結果を見てみましょう:

コマンド

hashcat -m 1800 --username --show --outfile-format 2 ~/labs/web10.shadow

想定される結果

sec560@560vm:~$ hashcat -m 1800 --username --show --outfile-format 2 ~/labs/web10.shadow
Mixing --show with --username or --dynamic-x can cause exponential delay in output.

Hashfile '/home/sec560/labs/web10.shadow' on line 1 (root:*:18960:0:99999:7:::): Token length exception
Hashfile '/home/sec560/labs/web10.shadow' on line 2 (daemon:*:18960:0:99999:7:::): Token length exception
...trimmed for brevity...
wrobinson:Patrique223877

ユーザーwrobinsonは2つのシステムで類似したパスワードを使用しています。ユーザーはWindowsでPatrique2238を選択し、LinuxでPatrique223877を選択しました。

hashcatのpotfileを見てみましょう:

コマンド

cat /pentest/password-recovery/hashcat/hashcat.potfile

このファイルには、クラッキングしたすべてのハッシュとパスワードが表示されます!

これで、ユーザー名とすでにクラッキングされたパスワードの特殊な辞書を作成して、Hashcatのパスワードクラッキングの成功率を向上させる方法を確認しました。

クリーンアップするために、potfileを削除しましょう:

コマンド

rm /pentest/password-recovery/hashcat/hashcat.potfile

このコマンドには出力がありません。ファイルが存在しない場合(すでに削除されている場合)、エラーが表示されます。このエラーは問題ありません。

まとめ

このLabでは、HashcatをWindowsおよびLinuxパスワードハッシュのクラッキングに活用しました。また、Hashcat実行に単語マングリングルールを適用する方法と、ユーザー名とすでにクラッキングされたパスワードを活用して、Hashcat用の潜在的なパスワードの新しい辞書を作成する方法についても検討しました。これらの各技術は、実際のペネトレーションテストで非常に有用です。