Shikata Ga Nai

Private? There is no such things.

LAB: Webシェルアップロードによるリモートコード実行

Hello there, ('ω')ノ

🔍 ラボ概要

このラボでは、ファイルアップロード機能に脆弱性が存在し、アップロードされたファイルに対する検証が行われていません。その結果、攻撃者は任意のPHPスクリプトをアップロードし、サーバー上で実行することが可能です。

目標は、PHP製のWebシェルをアップロードし、/home/carlos/secret ファイルの内容を取得して提出することです。


🛠️ 解決手順

1. アカウントへのログイン

  • 指定された資格情報を使用してアカウントにログインします。

    • ユーザー名: wiener
    • パスワード: peter

2. アバター画像のアップロード機能を確認

  • アカウント設定ページに移動し、アバター画像のアップロード機能があることを確認します。

3. 任意の画像をアップロードして挙動を確認

  • 任意の画像ファイルをアップロードし、アカウントページに戻ってアップロードされた画像が表示されることを確認します。
  • ブラウザで画像を右クリックし、「新しいタブで画像を開く」を選択して、画像のURLを確認します。

    • 例: https://<LAB-ID>.web-security-academy.net/files/avatars/<画像ファイル名>

4. Webシェルの作成

  • 以下の内容を持つPHPファイルを作成し、exploit.php という名前で保存します。
  <?php echo file_get_contents('/home/carlos/secret'); ?>

5. Webシェルのアップロード

  • アバター画像のアップロード機能を使用して、exploit.php ファイルをアップロードします。
  • アップロード後、サーバーからのレスポンスでアップロードが成功したことを確認します。

6. アップロードされたWebシェルへのアクセス

  • ブラウザで以下のURLにアクセスします。
  https://<LAB-ID>.web-security-academy.net/files/avatars/exploit.php
  • ページに carlos の秘密情報が表示されることを確認します。

7. 秘密情報の提出

  • 表示された秘密情報をコピーし、ラボのバナーにある「Submit solution」ボタンを使用して提出します。

💡 ポイントと注意点

  • ファイルの保存場所: アップロードされたファイルは /files/avatars/ ディレクトリに保存されます。これは、アップロードされたファイルがWebから直接アクセス可能であることを意味します。

  • ファイルの実行権限: サーバーが .php ファイルを実行可能な設定になっているため、アップロードされたPHPファイルがサーバー上で実行されます。

  • セキュリティ上の問題: このような設定は、攻撃者にとって非常に危険な状況を生み出します。任意のコードをサーバー上で実行できるため、機密情報の取得やサーバーの制御が可能になります。


🧠 学習のポイント

  • ファイルアップロードの検証: アップロードされたファイルの拡張子やMIMEタイプ、内容の検証が不十分であると、悪意のあるファイルがサーバーに保存され、実行される可能性があります。

  • アップロード先ディレクトリの設定: アップロードされたファイルがWebから直接アクセス可能なディレクトリに保存されると、攻撃者がそのファイルにアクセスして実行することが容易になります。

  • サーバーの設定: サーバーが特定のファイルタイプ(例: .php)を実行可能な設定になっている場合、アップロードされたスクリプトが実行されるリスクが高まります。


✅ まとめ

このラボでは、ファイルアップロード機能の脆弱性を悪用して、サーバー上で任意のコードを実行する方法を学びました。実際のWebアプリケーションでも、同様の脆弱性が存在する可能性があるため、ファイルアップロード機能の実装には細心の注意が必要です。

Best regards, (^^ゞ