Damn Vulnerable Web Application(DVWA)
- 意図的に脆弱性を組み込んだWebアプリケーション -
脆弱性診断やペネトレーションテストを学ぶ上で、実践的な環境は欠かせません。Damn Vulnerable Web Application(DVWA)は、そのニーズを満たすために設計された学習用Webアプリケーションです。
本記事では、DVWAの概要からインストール方法、セキュリティレベル設定、そして効果的な学習法までを丁寧に解説します。
Damn Vulnerable Web Application(DVWA)とは
Damn Vulnerable Web Application(DVWA)は、意図的に多数の脆弱性を組み込んだオープンソースのWebアプリケーションです。主にセキュリティエンジニアやペネトレーションテスター、Webアプリケーション開発者が脆弱性の理解やセキュリティ診断のトレーニングのために活用します。
OWASP Top 10に含まれる代表的な脆弱性(SQLインジェクション、クロスサイトスクリプティングなど)を実践的に理解するための教材として広く利用されています。
DVWAに含まれる脆弱性
DVWAには、Webアプリケーションの代表的な脆弱性が網羅的に含まれています。
- SQLインジェクション
- クロスサイトスクリプティング(XSS)
- コマンドインジェクション
- ファイルアップロード
- CSRF(クロスサイトリクエストフォージェリ)
- ブルートフォース(総当り認証)
- ファイルインクルージョン
- ファイルアップロードの脆弱性 他
主な特徴
- 意図的に脆弱性を含んだWebアプリケーション
- 脆弱性診断やペネトレーションテストの学習用プラットフォーム
- PHPで実装
- 仮想マシンで動作可能
- オープンソース・無料
- 開発者のためのセキュリティ意識向上
意図的に脆弱性を含んだWebアプリケーション
Damn Vulnerable Web Application(DVWA)は、その名の通り「脆弱性を組み込んだWebアプリケーション」です。一般的なシステム開発では脆弱性は排除すべきものですが、DVWAでは学習目的のために脆弱性を意図的に埋め込み、セキュリティエンジニアや開発者が安全な環境でセキュリティ技術を学べるよう設計されています。
脆弱性診断やペネトレーションテストの学習用プラットフォーム
DVWAは、Webアプリケーション診断やペネトレーションテスト(侵入テスト)のトレーニング教材として広く利用されています。
実際の業務に近い脆弱性が備わっており、Burp Suite、OWASP ZAP、sqlmap、Niktoなどの各種セキュリティツールの検証にも活用できます。
PHPで実装
PHPは現在でも多くの商用Webサービスで採用されており、W3Techsの調査によると、全Webサイトの約73.1%(※)がPHPで構築されています。(※2025年11月9日時点)
DVWAに実装されている脆弱性はすべてPHPベースで動作するため、実際のPHPコードがどのようにセキュリティホールを生むのかをソースレベルで確認できます。
仮想マシンで動作可能
DVWAは、仮想マシン(VirtualBoxやVMwareなど)やDockerコンテナ上での動作に対応しています。ローカル環境でDVWAを利用することで、誤って外部へ攻撃トラフィックを流出させるリスクを抑えられます。
オープンソース・無料
DVWAはオープンソースソフトウェア(GPLv3)としてGitHub上で公開されており、誰でも無償で利用・改変が可能です。
開発者のためのセキュリティ意識向上
DVWAは、単なる脆弱性診断の学習環境にとどまらず、Web開発者のセキュリティ意識を高める教材としても有効です。
Web開発者が脆弱な実装を体験し、「どのような実装が攻撃を許してしまうのか」を自分の手で確認できる点が非常に重要です。
この「攻撃と防御の両側から理解する」アプローチは、単なる座学よりも実践的であり、セキュアコーディング文化の醸成に大きく貢献します。
注意事項
DVWAは非常に脆弱なアプリケーションです。そのため、次の点に十分注意が必要です。
- インターネットに公開しない
- 外部ネットワークからアクセス可能な環境で稼働させると、第三者に悪用されるリスクがあります。
- 学習環境を分離する
- 仮想マシン(VirtualBox、VMware)やDockerコンテナなど、クローズド環境で動作させることを推奨します。
- 悪用厳禁!
- 学んだ技術を他者のシステムに対して使用する行為は、サイバー攻撃とみなされる可能性があります。
DVWAのインストール
主なインストール方法
| インストール方法 | 配布元 | 配布形式 | DVWAのバージョン | インストール先 | 動作環境 | |
|---|---|---|---|---|---|---|
| A | Dockerにインストールする | 公式GitHubリポジトリ | ソースファイル | 2.5 | Docker | コンテナ |
| B | Kali Linux公式リポジトリからインストールする | Kali Linuxリポジトリ | APTパッケージ | 2.4 | Kali Linux | ネイティブ |
| C | OWASP BWAに同梱されているDVWAを使用する | VulnHub | OVAファイル | 1.8 | VirtualBoxなど | 仮想マシン |
| D | DVWAの仮想マシンをインストールする | VulnHub | ISOファイル | 1.0.7 | VirtualBoxなど | 仮想マシン |
ここでは、代表的なインストール方法(A、B)について解説します。
仮想環境に構築するなら、OWASP BWA(C)がおすすめ!
OWASP BWAは、複数の脆弱なWebアプリケーションを一つの仮想マシンに統合した教育用プラットフォームです。OWASP BWAをインストールするだけで、DVWAの他、30以上の脆弱なWebアプリケーションを使用することができます。インストール方法など詳細は下記をご覧ください。

