【備忘録】クラッキング使用ツールをまとめてみた

# はじめに
こんにちは！ Saku0512です。  
野溝のみぞう氏著の[7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性](https://www.shoeisha.co.jp/book/detail/9784798181578)を読んで実際に行ってみました。  
この書籍で実際に使ったツール等を備忘録としてまとめました。

:::note info
セキュリティ初心者のため、内容が間違っている可能性が十分にあります。  
:::

:::note alert
この記事は公開ネットワーク上でのクラッキングを推奨するものではありません!!!
紹介しているツールによっては不用意に使用すると**不正アクセス禁止法**等の法律に抵触する可能性があります。
使用には十分に注意を払ってください。
:::

# ツール・サイト

## ツール・サイト概要

| ツール・サイト名 | 概要 |
| :--- | :--- |
| **ping** | ホストの応答確認 |
| **nmap** | ポートスキャン |
| **grep** | テキストを検索 |
| **strings** | バイナリファイルの可読部分表示 |
| **find** | ファイル検索 |
| **exiftool** | EXIF情報取得 |
| **dirb** | 公開ディレクトリ調査 |
| **unzip** | zipファイル解凍 |
| **hydra** | パスワード攻撃ツール(ネットワークサービス) |
| **john the ripper** | パスワード攻撃ツール(hash解析) |
| **hascat** | パスワード攻撃ツール(hash解析) |
| **Metasploit Framework** | エクスプロイト実行 |
| **xfreerdp** | リモートデスクトップ接続 |
| **burpsuite** | Webアプリケーション攻撃 |
| **steghide** | 画像や音声ファイル内の隠しファイルを探す |
| **LinPEAS** | 権限昇格できる脆弱性調査 |
| **GTFOBins** | 特権昇格等に利用できるバイナリを閲覧できるサイト |

## ツール・サイト詳細説明

### ping

`ping`は、IPアドレス(ドメイン)を指定して応答確認するコマンド。

```bash
$ ping <対象のIPアドレス(ドメイン)> 
```
ICMPの `Echo Request` を送信し、相手から `Echo Reply` が返ってくるかをチェックすることでホストが生きているか確認する。

#### 出力例

```bash
$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.273 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.070 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.035 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.072 ms
^C
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3019ms
rtt min/avg/max/mdev = 0.035/0.112/0.273/0.093 ms
```
**-c**を付けないと無限にリクエスト送信してしまうため途中で`^C`で強制終了している。  

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-c** |  `ping -c 3 〇.〇.〇.〇` | 3回のリクエストを送信する |
| **-i** |  `ping -i 1 〇.〇.〇.〇` | 1秒ごとにリクエストを送信する |

### nmap

`nmap`は、ホストのポートスキャンを行うツール。

```bash
$ nmap <対象のIPアドレス(ドメイン)> 
```

#### 出力例

```bash
Starting Nmap 7.80 ( https://nmap.org ) at 2025-02-24 19:33 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00038s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-sV** | `nmap -sV 〇.〇.〇.〇` | 検出したサービスのバージョンを表示する |
| **-Pn** | `nmap -Pn 〇.〇.〇.〇` | スキャン対象ホストを全てスキャン |
| **-oN** | `nmap -oN nmap.txt 〇.〇.〇.〇` | スキャン結果をnmap.txtに出力する |
| **-v** | `nmap -v 〇.〇.〇.〇` | スキャン時の詳細情報を表示する |
| **-A** | `nmap -A 〇.〇.〇.〇` | 高度なスキャン（OS検出、サービス検出、トレースルート） |
| **--script** | `nmap --script vuln 〇.〇.〇.〇` | 指定したスクリプトを実行する <br /> vulnは脆弱性スキャン |
| **-p** | `nmap -p 10-100 〇.〇.〇.〇` | 10から100までのポート番号をスキャンする |

### grep

`grep`は、テキストを検索するツール。
```bash
$ grep <検索する文字列> <ファイルやディレクトリ>
```

#### 出力例
grep.txt
```txt
apple
banana
cacao
dragon fruit
```

```bash
$ grep apple grep.txt
apple
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-i** | `grep -i hoge test.txt` | 大文字小文字を区別しない |
| **-v** | `grep -v hoge test.txt` | パターンに一致しない行を出力する |
| **-r**または**-R** | `grep -r hoge test/` | ディレクトリ内のファイルを再帰的に検索 |
| **-n** | `grep -n hoge test.txt` | 行番号を出力する |

### strings

`strings`は、主にバイナリファイルから文字列を抽出するツール。
```bash
$ strings <バイナリファイル>
```

#### 出力例

```bash
$ strings test.bin
/lib64/ld-linux-x86-64.so.2
clock
__cxa_finalize
read
__libc_start_main
rand
tcgetattr
memset
system
tcsetattr
putchar
__stack_chk_fail
printf
libc.so.6
.
.
.
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-a** | `strings -a test.bin` | バイナリファイル全体から抽出 |
| **-f** | `strings -f test1.bin test2.bin` | 複数ファイルをまとめて抽出 |
| **-e** | `strings -e <エンコーディング> test.bin` | 指定したエンコーディングを使って抽出 <br /> `-e S`はUTF-8 |

### find

`find`は、ファイル検索を行うツール。
```bash
$ find <検索ディレクトリ> <条件>
```

#### 出力例

```bash
$ find / -name flag.txt
/home/kali/flag.txt
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-name** | `find / -name flag.txt` | 指定した名前のファイルを検索 |
| **-iname** | `find / -iname Flag.txt` | 大文字小文字を区別しないで検索 |
| **-type** | `find / -type l` | ファイルタイプで検索 <br /> `f` :通常ファイル <br /> `d` :ディレクトリ <br /> `l` :シンボリックリンク |
| **-user** | `find / -user <ユーザー>` | ファイルの所有者で検索 |
| **-exec** | `find / -name flag.txt -exec <コマンド>` | 検索したファイルにコマンドを実行 <br /> `-exec rm {} \;` でファイル削除 |

### exiftool

`exiftool`はEXIF情報を表示するツール。

```bash
$ exiftool <ファイル名>
```

#### 出力例

```bash
$ exiftool book.png
ExifTool Version Number         : 12.40
File Name                       : book.png
Directory                       : .
File Size                       : 15 KiB
File Modification Date/Time     : 2024:10:24 16:49:49+09:00
File Access Date/Time           : 2025:02:24 11:19:51+09:00
File Inode Change Date/Time     : 2025:02:07 14:09:28+09:00
File Permissions                : -rwxr-xr-x
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 500
Image Height                    : 500
Bit Depth                       : 8
Color Type                      : RGB with Alpha
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
SRGB Rendering                  : Perceptual
Exif Byte Order                 : Big-endian (Motorola, MM)
Orientation                     : Horizontal (normal)
Pixels Per Unit X               : 2835
Pixels Per Unit Y               : 2835
Pixel Units                     : meters
Apple Data Offsets              : (Binary data 28 bytes, use -b option to extract)
Image Size                      : 500x500
Megapixels                      : 0.250
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-s** | `exiftool -s book.png` | 出力を簡潔に表示 |
|**-set** | `exiftool -set "Author=Test" book.png` | メタデータの変更 <br /> book.pngのAuthorをTestに変更 |
| **-all=** | `exiftool -all= book.png` | book.pngのメタデータを全て削除 | 

### dirb

`dirb`はウェブサーバー上のディレクトリやファイルをスキャンして、隠れたリソースや未公開のエンドポイントを発見するためのツール。
`/usr/share/dirb/wordlists/common.txt` がデフォルトの辞書ファイルになる。

```bash
$ dirb <URL> [辞書ファイル]
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-w** | `dirb <URL> -w [辞書ファイル]` | カスタム辞書ファイルを使用する |
| **-t** | `dirb <URL> -t 4` | 使用するスレッド数(平行リクエスト数)を指定する <br /> デフォルトでは10 |
| **-r** | `dirb <URL> -r` | リダイレクトを追跡する |
| **-v** | `dirb <URL> -v` | 詳細な出力を表示する |

### unzip

`unzip`はzipファイル解凍できるツール。
例外的に`.odt`等の**OpenDocumentファイル**や、`docs`等の**Office Open XMLファイル**も解凍できる。
詳細は[参考サイト](https://naga-note.info/blog/2018/04/18/java/odtfile_check/)を参照してもらいたい。

```bash
$ unzip <ZIPファイル名>
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-d** | `unzip sample.zip -d /path/to/directory` | 解凍先ディレクトリを指定 |
| **-x** | `unzip sample.zip -x "*.log"` | 解凍時に特定のファイルを除外 |
| **-j** | `unzip  -j sample.zip` | ディレクトリ構造を無視して全てのファイルを平坦に解凍 |

### hydra

`hydra`はネットワークサービスに対してパスワードクラッキング攻撃を実施するツール。
認証情報を試してログインの成功を目指す。

```bash
$ hydra -l <ユーザー名> -P <パスワードリストのディレクトリ> <プロトコル>://<IPアドレス>
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **-l** | `hydra -l <ユーザー名>` | 単一のユーザー名を指定 |
| **-L** | `hydra -L <ユーザー名のリストのディレクトリ>` | ユーザー名リストを指定 |
| **-P** | `hydra -P <パスワードリストのディレクトリ>` | パスワードリストを指定 |
| **-t** | `hydra -t 64` | 同時に接続する最大数を指定 |
| **-f** | `hydra -f` | 最初の成功で攻撃を中止 |
| **-v** | `hydra -v` | 詳細を表示 <br /> 攻撃の進捗を表示する |

#### 主要な対象プロトコル
- SSH
- FTP
- HTTP (Basic認証やフォーム認証にも対応)
- SMTP
- POP3
- IMAP

### john the ripper

`john the ripper`はパスワードクラッキングツールとして広く知られている。  
主にハッシュ化されたパスワードを解析して復元することを目的としている。

```bash
$ john <解読対象のパスワードハッシュファイル>
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :---|
| **--wordlist=** | `john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt` | 使用する辞書を指定 |
| **--incremental** | `john --incremental hashes.txt` | ブルートフォース攻撃（総当たり攻撃）を行う |
| **--format=** | `john --format=raw-md5 hashes.txt` | ハッシュアルゴリズムが判明している場合に指定 |
| **--show** | `john --show hashes.txt` | 解析済みのパスワードを表示 |

### hashcat

`hashcat`は`john the ripper`同様にハッシュ化されたパスワードを解析するツール。
特にGPUによる並列計算に強いのが特徴。

```bash
$ hashcat -m <ハッシュタイプ> -a <攻撃モード> <ハッシュファイル> <辞書>
```

#### 主要なハッシュタイプ

`-m`によりハッシュタイプを指定することができる

| ハッシュ形式 | `-m`値 |
| :--- | :--- |
| MD5 | `0` |
| SHA1 | `100` |
| NTLM | `1000` |
| SHA256 | `1400` |
| WPA/WPA2 | `22000` |


#### 主要な攻撃モード

`-a`により攻撃モードを指定することができる

| 攻撃モード | `-a`値 | 説明 |
| :--- | :--- | :--- |
| 辞書攻撃 | `0` | 指定した辞書を使用して試す |
| 組み合わせ攻撃 | `1` | 2つの辞書を組み合わせて使用して試す |
| マスク攻撃 | `3` | 文字パターンを指定して試す |
| ブルートフォース攻撃 | `3` | 全ての組み合わせを試す |
| ハイブリッド攻撃 | `6` / `7` | 辞書とマスクを組み合わせて試す |

### Metasploit Framework

`Metasploit Framework`は脆弱性診断・ペネトレーションテストのためのオープンソースの攻撃フレームワーク。  
exploitを簡単に実行できる

```bash
$ msfconsole  # Metasploit Frameworkを起動
```

#### 起動後に使用する基本的なコマンド

| コマンド | 説明 |
| :--- | :--- |
| `search <exploit>` | 指定した攻撃手法を検索 <br /> 主にCVEで検索されることが多い |
| `use <exploit>` | 使用するエクスプロイトを選択 |
| `show options` | 設定する必要があるオプションを表示 |
| `set <option> <value>` | オプションを指定 |
| `run` / `exploit` | 攻撃を実行 |

#### 侵入後に使用する基本的なコマンド

| コマンド | 説明 |
| :--- | :--- |
| `sysinfo` | ターゲットのOS情報を表示 |
| `getuid` | 現在のユーザーを表示 |
| `shell` | ターゲットのコマンドプロンプトを開く |
| `download <file>` | ターゲットからファイルをダウンロード |
| `upload <file>` | ターゲットにファイルをアップロード |
| `screenshot` | スクリーンショットを撮る |
| `exit` | セッション終了 |

### xfreerdp

`xfreerdp`はWindowsのリモートデスクトッププロトコル(RDP)を使用してリモートのWindowsマシンに接続するためのツール。

```bash
$ xfreerdp /v:<ターゲットIP> /u:<ユーザー名> /p:<パスワード>
```

#### 主要なオプション

| オプション | 使用例 | 使用例の説明 |
| :--- | :--- | :--- |
| **/v:** | `xfreerdp /v:<ターゲットIP>` | ターゲットのIPアドレスを指定 |
| **/u:** | `xfreerdp /u:<ユーザー名>` | ログインするユーザー名を指定 |
| **/p:** | `xfreerdp /p:<パスワード>` | ログインパスワードを指定 |
| **/port:** | `xfreerdp /port:<ポート番号>` | RDPのポートを指定 <br /> デフォルトでは 3389 |
| **/size:** | `xfreerdp /size:<幅>x<高さ>` | ウィンドウサイズを指定 |
| **/f** | `xfreerdp /f` | フルスクリーンを指定 |

### burpsuite

`burpsuite`はWebアプリケーションのセキュリティテスト を行うための統合ツールセットです。  
主にペネトレーションテストやバグハンディングに使用される。
詳細は[参考サイト](https://burp-resources-ja.webappsec.jp/Documentation/burp/documentation/desktop/penetration-testing/index.html)を参照してください。

### steghide

`steghide`は画像や音声ファイルに 秘密のデータを埋め込んだり、取り出したりする ことができます。  
`JPEG`、`BMP`、`WAV`、`AU` をサポートしている。

#### 基本的な使い方

##### 1. データを埋め込む

```bash
$ steghide embed -cf <cover_file> -ef <secret_file>
```

##### 2. データを抽出する

```bash
$ steghide extract -sf <stego_file>
```

##### 3. 埋め込まれた情報の確認

```bash
$ steghide info image.jpg
```

### LinPEAS

`LinPEAS`はLinux環境での 権限昇格の可能性を調査するツールです。

```bash
$ ./linpeas.sh
```

#### 主な機能

| 機能 | 説明 |
| :--- | :--- |
| SUIDバイナリの検出 | 権限昇格の可能性があるSUIDを探す |
| 権限のあるファイルの特定 | /etc/passwd や shadow などアクセス可能な重要ファイルをリストアップ |
| Kernelの脆弱性チェック | 既知の特権昇格用の脆弱性を調査 |

### GTFOBins

`GTFOBins`LinuxやUnix環境において権限昇格に悪用可能なバイナリのリストを集めたデータベースサイトです。
詳しくは[公式サイト](https://gtfobins.github.io/)を参照してください。

#### 主な機能

| 機能 | 説明 |
| :--- | :--- |
| SUIDを悪用 | SUIDが設定されたバイナリを使って権限昇格 |
| sudo権限の悪用 | sudoで実行可能なコマンドを利用してroot権限を取得 |
| シェルの取得 | 制限された環境でも/bin/shや/bin/bashを起動 |
| コマンド実行 | 制限された環境でコマンドを実行する手法 |

# 用語説明

### Reverseshell

攻撃者がターゲットマシンからローカルマシンに向けた攻撃を行う仕組み。
ターゲットマシンからローカルマシンに接続するため、ファイヤーウォールを透過しやすい。

### RCE

Remote Code Execution の略。
リモート（遠隔地）からターゲットシステムに対して任意のコードを実行させること。

### SUID

Set User Id の略。
LinuxやUNIX系システムにおけるファイルの実行権限に関連する特別なアクセス権の一つ。
この権限を持つファイルを実行すると、実行ユーザーの権限ではなく、そのファイルの所有者の権限で実行される。

### Active Directory

Microsoftが開発したディレクトリサービスで、企業や組織内でのネットワークリソースやユーザーアカウントを効率的に管理するためのシステム。
ユーザーID/パスワードの管理・ユーザー認証・システムへのアクセス制御・ログの集約などの機能を安全で便利に一元管理できる。

### Kerberos認証

Active Directory で用いている認証方式。
ASにTGTを発行してもらい、TGTを使ってTGSにSTを発行して貰うという流れ。

#### AS (Authentication Service : 認証サービス)

認証を受け付け、認証に成功したらTGSにTGTを発行する。

#### TGS (Ticket-Grainting Service : チケット付与サービス)

ASが発行したTGTを確認してSTを発行する。

#### KDC (Key Distribution Center : キー配布センター)

ASとTGSの機能を含む Kerberos認証 のチケット発行サービス。

#### TGT (Ticket-Grainting Ticket : チケット付与チケット)

ASが発行するクライアントの身分証明書のようなもの。

#### ST (Service Ticket : サービスチケット)

TGSが発行するサービス仕様許可証のようなもの。

### DCSync攻撃

Active Directory (AD) 環境における特権昇格攻撃の一つで、攻撃者がドメインコントローラー (DC) に対してユーザーのパスワードハッシュを同期させる方法を利用して、ドメイン管理者権限を取得する手法
特に、攻撃者がドメインコントローラーの管理権限を持っていない場合でも、特定の条件下でこの攻撃を実行できる。

#### DC (ドメインコントローラー)

AD環境においてネットワーク上のユーザーアカウント、グループアカウント、コンピュータ、リソースなどの管理を担当するサーバー。

### Pass the Hash

認証プロセスにおいてパスワードのハッシュ値を直接使用して認証を通過させる攻撃手法。
攻撃者がターゲットシステムのパスワードハッシュを取得して、そのハッシュ値で他システムへの認証を試みる。
これにより、実際にパスワードを知らなくてもシステムへのアクセスが可能になる。


# プロトコル

## プロトコル概要


| プロトコル名 | 概要 |
| :--- | :--- |
| **SSH** | リモートアクセス |
| **ICMP** | ICMP通信 |
| **SMB** | Samba通信 |
| **FTP** | FTP通信 |
| **KERBEROS** | Kerberos通信 |


## プロトコル詳細説明

### SSH (Secure Shell)

`SSH`はネットワーク経由でリモートシステムに安全にアクセスするためのプロトコルおよびツール。  
ユーザー名とパスワードを指定することによりリモートアクセスできる。

```bash
$ ssh username@hostname_or_ip
```
標準ポートは**22**。

### ICMP (Internet Control Message Protocol)

`ICMP`は主にネットワークの診断やエラーメッセージの伝達に使用されます。
`ping`コマンドではICMPの**Echo Request / Echo Reply**を使用している。

### SMB (Server Message Block)

`SMB`はネットワーク上でファイルやプリンターを共有するために使用される通信プロトコル。
ファイル共有・プリンタ共有・リモートコマンド実行等の機能を持つ。
標準ポートは**445**。
WindowsネットワークとLinux間でファイル操作を行うときに使われる**smbclient**というコマンドラインツールがある。

#### smbclient

SMBサーバーに接続

```bash
$ smbclient //hostname_or_ip/share_name -U username
```

ファイルのリスト

```bash
smb: \> ls
```

アップロード・ダウンロード

```bash
smb: \> put localfile remotefile
smb: \> get remotefile localfile
```

ファイルの削除

```bash
smb: \> del filename
```

### FTP (File Transfer Protocol)

`FTP`はファイル転送を目的としたネットワークプロトコルの一つで、ネットワーク間のコンピュータ間でファイルを転送するために使用される。
標準ポート
- **20 :** データ転送ポート（アクティブモードのFTPで使用される）。
- **21 :** コントロールポート（コマンドを送受信するために使われる）。

#### モード

##### 1. アクティブモード（Active Mode）:
データ転送のためにサーバー側からクライアントの指定したポートへ接続が試みられます。

##### 2. パッシブモード（Passive Mode）:
クライアントがサーバーに接続し、サーバーが動的にポートを開放して、そのポートを使ってデータ転送を行う。

#### FTPコマンド

接続

```bash
$ ftp <hostname_or_ip>
```

ログイン

```bash
Name (<hostname>:<username>): <username>
Password: <password>
```

設定によっては**anonymous**というユーザー名でパスワードなしでログインできてしまう場合がある。
これを**匿名FTP**という。

ファイルのアップロード

```bash
put localfile remotefile
```

ファイルのダウンロード

```bash
get remotefile localfile
```

### Kerberos

`Kerberos`は通信のセキュリティを提供するために使用される。
Kerberosは、主にクライアント-サーバー型のネットワーク環境で使用され、KDCを中心に動作します。
このプロトコルは、特に大規模な企業ネットワークや、分散システムにおいて、シングルサインオン（SSO）を実現するために使用されます。