Hello there, ('ω')ノ
✅ 実行防止はWebシェル設置を阻止する強力な対策
サーバー設定でアップロードディレクトリを**「実行不可」にしておけば**
- 攻撃者が
.php,.jspなどをアップロードしても - スクリプトは実行されず、ただのテキストとして返る
🎯 例:
HTTP/1.1 200 OK Content-Type: text/plain <?php echo system($_GET['command']); ?>
→ Webシェルとしての意味はなく、ただのコード文字列になります。
🎭 しかし攻撃者は次を狙う
「アップロードディレクトリ以外にファイルを書き込めるか?」 ここに脆弱性が潜んでいます。
🧠 よくある構成ミス・脆弱性例
1️⃣ ディレクトリごとに実行ポリシーが違う
| ディレクトリ | 設定 |
|---|---|
/uploads/ |
実行不可 → 安全 |
/images/ |
実行不可 → 安全 |
/tmp/ |
実行不可 → 安全 |
/admin/ |
実行可能 → 危険 |
/api/uploads/ |
誤って実行可能設定 → 超危険 |
攻撃者が /api/uploads/ に書き込めた場合 → Webシェル設置成功
2️⃣ 別システム・サーバー間の設定不一致
📡 reverse proxy (リバースプロキシ)
- フロントエンドサーバー:
uploads/実行不可 → 安全 - バックエンドサーバー:
uploads/実行可能 → 超危険
攻撃者のリクエストが負荷分散(ロードバランサ)やプロキシを通ることで 意図しないサーバーに流れて成功するケースもあります。
🎯 具体的な攻撃シナリオ
- 通常の
/uploads/にshell.php→ 実行不可 → NG - 別ディレクトリ
/images/や/tmp/にパス変更で書き込み試行 - 偶然
/api/uploads/などが実行可能 → Webシェル成功
✅ 診断・ペネトレーションテストのコツ
| テクニック | 説明 |
|---|---|
| ✅ 全ディレクトリにアップロード試行 | /uploads/, /api/uploads/, /files/, /images/ など |
| ✅ URLパスのパターンを推測 | uploads, files, temp, assets, content |
| ✅ サブドメインにも試行 | cdn.example.com, files.example.com |
| ✅ 負荷分散・クラスタ環境を意識 | 同じリクエストでも「サーバーによって応答が違う」現象をチェック |
✅ Content-Type: image/jpeg 偽装 + Webシェル を試行 |
💡 攻撃者が見るチェックポイント
- 同一ドメイン内の「異なるディレクトリの設定差」
- reverse proxy, CDN, WAF などによる挙動差
- ステージング・テスト環境(
staging.example.comなど)が本番より緩い設定の可能性
✅ まとめ
- アップロード先を限定 + 実行不可ディレクトリにするが原則
- しかし「別の場所にアップロードできたら負け」です
- サーバーやディレクトリ間の設定差は攻撃者の格好の標的になります
「一箇所が守れていても全体が守れていなければ意味がない」 → ファイルアップロード診断では 必ず全経路・全パス・全ホストを網羅 することが大事です!
Best regards, (^^ゞ