eval利用攻撃@PHP技術

eval利用攻撃とは、命名こそeval関数っぽいですが、
要するにPHPコードを利用した攻撃のことです。
URL内にPHPコードを直接含ませることで、内部処理中に任意のPHPコードを実行できる可能性があります。これもインクルード攻撃同様にrootを取られる可能性があるため、危険な脆弱性です。

  • eval利用攻撃 攻撃側

まず、脆弱性のあるコードを書きます。
少しわかりにくいですが、HTMLのタグ以外で使われている文字列の中に$_GET['zeijaku_data']が含まれていた場合、太字に変換する処理を行っています。

if(!empty($_GET['zeijaku_data'])){
    $text = substr(preg_replace('/\>.*</esU',"str_replace('".$_GET['zeijaku_data']."','<b>".$_GET['zeijaku_data']."</b>','\\0')",">$text<"),1,-1);
}

この中に攻撃をしてみます。以下のURLをたたくと・・・

http://localhost/sites/PHPS/2-3.php?zeijaku_data=a','a',phpinfo());//


なんと、PHPinfoが出てきてしまいました。

  • eval利用攻撃 防御側

これに対する防御法としては、以下の方法を同時に実施する必要があります。

ホワイトリスト法は想定したリクエスト(実行できる関数の配列)に対してのみpreg_replace関数を実行します。
preg_replave_callback()関数を利用する方法については、いまいち効果がわからないので調査します。
コールバック関数ホワイトリスト法は、上記のpreg_replave_callback()法に加え、実行できるコールバック関数を制限する方法です。