ハッシュクラックツール「HashCat」

# 特徴
Hashcat（ハッシュキャット）は、高速かつ柔軟なパスワードクラッキングツールです。パスワードのハッシュを復元する（クラックする）ために使われ、セキュリティテストやパスワード強度の評価に利用されます。（from chat gpt）
| 特徴 | 詳細 |
|:-:|:-:|
| GPU対応 | NVIDIAやAMDのGPUを使うことで、大量のハッシュを高速に処理可能 |
| 多彩なアルゴリズムに対応 | MD5,SHA1,SHA256,bcrypt,NTLM,WPA2などの多くのハッシュ形式に対応 |
| 複数の攻撃モード | 辞書攻撃,マスク攻撃,ルールベース攻撃.... |

:::note info
対応アルゴリズムについては多すぎる（ざっと370種以上）ので、公式サイトを参照
https://hashcat.net/hashcat/
:::

## 基本的な使い方
```:bash
hashcat -m 0 -a 0 hash.txt wordlist.txt
```

### オプション
| オプション | 説明 |
|:-:|:-:|
| -a | 攻撃モード（下記参照） |
| -m | ハッシュモード（下記参照） |
| -I | 使用可能なデバイスやドライバの情報 |
| --status | 実行中のステータス表示 |
| --show | クラック済みの結果を表示 |
| --workload-profile= | GPU不可調整（1~4） |
| --increment | マスク攻撃で文字数を増やしながら攻撃 |

<details><summary>その他のオプション(いつも通り大量です)</summary>

・基本
| オプション | 説明 |
|:-:|:-:|
| -o | クラック済みのハッシュを出力するファイルを指定 |
| --username | ハッシュファイル内のユーザ名を無視 |
| --remove | クラックされたハッシュをファイルから削除 |
| --left | クラックされてないハッシュを表示 |
| --potfile-disable | クラックされたハッシュの記録を無効 |
| --session | セッション名を指定 |
| --restore | 中断されたセッションを再開 |
| --restore-disable | セッション復元ファイルの作成を無効 |

・出力とステータス
| オプション | 説明 |
|:-:|:-:|
| --status-timer | ステータス画面の更新を秒単位で指定 |
| --machine-readable | ステータス出力を機械可読形式で表示 |
| -outfile-format | 出力ファイルの形式指定 |
| --outfile-autohex-disable | 出力での`$HEX[]`表記を無効にします |
| --outfile-check-timer | 出力ファイルのチェック間隔を秒単位で指定します |
| -p | ハッシュリストと出力ファイルの区切り文字を指定します |

・高度なオプション
| オプション | 説明 |
|:-:|:-:|
| --force | 警告を無視して実行 |
| --quiet | 出力を抑制 |
| --hex-charset | 文字セットが16進数であると仮定 |
| --hex-salt | ソルトが16進数であると仮定 |
| --hex-wordlist | リスト内の単語が16進数であると仮定 |
| --increment-min | インクリメント攻撃の最小パスワード |
| --increment-max | インクリメント攻撃の最大パスワード |
| -w | ワークロードプロファイルの指定 |

・マルコフチェーンとカスタム設定
| オプション | 説明 |
|:-:|:-:|
| --markov-hcstat |  使用するhcstatファイルの指定 |
| --markov-disable | マルコフチェーン無効 |
| --markov-classic | 古典的なマルコフチェーンを有効 |
| -t | 新しいマルコフチェーンを受け入れる閾値を指定 |
|  -1~-4 | カスタム文字セット |

・便利なオプション
| オプション | 説明 |
|:-:|:-:|
| --stdout | クラックせずに候補パスワードを出力 |
| --loopback | 新しいプレーンテキストをinductディレクトリに追加 |
| --runtime | 指定した秒数後にセッションを中断 |
| --remove-timer | ハッシュの消去を行う感覚を秒単位で指定 |
| --logfile-disable | ログファイルを無効 |


</details>


### 攻撃モード
| モード | 説明 |
|:-:|:-:|
| 0 | 辞書攻撃 |
| 1 | 単語の組み合わせ |
| 3 | 文字セットと長さを指定して総当たり |
| 6 | ０と２の組み合わせ |
| 7 | プレフィックスと辞書 |

### ハッシュモード
多すぎるので一部紹介
全てのハッシュモード（https://hashcat.net/wiki/doku.php?id=example_hashes）

・ハッシュモード
| モード | ハッシュ形式 |
|:-:|:-:|
| 0 | MD５ |
| 100 | SHA１ |
| 1400 | SHA２５６ |
| 500 | md５crypt |
| 1800 | sha512crypt |
| 3200 | bcrypt |
| 1000 | NTLM |
| 2500 | WPA/WPA2 |
| 16800 | WPA-PMKID |

## 攻撃例
それぞれの攻撃モードの例を示します

①　辞書攻撃
```:bash
hashcat -m 1000 -a 0 hash.txt rockyou.txt
```
②　組み合わせ攻撃
```:bash
hashcat -m 1000 -a 0 hash.txt rockyou.txt -r rules/best64.rolr
```
> 辞書にルールを適用して変化形を自動生成（例：pass → Pass123）

③　マスク攻撃（ブルートフォース）
```:bash
hashcat -m 1000 -a 3 hashcat.txt ?l?l?l?l?l?d
```
> 小文字5文字＋数字1桁
>・文字セット一覧
> | 文字 | 意味 |
> |:-:|:-:|
> | ?l | 小文字 |
> | ?u | 大文字 |
> | ?d | 数字 |
> | ?s | 記号 |
> | ?a | 全部 |
> | ?h | 16進 |

④　辞書＋マスク
```:bash
hashcat -m 1000 -a 7 hash.txt rockyou.txt ?d?d
```
> 辞書の単語の後ろにマスクを追加します（例：admin → admin12）
> 単語の前に書くことも可能（?d?d rockyou.txt）

⑤　パスワード候補だけ見る
```:bash
hashcat -a 3 -m 0 --stdout ?l?l?l?l?l?d
```
>`grep`等で目的のパスワードがあるか見たり？

⑥　特定の文字種セットでのカスタムマスク
```:bash
hashcat -m 1000 -a 3 hash.txt -1 ?l?d ?1?1?1?1?1
```
> 小文字+数字からなる5文字のパスワードを総当たり

⑦　セッション利用
```:bash
hashcat -m 1000 -a 3 -o found.txt --session=ntlmrun hash.txt ?d?d?d?d
#中断後の再開
hashcat --session=ntlmrun --restore
```

⑧　WPA2（ハンドシェイク）解析例（mode: -m 22000）
```:bash
hashcat -m 22000 -a 0 capture.hc22000 rockyou.txt
```