
Damn Vulnerable Web Application(DVWA)は、非常に脆弱なPHP/MariaDBベースのWebアプリケーションです。その主な目的は、セキュリティ専門家が合法的な環境でスキルやツールをテストし、Web開発者がWebアプリケーションのセキュリティ確保プロセスをより深く理解し、学生や教師が制御された教室環境でWebアプリケーションセキュリティを学ぶための支援を提供することです。
DVWAの目標は、さまざまな難易度レベルで、最も一般的なWeb脆弱性のいくつかを、シンプルで直感的なインターフェースを通じて実践することです。 なお、このソフトウェアには文書化された脆弱性と文書化されていない脆弱性の両方が存在することに注意してください。これは意図的なものです。できるだけ多くの問題を発見するよう挑戦することを推奨します。
Damn Vulnerable Web Applicationは非常に脆弱です!プロバイダの公開htmlフォルダやインターネットに公開されたサーバにはアップロードしないでください。侵害される可能性があります。NATネットワークモードに設定された仮想マシン(VirtualBox や VMware など)を使用することを推奨します。ゲストマシン内に、Webサーバとデータベース用の XAMPP をダウンロードしてインストールできます。
本アプリケーション(DVWA)の使用方法について、当方は一切の責任を負いません。アプリケーションの目的は明確に示しており、悪意のある目的で使用されるべきではありません。ユーザーがDVWAを公開Webサーバにインストールすることを防ぐため、警告を発し対策を講じています。DVWAのインストールによってWebサーバが侵害された場合、その責任はアップロードおよびインストールを行った個人または組織に帰属し、当方は一切の責任を負いません。
このファイルはDamn Vulnerable Web Application(DVWA)の一部です。
Damn Vulnerable Web Application(DVWA)はフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行されたGNU General Public License(バージョン3、または(オプションとして)それ以降のバージョン)の条項に基づいて、再配布および/または改変することができます。
Damn Vulnerable Web Application(DVWA)は、有用であることを期待して配布されていますが、いかなる保証もありません。暗黙の商品性保証や特定目的への適合性の保証もありません。詳細については、GNU General Public Licenseを参照してください。
あなたはこのプログラムとともにGNU General Public Licenseのコピーを受け取っているはずです。ない場合は、https://www.gnu.org/licenses/ を参照してください。
このファイルは複数の言語で利用可能です:
翻訳に貢献したい場合は、PRを提出してください。ただし、これは単にGoogle翻訳に通して提出することを意味するものではありません。そのような翻訳は却下されます。希望する言語の2文字コード(ISO 639-1 に基づく)をファイル名に使用し、'README.xx.md' という新しいファイルを追加して翻訳版を提出してください。
DVWAにはさまざまなバージョンが存在しますが、サポートされている唯一のバージョンは公式GitHubリポジトリの最新ソースです。リポジトリからクローンするか:```sh git clone https://github.com/digininja/DVWA.git
または、[ファイルのZIPをダウンロード](https://github.com/digininja/DVWA/archive/master.zip)してください。
- - -
### インストール
### 自動インストール 🛠️
**注意:これは公式のDVWAスクリプトではありません。[IamCarron](https://github.com/iamCarron/)によって作成されました。このスクリプトの作成には多くの作業が費やされており、作成時点では悪意のある動作はありませんでしたが、システム上で盲目的に実行する前にスクリプトを確認することをお勧めします。念のため。バグは[IamCarron](https://github.com/iamCarron/)に報告してください。ここではありません。**
Kali、Ubuntu、Kubuntu、Linux Mint、Zorin OSなどのDebianベースのマシン向けのDVWA自動設定スクリプト。
**注意:このスクリプトはroot権限を必要とし、Debianベースのシステム向けに調整されています。rootユーザーとして実行していることを確認してください。**
#### インストール要件
- **オペレーティングシステム:** Debianベースのシステム(Kali、Ubuntu、Kubuntu、Linux Mint、Zorin OS)
- **権限:** rootユーザーとして実行
#### インストール手順
##### ワンライナー
これにより、[@IamCarron](https://github.com/IamCarron)によって書かれたインストールスクリプトがダウンロードされ、自動的に実行されます。著者とレビュー時のスクリプトを信頼していなければここに含めることはありませんが、誰かが悪意を持つ可能性は常にあります。そのため、自分で確認せずに他人のコードを実行するのが不安な場合は、手動の手順に従って、ダウンロード後に確認してください。```sh
sudo bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/IamCarron/DVWA-Script/main/Install-DVWA.sh)"
DVWAをインストールする最も簡単な方法は、まだWebサーバーをセットアップしていない場合、XAMPPをダウンロードしてインストールすることです。
XAMPPは、Linux、Solaris、Windows、Mac OS X向けの非常に簡単にインストールできるApacheディストリビューションです。パッケージにはApache Webサーバー、MySQL、PHP、Perl、FTPサーバー、phpMyAdminが含まれています。
このビデオでは、Windowsのインストールプロセスを説明していますが、他のOSでも同様の手順です。
hoang-himself と JGillam のおかげで、master ブランチへのコミットごとにDockerイメージがビルドされ、GitHub Container Registryからプルできるようになっています。
入手できるものの詳細については、ビルド済みのDockerイメージを参照してください。
前提条件: Docker と Docker Compose。
上記の最新のDockerリリースをサポートしています。 Linux を使用していて、パッケージマネージャーに付属の Docker パッケージを使用している場合でも、おそらく動作しますが、サポートはベストエフォートとなります。
パッケージマネージャーバージョンからアップストリームの Docker にアップグレードするには、Ubuntu、Fedora などのマニュアルにあるように、古いバージョンをアンインストールする必要があります。 Docker データ(コンテナ、イメージ、ボリュームなど)は影響を受けないはずですが、問題が発生した場合は、Dockerに報告し、それまでは検索エンジンをご利用ください。
それでは、始めるには:
docker version と docker compose version を実行して、Docker と Docker Compose が正しくインストールされていることを確認します。出力にバージョンが表示されるはずです。
例:
>>> docker version
Client:
[...]
Version: 23.0.5
[...]
Server: Docker Desktop 4.19.0 (106363)
Engine:
[...]
Version: 23.0.5
[...]
>>> docker compose version
Docker Compose version v2.17.3
何も表示されないか、コマンドが見つからないというエラーが出た場合は、前提条件に従って Docker と Docker Compose をセットアップしてください。
このリポジトリをクローンまたはダウンロードして展開します(ダウンロード を参照)。
お好みのターミナルを開き、作業ディレクトリをこのフォルダ(DVWA)に変更します。
docker compose up -d を実行します。
DVWA が http://localhost:4280 で利用可能になりました。
コンテナで DVWA を実行する場合、Webサーバーは通常のポート80ではなく、ポート4280で待機していることに注意してください。 この決定の詳細については、DVWAを別のポートで実行したいを参照してください。
ローカルで変更を加え、プロジェクトをローカルからビルドしたい場合は、compose.yml に移動し、pull_policy: always を pull_policy: build に変更します。
docker compose up -d を実行すると、レジストリにあるものに関係なく、Docker がローカルからイメージをビルドするようになります。
参考: pull_policy.
ローカルで変更を行っており、変更のたびにプロジェクトをビルドしたくない場合:
compose.yml に移動し、以下をコメント解除します:
# volumes:
# - ./:/var/www/html
cp config/config.inc.php.dist config/config.inc.php を実行してデフォルトの設定ファイルをコピーします。docker compose up -d を実行すると、ローカルファイルの変更がコンテナに反映されます。理想的には、最新の安定版 PHP を使用することをお勧めします。このアプリはそのバージョンで開発およびテストされます。
PHP 5.x を使用しようとするユーザーへのサポートは提供されません。
7.3 未満のバージョンには既知の問題があり、問題が発生します。アプリの大部分は動作しますが、一部の機能がランダムに動作しない可能性があります。古いバージョンを使用する特別な理由がない限り、サポートは提供されません。
Debian ベースの Linux ディストリビューションを使用している場合、以下のパッケージ(またはそれに相当するもの)をインストールする必要があります:
その前にアップデートを実行することをお勧めします。これにより、すべての最新バージョンを確実に入手できます。```sh apt update apt install -y apache2 mariadb-server mariadb-client php php-mysqli php-gd libapache2-mod-php
このサイトはMySQLでも動作しますが、MariaDBの方が初期状態で動作するため、MySQLで動作させるには変更が必要なため、MariaDBを強くお勧めします。
### Apache Modules
APIラボを使用する場合は、Apacheモジュール `mod_rewrite` を有効にする必要があります。Linuxでこれを行うには、以下を実行します:```
a2enmod rewrite
その後、Apacheを再起動します:``` apachectl restart
### ベンダーファイル
APIモジュールを使用するには、[Composer](https://getcomposer.org/)を使ってベンダーファイルのセットをインストールする必要があります。
まず、Composerがインストールされていることを確認してください。後方互換性の問題があるようなので、私は常に最新バージョンをこちらから入手しています:
https://getcomposer.org/doc/00-intro.md
サイトの指示に従ってインストールしてください。
次に、`vulnerabilities/api`ディレクトリに移動して、次のコマンドを実行します:```
composer.phar install
Composer をシステムパスにインストールしなかった場合は、そのフルパスを参照するようにしてください。
DVWA には設定ファイルのダミーコピーが付属しており、それを適切な場所にコピーしてから必要な変更を加える必要があります。Linux の場合、DVWA ディレクトリにいることを前提として、以下のように実行します。
cp config/config.inc.php.dist config/config.inc.php
Windows の場合、ファイル拡張子を非表示にしていると少し難しいかもしれません。これについて不明な場合は、こちらのブログ記事で詳しく説明されています。
How to Make Windows Show File Extensions
設定ファイルを変更する代わりに、ほとんどの設定を環境変数で行うこともできます。Docker や Kubernetes でのデプロイにおいて、これにより新しい Docker イメージを作成することなく設定を変更できます。変数は config/config.inc.php.dist ファイルにあります。
デフォルトのセキュリティレベルを "low" に設定したい場合は、以下の行を compose.yml ファイルに追加します。```yml environment:
### データベースのセットアップ
データベースをセットアップするには、メインメニューの `Setup DVWA` ボタンをクリックし、次に `Create / Reset Database` ボタンをクリックします。これにより、いくつかのデータを含むデータベースが作成/リセットされます。
データベースの作成中にエラーが発生した場合は、`./config/config.inc.php` 内のデータベース認証情報が正しいことを確認してください。_これはサンプルファイルである config.inc.php.dist とは異なります。_
変数はデフォルトで次のように設定されています。```php
$_DVWA[ 'db_server'] = '127.0.0.1';
$_DVWA[ 'db_port'] = '3306';
$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
$_DVWA[ 'db_database' ] = 'dvwa';
注意:MySQLではなくMariaDBを使用している場合(KaliではデフォルトがMariaDBです)、データベースのrootユーザーは使用できません。新しいデータベースユーザーを作成する必要があります。これを行うには、データベースにrootユーザーとして接続し、次のコマンドを使用してください:```mariadb MariaDB [(none)]> create database dvwa; Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user dvwa@localhost identified by 'p@ssw0rd'; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on dvwa.* to dvwa@localhost; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
### 認証の無効化
一部のツールは認証と相性が悪く、DVWAで使用できない場合があります。これを回避するために、認証チェックを無効にする設定オプションがあります。これを行うには、設定ファイルで以下を設定してください:```php
$_DVWA[ 'disable_authentication' ] = true;
また、実行したいテストに適切なセキュリティレベルに設定する必要があります:```php $_DVWA[ 'default_security_level' ] = 'low';
この状態では、ログインやクッキーの設定を必要とせずにすべての機能にアクセスできます。
### フォルダの権限
- `./hackable/uploads/` - Webサービスから書き込み可能である必要があります(ファイルアップロード用)。
### PHPの設定
Linuxシステムでは、通常 `/etc/php/x.x/fpm/php.ini` または `/etc/php/x.x/apache2/php.ini` にあります。
- リモートファイルインクルージョン(RFI)を許可する場合:
- `allow_url_include = on` [[allow_url_include](https://secure.php.net/manual/en/filesystem.configuration.php#ini.allow-url-include)]
- `allow_url_fopen = on` [[allow_url_fopen](https://secure.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen)]
- PHPがすべてのエラーメッセージを表示するようにする場合:
- `display_errors = on` [[display_errors](https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-errors)]
- `display_startup_errors = on` [[display_startup_errors](https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors)]
変更後は、必ずPHPサービスまたはApacheを再起動してください。
### reCAPTCHA
これは「Insecure CAPTCHA」ラボにのみ必要です。そのラボでプレイしていない場合は、このセクションは無視してかまいません。
<https://www.google.com/recaptcha/admin/create> からAPIキーのペアを生成してください。
これらを `./config/config.inc.php` の以下のセクションに設定します:
- `$_DVWA[ 'recaptcha_public_key' ]`
- `$_DVWA[ 'recaptcha_private_key' ]`
### デフォルトの認証情報
**デフォルトのユーザー名 = `admin`**
**デフォルトのパスワード = `password`**
_...簡単にブルートフォース可能です ;)_
ログインURL: <http://127.0.0.1/login.php>
_注: DVWAを別のディレクトリにインストールした場合は、このURLは異なります。_
- - -
## トラブルシューティング
以下は、Debian、Ubuntu、Kali などのDebianベースのディストリビューションを想定しています。他のディストリビューションの場合は、同様に進めてください。ただし、必要に応じてコマンドを更新してください。
文章を読むよりも動画を視聴したい場合は、最も一般的な問題が動画 [Fixing DVWA Setup Issues](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F) でカバーされています。
### コンテナ
#### ログにアクセスしたい
Docker Desktopを使用している場合、ログはグラフィカルアプリケーションからアクセスできます。
新しいバージョンでは細かい点が変わる可能性がありますが、アクセス方法は同じです。


ログはターミナルからもアクセスできます。
1. ターミナルを開き、作業ディレクトリをDVWAに変更します
2. マージされたログを表示します
```sh
docker compose logs
```
ログをファイル(例: `dvwa.log`)にエクスポートする場合 ```sh
docker compose logs > dvwa.log
デフォルトでポート80を使用しない理由はいくつかあります:
net.ipv4.ip_unprivileged_port_startの設定)が必要ですが、ご自身で調査する必要があります。compose.ymlファイルのポートバインディングを変更することで、DVWAを別のポートで公開できます。
例えば、次のように変更できます。```yml
ports:
へ```yml
ports:
- 127.0.0.1:8806:80
DVWAはhttp://localhost:8806でアクセスできるようになりました。
DVWAを自分のデバイスだけでなく、ローカルネットワークからもアクセスできるようにしたい場合(例えば、ワークショップ用のテストマシンをセットアップする場合など)、ポートマッピングから127.0.0.1:を削除するか、LAN IPに置き換えることができます。そうすると、利用可能なすべてのデバイスでリッスンします。安全なデフォルトとしては、常にローカルループバックデバイスでのみリッスンするようにすべきです。結局のところ、それはあなたのマシン上で動作する、非常に脆弱なWebアプリケーションなのですから。
含まれているcompose.ymlファイルは、Docker起動時にDVWAとそのデータベースを自動的に実行します。
これを無効にするには、compose.ymlファイル内のrestart: unless-stopped行を削除するかコメントアウトしてください。
この動作を一時的に無効にするには、docker compose stopを実行するか、Docker Desktopでdvwaを見つけて「停止」をクリックします。さらに、コンテナを削除するか、docker compose downを実行することもできます。
Linuxシステムでは、Apacheはデフォルトでaccess.logとerror.logの2つのログファイルを生成します。Debianベースのシステムでは、これらは通常/var/log/apache2/にあります。
エラーレポートや問題などを送信する際は、これらのファイルのそれぞれから少なくとも最後の5行を含めてください。Debianベースのシステムでは、次のようにして取得できます:```sh tail -n 5 /var/log/apache2/access.log /var/log/apache2/error.log
### サイトにアクセスしたら404またはApache2のデフォルトページが表示されました
[Video Help](https://youtu.be/C-kig5qrPSA?si=wTS3Aj8fycW3Idfr&t=141)
この問題が発生している場合、ファイルの場所を理解する必要があります。デフォルトでは、Apacheのドキュメントルート(Webコンテンツを探し始める場所)は `/var/www/html` です。このディレクトリに `hello.txt` ファイルを置いた場合、アクセスするには `http://localhost/hello.txt` にブラウズします。
ディレクトリを作成してその中にファイルを置いた場合 - `/var/www/html/mydir/hello.txt` - その場合は `http://localhost/mydir/hello.txt` にブラウズする必要があります。
Linuxはデフォルトで大文字小文字を区別するため、上記の例で以下のいずれかにブラウズしようとすると、`404 Not Found` が表示されます:
- `http://localhost/MyDir/hello.txt`
- `http://localhost/mydir/Hello.txt`
- `http://localhost/MYDIR/hello.txt`
これはDVWAにどのような影響を与えるのでしょうか?多くの人はgitを使用してDVWAを `/var/www/html` にクローンし、その中にDVWAのすべてのファイルが含まれた `/var/www/html/DVWA/` ディレクトリが作成されます。その後 `http://localhost/` にブラウズすると、`404` またはデフォルトのApacheウェルカムページが表示されます。ファイルはDVWA内にあるため、`http://localhost/DVWA` にブラウズする必要があります。
もう一つのよくある間違いは `http://localhost/dvwa` にブラウズすることです。Linuxのディレクトリ照合では `dvwa` は `DVWA` ではないため、`404` が表示されます。
したがって、セットアップ後にサイトにアクセスして `404` が表示された場合は、ファイルをどこにインストールしたか、ドキュメントルートからの相対位置、使用したディレクトリの大文字小文字を考えてください。
### サイトにアクセスしたら空白の画面が表示されました
[Video Help](https://youtu.be/C-kig5qrPSA?si=wTS3Aj8fycW3Idfr&t=243)
これは通常、ある設定問題が別の問題を隠している状態です。デフォルトではPHPはエラーを表示しないため、セットアップ中にエラー表示を有効にするのを忘れると、データベース接続の失敗など他の問題がアプリの読み込みを停止させますが、何が問題かを知らせるメッセージは隠蔽されます。
これを修正するには、[PHP Configuration](#php-configuration) で説明されているように `display_errors` と `display_startup_errors` を設定し、Apacheを再起動してください。
### セットアップ実行中に「Access denied」
セットアップスクリプト実行時に以下のような表示が出た場合、設定ファイル内のユーザー名またはパスワードがデータベースに設定されているものと一致していないことを意味します。[Video Help](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=973)```mariadb
Database Error #1045: Access denied for user 'notdvwa'@'localhost' (using password: YES).
エラーは、ユーザー名 notdvwa を使用していることを示しています。
次のエラーは、設定ファイルが間違ったデータベースを指していることを示しています。動画ヘルプ```mariadb SQL: Access denied for user 'dvwa'@'localhost' to database 'notdvwa'
これは、ユーザー `dvwa` を使用してデータベース `notdvwa` に接続しようとしていることを示しています。
最初に行うべきことは、設定ファイルに記入した内容が実際にその通りであるかどうかを再確認することです。
もし期待通りであれば、次にコマンドラインでそのユーザーとしてログインできるか確認します。データベースユーザーが `dvwa` でパスワードが `p@ssw0rd` の場合、次のコマンドを実行してください:```sh
mysql -u dvwa -pp@ssw0rd -D dvwa
注:-pの後にはスペースがありません
以下が表示されれば、パスワードは正しいです:```mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 10.3.22-MariaDB-0ubuntu0.19.10.1 Ubuntu 19.10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [dvwa]>
コマンドラインで接続できる場合は、設定ファイルに問題がある可能性が高いです。再度確認し、それでも動作しない場合は issue を報告してください。
以下のような表示が出た場合、使用しているユーザー名またはパスワードが間違っています。[データベース設定](#database-setup)の手順を繰り返し、プロセス全体で同じユーザー名とパスワードを使用していることを確認してください。```mariadb
ERROR 1045 (28000): Access denied for user 'dvwa'@'localhost' (using password: YES)
以下のような結果が出た場合、ユーザー認証情報は正しいが、そのユーザーにはデータベースへのアクセス権がありません。セットアップ手順を再度行い、使用しているデータベース名を確認してください。```mariadb ERROR 1044 (42000): Access denied for user 'dvwa'@'localhost' to database 'dvwa'
最終的に発生する可能性のあるエラーは次のとおりです。```mariadb
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
これは認証の問題ではなく、データベースサーバーが起動していないことを示しています。以下のコマンドで起動してください。```sh sudo service mysql start
### 接続拒否
[動画ヘルプ](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=444)
次のようなエラーが発生します:```mariadb
Fatal error: Uncaught mysqli_sql_exception: Connection refused in /var/sites/dvwa/non-secure/htdocs/dvwa/includes/dvwaPage.inc.php:535
データベースサーバーが実行されていないか、設定ファイルのIPアドレスが間違っていることを意味します。
設定ファイルの次の行を確認して、データベースサーバーがどこにあるべきかを確認してください:```php $_DVWA[ 'db_server' ] = '127.0.0.1';
次に、このサーバーにアクセスして、起動していることを確認します。Linuxでは、次のコマンドで行えます:```sh
systemctl status mariadb.service
そして、あなたはこのようなものを探しています。重要なのは、active (running) と表示されていることです。```sh
● mariadb.service - MariaDB 10.5.19 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-03-14 16:04:25 GMT; 1 week 5 days ago
実行されていない場合は、次のコマンドで開始できます:```sh
sudo systemctl stop mariadb.service
sudo に注意し、必要に応じてLinuxユーザーパスワードを入力してください。
Windowsでは、XAMPPコンソールでステータスを確認してください。
MySQLの最新バージョンでは、PHPはデフォルト設定でデータベースと通信できなくなりました。セットアップスクリプトを実行しようとして以下のメッセージが表示された場合、設定に問題があることを意味します。```mariadb Database Error #2054: The server requested authentication method unknown to the client.
2つの選択肢があります。最も簡単な方法はMySQLをアンインストールしてMariaDBをインストールすることです。以下はMariaDBプロジェクトによる公式ガイドです:
<https://mariadb.com/resources/blog/how-to-migrate-from-mysql-to-mariadb-on-linux-in-five-steps/>
または、以下の手順に従ってください:
1. rootとして、以下のファイルを編集します: `/etc/mysql/mysql.conf.d/mysqld.cnf`
1. `[mysqld]` の行の下に、以下を追加します:
`default-authentication-plugin=mysql_native_password`
1. データベースを再起動します: `sudo service mysql restart`
1. データベースユーザーの認証方法を確認します:
```sql
mysql> select Host,User, plugin from mysql.user where mysql.user.User = 'dvwa';
+-----------+------------------+-----------------------+
| Host | User | plugin |
+-----------+------------------+-----------------------+
| localhost | dvwa | caching_sha2_password |
+-----------+------------------+-----------------------+
1 rows in set (0.00 sec)
```
1. おそらく `caching_sha2_password` と表示されるでしょう。その場合は、以下のコマンドを実行します:
```sql
mysql> ALTER USER dvwa@localhost IDENTIFIED WITH mysql_native_password BY 'p@ssw0rd';
```
1. 再度確認すると、今度は `mysql_native_password` と表示されるはずです。
```sql
mysql> select Host,User, plugin from mysql.user where mysql.user.User = 'dvwa';
+-----------+------+-----------------------+
| Host | User | plugin |
+-----------+------+-----------------------+
| localhost | dvwa | mysql_native_password |
+-----------+------+-----------------------+
1 row in set (0.00 sec)
```
これで、セットアッププロセスは正常に動作するはずです。
詳細については、以下のページを参照してください: <https://www.php.net/manual/en/mysqli.requirements.php>.
### データベースエラー #2002: そのようなファイルまたはディレクトリはありません
データベースサーバーが動作していません。Debianベースのディストリビューションでは、以下で実行できます:```sh
sudo service mysql start
このエラーが発生する理由はいくつかありますが、最も可能性が高いのは、使用しているデータベースサーバーのバージョンがPHPと互換性がないことです。
これは、MySQLの最新バージョンを実行している場合によく見られ、PHPとうまく連携しません。最善のアドバイスは、MySQLをやめてMariaDBをインストールすることです。これはサポート対象外です。
詳細については、以下を参照してください。
https://www.ryadel.com/en/fix-mysql-server-gone-away-packets-order-similar-mysql-related-errors/
SELinuxに問題がある可能性があります。SELinuxを無効にするか、以下のコマンドを実行してWebサーバーがデータベースと通信できるようにしてください。```sh setsebool -P httpd_can_network_connect_db 1
### MariaDB Dockerが起動しない
MariaDBを起動しようとしてDockerのログに以下のエラーが表示される場合、ホストマシンのメモリが不足している可能性があります。ホスティング環境で使用している場合、最善の解決策は、マシンサイズをアップグレードしてメモリを増やし、再試行することです。```
[Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.15+maria~ubu2204 started.
[Warn] [Entrypoint]: /sys/fs/cgroup///memory.pressure not writable, functionality unavailable to MariaDB
また、compose.ymlファイルのvolumesセクションに次の行を追加する必要があるかもしれません:```
そうすると、デフォルトの設定ファイルの volumes セクションが以下のように変わります。```
volumes:
- dvwa:/var/lib/mysql
- /sys/fs/cgroup/memory.pressure:/sys/fs/cgroup/memory.pressure
なぜこれが機能するかの詳細については、このイシューを参照してください。
最新のトラブルシューティング情報については、gitリポジトリのオープンおよびクローズされたチケットの両方をご確認ください:
https://github.com/digininja/DVWA/issues
チケットを提出する前に、リポジトリから最新バージョンのコードを実行していることを確認してください。これは最新のリリースではなく、masterブランチの最新コードです。
チケットを提出する場合は、少なくとも以下の情報を提供してください:
いくつかの脆弱性を解説し、その検出方法と悪用方法を示すチュートリアル動画を作成しようとしています。これまでに作成したものは以下の通りです:
このサポートは限られています。問題を報告する前に、デバッグに取り組む準備ができていることを確認してください。単に「動作しません」と主張しないでください。
デフォルトでは、SQLiおよびBlind SQLiはサイトで使用されているMariaDB/MySQLサーバーに対して行われますが、代わりにSQLite3に対してSQLiテストを行うように切り替えることが可能です。
PHPでSQLite3を動作させる方法については説明しませんが、php-sqlite3パッケージをインストールして有効にするだけの簡単な作業のはずです。
切り替えを行うには、設定ファイルを編集し、以下の行を追加または編集してください:```php $_DVWA["SQLI_DB"] = "sqlite"; $_DVWA["SQLITE_DB"] = "sqli.db";
デフォルトでは、`database/sqli.db` ファイルを使用します。もし壊してしまった場合は、単に `database/sqli.db.dist` を上にコピーしてください。
チャレンジは MariaDB の場合とまったく同じですが、SQLite3 に対して実行される点だけが異なります。
- - -
👨💻 コントリビューター
-----
すべてのコントリビューションと、このプロジェクトを最新に保っていただきありがとうございます。:heart
アイデアや改善点がある場合、あるいは単に協力したい場合は、プロジェクトへの参加とコントリビューションを歓迎します。お気軽にPRを送ってください。
<p align="center">
<a href="https://github.com/digininja/DVWA/graphs/contributors">
<img src="https://contrib.rocks/image?repo=digininja/DVWA&max=500">
</a>
</p>
- - -
## 脆弱性の報告
簡単に言うと、ご遠慮ください。
年に一度ほど、誰かがアプリで見つけた脆弱性の報告を提出します。中には有料のペンテスト報告書よりも良く書かれているものもあれば、単に「ヘッダーが欠けています。報酬をください」というものもあります。
2023年、これは全く新しいレベルに達しました。誰かが脆弱性の1つに対してCVEを申請することを決め、[CVE-2023-39848](https://nvd.nist.gov/vuln/detail/CVE-2023-39848) が発行されました。その後、大騒ぎになり、これを修正するために時間が無駄になりました。
このアプリには脆弱性があります。それは意図的なものです。ほとんどは、レッスンとして取り組む、よく文書化されたものです。その他は「隠された」脆弱性であり、自分で見つけるものです。隠された追加機能を見つけるスキルを本当に披露したいなら、ブログ記事を書くかビデオを作成してください。それらについて、そしてどのように見つけたかに興味を持つ人がいるかもしれません。リンクを送っていただければ、参考文献に含めることもあります。
## リンク
プロジェクトホーム: <https://github.com/digininja/DVWA>
_DVWA チーム作成_