外部コマンド実行攻撃@PHP技術

外部コマンド実行攻撃についてです。
前期のeval攻撃と似たような攻撃手法ですが、防御が違うので別枠で設けてます。
さて、外部コマンド実行攻撃とは、PHP側にリクエストをもとにしたプログラム実行系コマンドが存在する場合、リクエストを実行系コマンドの引数にすることで任意のコマンドを実行する攻撃です。

  • 外部コマンド実行攻撃 攻撃側

外部コマンド実行攻撃に対する脆弱なコードを書きます
GETでdirのディレクトリのファイル一覧を表示させています。

if(!empty($_GET['dir'])){
    system("dir ".$_GET['dir']);
}

ここへ、以下のURLを打ち込んで攻撃してみます。

http://localhost/sites/PHPS/2-3.php?dir=C:\|type%20c:\zeijaku.txt

すると。。。関係ないファイルの内容が見れてしまいました。目的としたコマンド以外にもtypeコマンドが実行された結果です

  • 外部コマンド実行攻撃 防御側

これに対しての防御法は、

の3つがあります。

シェルエスケープ法はescapeshellarg()関数を利用した回避策です。
ホワイトリスト法は名のとおり引数に指定してよい引数リストを保持してチェックする方法です。
safe_mode制限は、php.iniで
safe_mode=On safe_mode_exec_dirを指定することで、実行されても良い外部コマンドを限定することができます。


↓は正常に動作した時のSS