Webサイトをテストする必要があり、脆弱なファイルのアップロードを見つけました。ファイル拡張子が.jpg、.png、.pdfであるかどうかのみがチェックされます。これを回避するには、script.php.jpg
という名前のファイルをアップロードします。アップロードされたファイルは/uploads
に保存されています。
どうすればそのスクリプトを実行できますか?ブラウザでhttp://example.com/uploads/script.php.jpg
と入力すると、スクリプトが実行されません。サーバーがphpコードを実行できること、サーバーにファイルの脆弱性があることを知っています。
サーバーの設定が大幅に間違っていない限り、.jpgファイルが.phpファイルとして実行されることはありません。 .
の後のlastセグメントは、ファイル拡張子を決定するときに関連するものです。つまり、サーバーが正しく処理するファイルをアップロードしています。 jpgファイルとして。
したがって、script.php.jpg
を単独でアップロードできることは脆弱性ではありません。
たとえば、LFIの脆弱性がどこかにある場合、アップロードされたファイルを含めると、ファイルが実行されます(ファイル拡張子に関係なく)。または、サーバー構成ファイル(Apacheの.htaccess
など)をアップロードできれば、.jpgファイルを.phpファイルとして実行するようにサーバーを再構成できます。
ただし、これらは脆弱性であり、.php.jpgファイルをアップロードする機能ではありません。アップロード時のMIMEタイプを多層防御としてチェックすることが可能です。しかし、それは bypassed になる可能性があるため、このようなチェックを行わないことは脆弱性と見なされません(チェックが推奨されていますが)。
サーバーはjpg
拡張子を読み取っているので、それが画像であり、php
ファイルとして解釈されないため、ブラウザーに送信します。
アップロードされたファイルを使用するには、@ timが言ったように、LFIなどの別の脆弱性を利用する必要があります
あなたが試すことができる別のことは、.jpg
が追加されないようにファイル名フィルターをいじることです。たとえば、ファイル名をscript.php\0.jpg
のように設定できます。フィルターが適切に実装されていない場合、最後に.jpg
を読み取り、有効なファイルとして解釈しますが、保存されたときはscript.php
はファイル名の有効な文字ではないため、\0
として保存できます
また、拡張子によるファイルタイプのチェックはWindowsのものであることにも注意してください。 UNIXライクなシステムのファイルタイプは マジックナンバー によってチェックされ、.php
ファイルなどの実行可能なスクリプトは Shebang
s。基盤となるシステムがunixのようなものである場合は、アップロードされたスクリプトにシバンを追加してみてください(まだそこにない場合)。