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, (^^ゞ