私はこのcgiインジェクションで攻撃されています:
POST //%63%67%69%2D%62%69%6E /%70%68%70?%2D%64 +%61%6C%6C%6F%77%5F%75%72%6C%5F %69%6E%63%6C%75%64%65%3D%6F%6E +%2D%64 +%73%61%66%65%5F%6D%6F%64%65%3D%6F%66% 66 +%2D%64 +%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E +% 2D%64 +%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22 +%2D%64 + %6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65 +%2D%64 +%61%75%74%6F%5F %70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74 +% 2D%64 +%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30 +%2D%64 + %63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30 +%2D%64 +%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A %2F%2F%69%6E%70%75%74 +%2D%6E HTTP/1.1
これは次のようにデコードされます
// cgi-bin/php?-d allow_url_include = on -d safe_mode = off -d suhosin.simulation = on -d disable_functions = "" -d open_basedir = none -d auto_prepend_file = php:// input -d cgi.force_redirect = 0 -d cgi.redirect_status_env = 0 -d auto_prepend_file = php:// input -n
PHPのバージョンは5.2.6-1 + lenny13です。そうです。
この攻撃を防ぐにはどうすればよいですか?
A システムのアップグレードが必要ですしかし、ここで簡単な修正を行います。
/etc/Apache2/sites-enabled/000-default
でコメントアウト:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
そしてApache2ctl restart
を行いました。現在、/cgi-bin/php
にはアクセスできません。それで解決するはずです。
とにかくこれがデフォルトである理由を疑問に思います。 sites-enabled
の他のページも確認してください。 grep "ExecCGI" /etc/Apache2/sites-enabled
を実行します。
明らかなupdate allアドバイスに加えて、最も簡単な解決策はphpインタープリターをcgi-binディレクトリに置かないでくださいです。実際、cgi-binディレクトリにanyインタープリターを置かないでください。 php、Perl、bash、sed、awk、vi、またはanyプログラムに渡された任意のコマンドを実行するプログラムではありません。
ホスティング構成でインタープリターをcgi-binに配置する必要がある場合は、ホスティング構成を変更します。このばかげた考えに頼らない妥当な代替案はたくさんあります。