見出し画像

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

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

前回の記事でDockerのインストールを行いましたので、本記事ではDockerを使ってDVWAを動かしてみます。

SQL Injection、XSS、CSRFを例にしてDVWAの活用方法について簡単に紹介します。

DVWAへの行き方

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

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

画像1

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

DVWAを動かしてみよう

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

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

画像2

sudo docker run --rm -it -p 80:80 vulnerables/web-dvwa を実行します。

画像3

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

画像4

ブラウザで「http://localhost」を入力すると下記のログインページに遷移します。

画像5

DVWAの始め方

下記の値を入力すればログインができます。

Username:admin
Password:password

画像6

ログインしたら下記の赤線のボタンを押してデータベースを作成します。

画像7

ログイン画面に遷移するため、再度ログインします。

画像8

DVWAのメイン画面に遷移します。

画像9

DVWA Securityとは

下記のDVWA Securityの箇所でセキュリティレベルを設定することができます。

Screenshot from 2021-07-26 18-32-18 (コピー)

セキュリティレベルのデフォルトは「low」です。

画像11

ここで左中段の脆弱性のボタンのどれか(下図ではSQL Injection)を押すとセキュリティレベルが「low」の脆弱性を体験することができます。

画像12

セキュリティレベルを「medium」に変更します。

画像13

ここで左中段の脆弱性のボタンのどれか(下図ではSQL Injection)を押すとセキュリティレベルが「medium」の脆弱性を体験することができます。

画像14

セキュリティレベルを「high」に変更します。

画像15

ここで左中段の脆弱性のボタンのどれか(下図ではSQL Injection)を押すとセキュリティレベルが「high」の脆弱性を体験することができます。

画像16

セキュリティレベルを「impossible」に変更します。

画像17

ここで左中段の脆弱性のボタンのどれか(下図ではSQL Injection)を押すとセキュリティレベルが「impossible」の脆弱性(脆弱性がない)を体験することができます。

画像18

View SourceとView Help

右下には「View Source」と「View Help」のボタンがあります。

画像19

「View Source」を押すと現在画面に表示されている脆弱性のソースコードを見ることができます。

画像20

「View Help」を押すと現在画面に表示されている脆弱性の簡単な解説を見ることができます。

画像21

SQL Injectionを体験しよう

セキュリティレベルが「low」と「impossible」でSQL Injectionを体験してみます。

Security Level : low

User IDに「1' or 'a'='a」と入力してSubmitを押します。

画像22

SQL Injectionの脆弱性があるため、下図のように全ユーザーの情報が出力されています。

画像23

Security Level : impossible

User IDに「1' or 'a'='a」と入力してSubmitを押します。

画像24

SQL Injectionの脆弱性がないため、全ユーザーの情報は出力されていません。

画像25

ソースコードを確認してみると、赤線箇所ではプレースホルダとバインドを使った処理を行っています。

画像26

IPAの「安全なウェブサイトの作り方」のSQL Injectionの箇所を確認してみます。

画像44

根本的解決の「1-(i)-a」に記載されているような実装がDVWAのSQL Injectionの「impossible」で行われていることがわかります。

画像45

クロスサイト・スクリプティング(XSS)を体験しよう

セキュリティレベルが「low」と「impossible」でXSSを体験してみます。

Security Level : low

What's your name?の箇所に「<script>alert("Hello")</script>」と入力してSubmitを押します。

画像27

XSSの脆弱性があるため、下図のようにJavaScriptが実行されています。

画像28

Security Level : impossible

What's your name?の箇所に「<script>alert("Hello")</script>」と入力してSubmitを押します。

画像29

XSSの脆弱性がないため、下図のようにJavaScriptは実行されていません。

画像30

ソースコードを確認してみると、赤線箇所ではPHPでエスケープ処理をするための関数(htmlspecialchars)が使用されています。

画像31

IPAの「安全なウェブサイトの作り方」のXSSの箇所を確認してみます。

画像46

根本的解決の「5-(i)」に記載されているような実装がDVWAのXSSの「impossible」で行われていることがわかります。

画像47

クロスサイト・リクエスト・フォージェリ(CSRF)を体験しよう

セキュリティレベルが「low」と「impossible」でCSRFを体験してみます。

Security Level : low

下図のフォームのHTMLを知るためにデベロッパーツールを開きます。

画像32

フォームは赤線のようなHTMLになっていることがわかります。

画像33

ここで下記のような内容のファイル(csrf_low.html)を作成します。

<form action="http://localhost/vulnerabilities/csrf" method="GET">
 <input name="password_new"><br>
 <input name="password_conf"><br>
 <input type="submit" value="Change" name="Change">
</form>

csrf_low.htmlをブラウザで開いて、下図のように2箇所に「1234」を入力してChangeボタンを押します。

画像34

その結果、DVWAの画面に遷移します。(Password Changedと表示されているようにパスワードが「1234」に変更されました)

画像35

以上のように、CSRFの脆弱性があると、別のブラウザからのリクエストを受け付けて処理が行われてしまいます。

Security Level : impossible

下図のフォームのHTMLを知るためにデベロッパーツールを開きます。

画像36

フォームは赤線のようなHTMLになっていることがわかります。

画像37

ここで下記のような内容のファイル(csrf_impossible.html)を作成します。

<form action="http://localhost/vulnerabilities/csrf" method="GET">
 <input name="password_current"><br>
 <input name="password_new"><br>
 <input name="password_conf"><br>
 <input type="submit" value="Change" name="Change">
</form>

csrf_impossible.htmlをブラウザで開いて、下図のように最初に「1234」、残り2箇所に「5678」を入力してChangeボタンを押します。

画像38

その結果、CSRFトークンが不正である旨のメッセージが出ます。(パスワードは変更されません)

画像39

HTMLのコードをよく見ると下図の赤線箇所のようなhidden情報が追加されています。

画像40

ソースコードを確認してみると、赤線箇所ではトークンをチェックしています。

画像41

トークン関連の処理は「dvwaPage.inc.php」のファイルで実装されています。

画像42

赤線箇所がトークン関連の処理です。

画像43

IPAの「安全なウェブサイトの作り方」のCSRFの箇所を確認してみます。

画像48

根本的解決の「6-(i)-a」に記載されているような実装がDVWAのCSRFの「impossible」で行われていることがわかります。

画像49

以上、SQL Injection、XSS、CSRFを例にしてDVWAの活用方法について簡単に紹介しました。

DVWAのような脆弱性のあるアプリをうまく活用することで、Webアプリのセキュリティについての理解が深まりますので、積極的に活用していただければと思います。