このラボでは、脆弱な画像アップロード機能が含まれていて。
アップロードされるファイルに対して堅牢な検証が行われますが、
それを完全にバイパスすることができるレースコンディションの脆弱性を
利用することが可能で。
ラボを解決するために、基本的なPHPウェブシェルをアップロードし、
それを使用してファイル/home/carlos/secretの内容を外部に取り出し。
ラボバナーにあるボタンを使用して、このシークレットを提出して。
次の資格情報を使用して、自分自身のアカウントにログインすることができて。
wiener/peter
ソースコードからアップロードされたファイルはアクセス可能な
フォルダに移動され、ウイルススキャンが行われ。
ウイルスチェックが完了するまで、悪意のあるファイルは削除されず。
これは、削除される前のわずかな時間枠でファイルを実行することが
可能であることを意味して。
注意:
このレースコンディションのための広範な時間枠のため、
Burp Repeaterを使用して連続して2つのリクエストを手動で送信することで、
このラボを解決することが可能で。
まずはログインして。
アバターとして画像をアップロードした後、アカウントページに戻り。
システム上で、以下のようなスクリプトを含む exploit.php というファイルを作り
これにより、Carlosの秘密の内容を取得するスクリプトが作成されて。
<?php echo file_get_contents('/home/carlos/secret'); ?>
スクリプトをアバターとしてアップロードしようとするとアップロードできず。
インターセプトをオンにして再度、アップロードして。
ファイル名を下記のように変更して。
exploit.php.png
正常にアップロードできたようで。
ただし、スクリプトとしては機能せず。
ファイルアップロードに使用された POST /my-account/avatar リクエストを
右クリックし、イントルーダへ。
ファイル名をもどして。
Null payloadsとContinue idefinitelyを選択して。
payloads数しても大丈夫かと。
同じようにアップロードしたPHPファイルを取得するためのGETリクエストも
右クリックし、イントルーダへ。
ファイル名をもとにもどして。
まずは、はじめのイントルーダをAttackをクリックし次に2番目のイントルーダも。
PHPファイルをアップロードしてにもかかわらず、
ステータスコード200とともにPHPファイルが実行されて。
これらのリクエストは、PHPファイルがアップロードされた後、
検証に失敗して削除される前にサーバに到達したもので。
クリアできて。
注意:
GETリクエストを手動で構築する場合、適切に \r\n\r\n シーケンスで
終了させることを確認して。
また、Pythonは複数行文字列内の任意の空白を保持するため、
有効なリクエストが送信されるように適切にインデントを調整する必要があって。
Best regards, (^^ゞ