見出し画像

【Webアプリ開発】セキュリティ入門⑥ Juice Shopの活用方法の紹介

本記事は下記の記事の続きです。

前回の記事ではDVWAの活用方法について簡単に紹介しましたが、本記事ではJuice Shopの活用方法について簡単に紹介します。

Juice Shopへの行き方

Juice Shopのリポジトリへの行き方ですが、検索を使うのが便利です。

「juice shop github」というワードで検索するとすぐに見つかります。

画像1

下記にリンクを貼っておきます。

Juice Shopを動かしてみよう

Juice ShopのリポジトリのREADMEにはDocker Containerに関する記述があります。

下記の赤線のコマンドを実行するだけでJuice Shopを動かすことができます。ただし、Ubuntu環境では「sudo」を前に付けます。

画像2

sudo docker pull bkimminich/juice-shop を実行します。

画像3

sudo docker run --rm -p 3000:3000 bkimminich/juice-shop を実行します。

画像4

下記のようなメッセージが出れば無事にJuice Shopが起動しています。

画像5

ブラウザで「http://localhost:3000」を入力すると下記の画面が表示されます。

画像6

Juice Shopの課題チャレンジの始め方

まず、赤線箇所のように「/」の後に「score-board」を追加してENTERキーを押します。

画像7

その結果、Score Boardという画面に遷移します。

画像8

Juice Shopには脆弱性に関するさまざまな課題が用意されており、それらを解きながらセキュリティについて学んでいく学習教材ですが、Score Boardは課題を管理しているページです。

Score Boardを見つけること自体も課題であるため、上図の赤線箇所にあるように課題を解決した旨のメッセージが表示されています。

DOM XSS(難易度1)の課題にチャレンジしてみよう

赤線箇所のアイコン(難易度1)のみが選択されている状態にします。

画像9

難易度1の課題の中に「DOM XSS」というものがありますので、これにチャレンジします。

「DOM XSS攻撃を実行せよ」という課題です。

画像10

赤線箇所に<iframe ...>というコードがあるので、これをコピーします。

画像11

右上の検索アイコンを押します。

画像12

入力フィールドが現れます。

画像13

先ほどコピーしたものをペーストしてENTERキーを押します。

画像14

XSSの脆弱性のためにJavaScriptが実行されポップアップが表示されます。(課題が解決したので赤線箇所にメッセージが表示されています)

画像15

「DOM XSS」のステータスがアップデートされています。

画像16

Login Admin(難易度2)の課題にチャレンジしてみよう

赤線箇所のアイコン(難易度2)のみが選択されている状態にします。

画像17

難易度2の課題の中に「Login Admin」というものがありますので、これにチャレンジします。

「Adminでログインせよ」という課題です。

画像18

右上の「Account」を押します。

画像19

「Login」を押します。

画像20

ログイン画面に遷移します。

画像21

下記のように入力して「Log in」ボタンを押します。

Email:' or 1=1 --
Password:aaaa(何でもOKです)

画像22

課題成功の旨のメッセージが表示されます。

画像23

課題成功のメッセージは右の「×」を押すことで消すことができます。

画像24

Adminでログインしているのかを確認するために「Account」を押します。

画像25

プルダウンメニューのメールアドレスが「admin@juice-sh.op」となっているのでAdminでログインしていることがわかります。

画像26

CSRF(難易度3)の課題にチャレンジしてみよう

赤線箇所のアイコン(難易度3)のみが選択されている状態にします。

画像28

難易度3の課題の中に「CSRF」というものがありますので、これにチャレンジします。

「あるユーザーのUsernameをCSRFを使って変更せよ」という課題です。

画像29

ここでは「Jim」というユーザーのUsernameをCSRFを使って変更することにします。

現在Adminでログインしているので一旦ログアウトします。

画像30

次のように入力してJimというユーザーでログインします。

Email:jim@juice-sh.op
Password:ncc-1701

画像31

「Account」のプルダウンメニューでJimのメアドを選択します。

画像32

Jimのプロフィール画面に遷移します。

画像33

Jim本人の場合は上図の赤線箇所でUsernameを変更することができますが、Jim以外の人がCSRFを使ってJimのUsernameを変更するというのが今回の課題です。