A.Ubuntu上のDockerにインストールする場合
Ubuntu 24.04.3 LTS
DVWAの公式GitHubリポジトリからソースコードを取得し、Dockerで実行します。
DockerとDocker Composeがインストールされていることを確認
$ sudo docker version
$ sudo docker compose versionソースコードをダウンロード
$ git clone https://github.com/digininja/DVWA.gitコンテナを起動
$ cd DVWA/
$ sudo docker compose up -dDVWAのコンテナの起動には、root権限が必要です。一般ユーザーでは権限エラーとなるため、sudoを付けて起動します。
ブラウザからDVWAにアクセス

ブラウザを起動し、http://localhost:4280を開きます。
Dockerのデフォルト設定では、コンテナのポートが127.0.0.1にバインドされているため、他のマシン(例:Kali Linux)からアクセスすることはできません。
外部マシンからDVWAにアクセスするには、ポートのバインド先を0.0.0.0に変更するなど、ネットワークの設定変更が必要です。
1.compose.ymlを修正
# 変更前
ports:
- 127.0.0.1:4280:80
# 変更後
ports:
- 0.0.0.0:4280:802.コンテナを再起動
$ sudo docker compose down
$ sudo docker compose up -dDVWAにログイン

認証情報を入力し、Loginボタンを押下します。
- Username:admin
- Password:password
ログイン認証に成功すると、データベースのセットアップ画面が表示されます。
B.Kali Linux公式リポジトリからインストールする場合
Kali Linux 2025.3
Kali Linuxでは、DVWAが公式リポジトリに登録されているため、aptコマンドで簡単にインストールできます。
パッケージ情報を更新
$ sudo apt updateパッケージ情報を確認
$ sudo apt info dvwa
Package: dvwa
Version: 2.4-0kali1
Priority: optional
Section: utils
Maintainer: Kali Developers <devel@kali.org>
Installed-Size: 1,647 kB
Depends: adduser, apache2, libapache2-mod-php, mariadb-server, nginx, php8.4, php8.4-fpm, php8.4-gd, php8.4-mysql, sudo
Homepage: https://github.com/digininja/DVWA
Download-Size: 792 kB
APT-Sources: http://http.kali.org/kali kali-rolling/main amd64 Packages
Description: Damn Vulnerable Web Application
This package contains a PHP/MySQL web application that is damn vulnerable. Its
main goal is to be an aid for security professionals to test their skills and
tools in a legal environment, help web developers better understand the
processes of securing web applications and to aid both students & teachers to
learn about web application security in a controlled class room environment.
.
The aim of DVWA is to practice some of the most common web vulnerabilities,
with various levels of difficulty, with a simple straightforward interface.
Please note, there are both documented and undocumented vulnerabilities with
this software. This is intentional. You are encouraged to try and discover as
many issues as possible.
.
WARNING: Do not upload it to your hosting provider's public html folder or any
Internet facing servers, as they will be compromised.DVWAをインストール
$ sudo apt install dvwaインストール後の確認
# 起動・停止スクリプトのパス
$ which dvwa-start
/usr/bin/dvwa-start
$ which dvwa-stop
/usr/bin/dvwa-stop
# サービス状態の確認
$ sudo systemctl status dvwa
○ dvwa.service - The Damn Vulnerable Web Application in its own nginx server
Loaded: loaded (/usr/lib/systemd/system/dvwa.service; disabled; preset: disabled)
Active: inactive (dead)DVWAのドキュメントルートは、/usr/share/dvwaに配置されます。
DVWAを起動
$ dvwa-startアプリケーションメニューからDVWAを起動することもできます。
アプリケーションメニュー:16-Services and Other Tools>System Services>dvwa-start

特権認証

認証ダイアログが表示されるので、パスワードを入力します。
ブラウザが自動起動

