Webサーバのログを分析したところ,Webサーバへの攻撃と思われるHTTPリクエストヘッダーが記録されていた。
次のHTTPリクエストヘッダーから推測できる,攻撃者が悪用しようとしていた可能性が高い脆弱性はどれか。
ここで,HTTPリクエストヘッダー中の“%20”は空白を意味する。
〔HTTPリクエストヘッダーの一部〕
GET /cgi-bin/submit.cgi?user=;cat%20/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
正答2
解説
正解は2です。
リクエストのuserパラメータに「;cat /etc/passwd」(%20は空白)という文字列が含まれています。
「;」はシェルでコマンドを区切る記号で、「cat /etc/passwd」はアカウント情報のファイルを表示するOSコマンドです。
CGIプログラムがパラメータをそのままシェルに渡すと、攻撃者の指定したコマンドが実行されてしまいます。
【選択肢別解説】
1:× HTTPヘッダーインジェクションは、パラメータに改行コード(%0d%0a)を入れて、レスポンスに任意のヘッダーや本文を挿入する攻撃です。
今回のリクエストに改行コードは含まれていません。
2:○ 「;」でコマンドを区切り、続けてcatコマンドを実行させようとしています。
Webアプリケーション経由でサーバ上のOSコマンドを実行させるOSコマンドインジェクションの典型的な痕跡です。
3:× SQLインジェクションは、シングルクォートや「OR 1=1」などを入れて、データベースへのSQL文を改変する攻撃です。
今回の文字列はSQLの構文ではなく、シェルのコマンドです。
4:× クロスサイトスクリプティングは、「<script>」などのスクリプトを入力して、閲覧者のブラウザで実行させる攻撃です。
今回のリクエストにスクリプトのタグは含まれていません。
【ポイント】
「;」「|」「&」「`」などのシェルの特殊文字とコマンド名が入力にあれば、OSコマンドインジェクションを疑います。
/etc/passwdは、攻撃者が最初に読み出そうとする代表的なファイルです。