【ハッキングに挑戦】脆弱性が残された仮想イメージ公開プラットフォーム（VulnHub）で練習をする

これからサイバーセキュリティについて手を動かしながら勉強に取り組んでいきたいと検討されている方に向けて「**意図的に脆弱性が残された仮想イメージ公開プラットフォーム（VulnHub）で練習をする**」として本稿をまとめていきたいと思います。
![sqlmap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/c1cc40e6-6b1f-9991-9220-af8f4940d411.jpeg)

# VulnHubとは
「Vulnerable By Design ~ VulnHub」（[https://www.vulnhub.com/](https://www.vulnhub.com/)、以下 VulnHub）とは、意図的に脆弱性が残された**仮想イメージを無料で!!**公開しているプラットフォームです。
<img width="1394" alt="Top.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/b204694c-c796-1207-df59-b714bedbc586.png">
創設者の[g0tmi1k](http://blog.g0tmi1k.com/)は、『誰もがデジタルセキュリティ、コンピューターアプリケーション、およびネットワーク管理の**実践的な経験**を得ることができる資料を提供する』という目標を掲げ、その運用を開始しました。年々登録される仮想イメージの数は増加しており、VulnHub公式 Twitterアカウント（[@VulnHub](https://twitter.com/VulnHub)）の[Tweet](https://twitter.com/VulnHub/status/1200108705439727616)によると、年間100件を超える登録があり、総数は400件（2019年11月 現在）を超えているそうです。最新の登録状況は[タイムライン](https://www.vulnhub.com/timeline/)から確認することができます。
VulnHubの仮想イメージカタログに掲載されると、[Services]、[Entry Tags]、[Vulnerabilities]などのセクションにタグが付与されます。学習者はこれらタグを手がかりに、学習目標に適したリソースへアクセスすることができます。

# ウェブサイトの歩き方
## トップページ
VulnHubトップページのヘッダーは次のとおりです。
![HOME.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/66d8e725-48e6-6eb6-2a43-2d5d6eb02304.png)
では、さっそくと[SEARCH]メニューをクリックしたくなります。ですが、ここは[HELP]メニューや[[RESOURCES](https://www.vulnhub.com/resources/)]メニューをまず確認してください。

- `HELP`メニュー：[[Setting Up A Local Lab](https://www.vulnhub.com/lab/)]が必見。まず何を揃えるべきなのか丁寧に記載されています。仮想イメージをダウンロードしたけれども練習が開始できないときは[[Frequently Asked Questions](https://www.vulnhub.com/faq/)]項目を確認してみましょう。
- `RESOURCES`メニュー：[Books]（参考書籍）、[Training Material]（トレーニング教材）リストが必見。
- `SEARCH`メニュー：画面左側から検索窓が表示されます。

## SEARCHメニュー
`SEARCH`メニューでは、キーワード検索が可能です。加えて、`Sort`によって時系列順または名前順に並び替えて表示させる指定も可能です。
![SEARCHメニュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/7002a123-aebc-081d-1d40-819a33023c5b.png)
お目当ての仮想イメージがあれば、その名前をキーワードにすることができます。このほかに次のようなキーワードを手がかりに学習目標に適した仮想イメージを検索することもできます。

### 難易度（Difficulty）に関する検索キーワード
- Easy
- Intermediate
- Hard

### 脆弱性（Vulnerabilities）に関する検索キーワード
- File Inclusion
- OS Command Injection
- Overflows
- Privilege Escalation
- Remote
- SQL Injection
- Web Application

### サービス（Services）に関する検索キーワード
- Apache
- CMS
- MySQL
- OpenSSH
- PHP
- RPC
- Samba
- WordPress

## 仮想イメージ公開ページの概要
トップページから仮想イメージ公開ページに進んでみましょう。ここでは一例として、「[Kioptrix: Level 1 (#1)](https://www.vulnhub.com/entry/kioptrix-level-1-1,22/)」を選択します。
<img width="1189" alt="VMImage.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/35eabc44-f3f6-727d-073c-98472637cfa5.png">
選択した仮想イメージにより一部異なりますが、公開ページは次の項目（セクション）で構成されています。

- About Release:
ここでは、仮想イメージの名前やリリース日、作者の情報が記載されています。同じ作者により連続でリリースされている仮想イメージは[Series]としてタグ付けされていることがあります（[Kioptrix](https://www.vulnhub.com/series/kioptrix,8/)シリーズの場合、レベル1から5までリリースされています）。
<img width="1189" alt="About Release.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/da15c2c4-9d73-ad0e-400a-a548e22b472d.png">

- Download:
ここでは、仮想イメージのダウンロードリンクが記載されています。なお、VulnHubでは、同時ダウンロード数が2ファイルまで、最大速度は3 MBに制限されています。
高速ダウンロードが必要な場合、トレントクライアントソフト（[μTorrent](https://www.utorrent.com/)）を使ったダウンロードが有効です。
<img width="1189" alt="Download.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/e637a258-cf6f-4c68-83b9-d96a1d47fe71.png">

- Description:
ここでは、WebページやReadmeファイルの抜粋など、対象となる仮想イメージリリースに関するさまざまな情報が掲載されています。
とくに作者からの**ヒント**は、仮想イメージを攻略する上で重要なヒントとなります。
<img width="1189" alt="Description.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/8a7c9767-7536-eb12-7ac3-a9c4dba6f3b0.png">

- File Information
このセクションで掲載されている`MD5`または`SHA1`ハッシュ値を使って、ダウンロードしたファイルが破損していないか検証することができます。
<img width="1189" alt="File Information.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/2ff0d7e8-ecec-90b6-1ce1-bcf5369d5b1f.png">
`Linux`ディストリビューションであれば、`md5sum`および`sha1sum`コマンドを使ってハッシュ値を算出することができます。

```
root @ kali：〜＃ md5sum Kioptrix_Level_1.rar
6df1a7dfa555a220054fb98ba87facd4  Kioptrix_Level_1.rar
root @ kali：〜＃ sha1sum Kioptrix_Level_1.rar 
98ca3f4c079254e6b272265608e7d22119350a37  Kioptrix_Level_1.rar
```

- Virtual Machine
ここでは、仮想イメージの形式やオペレーティングシステムなど、仮想イメージに関する情報が含まれています。
OSの情報は仮想イメージを攻略する上で重要なヒントになります。
<img width="1189" alt="Virtual Machine.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/e3665cee-65cc-f118-c6d3-38f1336ed8fd.png">

- Networking
ここでは、仮想イメージに関するネットワーク状態の情報が掲載されています。ほとんどの仮想イメージは`DHCP`によって自動的にIPアドレスが割り当てられています。
<img width="1189" alt="Networking.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/57fed442-52ea-3b3b-9b9e-113b8e01fc30.png">

- Screenshot(s)
ここでは、仮想イメージの画面が掲載されています。多くの仮想イメージは、「**CUI(キャラクタユーザインターフェース)**」です。このため、ヒントとなるような情報は限定的です。
<img width="1189" alt="Screenshot(s).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/11a3a482-3406-bd6a-2e4a-c07834c559b8.png">

- Services
ここでは、仮想イメージで実行中のサービスリストが掲載されています。
サービスの情報は仮想イメージを攻略する上で**極めて重要なヒントです。**
<img width="1189" alt="Services.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/ebeb23a9-4146-d1e7-fa66-4e35677b6822.png">

- Walkthrough(s)
Walkthroughは、オンラインコミュニティに投稿された「解決策」です。すなわち**ネタバレ**を含んでいます。各仮想イメージが提供している解決策の多くは、一本道ではありません。新たな道筋を見つけることもVulnHub楽しみの一つです。
<img width="1189" alt="Walkthrough(s).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/ca7ad6c1-14fd-4345-a1d8-d0beac4452de.png">

- Flag(s)
仮想イメージの中には、特権昇格に加え、掌握したことを証明する`フラグ`を要求しているものがあります（「[Kioptrix: Level 1 (#1)](https://www.vulnhub.com/entry/kioptrix-level-1-1,22/)」の場合、`EMail`が設定されています。特権昇格し、メールを確認する必要があるようです）。
<img width="1189" alt="Flag(s).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/74e37462-c4dc-d24b-0b0c-845c0c44f0d1.png">

- Entry Tags
ここでは、仮想イメージに関連するキーフレーズが掲載されています。
キーフレーズ情報は**ネタバレ**に通じる仮想イメージを攻略する上で**極めて重要なヒントです。**
<img width="1189" alt="Entry Tags.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/9dfe57af-324c-abcd-ad1c-8a3a6cfbe40a.png">

- Vulnerabilities
ここでは、仮想イメージで想定している脆弱性の情報が掲載されています。
脆弱性情報は**ネタバレ**に通じる仮想イメージを攻略する上で**極めて重要なヒントです。**
<img width="1189" alt="Vulnerabilities.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/429cc18e-3f99-00fb-6b6e-80f54916722f.png">

### 仮想イメージのダウンロード
VulnHubプラットフォームでは仮想イメージを、次の形式で公開しています。

- 圧縮形式ファイル：`.ZIP`、`.RAR`、`.7z`、`.tar.gz`、`.tar.bz2`など
- 光ディスク用アーカイブファイル：`.ISO`、`.IMG`など
- OVF（[Open Virtualization Format](https://www.dmtf.org/jp/standards/ovf)）形式ファイル：`.OVF`は標準化団体DMTFより策定、標準化等が行われている仮想マシンの構成ファイルです。
- OVA（Open Virtualization Archive）：仮想マシン全体（仮想マシンの設定（`.OVF`）およびハードドライブ（`.VMDK`））を含む単一のアーカイブ（`.tar`）です。
- VMware専用ファイル：
    - `.VMDK`/`.VHD`：「Virtual Machine Disk（VMDK）」および「Virtual Hard Disk（VHD）」は仮想マシンのハードディスクドライブの内容を格納する仮想ディスクファイルです。 
    - `.VMX`はVMware向けの仮想マシンの構成ファイル
    - `.VMEM`：仮想マシンのページングファイル
    - `.VMSN`/`.VMSD`：VMwareスナップショット関連ファイル
    - `.NVRAM`：仮想マシンの`BIOS`または`EFI`の設定ファイル

なお、仮想イメージによっては、「`.torrent`」ファイルや「`Magnet`」リンクにて公開されている場合があります。トレントクライアントソフト（[μTorrent](https://www.utorrent.com/)）を使用している場合、こちらを選択した方が高速にダウンロードすることが可能です。

>`macOS Chrome`を使用して`.OVA`ファイルをダウンロードした場合、`.OVA`ファイルを`.OVF`にリネームしてダウンロードする[既知の問題点](https://blogs.vmware.com/feed-items/chrome-on-macos-downloads-ova-files-as-ovfs)が報告されています。

# 仮想化ソフトウェアの準備
VulnHubでは、**仮想化ソフトウェア**に対応した仮想イメージを公開しています。その多くは`VMware`または、`VirtualBox`に対応しています。
予算や使用環境に合わせて、いずれかの仮想化ソフトウェアを事前にインストールしておきます。

- Oracle VirtualBox, https://www.virtualbox.org/
- VMware Workstation Player / Pro / Fusion for Mac, https://www.vmware.com/jp/products/ 

インストールされた仮想化ソフトウェアにVulnHubにて公開されている仮想イメージを使って、仮想マシンを構築します。この仮想マシンを**標的**として、残された脆弱性を探り、特権の引き上げを目指してハッキングの練習を行っていきます。
このように、実際に様々な方法で侵入や攻撃を試み脆弱性の有無を検査するテストのことを「**ペネトレーションテスト**（侵入テスト）」と呼ばれています。

# 仮想イメージを標的マシンとして構築する
VulnHubからダウンロードした仮想イメージが圧縮形式ファイルの場合、まず展開ソフトウェア（[Keka](https://www.keka.io/ja/)や[7zip](https://sevenzip.osdn.jp/)など）を使って、ファイルの展開（取り出し）を行います。

ファイルを展開すると、`.OVA`ファイル（標準規格の仮想マシンの構成ファイル）または、`.VMX`ファイル（VMware規格の仮想マシンの構成ファイル）、`.ISO`ファイルが含まれています。
公開されているイメージによっては、`.TXT`ファイルが含まれている場合もあります。この場合、特別なセットアップ手順が記載されていることがあります。必ず事前に確認しましょう。

>標的マシンに割り当てが必要となるスペック（CPUやメモリ）は最少要件でも十分です。

## 仮想イメージのインポート
<details><summary>OVAファイルのインポート</summary><div>
ここでは、「[Basic Pentesting: 1](https://www.vulnhub.com/entry/basic-pentesting-1,216/)」で公開されている`basic_pentesting_1.ova`ファイルをダウンロードし、仮想イメージを標的として構築します。
また、仮想化ソフトウェアとして、`VMware Fusion`を使用しています。

1. `VMware Fusion`を起動し、[ファイル] > [インポート]を選択します。[ファイルを選択...]にて、`basic_pentesting_1.ova`ファイルを選択し、[開く]を選択します。
<img width="669" alt="インポート.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/ee308f74-378a-1194-25ab-7b960158a505.png">
2. [続ける]をクリックし、任意の名前をつけて[保存]します。
<img width="452" alt="名前.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/74f7fd64-3c2b-47bd-0567-c85a937ac364.png">
3. [仮想マシンをインポート]ウインドウが表示されます。
<img width="669" alt="仮想マシンをインポート.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/1c504faa-cd92-246b-ed41-bcaac0ebedfa.png">
4. インポートが完了すると、[終了]ウインドウが表示されます。
<img width="669" alt="終了.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/2d23e7dd-ade7-761c-b970-7e94af6e211a.png">
5. [設定のカスタマイズ]をクリックすると、[設定]ウインドウが表示されます。
<img width="640" alt="設定.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/f2cf4e69-5ffa-0740-4560-a0a0f6c57f25.png">
6. [ネットワーク アダプタ]を選択します。ネットワーク環境内の他の仮想マシンに接続するには、仮想マシンにVMware仮想ネットワークコンポーネントを構成して実装する必要があります。
<img width="640" alt="ネットワーク アダプタ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/78fb13bc-544b-272c-4b3a-dae7ea378410.png">

7. [スタートアップ]ボタンをクリックし、仮想マシンの電源をオンにします（「Basic Pentesting: 1」の場合、「[Ubuntu](https://www.ubuntulinux.jp/)」ディストリビューションのログオン画面が表示されます）。
これで標的の構築は完了です。
<img width="800" alt="ubuntu.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/4164f12e-25a0-ccc7-1892-3c6ca95e069d.png">
</div></details>

<details><summary>VMXファイルのインポート</summary><div>
ここでは、「[Kioptrix: Level 1.1 (#2)](https://www.vulnhub.com/entry/kioptrix-level-11-2,23/)」で公開されている`Kioptrix_Level_2-original.rar`ファイルをダウンロード、展開して得られたファイル群を使い仮想イメージを標的として構築します。
また、仮想化ソフトウェアとして、`VMware Fusion`を使用しています。

1. `VMware Fusion`を起動し、[ファイル] > [開く]を選択します。`.VMX`ファイルを選択し、[開く]をクリックします（「Kioptrix: Level 1.1 (#2)」の場合、`CentOs4.5.vmx`ファイルを選択し、開きます）。
<img width="738" alt="kioptrixLv2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/e8d65a04-8561-77b5-21d3-ce7569c098fe.png">
2. 新たな仮想マシンが導入されます。これを選択し、[仮想マシン] > [設定...]を選択します。
3. [ネットワーク アダプタ]を選択します。ネットワーク環境内の他の仮想マシンに接続するには、仮想マシンにVMware仮想ネットワークコンポーネントを構成して実装する必要があります。
4. [スタートアップ]ボタンをクリックし、仮想マシンの電源をオンにします（「Kioptrix: Level 1.1 (#2)」の場合、「CUI(キャラクタユーザインターフェース)」のログオン画面が表示されます）。 これで標的の構築は完了です。
<img width="720" alt="Kioptrix Lv2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/804d2f83-90d9-9d1c-1764-27a3f49914fe.png">
</div></details>

>VMwareにおいて、仮想マシンを構成するファイルは複数あります。このうち、特に重要なのが`.VMX`と`VMDK`ファイルです。

## Bring Your Own License
VulnHubで公開されている仮想イメージ（例えば、[Bobby: 1](https://www.vulnhub.com/entry/bobby-1,42/)）は、BYOL（Bring Your Own License）形式で公開されているものがあります。
「Bobby: 1」では、別途`Windows XP`のプロダクトキー（含む、`.ISO`ファイル：ディスクイメージ）を用意する必要があります。用意したOSのライセンスと[VulnInjector](http://blog.vulnhub.com/introducing-vulninjector/)プログラムを使い、脆弱な状態の学習環境を整備することができます。

# 攻撃マシン（Kali Linux）の準備
VulnHubの仮想イメージを楽しむには、攻撃マシンを用意する必要があります。ここでは、**ペネトレーションテスト用のLinuxディストリビューションであるKali Linux**を使用します。

- Kali Linuxイメージのダウンロード, https://www.kali.org/downloads/

ダウンロードサイトでは、VMware（`Kali Linux 64-bit VMware`や`Kali Linux 32-bit (PAE) VMware`）、VirtualBox（`Kali Linux 64-bit VirtualBox`、`Kali Linux 32-bit (PAE) VirtualBox	`）に対応した仮想イメージが公開されています。

# 標的マシンへのログイン
インポートした仮想イメージ（標的マシン）を起動させることはできましたか。ほとんどの標的マシンはGUIまたはCUIのログイン要求画面で止まっているはずです。
このあとログインするにはどうすべきなのでしょうか。ほとんどの場合、標的マシンへのログインすることが課題として設定されています。

>「[Damn Vulnerable Linux](https://www.vulnhub.com/series/damn-vulnerable-linux,1/)」および「[Exploit-Exercises](https://www.vulnhub.com/series/exploit-exercises,11/)」などのシリーズでは、課題に取り組むためにログインする必要があります。このような場合、付属の`Readme`ファイルに注意事項としてログイン方法が記載されています。

## 標的マシンのIPアドレスを特定する
仮想イメージ（標的マシン）を起動した後に実施すべきことは、攻撃マシンから標的マシンのIPアドレスを特定することです。ほとんどの標的マシンはIPアドレスは自動で割り当てられます。そこで、`netdiscover`コマンドを使って標的マシンのIPアドレスを特定します。

次の例では、あらかじめ攻撃マシンと標的マシンを`172.16.208.0/24`ネットワークの範囲にて稼働させ、DHCPサービスによってIPアドレスを取得しています。`netdiscover -r 172.16.208.0/24`コマンド構文にて標的マシンのIPアドレスを特定します。

```
root@kali:~# netdiscover -r 172.16.208.0/24

 Currently scanning: Finished!   |   Screen View: Unique Hosts                   

 4 Captured ARP Req/Rep packets, from 4 hosts.   Total size: 240                 
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 172.16.208.1    00:50:56:c0:00:08      1      60  VMware, Inc.                  
 172.16.208.2    00:50:56:f3:32:8a      1      60  VMware, Inc.                  
 172.16.208.180  00:0c:29:7b:8d:43      1      60  VMware, Inc.                  
 172.16.208.254  00:50:56:ee:2c:f4      1      60  VMware, Inc.
```

ここでは、`172.16.208.180`が標的マシンのIPアドレスであることが特定できました。

このほか、`arp-scan`コマンドや、`nmap`コマンド（-sn オプション, pingスキャン([ホストの発見](https://nmap.org/man/ja/man-host-discovery.html))のみを実行し、応答した利用可能なホストの一覧を出力する。）を使用し、標的マシンのIPアドレスを特定することも可能です。コマンド構文は、次の通りです。

```
root@kali:~# arp-scan 172.16.208.0/24
root@kali:~# nmap -sn 172.16.208.0/24
```

>仮想イメージの中には、固定されたIPアドレスで提供しているものもあります（「[pWnOS: 2.0](https://www.vulnhub.com/entry/pwnos-20-pre-release,34/)」では、IPアドレスが`10.10.10.100`に事前に設定されています。このため、攻撃マシンを`10.10.10.0/24`ネットワークの範囲内にあらかじめ設定しておく必要があります。）

## 標的マシンのアカウントを特権昇格する
標的マシンのIPアドレスを特定した後に、何をすればよいのでしょうか。ネットワーク識別、サービス識別、脆弱性識別と順を追って、特権昇格までの道筋を探っていくことになります。
NIST（National Institute of Standards and Technology：米国国立標準技術研究所）が発行するセキュリティ関連レポートであるSP800シリーズでは、「Technical Guide to Information Security Testing and Assessment」（[SP800-115](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-115.pdf)）と題した文書が公開されています。この文書における「4. Target Identification and Analysis Techniques.」や「5. Target Vulnerability Validation Techniques」は標準化されたペネトレーションテストにおける内部テストの方法論を知る上で参考になります。
なお、標的マシンにて掌握したことを証明する`フラグ`が設定されていない場合、`whoami`、`id`、`uname -a`コマンドを`; `（セミコロン）で連結して実行した結果を掲載することがあります。

```
# whoami; id; uname -a
```

# 厳選、おすすめ仮想イメージ
「仮想イメージはどれがおすすめ？」という方へ、ここでは、初心者でも取り組むことのできる仮想イメージをおすすめポイントともにまとめてご紹介します！
何からはじめればよいのかわからないという方の参考になればと思っています。

|イメージ名|おすすめポイント|日本語解説（Walkthrough）|
|:---|:---|:---|
|[Bob's Missing Cat CTF: 1.1](https://www.vulnhub.com/entry/bobs-missing-cat-ctf-11,368/)|ハッキング以前に、コマンドライン操作に苦手意識を感じている方にお勧めの仮想イメージです。|N/A|
|[Kioptrix: Level 1 (#1)](https://www.vulnhub.com/entry/kioptrix-level-1-1,22/)|良質な学習教材である[Kioptrix](https://www.vulnhub.com/series/kioptrix,8/)シリーズの第一弾。リモートから到達可能な脆弱性でアクセス権を特定し、特権昇格を狙っていきます。アプリケーションの脆弱性を特定し、エクスプロイトコードを修正、コンパイルなども体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/de123fcd7a5686b7bc09)|
|[Kioptrix: Level 1.1 (#2)](https://www.vulnhub.com/entry/kioptrix-level-11-2,23/)|[Kioptrix](https://www.vulnhub.com/series/kioptrix,8/)シリーズの第二弾。ウェブアプリケーションに関する「SQLインジェクション（[CWE-89](https://jvndb.jvn.jp/ja/cwe/CWE-89.html)）」や「OSコマンドインジェクション（[CWE-78](https://jvndb.jvn.jp/ja/cwe/CWE-78.html)）」を手がかりにカーネルエクスプロイトコードによる特権昇格について体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/a67301b6608b2f772822)|
|[Kioptrix: Level 1.2 (#3)](https://www.vulnhub.com/entry/kioptrix-level-12-3,24/)|[Kioptrix](https://www.vulnhub.com/series/kioptrix,8/)シリーズの第三弾。「SQLインジェクション（[CWE-89](https://jvndb.jvn.jp/ja/cwe/CWE-89.html)）」を手がかりにsudo権限の乱用による特権昇格について体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/c458f1d38593b8a40fa2)|
|[Kioptrix: Level 1.3 (#4)](https://www.vulnhub.com/entry/kioptrix-level-13-4,25/)|[Kioptrix](https://www.vulnhub.com/series/kioptrix,8/)シリーズの第四弾。|N/A|
|[SickOs: 1.2](https://www.vulnhub.com/entry/sickos-12,144/)|ウェブアプリケーションの処理におけるユーザー入力を手がかりにリバースシェルを確立。特権昇格について体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/8bc2d955645b3d97c75a)|
|[Basic Pentesting: 1](https://www.vulnhub.com/entry/basic-pentesting-1,216/)|[WordPress](https://ja.wordpress.org/)（ウェブサイトの作成に使用するオープンソースなコンテンツ管理システム（CMS））が稼働しているサイトに侵入し、書き込み可能な/etc/passwdファイルを手がかりにして特権昇格について体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/8afcf758990c9ab03ad7)|
|[BTRSys: v2.1](https://www.vulnhub.com/entry/btrsys-v21,196/)|WordPressサイトにバックドアを仕掛け、カーネルエクスプロイトコードによる特権昇格について体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/3991f2640b9694b8697a)|
|[Stapler: 1](https://www.vulnhub.com/entry/stapler-1,150/)|WordPressのプラグインに関する脆弱性を特定することでMySQLに関するクレデンシャル情報を取得することができます。特権昇格では複数のパスから実現可能であることを体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/69dd59f81a5ce994bbc3)|
|[pWnOS: 2.0](https://www.vulnhub.com/entry/pwnos-20-pre-release,34/)|「SQLインジェクション（[CWE-89](https://jvndb.jvn.jp/ja/cwe/CWE-89.html)）」によるLocal File Inclusion攻撃やinto outfileによるファイルアップロード、シェルの設置などを体験できる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/745760829f834a854aa1)|
|[Mr-Robot：1](https://www.vulnhub.com/entry/mr-robot-1,151/)|海外ドラマ「MR. ROBOT/ミスター・ロボット」を題材とした仮想イメージです。|[あり](https://qiita.com/v_avenger/items/ffd1440e809a4ad9682a)|
|[Pentester Lab: XSS and MySQL FILE](https://www.vulnhub.com/entry/pentester-lab-xss-and-mysql-file,66/)|[Pentester Lab](https://www.vulnhub.com/series/pentester-lab,41/)シリーズ|N/A|
|[Pentester Lab: PHP Include And Post Exploitation](https://www.vulnhub.com/entry/pentester-lab-php-include-and-post-exploitation,79/)|[Pentester Lab](https://www.vulnhub.com/series/pentester-lab,41/)シリーズ|N/A|
|[FristiLeaks：1.3](https://www.vulnhub.com/entry/fristileaks-13,133/)|:---|N/A|
|[Violator: 1](https://www.vulnhub.com/entry/violator-1,153/)|:---|N/A|
|[Droopy: v0.2](https://www.vulnhub.com/entry/droopy-v02,143/)|:---|N/A|
|[Bobby: 1](https://www.vulnhub.com/entry/bobby-1,42/)|:---|N/A|
|[Brainpan: 1](https://www.vulnhub.com/entry/brainpan-1,51/)|スタックベースのバッファオーバーフロー（[CWE-119](https://jvndb.jvn.jp/ja/cwe/CWE-119.html)）を突くエクスプロイトコード開発に関してFuzzing、EIPの制御、JMP ESPの検索、Bad Charactersの検証という一通りのトピックについて確認することができる仮想イメージです。|[あり](https://qiita.com/v_avenger/items/fef9fa1eb92b4cf7a332)|

このほか、 [TJ_Null](https://twitter.com/TJ_Null)が「OSCP:[Offensive Security Certified Professional](https://www.offensive-security.com/pwk-oscp/)」試験、「OSWP:[Offensive Security Web Expert](https://www.offensive-security.com/awae-oswe/)」試験に類似した仮想イメージリストを公開しています。
こちらの情報を参考に取り組むべき対象を選ぶのもオススメです。

- TJ_Null, [NetSecFocus Trophy Room](https://docs.google.com/spreadsheets/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8)

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">It is time! I have made an update to my OSCP-Like VMs List. The biggest update for sure...30 new boxes have been added. I added 26 <a href="https://twitter.com/VulnHub?ref_src=twsrc%5Etfw">@VulnHub</a> boxes to the list. <br><br>To check out the full list of OSCP-Like VM&#39;s you can find it here: <a href="https://t.co/sBy0l6uitf">https://t.co/sBy0l6uitf</a> <a href="https://t.co/yRBgBAhiDt">pic.twitter.com/yRBgBAhiDt</a></p>&mdash; Tony (@TJ_Null) <a href="https://twitter.com/TJ_Null/status/1238473568624787456?ref_src=twsrc%5Etfw">March 13, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 『ハッキング・ラボのつくりかた 完全版』採用の仮想マシン
IPUSIRON『ハッキング・ラボのつくりかた 完全版 仮想環境におけるハッカー体験学習』, 翔泳社, 2024. では、「第2部 実験編」にて、VulnHubとMetasploitable3を使ったハッキング・ラボを構築する方法が紹介されています。
ここでは、対象となっている仮想マシンのリストについて示します。

|イメージ名|おすすめポイント|Experiment No.|
|:---|:---|:---|
|[Potato: 1](https://www.vulnhub.com/entry/potato-1,529/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #01](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[DC: 1](https://www.vulnhub.com/entry/dc-1,292/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #02](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[DC: 2](https://www.vulnhub.com/entry/dc-2,311/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #03](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Napping: 1.0.1](https://www.vulnhub.com/entry/napping-101%2C752/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #04](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Victim: 1](https://www.vulnhub.com/entry/victim-1%2C469/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #05](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[PwanLab: init](https://www.vulnhub.com/entry/pwnlab-init%2C158/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #06](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[EvilBox: One](https://www.vulnhub.com/entry/evilbox-one,736/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #07](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Raven: 1](https://www.vulnhub.com/entry/raven-1,256/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #08](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[VulnOS: 2](https://www.vulnhub.com/entry/vulnos-2,147/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #09](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[NullByte: 1](https://www.vulnhub.com/entry/nullbyte-1,126/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #10](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Mr-Robot: 1](https://www.vulnhub.com/entry/mr-robot-1%2C151/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #11](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Toppo: 1](https://www.vulnhub.com/entry/toppo-1,245/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #12](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Jangow: 1.0.1](https://www.vulnhub.com/entry/jangow-101%2C754/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #13](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Deathnote: 1](https://www.vulnhub.com/entry/deathnote-1%2C739/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #14](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Empire: LupinOne](https://www.vulnhub.com/entry/empire-lupinone%2C750/)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #15](https://www.shoeisha.co.jp/book/detail/9784798185996)|
|[Metasploitable3](https://github.com/rapid7/metasploitable3)|;---|[ハッキング・ラボのつくりかた 完全版, Experiment #16](https://www.shoeisha.co.jp/book/detail/9784798185996)|

# 意図的に脆弱性を残したサーバを公開しているサービス
VulnHub以外にも、意図的に脆弱性を残したサーバを公開している練習サービスは複数あります。

- [Avatao](https://avatao.com/)
- [CSC Play on Demand](https://pod.cybersecuritychallenge.org.uk/)
- [Defend the Web](https://defendtheweb.net/)
- [DVWA - Damn Vulnerable Web Application](http://www.dvwa.co.uk/)
- [Embedded Security CTF](https://microcorruption.com/login)
- [Enigma Group](https://www.enigmagroup.org/)
- [Google Gruyere](http://google-gruyere.appspot.com/)
- [Gh0st Lab](http://www.gh0st.net/)
- [Hack Me](http://hack.me/)
- [Hacking-Lab](https://www.hacking-lab.com/index.html)
- [Hacker Test](http://www.hackertest.net/)
- [Hack The Box](https://www.hackthebox.eu/)
- [Hack This Site](https://www.hackthissite.org/)
- [HackThis](https://defendtheweb.net/?hackthis)
- [HackQuest](http://www.hackquest.com/)
- [Hacking-Lab](https://www.hacking-lab.com/)
- [Hax.Tor](http://hax.tor.hu/welcome/)
- [Metasploitable3](https://github.com/rapid7/metasploitable3)
- [Virtual Hacking Labs](https://www.virtualhackinglabs.com/)
- [VulnHub](https://www.vulnhub.com/)
- [OverTheWire](https://overthewire.org/wargames/)
- [pwn.college](https://www.pwn.college/)
- [PentesterLab PRO](https://pentesterlab.com/)
- [Root-Me](https://www.root-me.org/)
- [Security Treasure Hunt](http://www.securitytreasurehunt.com/)
- [Smash the Stack](http://smashthestack.org/)
- [The Open-Source AWS-Based Cyber Range](https://medium.com/aws-cyber-range)
- [The Hacking Dojo - Dojo Media](https://hackingdojo.com/dojo-media/)
- [ThisIsLegal](https://thisislegal.com/)
- [TryHackMe](https://tryhackme.com/)
- [Try2Hack](http://www.try2hack.nl/)
- [脆弱性体験学習ツール AppGoat](https://www.ipa.go.jp/security/vuln/appgoat/)

> VulnHubには[Secret Hacker](https://twitter.com/SecretHacker8)による、学習用の **脆弱な** Webアプリケーションを12件収録した「[Hackable - Secret Hacker: Vulnerable Web Application Server](https://www.vulnhub.com/entry/hackable-secret-hacker-vulnerable-web-application-server,411/)」イメージが公開されています。詳細はSecret Hackerの[記事](https://secrethackersite.blogspot.com/2019/10/hackable-secret-hacker-vulnerable-web.html)をご確認ください。
>
>また、[@eystsen](https://twitter.com/eystsen)は、9件の学習用Webアプリケーションについて、導入を支援するbashスクリプト「[Local PentestLab Management Script](https://github.com/eystsen/pentestlab)」を公開しています。
これにより、Docker環境に対して、学習用Webアプリケーションを簡単に導入することが可能です。詳細は「HAPPY CODER」の[記事]((https://happy-coder.com/2018/02/18/easy-script-to-install-and-run-webgoat-dvwa-mutillidae-ii-and-bwapp-in-kali-linux-x64/))をご確認ください。

# オフェンシブな資格認定
VulnHubで磨いた実践的なスキルを資格認定という形で残すことを検討するのも有効です。

|認定組織|資格情報の略語|認定タイトル|
|:---|:---|:---|
|Offensive Security|OSCP|[Offensive Security Certified Professional](https://www.offensive-security.com/pwk-oscp/)|
|GIAC|GPEN|[GIAC Penetration Tester](https://pen-testing.sans.org/certification/gpen)|
|eLearnSecurity|eCPPT|[eLearnSecurity Certified Professional Penetration Tester](https://www.elearnsecurity.com/certification/ecpptv2/)|
|CompTIA|PenTest+|[CompTIA PenTest+](https://www.comptia.jp/certif/cybersecurity/comptia_pentest/)|

>より完全なリストをこちらで参照することが可能です。
>
>- Security Certification Progression Chart 2010 Version 6.1 | November 2019, https://www.reddit.com/r/cybersecurity/comments/e23ffz/security_certification_progression_chart_2020/
>- List of computer security certifications, https://en.m.wikipedia.org/wiki/List_of_computer_security_certifications

# 参考書籍
- IPUSIRON（2024）, 『[ハッキング・ラボのつくりかた 完全版 仮想環境におけるハッカー体験学習](https://www.amazon.co.jp/dp/4798174572)』, 翔泳社
- 上野宣（2019）, 『[Webセキュリティ担当者のための脆弱性診断スタートガイド 第2版 上野宣が教える新しい情報漏えいを防ぐ技術](https://www.amazon.co.jp/dp/4798159166/)』, 翔泳社
- 中村行宏（2019）, 『[サイバー攻撃の教科書 (ハッカーの学校)](https://www.amazon.co.jp/dp/4781702384/)』, データハウス
- Peter Kim（2019）, 『[サイバーセキュリティ レッドチーム実践ガイド](https://www.amazon.co.jp/dp/4839967571/)』, マイナビ出版
- IPUSIRON（2018）, 『[ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習](https://www.amazon.co.jp/dp/B07JJKLZNW)』, 翔泳社
- IPUSIRON（2020）, 『[ハッキング・ラボの構築で困ったら読む本](https://hack.booth.pm/items/1850777)』, BOOTH
- Peter Kim（2016）, 『[サイバーセキュリティテスト完全ガイド ~Kali Linuxによるペネトレーションテスト](https://www.amazon.co.jp/dp/4839959552/)』, マイナビ出版
- Robert Svensson（2016）,『[From Hacking to Report Writing: An Introduction to Security and Penetration Testing](https://www.amazon.co.jp/dp/1484222822)』
- Georgia Weidman（2014）, 『[Penetration Testing: A Hands-On Introduction to Hacking](https://www.amazon.co.jp/dp/1593275641)』
- Dafydd Stuttard, Marcus Pinto（2011）, 『[The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws](https://www.amazon.co.jp/dp/1118026470/)』
- Chris Anley, John Heasman, Felix Lindner, Gerardo Richarte(2007), 『[The Shellcoder's Handbook: Discovering and Exploiting Security Holes](https://www.amazon.co.jp/dp/047008023X)』


# まとめ
VulnHubの魅力は、ローカルに仮想イメージを展開すること。これにより、環境を誰にも荒らされることなく、じっくりと、自分だけの標的マシンに取り組むことができます。

VulnHubに取り組むことで「ペネトレーションテスター」としてのスキルアップが期待できます。その楽しみ方は人それぞれです。

- 攻略数を増やしていく
- 一つの標的マシンを繰り返し攻略する
- 攻略した標的マシンのログを鑑賞する
- 攻略した仮想マシンの堅牢化を行う

いずれにせよ、アウトプットにこだわってみてください。**「情報を整理する力」と「発信力」**を楽しみながら身につけることができるはずです。
本稿をきっかけにVulnHubに取り組む人が一人でも増え、日本語での「Walkthrough」（攻略法）投稿が充実してくれれば嬉しい限りです。

# 参考情報
## ペネトレーションテスト
[脆弱性診断士スキルマッププロジェクト](https://www.owasp.org/index.php/Pentester_Skillmap_Project_JP)では、「[ペネトレーションテストについて](https://github.com/ueno1000/about_PenetrationTest)」と題する文書にて、次のとおり定義しています。

>「ペネトレーションテスト (Penetration Test / Testing）」とは、明確な意図を持った攻撃者にその目的が達成されてしまうかを検証するためのセキュリティテストの一種です。
>
>ペネトレーションテストではその組織が持つすべてのシステム、もしくは指定されたシステム全体を対象として、実際の攻撃者が使用しているツールや脆弱性、ソーシャルエンジニアリングなどを利用して一定期間内に目的を達成できるかどうかの調査を行います。 テストを実施する際には遠隔操作を行う疑似マルウェアを用いたり、組織の内部ネットワークの端末やサーバーへの侵入を繰り返したり、Active Directoryなどのシステムへの攻撃を行い管理者権限を奪ったりすることもあります。
>
ペネトレーションテストはいわゆる脆弱性診断のようなWebアプリケーション単体やプラットフォーム単体のテストではなく、また網羅的に脆弱性の調査を行うわけではありません。

- NetSec Focus, The Journey to Try Harder: TJnull’s Preparation Guide for PWK/OSCP, https://www.netsecfocus.com/oscp/2019/03/29/The_Journey_to_Try_Harder-_TJNulls_Preparation_Guide_for_PWK_OSCP.html#vulnerable-machines
- Privilege Escalation Cheatsheet (Vulnhub), https://www.hackingarticles.in/privilege-escalation-cheatsheet-vulnhub/

## エクスプロイトコード開発
- Corelan Team, Exploit writing tutorial part 1 : Stack Based Overflows, https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/
- THE GREY CORNER, Stack Based Windows Buffer Overflow Tutorial, http://www.thegreycorner.com/2010/01/beginning-stack-based-buffer-overflow.html
- Security Sift, Windows Exploit Development – Part 1: The Basics, http://www.securitysift.com/windows-exploit-development-part-1-basics/
- [スタックベースバッファオーバーフローの脆弱性を突くエクスプロイトコードの開発](https://qiita.com/v_avenger/items/0af8602e4572889f9184)

## VMware / 仮想化ソフトウェア
- Fusion のインストール, https://docs.vmware.com/jp/VMware-Fusion/11/com.vmware.fusion.using.doc/GUID-ACC3A019-93D3-442C-A34E-F7755DF6733B.html
- 仮想マシン ファイル, https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.vm_admin.doc/GUID-CEFF6D89-8C19-4143-8C26-4B6D6734D2CB.html

## Kali Linuxの設定
- Kali Linux ver2019.4の導入と日本語化, https://qiita.com/serion253/items/86a1d351462922c53846
- [初心者向け]Kali Linux on WSL 初期設定 最強への育て方, https://qiita.com/delphinz/items/72f5a4a9b52ac454fc74
- 「ハッキング道場〜ペネトレ練習用VMのご紹介〜」, https://speakerdeck.com/ctrl_z3r0/hackingdojo-de-ice-1-dot-110-20191203
- Hack The Boxを楽しむためのKali Linuxチューニング, https://qiita.com/v_avenger/items/c85d946ed2b6bf340a84