web-dev-qa-db-ja.com

場所がわかっている場合、脆弱なサーバーでアップロードされたphpスクリプトを実行しますか?

Webサイトをテストする必要があり、脆弱なファイルのアップロードを見つけました。ファイル拡張子が.jpg、.png、.pdfであるかどうかのみがチェックされます。これを回避するには、script.php.jpgという名前のファイルをアップロードします。アップロードされたファイルは/uploadsに保存されています。

どうすればそのスクリプトを実行できますか?ブラウザでhttp://example.com/uploads/script.php.jpgと入力すると、スクリプトが実行されません。サーバーがphpコードを実行できること、サーバーにファイルの脆弱性があることを知っています。

1
manuel-hoelzl

サーバーの設定が大幅に間違っていない限り、.jpgファイルが.phpファイルとして実行されることはありません。 .の後のlastセグメントは、ファイル拡張子を決定するときに関連するものです。つまり、サーバーが正しく処理するファイルをアップロードしています。 jpgファイルとして。

したがって、script.php.jpgを単独でアップロードできることは脆弱性ではありません。

たとえば、LFIの脆弱性がどこかにある場合、アップロードされたファイルを含めると、ファイルが実行されます(ファイル拡張子に関係なく)。または、サーバー構成ファイル(Apacheの.htaccessなど)をアップロードできれば、.jpgファイルを.phpファイルとして実行するようにサーバーを再構成できます。

ただし、これらは脆弱性であり、.php.jpgファイルをアップロードする機能ではありません。アップロード時のMIMEタイプを多層防御としてチェックすることが可能です。しかし、それは bypassed になる可能性があるため、このようなチェックを行わないことは脆弱性と見なされません(チェックが推奨されていますが)。

4
tim

サーバーはjpg拡張子を読み取っているので、それが画像であり、phpファイルとして解釈されないため、ブラウザーに送信します。

アップロードされたファイルを使用するには、@ timが言ったように、LFIなどの別の脆弱性を利用する必要があります

あなたが試すことができる別のことは、.jpgが追加されないようにファイル名フィルターをいじることです。たとえば、ファイル名をscript.php\0.jpgのように設定できます。フィルターが適切に実装されていない場合、最後に.jpgを読み取り、有効なファイルとして解釈しますが、保存されたときはscript.phpはファイル名の有効な文字ではないため、\0として保存できます

また、拡張子によるファイルタイプのチェックはWindowsのものであることにも注意してください。 UNIXライクなシステムのファイルタイプは マジックナンバー によってチェックされ、.phpファイルなどの実行可能なスクリプトは Shebang s。基盤となるシステムがunixのようなものである場合は、アップロードされたスクリプトにシバンを追加してみてください(まだそこにない場合)。

0
Mr. E