特権認証に成功すると、デフォルトブラウザが自動起動し、ログイン画面http://127.0.0.1:42001/login.phpが開きます。
DVWAにログイン

認証情報を入力し、Loginボタンを押下します。
- Username:admin
- Password:password
ログイン認証に成功すると、データベースのセットアップ画面が表示されます。
初期セットアップ
データベース作成画面

DVWAをインストール後、ログイン認証に成功すると、データベース作成画面が表示されます。
データベース作成

画面下部にあるCreate / Reset Databaseボタンを押下して、データベースを作成します。
再度ログイン

再度ログインすると、DVWAのホーム画面「Welcome to Damn Vulnerable Web Application!」が表示されます。
DVWA Securityを設定する
DVWAではLow、Medium、High、Impossibleの4段階のセキュリティレベルを設定できます。
例えば、Lowではほぼ無防備な状態で、基本的な診断がそのまま通ります。一方で、Highでは入力値の検証やエスケープ処理が適切に実装され、現実的なセキュアコーディングの基準に近づきます。
クロスサイトスクリプティング(XSS)やSQLインジェクションといった脆弱性の難易度が変化するため、診断技術の習熟度に応じた学習が可能です。
セキュリティレベルの種類
DVWAには、以下の4段階のセキュリティレベルが用意されています。
| セキュリティレベル | 難易度 | 説明 |
|---|---|---|
| Low | 低 | 全く無防備な状態で、セキュリティ対策が施されていない。 |
| Medium | 中 | セキュリティ対策を試みているが、不十分。 |
| High | 高 | 概ね適切なセキュリティ対策が施されているが、一部に不適切な対策が残っている。 |
| Impossible | 攻撃が不可 | セキュアコーディングが実装され、既知の攻撃手法では脆弱性を突けない。 |
セキュリティレベルの設定手順

左メニューの「DVWA Security」を選択
現在のセキュリティレベルを確認することもできます。初期状態ではimpossibleが設定されています。
レベルを選択して、Submitボタンをクリック
選択したレベルは即時反映されます。
DVWAの使い方
DVWAは単体で使用するツールではなく、セキュリティ診断ツールと組み合わせて使用します。
DVWAを使った学習の流れ
セキュリティレベルを設定
設定方法は、前述の解説をご覧ください。
左メニューから学習する脆弱性を選択
DVWAでは脆弱性ごとに学習コンテンツが用意されています。
- Brute Force:ブルートフォース(総当たり認証)
- Command Injection:コマンドインジェクション
- CSRF:クロスサイトリクエストフォージェリ
- File Inclusion:ファイルインクルージョン
- File Upload:ファイルアップロード
- Insecure CAPTCHA:脆弱なCAPTCHA
- SQL Injection:SQLインジェクション
- SQL Injection(Blind):ブラインドSQLインジェクション
- Weak Session IDs:セッションIDの脆弱性
- XSS(DOM):DOMベースXSS
- XSS(Reflected):反射型XSS
- XSS(Stored):蓄積型XSS
- CSP Bypass:CSPバイパス
- JavaScript Attacks:JavaScriptによる攻撃
- Authorisation Bypass:認可回避
- Open HTTP Redirect:オープンリダイレクト
- Cryptography:暗号技術
- API:API
これらのコンテンツは、実際のWebアプリケーション診断で確認される脆弱性を再現しており、実践的なトレーニングが可能です。
セキュリティ診断を実施
それぞれのコンテンツページには既知の脆弱性が組み込まれており、セキュリティ診断ツールを用いて、自動診断・手動診断を行います。
DVWAを使った学習のポイント
DVWAを使って学習する際、以下の観点を意識すると学習効果が高まります。
困ったら「ヘルプ情報」を確認

DVWAの各コンテンツには、View Helpというボタンが設置されており、それをクリックすると、現在表示されている脆弱性に関する説明やコンテンツの目的などが表示されます。
- 脆弱性の概要
- コンテンツの目的
- 各セキュリティレベルの解説
- 参考サイト
PHPソースコードを確認する

DVWAの各脆弱性のコンテンツページには、View Sourceボタンがあります。このボタンをクリックすると、そのページで実行されているPHPソースコードが表示されます。
これにより、実際にどのようなコードが動いているかを確認し、どのような脆弱性が存在するかを学ぶことができます。
- 実際のコードの中で、どの部分が脆弱なのかを確認できる。
- セキュリティレベルを「Low」「Medium」「High」「Impossible」に変更してソースを比較することで、対策がどのように行われているかが分かる。
- 脆弱性診断を行った後に、どうして成功/失敗したのかをコードレベルで確認できる。
