PHPの脆弱性をついたアクセス

今朝、開発日和・・・WEBサーバのアクセス・ログを眺めていたら、PHPの脆弱性を突くようなコードがポストされていました。

引数に、
allow_url_include
auto_prepend_file
-n (コマンドライン引数)
-d (コマンドライン引数)
/etc/passwd
などがあり、明らかにパスワードファイルを狙ったポストでした。

開発日和・・・のサーバは、現在のところ最新のパッチをあてているので特に問題は無いのですが、面白そうなので色々調べてみました。

● allow_url_include

・PHP_INI_ALL
・引数はBoolean [On/Off 1/0] デフォルトでは0
・ このオプションを指定すると include, include_once, require, require_once で URL 対応の fopen ラッパーが使用できるようになる
・allow_url_fopenが ONでないと使えません。

 

● auto_prepend_file

・PHP_INI_PERDIR
・引数はString(ファイル名など)
・.htaccessファイルなどに「php_value auto_prepend_file (ファイル名)」というように記述しておくのが一般的。
・prependと書かれている通り、目的のPHPファイル実行前に引数に指定された(ファイル)を付加して実行する。
・print_r等を使って変数の中身などを表示・確認するのに便利ですよね。上手に使えば、デバッグの達人になるかも・・・。

 

● -n (コマンドライン引数)

・No php.ini file will be used.
php.iniファイルを使いませんという意味。
Windowsで言うと、セーフティーモードのようなものでしょうか?
php-cliをデフォルトの設定ファイル(php.ini)無しで動作させるという意味。

 

● -d (コマンドライン引数)

・-d foo[=bar]     Define INI entry foo with value ‘bar’.
-dオプションを引数としてPHPをコマンドラインで実行するとき、上記説明ではfoo(=bar)という初期設定を定義するという意味

 

と、それぞれの設定をきちんと行っていれば、非常に便利な設定のようです。

が、色々調べたところ、CVE-2012-1823に記事が出ていました。
「sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not properly handle query strings that lack an = (equals sign) character, which allows remote attackers to execute arbitrary code by placing command-line options in the query string, related to lack of skipping a certain php_getopt for the ‘d’ case.」

なにやら、PHP 5.3.12以前および5.4.2以前の5.4バージョンにおいて、sapi\cgi\cgi_main.cでは「=」の不足する問い合わせを正しく処理できない・・・。みたいなことが書いていますね。 ふむふむ。
で、これによって、リモートからの攻撃を実行してしまう・・・。
ほうほう。

つまり、開発日和・・・にポストされた引数から見て、
・-nでPHP.iniファイルを無効にして、
・-dで任意に設定を付加して(今回の場合付加するものは、次に続くallow_url_include等)、
・allow_url_includeをONにして、
・auto_prepend_fileにetc/passwdを設定していたので・・・、
余計なPHP.iniファイルは使用せずに、本来のPHP/HTMLファイルを処理する前にetc/passwdファイルを付加して実行しなさい。という事なのですね。

もちろんetc/passwdファイルはphpファイルではないので、PHPが該当バージョンでこのポストが実行されてしまっていたら、パスワード・ファイルの中身がズラズラ~っと相手のブラウザに表示されてしまうという事なのですね。

愉快犯なのでしょうが、Linux等ではデフォルトでシャドウ・ファイルを利用することになっているパスワード系のファイルを抜いて、何が面白いのかなぁ・・・と思ってしまいます。
そっか、Linux系ならメルアドとして利用できるのかな?
いずれにせよ、アップデートはお早めに!

いやはや、勉強になりますwww。

Comments are closed.