戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2012年 春期 午前(科目A)45


問題文

ディレクトリトラバーサル攻撃に該当するものはどれか。

選択肢

Webアプリケーションの入力データとしてデータベースへの命令文を構成するデータを入力し、想定外のSQL文を実行させる。
Webサイトに利用者を誘導した上で、Webサイトの入力データ処理の欠陥を悪用し、利用者のブラウザで悪意のあるスクリプトを実行させる。
管理者が意図していないパスでサーバ内のファイルを指定することによって、本来は許されないファイルを不正に閲覧する。(正解)
セッションIDによってセッションが管理されるとき、ログイン中の利用者のセッションIDを不正に取得し、その利用者になりすましてサーバにアクセスする。

🔒 解説は解答すると表示されます

ディレクトリトラバーサル攻撃【午前解説】

正解の理由

正解:
ウは「管理者が意図していないパスでサーバ内のファイルを指定することによって、本来は許されないファイルを不正に閲覧する」と説明しており、これはまさにディレクトリ(パス)トラバーサル攻撃の定義です。攻撃者は相対パスの移動(../)やURLエンコードなどを使って、アプリケーションの想定する公開可能なディレクトリ外のファイルにアクセスします。これにより /etc/passwd や設定ファイル、ソースコードなどが漏洩する危険があります。

解法ステップ

  1. 問題文で「パス」「サーバ内のファイル」「閲覧」「意図していない」といったキーワードを探す。
  2. それらがファイルパスの不正操作を示すなら「ディレクトリトラバーサル(パストラバーサル)」を想起する。
  3. 他の選択肢(SQL文実行、スクリプト実行、セッションID盗用)と照らして用途・影響を比較する。
  4. ファイル参照を直接述べるものを正解にする。

選択肢別の誤答解説

  • ア: Webアプリの入力で想定外のSQL文を実行させる記述は「SQLインジェクション」です。ファイルパス操作とは異なります。
  • イ: 利用者のブラウザで悪意のあるスクリプトを実行させるのは「クロスサイトスクリプティング(XSS)」で、クライアント側のスクリプト実行が目的です。
  • ウ: が正解です。サーバ内のファイルに対するパス操作で不正に閲覧する攻撃はディレクトリトラバーサルを指します。
  • エ: セッションIDを盗用してなりすます攻撃は「セッションハイジャック」「セッション固定攻撃」などで、ファイル参照ではありません。

よくある誤解

  • ディレクトリトラバーサルを「SQL注入」や「XSS」と混同すること。攻撃対象や侵害手法が異なります。
  • 認証があるサイトだから安全、と思い込むこと。認証後の機能に脆弱性があれば内部ファイルも取得され得ます。
  • 単純な文字列置換で防げると考える誤り。エンコードや二重エンコード、シンボリックリンクなどで回避されることがあります。

補足コラム

ディレクトリトラバーサルの代表的な手口には、"../" を直接含める方法のほか、URLエンコード(%2e%2e%2f)、二重エンコード、%00(NULLバイト)等の特殊文字を使う方法があります。プラットフォーム差(Unixの / と Windows の \)やシンボリックリンク、webサーバのドキュメントルート設定も重要です。
推奨される対策(開発側):
  • 入力はホワイトリストで許可する(許可されたファイル名やIDのみ受け付ける)。
  • パスを結合・正規化(canonicalize)して、想定したベースディレクトリ外に出ないか確認する。
  • ファイルを直接パスで渡さず、IDとマッピングする(DBやマッピングテーブルで管理)。
  • ファイル公開は最小権限で行う。ディレクトリの列挙を無効化する。
  • ログ監視で "../" や "%2e%2e" を検出する。
サンプル(Python): パス正規化とベース比較で簡易的に保護する例
import os
from urllib.parse import unquote

def is_safe_path(base_path, user_path):
    user_path = unquote(user_path)  # URLデコード
    full_path = os.path.normpath(os.path.join(base_path, user_path))
    # realpath を使ってシンボリックリンクにも対応する場合は realpath を検討
    return os.path.commonpath([base_path, full_path]) == base_path
注意点:シンボリックリンクやファイルシステムの差異、I/O 時のタイム・オブ・チェック/タイム・オブ・ユース(TOCTOU)問題などに留意してください。

FAQ

Q: ディレクトリトラバーサルとLFI(Local File Inclusion)は同じですか?
A: 近接する概念ですが厳密には異なります。ディレクトリトラバーサルはファイルパスを不正に指定して参照する技術で、LFI はその結果としてローカルファイルを実行・含める脆弱性のことを指す場合があります。両者は連動して悪用されます。
Q: テスト時の典型的なペイロードは?
A: ../、../../etc/passwd、%2e%2e%2f、..%5c などを試し、レスポンスやステータスコード、ファイルの中身を確認します。
Q: Windows と Unix で注意点は何ですか?
A: パス区切り文字が異なる(\ と /)ため両方の表現を試す必要があります。またドライブレターや UNC パスも考慮します。
Q: 侵害を検出するログのヒントは?
A: アクセスログに "../" や "%2e%2e"、疑わしいファイル名や非公開ファイルへのアクセス成功(200)が記録されていないか確認します。

関連キーワード: ディレクトリトラバーサル、パストラバーサル、Directory Traversal、ファイルパス検証、入力正規化、ホワイトリスト、正規化検証、Webセキュリティ
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について