作为网络安全爱好者或从业者,搭建一个安全且合法的实验环境是至关重要的第一步。在这篇文章中,我们将深入探讨如何在 Kali Linux 上搭建 Damn Vulnerable Web Application (DVWA)。DVWA 不仅仅是一个应用程序,它是我们学习 Web 渗透测试、理解常见漏洞原理以及练习攻防技术的最佳实战平台。
我们将通过这篇指南,手把手地完成从环境准备、依赖配置到数据库初始化的全过程。你不仅会学会“怎么做”,还会理解“为什么要这么做”,这对于成为一名优秀的安全专家至关重要。
目录
为什么选择 DVWA 作为入门靶场?
DVWA 是一个用 PHP 编写的、故意设计得漏洞百出的 Web 应用程序。它的主要目的是在一个合法且受控的环境中,帮助初学者和专业人士磨练技能。
- 分级的挑战机制:DVWA 提供了从“低”到“不可能”四个安全级别。这让我们能够清楚地看到代码是如何从不安全的直接取值进化到使用了安全的 PDO 预处理语句的。
- 全面的知识覆盖:它涵盖了 SQL 注入、XSS(跨站脚本)、CSRF、文件上传等 OWASP Top 10 漏洞。
- 开箱即用:作为开源项目,它易于部署,配合 Kali Linux 自带的 Apache、PHP 和 MySQL 环境,是完美的练习组合。
搭建前的技术准备
在开始之前,请确保你的 Kali Linux 已经更新到最新版本。虽然 Kali 通常预装了所需工具,但了解如何手动排查环境问题是每个运维和安全人员的必修课。
我们主要依赖以下技术栈:
- Apache Web Server:世界上使用最广泛的 Web 服务器软件,用于托管 DVWA 的 PHP 页面。
- PHP:服务端脚本语言,DVWA 的核心逻辑。
- MariaDB/MySQL:数据库管理系统,用于存储用户数据和 DVWA 的配置。
- Git:版本控制系统,用于从 GitHub 克隆 DVWA 源码。
步骤 1:获取源码与环境初始化
首先,我们需要将 DVWA 的源代码下载到我们的 Web 服务器根目录下。在 Kali Linux 中,默认的 Web 根目录通常是 /var/www/html/。
让我们打开终端,开始我们的操作。为了方便演示,我们假设你正在使用 root 用户或者拥有 sudo 权限。
1.1 进入 Web 服务器目录
我们将使用 cd 命令切换到目标目录。请务必注意路径的准确性。
# 导航到 Apache 的默认网站根目录
cd /var/www/html/
技术洞察:为什么选择 INLINECODEe58d04a1?这是 Apache 配置文件(INLINECODE2ce63131)中默认定义的 INLINECODEc1952025。放置在这里的文件可以直接通过 INLINECODE762fa865 或 http://127.0.0.1 访问。
1.2 克隆 DVWA 源码
接下来,我们使用 git 命令从官方仓库克隆最新版本的 DVWA。
# 从 GitHub 克隆 DVWA 主分支
# sudo 是必要的,因为 /var/www/html/ 通常属于 root 用户
sudo git clone https://github.com/digininja/DVWA.git
执行完毕后,我们可以使用 INLINECODEef952e16 命令查看当前目录,你会看到一个名为 INLINECODE3c3df546 的新文件夹。
步骤 2:配置文件系统权限
在 Linux 系统中,权限管理是安全的核心。Web 服务器(通常运行在 www-data 用户下)需要对 DVWA 目录具有读写权限,以便写入配置文件、上传文件以及生成会话。
2.1 修改目录权限
为了确保 DVWA 的所有功能(尤其是文件上传和日志记录)都能正常工作,我们需要递归地修改 DVWA 文件夹的权限。虽然在生产环境中给予 777 权限(所有人可读、写、执行)是非常危险的,但在本地隔离的实验环境中,这是最快速解决权限问题的方法。
# 切换上级目录以确认 DVWA 文件夹存在
cd /var/www/html/
# 使用 chmod 递归赋予 DVWA 文件夹完全权限
sudo chmod -R 777 DVWA
优化建议:在更严谨的安全实践中,我们建议将 DVWA 文件夹的所有权转移给 Web 服务器的用户,而不是直接开放 777 权限。你可以使用以下命令作为替代方案:
# 将文件夹所有者更改为 www-data(Apache 用户)
sudo chown -R www-data:www-data DVWA
这样做既保证了服务器的运行权限,又避免了其他用户恶意篡改文件。
步骤 3:DVWA 应用程序配置
现在,让我们进入 DVWA 的内部目录,准备进行核心配置。这里有一个非常重要的步骤——处理配置文件。
3.1 定位并重命名配置文件
DVWA 的开发者并没有直接提供配置文件,而是提供了一个模板文件 config.inc.php.dist。这是一种安全实践,防止在未修改默认设置的情况下直接运行应用。
# 进入 DVWA 目录
cd DVWA
# 查看目录内容,寻找配置文件模板
ls
你会看到 INLINECODE7c1da084。我们需要将其重命名为 INLINECODEacc2cc34,应用程序才能正确读取它。
# 将模板文件重命名为实际的配置文件
sudo mv config.inc.php.dist config.inc.php
3.2 编辑数据库连接设置
接下来,我们需要编辑 INLINECODEb96e23ce 文件,告诉 DVWA 如何连接到我们稍后要创建的数据库。你可以使用 Kali 自带的 INLINECODE269d0c2d、INLINECODEe776d05d 或 INLINECODEb1f42bcc 编辑器。
# 使用 mousepad 打开配置文件进行图形化编辑
sudo mousepad config.inc.php
在这个文件中,重点关注 INLINECODE163b2542、INLINECODE26498b28、INLINECODE6b504ac1 和 INLINECODE1e22133b 这几行配置。
代码分析与修改:
// 原始配置可能如下:
$_DVWA[ ‘db_user‘ ] = ‘dvwa‘;
$_DVWA[ ‘db_password‘ ] = ‘p@ssw0rd‘;
// 为了演示方便,我们建议将其修改为我们即将在 MySQL 中创建的凭据,或者保持默认(稍后在数据库中匹配即可)。
// 这里我们预设使用 root 用户(无密码)或者创建一个新用户。
// 本文中我们将创建一个名为 ‘admin‘ 的数据库用户,密码为 ‘password‘。
$_DVWA[ ‘db_user‘ ] = ‘admin‘;
$_DVWA[ ‘db_password‘ ] = ‘password‘;
保存文件并退出编辑器。
步骤 4:数据库与后端服务配置
DVWA 需要一个数据库来存储用户账户和应用程序状态。我们将使用 MariaDB(Kali 中 MySQL 的默认开源替代品)。
4.1 启动数据库服务
在大多数情况下,Kali Linux 的服务不会开机自启。我们需要手动启动 MySQL 服务并检查其状态。
# 启动 MySQL 服务
sudo systemctl start mysql
# 检查服务状态,确保它正在运行
# 如果看到 active (running) 字样,说明启动成功
sudo systemctl status mysql
4.2 创建数据库和用户
这是整个搭建过程中最容易出错的一步。我们需要登录 MySQL 命令行界面,执行 SQL 语句来创建环境。
# 切换到 root 用户以便后续操作(可选,视当前用户权限而定)
sudo su
# 登录 MySQL,-u 指定用户(root),-p 提示输入密码
# 默认情况下 Kali 的 root 用户没有密码,直接回车即可
mysql -u root -p
进入 INLINECODEcdaab6d1 提示符后,我们将执行以下操作:创建一个名为 INLINECODEc01f083f 的数据库,并授权给之前在配置文件中设置的用户(admin/password)。
-- 创建名为 dvwa 的数据库
CREATE DATABASE dvwa;
-- 创建一个名为 admin 的用户,密码为 password,仅允许本地连接
-- 注意:在生产环境中,‘password‘ 必须替换为强密码
CREATE USER ‘admin‘@‘127.0.0.1‘ IDENTIFIED BY ‘password‘;
-- 授予 admin 用户对 dvwa 数据库的所有权限
GRANT ALL PRIVILEGES ON dvwa.* TO ‘admin‘@‘127.0.0.1‘;
-- 刷新权限,确保更改立即生效
FLUSH PRIVILEGES;
-- 退出 MySQL 命令行
exit;
常见错误排查:如果在登录或创建用户时出现错误,请检查 INLINECODE2bcc3163 中的 IP 地址是否与 SQL 语句中的 INLINECODEe31a00e1 一致。有时 INLINECODEef82e475 和 INLINECODE1a253772 在 MySQL 权限表中被视为不同的主机。
步骤 5:Web 服务器与 PHP 环境微调
虽然 Apache 通常已经启动,但为了支持 DVWA 的某些功能(特别是文件包含漏洞的演示),我们需要修改 PHP 的配置文件 php.ini。
5.1 启动 Apache 服务
如果尚未启动,请执行以下命令:
# 启动 Apache2
systemctl start apache2
# 检查状态
systemctl status apache2
5.2 配置 PHP 设置
这是初学者容易忽略的一步。DVWA 的某些漏洞模块(如文件上传)对 PHP 的配置非常敏感。
我们需要找到 INLINECODE9e0fcef5 文件。在 Kali Linux 中,PHP 的配置文件通常位于 INLINECODE566478bc 目录下。由于 Kali 更新频繁,PHP 版本可能是 7.4, 8.1, 8.2 或 8.3。
# 进入 PHP 配置目录
cd /etc/php/
# 查看当前 PHP 版本文件夹(例如 8.2)
ls
# 进入对应版本的 Apache 配置目录(此处假设为 8.2,请根据实际情况调整)
cd 8.2/apache2/
# 使用文本编辑器打开 php.ini
sudo mousepad php.ini
5.3 关键指令修改
在 INLINECODE3c8e462f 文件中,我们需要修改两个关键的配置指令:INLINECODEdc5eec6a 和 allow_url_include。
- 寻找指令:使用编辑器的查找功能(通常是 INLINECODE4086ead0),搜索关键词 INLINECODE393daf12。
- 修改值:默认情况下,INLINECODEca616d35 可能是被注释掉的或者设置为 INLINECODEc0639058。为了在 DVWA 中演示远程文件包含(RFI)漏洞,我们需要将其设置为
On。
; 找到这一行(大约在 800 行左右,取决于版本)
;allow_url_include = Off
; 修改为
allow_url_include = On
; 同时确保 allow_url_fopen 也是 On 的状态
allow_url_fopen = On
为什么这样做? allow_url_include 是一个危险的功能,它允许 PHP 代码通过 HTTP/FTP 协议包含远程文件。这正是 DVWA 教我们如何利用远程文件执行代码(RCE)的基础。
保存文件并关闭编辑器。
5.4 重启服务应用更改
修改配置文件后,必须重启 Apache 服务才能使更改生效。
# 重启 Apache2
systemctl restart apache2
步骤 6:最终验证与初始化
现在,所有的后端准备工作已经就绪。让我们打开浏览器,见证成果。
6.1 访问 DVWA 页面
打开 Kali Linux 中的 Firefox 或任何浏览器,在地址栏输入以下 URL:
127.0.0.1/DVWA
或者:
http://localhost/DVWA
你应该能看到 DVWA 的登录界面(或者重定向到 setup.php)。如果只显示了 PHP 代码或出现 500 错误,说明 Apache 或 PHP 服务有问题,请回到步骤 5 检查错误日志。
6.2 初始化数据库
初次访问时,页面可能会提示你数据库不存在或者未初始化。页面底部应该有一个按钮:Create / Reset Database(创建/重置数据库)。
- 输入凭据:如果提示你输入用户名和密码(这是 Web 应用的登录,不是 MySQL 的),请输入 DVWA 的默认管理员账号。
– 用户:admin
– 密码:password
- 点击 Create / Reset Database 按钮。系统会利用我们在
config.inc.php中配置的账号,自动在 MySQL 中创建所需的表结构和初始数据。
完成后,你应该能成功登录到 DVWA 的控制台。此时,你可以点击左侧菜单栏的 DVWA Security,将安全级别从“Low”调整为“High”或“Impossible”,以此来挑战不同难度的代码审计和攻击。
深入理解与最佳实践
虽然我们已经成功搭建了 DVWA,但真正的学习才刚刚开始。在实验过程中,有几个技术细节值得你特别关注:
- 代码审计差异:在 DVWA 中,你可以点击页面底部的“View Source”查看源代码。我强烈建议你对比“Low”和“High”级别的代码。你会发现,“Low”级别直接使用了 INLINECODE310be80a 或 INLINECODE385c76ae 并拼接 SQL 语句,而“High”级别通常使用了
mysqli_real_escape_string或者 PDO。这是学习安全编码的最佳路径。
- 错误处理:在搭建过程中,如果你遇到了 PHP 报错,你可以通过以下命令查看实时日志:
tail -f /var/log/apache2/error.log
这将帮助你快速定位是 PHP 模块缺失还是配置文件语法错误。
- 性能与安全:
– 虽然我们使用了 INLINECODEe5eff06a 来快速解决问题,但在部署其他 Web 应用(如 WordPress 或 Drupal)时,绝对不要这样做。标准做法是赋予 INLINECODEc5656488 给目录,644 给文件。
– 实验结束后,记得关闭 MySQL 和 Apache 服务,以节省系统资源。
总结
在 Kali Linux 上搭建 DVWA 不仅仅是一次简单的安装过程,更是一次对 LAMP(Linux, Apache, MySQL, PHP)架构的实战演练。通过亲手配置目录权限、编辑 PHP 核心配置以及管理数据库用户,你已经掌握了搭建任何 PHP Web 应用所必需的核心技能。
现在,你的本地渗透测试实验室已经准备就绪。你可以自由地探索 SQL 注入、命令执行等漏洞,而无需担心破坏真实的系统。记住,最好的黑客是那些最理解系统底层的工程师。希望你在后续的漏洞挖掘之旅中,能够通过 DVWA 的每一个挑战,深入理解攻击原理,从而成为一名更优秀的白帽子。