クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

DVWA の基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

コンテナラボ読了目安 6分コマンド1個

このレッスンでやること

Web サイトは、SQL という言語で書いた質問で、データベースから情報を取り出します。入力した文字をそのまま質問に貼りつけていると、質問を書き換えられてしまいます。これを SQL インジェクションといい、Web でもっともよくある弱点の 1 つです。DVWA なら安全に試せて、そのあと直し方も見られます。

大事なルール

注意

このラボは、わざと安全でなく作ったWeb サイトを動かします。攻撃してよいのは、このサイトだけです。あなた専用のコピーで、インターネットにはつながっていないので、ほかの人に影響はありません。自分のものでないサイトで、これらを試してはいけません。英国のコンピューター不正使用法(Computer Misuse Act 1990)では犯罪にあたります。

始める前に

メモ

このレッスンの上にあるバーのラボを起動を押し、「実行中」と出るまで待ちます。Web サイトは、バーの DVWA のリンクから開きます。下の実行ボタンは、それぞれのコマンドをラボのターミナルに順番に入力します。すべて同じセッションで動きます。様子を見たり、自分でコマンドを打ったりしたいときは、バーのターミナルを開く(新しいタブ)を押します。

1. Web サイトが動いているか確かめる

ラボのバーには「実行中」と出ています。次はWeb サイトを確かめます。このコマンドはターミナルからサインインページを求めます。200 は、答えが返ってきたという意味です。

コマンド
curl -s -o /dev/null -w "%{http_code}\n" http://dvwa/login.php

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2. サインインする

バーの DVWA のリンクを押し、ユーザー名 admin、パスワード password でサインインします。左のメニューから DVWA Security を選び、low になっていることを確かめます。

3. ふつうの質問をする

メニューから SQL Injection を選びます。User ID の欄に 1 と入力して Submit を押します。Web サイトは、ユーザー admin を 1 人だけ表示します。入力した文字から、「ID が 1 のユーザーをください」という質問を作ったのです。

4. 質問を書き換える

同じ欄に次の文字を入力して、Submit を押します。

1' OR '1'='1

' がWeb サイトの質問を途中で終わらせ、OR '1'='1 が、いつも正しい条件を足しました。すると 全員、つまり admin、Gordon、Hack、Pablo、Bob が表示されます。1 人をたのんだのに全員が出てきたのは、Web サイトが入力された文字を信用したからです。

5. コードを読む

ページの下にある View Source(ソースを見る)を押します。low では、入力した文字がそのまま質問に入っています。これが間違いです。

6. 直し方を見る

DVWA Security を選び、レベルを impossible にして Submit を押します。SQL Injection に戻って 1 を入力すると、やはり admin が表示されます。次にステップ 4 の文字を入力すると、何も表示されません。もう一度 View Source を押してみましょう。コードは、ID が数字かどうかを確かめています。そして質問と入力した文字を別々に送るので、入力した文字は値としてしか扱われず、質問の一部にはなりません。これをパラメータ化クエリといい、Web サイトがこの攻撃を防ぐ方法です。

先生へ

ヒント

このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒一人ひとりの専用コピーです。DVWA には、同じ 4 つのレベルで試せる演習が、ほかに 10 個あります。同じラボで 1 つの単元をまかなえます。採点は自動ではありません。各演習について、low と impossible のスクリーンショットと、何が変わったかを説明する 1 文を出させてください。自分のモジュールにコピーして変えることも、レッスンビルダーのラボメニューから一から作ることもできます。

このラボとソースについて: DVWA のラボ:Damn Vulnerable Web Application で SQL インジェクションと XSS を練習する

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。