digininja/DVWA
GitHub: digininja/DVWA
DVWA 是一款基于 PHP/MariaDB 的故意包含漏洞的 Web 应用程序,旨在为安全人员和开发者提供一个受控环境,以练习常见 Web 漏洞攻防技能和测试安全工具。
Stars: 12690 | Forks: 4629
# DAMN VULNERABLE WEB APPLICATION
Damn Vulnerable Web Application (DVWA) 是一个 PHP/MariaDB Web 应用程序,该程序非常脆弱(Damn Vulnerable)。其主要目标是为安全专业人员提供一个合法环境,以测试其技能和工具;帮助 Web 开发人员更好地理解保护 Web 应用程序的流程;并协助学生和教师在受控的课堂环境中学习 Web 应用程序安全知识。
DVWA 的目标是通过简单直观的界面,**练习一些最常见的 Web 漏洞**,并提供**不同难度级别**。
请注意,该软件包含**已记录和未记录的漏洞**。这是有意为之。我们鼓励您尽可能多地发现问题。
## 警告!
Damn Vulnerable Web Application 非常脆弱!**不要将其上传到您托管服务商的公共 html 文件夹或任何面向互联网的服务器上**,因为它们会被入侵。建议使用设置为 NAT 网络模式的虚拟机(例如 [VirtualBox](https://www.virtualbox.org/) 或 [VMware](https://www.vmware.com/))。在客户机内部,您可以下载并安装 [XAMPP](https://www.apachefriends.org/) 作为 Web 服务器和数据库。
### 免责声明
我们对任何人使用本应用程序(DVWA)的方式不承担责任。我们已经明确了该应用程序的目的,不应将其用于恶意行为。我们已经发出了警告并采取了措施,以防止用户将 DVWA 安装到实时 Web 服务器上。如果您的 Web 服务器因安装 DVWA 而被入侵,这不是我们的责任,而是上传并安装它的人员的责任。
## 许可证
本文件是 Damn Vulnerable Web Application (DVWA) 的一部分。
Damn Vulnerable Web Application (DVWA) 是自由软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它,许可证版本为第 3 版,或(根据您的选择)任何后续版本。
发布 Damn Vulnerable Web Application (DVWA) 的目的是希望它能有用,但没有任何保证;甚至没有适销性或特定用途适用性的暗示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。
您应该随 Damn Vulnerable Web Application (DVWA) 一起收到了 GNU 通用公共许可证的副本。如果没有,请参阅 。
## 国际化
本文件提供多种语言版本:
- Arabic: [العربية](README.ar.md)
- Chinese: [简体中文](README.zh.md)
- French: [Français](README.fr.md)
- Korean: [한국어](README.ko.md)
- Persian: [فارسی](README.fa.md)
- Polish: [Polski](README.pl.md)
- Portuguese: [Português](README.pt.md)
- Spanish: [Español](README.es.md)
- Turkish: [Türkçe](README.tr.md)
- Indonesia: [Indonesia](README.id.md)
- Vietnamese: [Vietnamese](README.vi.md)
- Italian: [Italiano](README.it.md)
- Ukrainian: [Українська](README.uk.md)
- Russian: [Русский](README.ru.md)
如果您想贡献翻译,请提交 PR。但请注意,这不意味着仅仅将其通过 Google Translate 运行并发送过来,这样的翻译将被拒绝。通过添加一个新的 `README.xx.md` 文件来提交您的翻译版本,其中 xx 是您所需语言的两位代码(基于 [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes))。
## 下载
虽然 DVWA 有多个版本,但唯一支持的版本是来自官方 GitHub 仓库的最新源代码。您可以从仓库克隆它:
```
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/),而不是这里。**
这是一个适用于基于 Debian 的机器(包括 Kali、Ubuntu、Kubuntu、Linux Mint、Zorin OS 等)的 DVWA 自动配置脚本。
**注意:此脚本需要 root 权限,并且专为基于 Debian 的系统定制。请确保以 root 用户身份运行它。**
#### 安装要求
- **操作系统:** 基于 Debian 的系统(Kali、Ubuntu、Kubuntu、Linux Mint、Zorin OS)
- **权限:** 以 root 用户执行
#### 安装步骤
##### 单行命令
这将下载由 [@IamCarron](https://github.com/IamCarron) 编写的安装脚本并自动运行。如果我们不信任作者以及我们在审查时的脚本,它就不会包含在这里,但总有人可能变坏,因此如果您觉得在没有自己审查的情况下运行别人的代码不安全,请遵循手动流程,您可以在下载后进行审查。
```
sudo bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/IamCarron/DVWA-Script/main/Install-DVWA.sh)"
```
##### 手动运行脚本
1. **下载脚本:**
wget https://raw.githubusercontent.com/IamCarron/DVWA-Script/main/Install-DVWA.sh
2. **使脚本可执行:**
chmod +x Install-DVWA.sh
3. **以 root 身份运行脚本:**
sudo ./Install-DVWA.sh
### 安装视频
- [在运行于 VirtualBox 的 Kali 上安装 DVWA](https://www.youtube.com/watch?v=WkyDxNJkgQ4)
- [在 Windows 上使用 XAMPP 安装 DVWA](https://youtu.be/Yzksa_WjnY0)
- [在 Windows 10 上安装 Damn Vulnerable Web Application (DVWA)](https://www.youtube.com/watch?v=cak2lQvBRAo)
### Windows + XAMPP
如果您还没有设置 Web 服务器,安装 DVWA 最简单的方法是下载并安装 [XAMPP](https://www.apachefriends.org/)。
XAMPP 是一个非常易于安装的 Apache 发行版,适用于 Linux、Solaris、Windows 和 Mac OS X。该软件包包括 Apache Web 服务器、MySQL、PHP、Perl、FTP 服务器和 phpMyAdmin。
这个 [视频](https://youtu.be/Yzksa_WjnY0) 将引导您完成 Windows 的安装过程,但对于其他操作系统应该类似。
### Docker
感谢 [hoang-himself](https://github.com/hoang-himself) 和 [JGillam](https://github.com/JGillam),每次提交到 `master` 分支都会导致 Docker 镜像被构建并准备好从 GitHub Container Registry 拉取。
有关您将获得的内容的更多信息,您可以浏览 [预构建的 Docker 镜像](https://github.com/digininja/DVWA/pkgs/container/dvwa)。
#### 入门
先决条件:Docker 和 Docker Compose。
- 如果您使用的是 Docker Desktop,这两个应该已经安装好了。
- 如果您在 Linux 上更喜欢使用 Docker Engine,请务必遵循他们的 [安装指南](https://docs.docker.com/engine/install/#server)。
**我们支持如上所示的最新 Docker 版本。**
如果您使用的是 Linux 以及软件包管理器附带的 Docker 包,它可能也能工作,但支持仅限于尽力而为。
从软件包管理器版本升级 Docker 到上游版本需要您卸载旧版本,如其 [Ubuntu](https://docs.docker.com/engine/install/ubuntu/#uninstall-old-versions)、[Fedora](https://docs.docker.com/engine/install/fedora/#uninstall-old-versions) 等的手册中所述。
您的 Docker 数据(容器、镜像、卷等)不应受到影响,但如果您确实遇到问题,请务必 [告知 Docker](https://www.docker.com/support) 并同时使用搜索引擎。
然后,开始操作:
1. 运行 `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
如果您什么都没看到或收到 command not found 错误,请按照先决条件设置 Docker 和 Docker Compose。
2. 克隆或下载此存储库并解压(见 [下载](#download))。
3. 打开您选择的终端并将其工作目录更改为此文件夹(`DVWA`)。
4. 运行 `docker compose up -d`。
DVWA 现在可以在 `http://localhost:4280` 访问。
**请注意,对于在容器中运行 DVWA,Web 服务器监听的是端口 4280,而不是通常的端口 80。**
有关此决定的更多信息,请参阅 [我想在不同的端口上运行 DVWA](#i-want-to-run-dvwa-on-a-different-port)。
#### 本地构建
如果您进行了本地更改并希望从本地构建项目,请转到 `compose.yml` 并将 `pull_policy: always` 更改为 `pull_policy: build`。
运行 `docker compose up -d` 应该会触发 Docker 从本地构建镜像,而不管注册表中有什么可用的。
另请参阅:[`pull_policy`](https://github.com/compose-spec/compose-spec/blob/master/05-services.md#pull_policy)。
#### 提供本地文件
如果您正在进行本地更改,并且不想为每次更改构建项目:
1. 转到 `compose.yml` 并取消注释:
# volumes:
# - ./:/var/www/html
2. 运行 `cp config/config.inc.php.dist config/config.inc.php` 以复制默认配置文件。
3. 运行 `docker compose up -d`,对本地文件的更改将反映在容器上。
### PHP 版本
理想情况下,您应该使用最新的 PHP 稳定版本,因为这是该应用程序将要在其上开发和测试的版本。
对于任何尝试使用 PHP 5.x 的用户,将不提供支持。
低于 7.3 的版本存在已知问题,会导致问题,大部分应用程序可以工作,但随机的事情可能无法工作。除非您有非常好的理由使用如此旧的版本,否则将不提供支持。
### Linux 软件包
如果您使用的是基于 Debian 的 Linux 发行版,则需要安装以下软件包 _(或其等效项)_:
- apache2
- libapache2-mod-php
- mariadb-server
- mariadb-client
- php php-mysqli
- php-gd
我建议在此之前进行更新,以确保您将获得所有内容的最新版本。
```
apt update
apt install -y apache2 mariadb-server mariadb-client php php-mysqli php-gd libapache2-mod-php
```
该站点可以使用 MySQL 而不是 MariaDB,但我们强烈推荐 MariaDB,因为它开箱即用,而您必须进行更改才能让 MySQL 正常工作。
### Apache 模块
如果您想使用 API 实验室,则必须启用 Apache 模块 `mod_rewrite`。要在 Linux 中执行此操作,请运行:
```
a2enmod rewrite
```
然后使用以下命令重启 Apache:
```
apachectl restart
```
### Vendor 文件
如果您想使用 API 模块,则需要使用 [Composer](https://getcomposer.org/) 安装一组 vendor 文件。
首先,确保您已安装 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 上,如果您隐藏了文件扩展名,这可能会更难一些,如果您不确定这一点,这篇博文对此进行了更多解释:
[如何让 Windows 显示文件扩展名](https://www.howtogeek.com/205086/beginner-how-to-make-windows-show-file-extensions/)
### 使用环境变量进行配置
除了修改配置文件外,您还可以使用环境变量设置大多数设置。在 Docker 或 Kubernetes 部署中,这允许您修改配置而无需创建新的 Docker 镜像。您可以在 [config/config.inc.php.dist](config/config.inc.php.dist) 文件中找到这些变量。
如果您想将默认安全级别设置为“low”,只需将以下行添加到 [compose.yml](./compose.yml) 文件中:
```
environment:
- DB_SERVER=db
- DEFAULT_SECURITY_LEVEL=low
```
### 数据库设置
要设置数据库,只需单击主菜单中的 `Setup DVWA` 按钮,然后单击 `Create / Reset Database` 按钮。这将为您创建/重置数据库并包含一些数据。
如果您在尝试创建数据库时收到错误,请确保您在 `./config/config.inc.php` 中的数据库凭据是正确的。_这与 config.inc.php.dist 不同,后者是一个示例文件。_
变量默认设置为以下值:
```
$_DVWA[ 'db_server'] = '127.0.0.1';
$_DVWA[ 'db_port'] = '3306';
$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
$_DVWA[ 'db_database' ] = 'dvwa';
```
请注意,如果您使用的是 MariaDB 而不是 MySQL(MariaDB 是 Kali 中的默认值),则不能使用数据库 root 用户,必须创建一个新的数据库用户。为此,以 root 用户身份连接到数据库,然后使用以下命令:
```
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 一起使用。为了解决这个问题,有一个禁用身份验证检查的配置选项。为此,只需在配置文件中设置以下内容:
```
$_DVWA[ 'disable_authentication' ] = true;
```
您还需要将安全级别设置为适合您要进行的测试的级别:
```
$_DVWA[ 'default_security_level' ] = 'low';
```
在这种状态下,您可以访问所有功能,而无需登录和设置任何 cookie。
### 文件夹权限
- `./hackable/uploads/` - 需要可由 Web 服务写入(用于文件上传)。
### PHP 配置
在 Linux 系统上,通常位于 `/etc/php/x.x/fpm/php.ini` 或 `/etc/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" 实验室所必需的,如果您不使用该实验室,则可以忽略此部分。
从 生成一对 API 密钥。
然后将它们放在 `./config/config.inc.php` 的以下部分中:
- `$_DVWA[ 'recaptcha_public_key' ]`
- `$_DVWA[ 'recaptcha_private_key' ]`
### 默认凭据
**默认用户名 = `admin`**
**默认密码 = `password`**
_...很容易被暴力破解 ;)_
登录 URL:
_注意:如果您将 DVWA 安装到不同的目录中,这将有所不同。_
## 故障排除
这些假设您使用的是基于 Debian 的发行版,例如 Debian、Ubuntu 和 Kali。对于其他发行版,请跟随操作,但适当地更新命令。
如果您宁愿看视频也不愿阅读文字,最常见的错误包含在视频 [修复 DVWA 设置问题](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F) 中。
### 容器
#### 我想访问日志
如果您使用的是 Docker Desktop,可以从图形应用程序访问日志。
较新版本的一些细节可能会发生变化,但访问方法应该相同。


也可以从终端访问日志。
1. 打开终端并将其工作目录更改为 DVWA
2. 显示合并的日志
docker compose logs
如果您想将日志导出到文件,例如 `dvwa.log`
docker compose logs > dvwa.log
#### 我想在不同的端口上运行 DVWA
默认情况下我们不使用端口 80 有几个原因:
- 某些用户可能已经在端口 80 上运行了某些东西。
- 某些用户可能正在使用无根容器引擎(如 Podman),而 80 是特权端口(< 1024)。需要额外的配置(例如设置 `net.ipv4.ip_unprivileged_port_start`),但您必须自己研究。
您可以通过更改 `compose.yml` 文件中的端口绑定来在不同的端口上公开 DVWA。
例如,您可以将
```
ports:
- 127.0.0.1:4280:80
```
更改为
```
ports:
- 127.0.0.1:8806:80
```
DVWA 现在可以在 `http://localhost:8806` 访问。
如果您希望 DVWA 不仅可以从您自己的设备访问,还可以在本地网络中访问(例如,因为您正在为研讨会设置测试机),您可以从端口映射中删除 `127.0.0.1:`(或将其替换为您的 LAN IP)。这样它将监听所有可用的设备。安全的默认设置应该始终是仅监听您的本地回环设备。毕竟,这是一个运行在您机器上的该死的易受攻击的 Web 应用程序。
#### Docker 运行时 DVWA 自动启动
包含的 [`compose.yml`](./compose.yml) 文件会在 Docker 启动时自动运行 DVWA 及其数据库。
要禁用此功能,您可以删除或注释掉 [`compose.yml`](./compose.yml) 文件中的 `restart: unless-stopped` 行。
如果您想暂时禁用此行为,可以运行 `docker compose stop`,或使用 Docker Desktop,找到 `dvwa` 并点击停止。
此外,您可以删除容器,或运行 `docker compose down`。
### 日志文件
在 Linux 系统上,Apache 默认生成两个日志文件,`access.log` 和 `error.log`,在基于 Debian 的系统上,这些通常位于 `/var/log/apache2/` 中。
提交错误报告、问题等内容时,请至少包含这些文件中每个文件的最后五行。在基于 Debian 的系统上,您可以像这样获取这些内容:
```
tail -n 5 /var/log/apache2/access.log /var/log/apache2/error.log
```
### 我浏览该站点并收到 404 或 Apache2 默认页面
[视频帮助](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`,这为他们提供了目录 `/var/www/html/DVWA/`,其中包含所有 DVWA 文件。然后他们浏览到 `http://localhost/` 并得到 `404` 或 Apache 默认欢迎页面。由于文件位于 DVWA 中,您必须浏览到 `http://localhost/DVWA`。
另一个常见的错误是浏览到 `http://localhost/dvwa`,这将给出 `404`,因为就 Linux 目录匹配而言,`dvwa` 不是 `DVWA`。
因此,在设置之后,如果您尝试访问该站点并收到 `404`,请考虑您将文件安装到的位置、它们相对于文档根目录的位置以及您使用的目录的大小写。
### 我浏览该站点并收到空白屏幕
[视频帮助](https://youtu.be/C-kig5qrPSA?si=wTS3Aj8fycW3Idfr&t=243)
这通常是一个配置问题掩盖了另一个问题。默认情况下,PHP 不显示错误,因此如果您在设置过程中忘记打开错误显示,任何其他问题(例如无法连接到数据库)都会阻止应用程序加载,但告诉您出了什么问题的消息将被隐藏。
要解决此问题,请确保按照 [PHP 配置](#php-configuration) 中所述设置 `display_errors` 和 `display_startup_errors`,然后重启 Apache。
### 运行 setup 时出现“Access denied”
如果您在运行 setup 脚本时看到以下内容,则意味着配置文件中的用户名或密码与数据库中配置的那些不匹配。[视频帮助](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=973)
```
Database Error #1045: Access denied for user 'notdvwa'@'localhost' (using password: YES).
```
该错误告诉您正在使用用户名 `notdvwa`。
以下错误表明您将配置文件指向了错误的数据库。[视频帮助](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=630)
```
SQL: Access denied for user 'dvwa'@'localhost' to database 'notdvwa'
```
它表示您正在使用用户 `dvwa` 并尝试连接到数据库 `notdvwa`。
首先要做的是仔细检查您认为在配置文件中输入的内容是否确实存在。
如果它符合您的预期,下一件事是检查您是否可以在命令行上以该用户身份登录。假设您的数据库用户是 `dvwa`,密码是 `p@ssw0rd`,运行以下命令:
```
mysql -u dvwa -pp@ssw0rd -D dvwa
```
_注意:-p 后没有空格_
如果您看到以下内容,则密码正确:
```
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) 步骤,并确保在整个过程中使用相同的用户名和密码。
```
ERROR 1045 (28000): Access denied for user 'dvwa'@'localhost' (using password: YES)
```
如果您收到以下内容,则用户凭据正确,但用户无权访问数据库。同样,重复设置步骤并检查您使用的数据库名称。
```
ERROR 1044 (42000): Access denied for user 'dvwa'@'localhost' to database 'dvwa'
```
您可能收到的最后一个错误是:
```
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
```
这不是身份验证问题,而是告诉您数据库服务器未运行。使用以下命令启动它
```
sudo service mysql start
```
### 连接被拒绝
[视频帮助](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=444)
类似于此的错误:
```
Fatal error: Uncaught mysqli_sql_exception: Connection refused in /var/sites/dvwa/non-secure/htdocs/dvwa/includes/dvwaPage.inc.php:535
```
意味着您的数据库服务器未运行,或者您在配置文件中填入了错误的 IP 地址。
检查配置文件中的这一行,以查看数据库服务器应该在何处:
```
$_DVWA[ 'db_server' ] = '127.0.0.1';
```
然后转到该服务器并检查它是否正在运行。在 Linux 中,可以使用以下命令完成:
```
systemctl status mariadb.service
```
并且您正在寻找类似这样的东西,重要的部分是它显示 `active (running)`。
```
● 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
```
如果它没有运行,您可以使用以下命令启动它:
```
sudo systemctl stop mariadb.service
```
注意 `sudo` 并确保如果被要求,输入您的 Linux 用户密码。
在 Windows 中,检查 XAMPP 控制台中的状态。
### 未知的身份验证方法
对于最新版本的 MySQL,PHP 无法再与其默认配置通信。如果您尝试运行 setup 脚本并收到以下消息,则意味着您的配置有问题。
```
Database Error #2054: The server requested authentication method unknown to the client.
```
您有两个选择,最简单的方法是卸载 MySQL 并安装 MariaDB。以下是 MariaDB 项目的官方指南:
或者,按照以下步骤操作:
1. 以 root 身份编辑以下文件:`/etc/mysql/mysql.conf.d/mysqld.cnf`
2. 在行 `[mysqld]` 下,添加以下内容:
`default-authentication-plugin=mysql_native_password`
3. 重启数据库:`sudo service mysql restart`
4. 检查数据库用户的身份验证方法:
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)
5. 您可能会看到 `caching_sha2_password`。如果看到,请运行以下命令:
mysql> ALTER USER dvwa@localhost IDENTIFIED WITH mysql_native_password BY 'p@ssw0rd';
6. 重新运行检查,您现在应该看到 `mysql_native_password`。
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)
完成所有这些之后,setup 过程现在应该可以正常工作了。
如果您想了解更多信息,请参阅以下页面:。
### 数据库错误 #2002: No such file or directory
数据库服务器未运行。在基于 Debian 的发行版中,可以使用以下命令完成:
```
sudo service mysql start
```
### 错误 "MySQL server has gone away" 和 "Packets out of order"
您收到这些错误的原因可能有几个,但最可能的原因是您运行的数据库服务器版本与 PHP 版本不兼容。
这种情况最常见于您运行最新版本的 MySQL 时,因为 PHP 和它相处得不好。最好的建议是抛弃 MySQL 并安装 MariaDB,因为这不是我们可以支持的事情。
有关更多信息,请参阅:
### 为什么无法在 CentOS 上连接数据库?
您可能遇到了 SELinux 的问题。禁用 SELinux 或运行此命令以允许 Web 服务器与数据库通信:
```
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 部分:
```
- /sys/fs/cgroup/memory.pressure:/sys/fs/cgroup/memory.pressure
```
这样做会将默认配置文件的 volumes 部分更改为以下内容:
```
volumes:
- dvwa:/var/lib/mysql
- /sys/fs/cgroup/memory.pressure:/sys/fs/cgroup/memory.pressure
```
有关其工作原理的更多信息,请参阅 [此 issue](https://github.com/MariaDB/mariadb-docker/issues/626)。
### 其他
有关最新的故障排除信息,请阅读 git 仓库中已打开和已关闭的工单:
在提交工单之前,请确保您运行的是仓库中最新版本的代码。这不是最新的发布版本,而是 master 分支中的最新代码。
如果要提出工单,请至少提交以下信息:
- 操作系统
- 您报告的错误发生后,Web 服务器错误日志中的最后 5 行
- 如果是数据库身份验证问题,请完成上述步骤并截图每一步。将这些与显示数据库用户和密码的配置文件部分的屏幕截图一起提交。
- 完整描述出了什么问题、您期望发生什么以及您尝试做了什么来修复它。“login broken” 不足以让我们了解您的问题并帮助修复它。
## 教程
我将尝试整理一些教程视频,介绍一些漏洞并展示如何检测它们以及如何利用它们。以下是我目前制作的视频:
[查找和利用反射型 XSS](https://youtu.be/V4MATqtdxss)
## SQLite3 SQL 注入
_对此的支持有限,在提出问题之前,请确保您准备好进行调试,不要简单地声称“它不工作”。_
默认情况下,SQLi 和 Blind SQLi 是针对站点使用的 MariaDB/MySQL 服务器完成的,但也可以切换为针对 SQLite3 进行 SQLi 测试。
我不打算介绍如何让 SQLite3 与 PHP 一起,但这应该只是安装 `php-sqlite3` 包并确保其已启用的简单情况。
要进行切换,只需编辑配置文件并添加或编辑这些行:
```
$_DVWA["SQLI_DB"] = "sqlite";
$_DVWA["SQLITE_DB"] = "sqli.db";
```
默认情况下,它使用文件 `database/sqli.db`,如果您弄乱了它,只需将 `database/sqli.db.dist` 复制过来覆盖它。
挑战与 MariaDB 完全相同,只是它们针对 SQLite3 运行。
## 👨💻 贡献者
感谢您的所有贡献并使该项目保持更新。:heart:
如果您有想法、某种改进或只是想合作,欢迎您贡献并参与项目,随时发送您的 PR。
## 报告漏洞
简而言之,请不要!
每年大约一次,有人会提交一份他们在应用程序中发现的漏洞报告,有些写得很好,有时比我见过的付费渗透测试报告还要好,有些只是“您缺少 header,给我钱”。
在 2023 年,当有人决定为其中一个漏洞请求 CVE 时,这升级到了一个全新的水平,他们被分配了 [CVE-2023-39848](https://nvd.nist.gov/vuln/detail/CVE-2023-39848)。随之而来的是一片哗然,并且浪费了时间来纠正这个问题。
该应用程序有漏洞,这是故意的。大多数是您作为课程学习的有详细记录的漏洞,其他是“隐藏”的,供您自己发现。如果您真的想炫耀您发现隐藏附加功能的技能,请写一篇博客文章或制作一个视频,因为可能有人对学习它们以及您是如何发现它们的感兴趣。如果您将链接发送给我们,我们甚至可能会将其包含在参考资料中。
## 链接
项目主页:
_由 DVWA 团队创建_
标签:CISA项目, CTF训练, DVWA, ffuf, ffuf, HTTP工具, MariaDB, OpenVAS, PHP, Web安全, Web应用防火墙测试, XML 请求, XSS, 安全开发, 安全教育, 漏洞情报, 漏洞演练, 漏洞靶场, 网络安全, 网络安全审计, 蓝队分析, 请求拦截, 防御检测, 隐私保护