平成30年春期試験午前問題 午前Ⅱ 問2

午前Ⅱ 問2解説へ
Webサーバのログを分析したところ,Webサーバへの攻撃と思われるHTTPリクエストヘッダが記録されていた。次のHTTPリクエストヘッダから推測できる,攻撃者が悪用しようとしている脆弱性はどれか。ここで,HTTPリクエストヘッダはデコード済みである。

〔HTTPリクエストヘッダの部分〕
GET /cgi-bin/submit.cgi?user=;cat /etc/passwd HTTP/1.1
Accept: */*
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip,deflate
User-Agent: (省略)
Host: test.example.com
Connection: Keep-Alive

  • HTTPヘッダインジェクション
  • OSコマンドインジェクション
  • SQLインジェクション
  • クロスサイトスクリプテイング
正解 問題へ
分野:テクノロジ系
中分類:セキュリティ
小分類:情報セキュリティ
HTTPリクエストヘッダ中で注目すべきは「?user=;cat /etc/passwd」の部分です。

「cat」は、UNIX系のOSにおいて指定ファイルの内容をそのまま標準出力に出力するコマンドです。そして「/etc/passwd」は、ユーザのアカウント情報(ユーザ名・パスワード等)が記録されているファイルですから、「cat /etc/passwd」はシステムが管理するユーザのアカウント情報を全て表示する操作を意図したものです。

もしWebアプリケーションの処理内でOSのシェルを利用する関数を使用し、これにuserパラメタの値をそのまま実行時引数として与えたとすると、サブルーチンとして呼び出されるOSのコマンド解釈プログラムでは以下の命令が実行されます。
本来実行されるコマンド名 ;cat /etc/passwd
実行時引数内の「;(セミコロン)」は命令の区切りを意味するため、システムは上記の文字列を以下の2つの命令であると解釈します。
本来実行されるコマンド名
cat /etc/passwd
この結果「cat /etc/passwd」が実行され、ブラウザの結果画面に秘密情報であるアカウント情報が表示されてしまいます。

このような攻撃を受ける可能性があるため、サブシェルに渡すコマンドに外部から与えられたデータを含める場合は値のチェックが欠かせません。「;」以外にも、「|」「&」「`」「(」「)」などは別コマンドの実行に使われるものとして特に警戒する必要があります。

設問の攻撃はWebアプリケーションに任意のOSコマンドを実行させようとするものですから、OSコマンドインジェクションの脆弱性を悪用したものと言えます。したがって「イ」が正解です。

Perlのexec(),open()、PHPのexec(), passthru(), proc_open(), shell_exec(), system()、Pythonのos.system(), os.popen()などがある。

この問題の出題歴


Pagetop