デベロッパーツールを使ってフォームのHTMLの内容を確認します。

画像34

次のようなコードを入力した「csrf.html」というファイルを作成します。

<form action="http://localhost:3000/profile" method="POST">
 <input name="username"><br>
 <input type="submit" value="Set Username">
</form>

上記のファイルをブラウザで開いて「Taro」と入力して「Set Username」を押します。

画像35

その結果、Juice Shopのプロフィール画面に遷移してJimのUsernameがTaroに変更されます。

画像36

課題は解決しましたが、ステータスは更新されません。それは指定された「another origin」からCSRFを実行していないからです。

画像37

下記が指定された「another origin」ですが、ここから「http://localhost:3000」にアクセスできないため、今回は自分のパソコンからCSRFを実行しました。

画像38

Juice Shopの機能の紹介

Juice Shopは脆弱性のあるECサイトですが、いろいろな機能が実装されているので、ここでは次の機能を簡単に紹介します。

商品購入
カスタマーフィードバック
サポートチャット

Jimというユーザーでログインしておきます。

商品購入

商品購入の流れを紹介します。

右上の「Your Basket」を押します。

画像39

商品購入の手続きを進めます。

画像40

商品購入の手続きを進めます。

画像41

商品購入の手続きを進めます。

画像42

商品購入の手続きを進めます。

画像43

商品購入の手続きを進めます。

画像44

商品購入の手続きが完了しました。

画像45

カスタマーフィードバック

カスタマーフィードバックの流れを紹介します。

左上のアイコンを押します。

画像46

メニューが表示されますので「Customer Feedback」を選択します。

画像47

適当に入力します。(CAPTCHAの箇所は正しい計算結果を入力します)

画像48

サポートチャット

サポートチャットの流れを紹介します。

メニューの中の「Support Chat」を選択します。

画像49

チャット画面が表示されます。

画像50

適当にやりとりします。

画像51

デフォルトユーザーの設定ファイルの紹介

Juice Shopにはデフォルトで用意されているユーザーがいます。

今までに登場したものだと次の2つですが、この他にもたくさんいます。

Admin

email: admin@juice-sh.op
password: admin123
role: admin

Jim

email: jim@juice-sh.op
password: ncc-1701
role: customer

ユーザー情報はGitHubリポジトリのコードの中の「data/static/users.yml」で確認することができます。

画像62

下記の赤線箇所がAdminとJimに関する情報です。

画像63

メールアドレスのドメインは「config/default.yml」で確認することができます。

画像64

ルーティングファイルの紹介

Juice Shopのルーティングに関しては「frontend/src/app/app.routing.ts」で確認することができます。

画像65

例えば「/administration」というパスは下記の赤線箇所で定義されていますが、Admin権限がないと見れない設定になっています。

画像66

実際にAdminでログインして「/administration」が見れるかを確認してみます。

Adminでログインします。

画像52

「/administration」を入力してENTERキーを押します。

画像53

Administration画面に遷移しました。

画像54

先程Jimが行ったカスタマーフィードバックが確認できます。

画像55

Juice Shopのアーキテクチャの紹介

Juice Shopにはオンラインドキュメントがあり、そこではJuice Shopに関する様々な情報を得ることができます。

オンラインドキュメントは下記の赤線箇所のリンクから行けます。

画像56

下記の赤線箇所をクリックするとJuice Shopのアーキテクチャを確認することができます。

画像57

Juice Shopは次のような構成で実現されています。

フロントエンド:Angularフレームワーク
バックエンド:Expressフレームワーク

画像58

例えば下記の画面を表示するためにバックエンドからフロントエンドに渡されているJSONデータを確認してみます。

画像59

「frontend/src/app/Services/product.service.ts」のコードを確認してみます。

画像67

下記の赤線箇所でバックエンドのAPIの情報が確認できます。

画像68

ブラウザで「http://localhost:3000/rest/products/search?q=」(上記で確認したAPI)と入力するとJSONデータ(生データ)が表示されます。

画像60

JSON形式で表示するわかりやすいです。

画像61

以上、Juice Shopについて簡単に紹介しました。

大変有益な学習教材だと思いますので、是非とも有効活用していただければと思います。