【ハッキング入門】Hashcatの使い方

# Hashcatとは？

`Hashcat`は、ハッシュ解析に用いられるオープンソースのツールです。
300を超える幅広いハッシュアルゴリズムや辞書攻撃、ブルートフォース攻撃、マスク攻撃など様々な攻撃手法をサポートしている

> hashcat は、世界最速かつ最先端のパスワード回復ユーティリティであり、300 を超える高度に最適化されたハッシュ アルゴリズムに対して 5 つの独自の攻撃モードをサポートしています。 hashcat は現在、Linux、Windows、macOS 上の CPU、GPU、その他のハードウェア アクセラレータをサポートしており、分散パスワード クラッキングを可能にする機能を備えています。
>> [Hashcat GitHub](https://github.com/hashcat/hashcat) より

# 環境

- Kali Linux 2024

Kali Linuxの場合はデフォルトでHashcatが入っています。

:::note info
Hashcatの動作には最低でもCPUコア2、メモリ4096MBは欲しいです。
:::

# 構文

基本的な構文は以下になります。
`[オプション] [ハッシュファイル] [ワードリスト]`の順で指定します。

```
hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...
```

`[ハッシュファイル]`の部分は文字列として指定することもできます。

```
$ hashcat -m 100 'd033e22ae348aeb5660fc2140aec35850c4da997' /usr/share/wordlists/rockyou.txt
```

:::note info
`[ハッシュファイル]`は解析するハッシュ値を保存したテキストファイルなどを指定します。
:::

## オプション

主に使用するオプションを紹介します。

- **`-m <type>`**
    - ハッシュタイプを指定します
    - デフォルトは`0`です
- **`-a <mode>`**
    - アタックモードを指定します
    - デフォルトは`0`です
- **`-o <file name>`**
    - 出力ファイルを指定します

# ハッシュアルゴリズムとタイプの特定

`-m`で、指定するハッシュタイプの特定方法をいくつか紹介します。
1つ目は、Hashcatの表から探す方法です。
これはハッシュアルゴリズムが分かっている場合に有効です。

https://hashcat.net/wiki/doku.php?id=example_hashes

生成されるハッシュ値に一定の規則がある場合の検索にも有効です。

- 例:ハッシュ値からアルゴリズムを検索する
![bcryot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/08ece8f4-35f6-2a61-2314-0d64c9ca666b.png)

2つ目は`Hash Analyzer`などのハッシュ値分析ツールを使うことです。

https://www.tunnelsup.com/hash-analyzer/

誤検知もありますが、ある程度のアルゴリズムは特定できます。

- md5のハッシュ値を解析した場合

![Hash analyzer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7dd7464d-62ff-701b-e54c-8552ce12aa18.png)

# ハッシュ解析

いくつのかハッシュ値を解析してみます。

## MD5

`Hello`という文字列を`md5`でハッシュ化し、ファイルに保存します。

```
$ echo -n 'Hello' | md5sum
8b1a9953c4611296a827abf8c47804d7  -
$ echo '8b1a9953c4611296a827abf8c47804d7' > md5_hash.txt
```

ソルトがない場合はモードを`0`に指定します。

![md5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3b845430-e136-8342-1ab2-0412dfa5bdd6.png)

`Hashcat`を実行します。

```
$ hashcat -m 0 md5_hash.txt /usr/share/wordlists/rockyou.txt 
```

元の文字列を特定できました。

```
8b1a9953c4611296a827abf8c47804d7:Hello
```

## SHA1

`sha1`のハッシュ値を生成します。
元の文字列は`admin`としました。

```
$ echo -n 'admin' | sha1sum 
d033e22ae348aeb5660fc2140aec35850c4da997  -
```

生成されたハッシュ値を解析します。
ソルトが無い`SHA1`は`-m 100`を指定します。

![sha1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/0855b766-3a07-d708-d8a7-c1ffc45615ed.png)

```
$ hashcat -m 100 'd033e22ae348aeb5660fc2140aec35850c4da997' /usr/share/wordlists/rockyou.txt
```

元の文字列を特定できました。

```
d033e22ae348aeb5660fc2140aec35850c4da997:admin
```

## HMAC-SHA1

HMAC-SHA1のハッシュ値を解析します。
ハッシュ値とソルトが事前に与えられています。

ハッシュ値: e5d8870e5bdd26602cab8dbe07a942c8669e56d6
ソルト: tryhackme

ソルトがある場合、ハッシュタイプは`-m 160`を指定します。

![HMAC-sha1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7880a3ea-6ae7-e5dc-5085-33bee89c95b1.png)

Hashcatを実行します。

```
$ hashcat -m 160 'e5d8870e5bdd26602cab8dbe07a942c8669e56d6:tryhackme' /usr/share/wordlists/rockyou.txt
```

元の文字列を特定できました。

```
e5d8870e5bdd26602cab8dbe07a942c8669e56d6:tryhackme:481616481616
```

# おすすめのTHMルーム

ハッシュ値の解析をするTryHackMeのルームです。
無料で出来ます。

https://tryhackme.com/r/room/crackthehash

# 参考サイト

https://github.com/hashcat/hashcat

https://hashcat.net/hashcat/