web-dev-qa-db-ja.com

POST // cgi-bin / php attack?

私はこの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です。そうです。

この攻撃を防ぐにはどうすればよいですか?

14
PiTheNumber

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を実行します。

13
PiTheNumber

明らかなupdate allアドバイスに加えて、最も簡単な解決策はphpインタープリターをcgi-binディレクトリに置かないでくださいです。実際、cgi-binディレクトリにanyインタープリターを置かないでください。 php、Perl、bash、sed、awk、vi、またはanyプログラムに渡された任意のコマンドを実行するプログラムではありません。

ホスティング構成でインタープリターをcgi-binに配置する必要がある場合は、ホスティング構成を変更します。このばかげた考えに頼らない妥当な代替案はたくさんあります。

5
tylerl