WebGoatを用いたクロスサイトスクリプティング #01

クロスサイトスクリプティングとは

 今回は,「SQLインジェクション」に引き続き「クロスサイトスクリプティング」をテーマに問題を解いていきます.

クロスサイトスクリプティング(Cross-Site Scripting/XSS)とは,動的Webページが情報処理を行う際に,意図しないスクリプトを混入させて予期しない表示や動作を行わせる攻撃.

LAB: Cross Site Scripting

 初めに「LAB: Cross Site Scripting」を解きます.「SQLインジェクション」の際と同様にOracle VM VirtualBoxを開き,OWASP-bwaを起動します.ポップアップが出てくるので,IPアドレスを確認します.その内容をブラウザ(firefox)に入力して,OWASP BWAのページが開けたらOWASP WebGoatを選択します.WebGoatのページの目次から,「Cross-Site Scripting(XSS)」の中の「LAB: Cross Site Scripting」を開きましょう.詳細はリンクを参照してください.この問題は全部で4つのステージで構成されています.今回は例題として,Stage1及びStage5を扱います.

  • stage1: Stored XSS
  • stage2: Block Stored XSS using Input Validation
  • stage3: Stored XSS Revisited
  • stage4: Block Stored XSS using Output Validation
  • stage5: Reflected XSS
  • stage6: Blocked Reflected XSS

Stage1

Stored XSS(蓄積型XSS)とは,元のWebサイトが持っている情報や入力フォームを活用した攻撃.正常な動作をしなくなるようなスクリプトを,入力フォーム等に書き込む,という手法が採られる.

問題

 ステージ1では,Stored XSSを用いて,「Jerry」のプロフィールに書かれている住所の「Street」の入力フィールドを書き換えることが目標です.攻撃者はTomと仮定します.また,各アカウントのパスワードは,ユーザーの名前(ファーストネーム)を小文字にしたものです.

解答

Stored XSS

  1. Tomのアカウントに入ります.パスワードは「tom」です.

    f:id:y-cubed:20170612205640p:plain

  2. Tomのプロフィール情報を見るために「ViewProfile」ボタンをクリックします.

    f:id:y-cubed:20170612205424p:plain

  3. Tomのプロフィール情報のうち「Street」の欄を編集するために,「EditProfile」ボタンをクリックします.

    f:id:y-cubed:20170612204817p:plain

  4. プロフィールを開くと下のようになっていることを確認します.

    f:id:y-cubed:20170612205035p:plain

  5. 住所(Street)の入力フィールドに

     "><script>alert("bomb!")</script>
    を書き加えます.

    f:id:y-cubed:20170612204422p:plain

  6. 住所(Street)の入力フィールドに書き加え終わったら,プロフィール設定をアップデートするために,「UpdateProfile」ボタンをクリックします.f:id:y-cubed:20170612202838p:plain

  7. プロフィールをアップデートすると,下のような「bomb!」と書かれたポップアップが表示されるので「OK」を押します.f:id:y-cubed:20170612202258p:plain

  8. プロフィールをアップデートしたら,Tomのアカウントからログアウトするために「Logout」ボタンをクリックします.f:id:y-cubed:20170612201707p:plain

 

Stored XSSが成功したかの確認

  1. 確認として,Jerry Mouseのアカウントに入ります.パスワードは「jerry」です.
  2. Jerryのアカウントに入れたら,Tomのプロフィールを見るために「ViewProfile」のボタンをクリックしてみます.f:id:y-cubed:20170612200843p:plain
  3.  下のように「bomb!」と表示されればStage1はクリアです.
    f:id:y-cubed:20170612200605p:plain