Kali Linux下DVWA靶场搭建全攻略:从LAMP环境配置到渗透测试实战
1. 从零开始:为什么要在Kali上搭建DVWA?
如果你刚开始接触网络安全,或者想找一个安全、可控的环境来练习Web渗透测试,那么DVWA(Damn Vulnerable Web Application)绝对是你绕不开的“新手村”。它是一个故意设计得漏洞百出的PHP/MySQL应用,包含了SQL注入、XSS、文件上传、命令执行等十几种常见漏洞,让你可以合法地、反复地“攻击”它,而不用担心法律问题。
那么,为什么要把DVWA搭在Kali Linux上呢?Kali本身就是一个为渗透测试和安全研究而生的Linux发行版,预装了海量的安全工具。在Kali上搭建DVWA,相当于把“靶场”直接建在了“武器库”里。你不需要再费心去配置各种扫描器、代理工具,Kali已经为你准备好了Burp Suite、sqlmap、nmap等全套装备。更重要的是,整个过程——从环境配置到漏洞利用——都在一个封闭的虚拟机或物理机里完成,形成了一个完美的学习闭环。你不用去折腾复杂的网络配置,也不用担心误操作影响到真实服务器,可以心无旁骛地专注于漏洞原理和利用技巧本身。
我见过很多新手一上来就直接去网上找现成的在线靶场,这当然方便,但往往知其然不知其所以然。自己动手在Kali上从零搭建一遍DVWA,你会深刻理解一个Web应用是如何跑起来的(Apache、PHP、MySQL的协同),知道配置文件在哪里、日志怎么看、服务怎么启停。这些看似基础的操作,恰恰是后续进行更复杂漏洞分析和利用的基石。当你遇到一个“500 Internal Server Error”时,你知道该去/var/log/apache2/error.log里找原因;当你修改了PHP配置后,你知道需要重启Apache服务才能生效。这种对环境的掌控感,是直接使用在线平台无法获得的。
2. 环境准备:Kali Linux的基础配置与检查
在开始搭建DVWA之前,我们需要确保Kali Linux这个“地基”是稳固的。很多人拿到Kali后直接开干,结果在后续步骤中遇到各种稀奇古怪的问题,根源往往就在于基础环境没配好。
2.1 系统更新与网络连通性
首先,打开终端,第一件事永远是更新系统软件包列表并升级已安装的包。这能确保我们使用的是最新的软件源和补丁,避免因版本过旧导致的兼容性问题。
sudo apt update && sudo apt upgrade -y这个命令会运行一段时间,期间可能会询问你是否继续,输入Y并回车即可。sudo apt update是刷新本地软件包索引,让它与远程仓库同步;sudo apt upgrade -y则是实际升级所有可升级的软件包,-y参数表示自动确认所有提示,让过程更流畅。
注意:如果你的Kali是通过虚拟机(如VMware或VirtualBox)安装的,请务必确认虚拟机网络适配器设置为“NAT模式”或“桥接模式”,并确保宿主机可以正常访问互联网。一个简单的测试方法是
ping 8.8.8.8,如果能看到连续的回复,说明网络通畅。
2.2 LAMP环境核心组件检查与安装
DVWA是一个基于PHP和MySQL的Web应用,需要LAMP(Linux, Apache, MySQL, PHP)环境来运行。Kali默认已经安装了Apache和PHP,但MySQL被其分支MariaDB所替代,我们需要手动安装并启动这些服务。
安装Apache2和PHP:虽然Kali可能预装了,但为了确保完整性,我们显式安装一遍。
sudo apt install apache2 php -y安装MariaDB数据库服务器:MariaDB是MySQL的一个完全兼容的分支,在Kali中是默认的数据库选择。
sudo apt install mariadb-server mariadb-client -y安装PHP连接MySQL所需的扩展:PHP需要通过特定的扩展模块才能与MariaDB/MySQL通信。
sudo apt install php-mysql php-gd libapache2-mod-php -yphp-mysql: 让PHP支持MySQL/MariaDB。php-gd: 图形处理库,DVWA的某些功能(如验证码)可能需要。libapache2-mod-php: Apache的PHP处理模块,让Apache能解析PHP代码。
安装完成后,我们需要启动这些服务,并设置它们开机自启,这样每次重启Kali后,DVWA才能自动运行。
sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start mariadb sudo systemctl enable mariadb现在,打开你的浏览器,访问http://127.0.0.1或http://localhost。如果能看到Apache2的默认欢迎页面(通常显示“It works!”或“Apache2 Debian Default Page”),那么恭喜你,Web服务器已经成功运行了。
2.3 数据库安全初始化
刚安装的MariaDB root用户默认没有密码,这是一个巨大的安全风险,即使是在本地环境。我们必须立即进行安全加固。
运行以下命令来启动一个交互式的安全配置脚本:
sudo mysql_secure_installation你会被问到一系列问题,我的建议配置如下:
- Enter current password for root (enter for none):直接按回车(因为初始没有密码)。
- Switch to unix_socket authentication [Y/n]:输入
n然后回车。这一步是关于使用操作系统认证,我们暂时不需要。 - Change the root password? [Y/n]:输入
Y然后回车。这是最关键的一步。 - New password:设置一个强密码,例如
Dvwa123!@#,并牢记它。输入时不会显示字符,这是正常的。 - Re-enter new password:再次输入相同的密码。
- Remove anonymous users? [Y/n]:输入
Y然后回车。删除匿名用户,提高安全性。 - Disallow root login remotely? [Y/n]:输入
Y然后回车。禁止root用户远程登录,防止网络攻击。 - Remove test database and access to it? [Y/n]:输入
Y然后回车。删除测试数据库。 - Reload privilege tables now? [Y/n]:输入
Y然后回车。使所有更改立即生效。
完成这一步后,你的MariaDB环境就基本安全了。记住你设置的root密码,后续配置DVWA时会用到。
3. 获取与部署:DVWA源码的下载与配置
基础环境就绪,现在让我们把“靶子”——DVWA应用本身——放到合适的位置。
3.1 下载DVWA最新源码
官方推荐从GitHub仓库获取DVWA,这样可以确保拿到最新的版本(包括漏洞修复和功能更新)。在终端中执行:
cd /var/www/html sudo git clone https://github.com/digininja/DVWA.git这条命令做了两件事:首先cd /var/www/html切换工作目录到Apache的默认网站根目录(所有可以通过Web访问的文件都应放在这里或其子目录下);然后使用git clone命令将远程GitHub仓库的DVWA代码克隆到本地,在当前目录下生成一个名为DVWA的文件夹。
如果提示git命令未找到,你需要先安装它:sudo apt install git -y。
克隆完成后,你可以通过ls -la命令查看/var/www/html目录,应该能看到DVWA文件夹。
3.2 配置文件权限与所有权
Linux系统严格的权限管理是安全的基础,但也常常是新手搭建环境时的“拦路虎”。DVWA需要向特定目录写入数据(如上传文件、记录日志),因此我们必须正确设置文件夹权限。
将DVWA目录的所有权赋予Web服务器用户:在Debian/Ubuntu/Kali系统中,Apache默认以
www-data用户和用户组的身份运行。我们需要让这个用户有权读写DVWA目录。sudo chown -R www-data:www-data /var/www/html/DVWAchown命令用于改变文件所有者,-R参数表示递归处理目录下的所有文件和子目录。www-data:www-data表示将所有者设为www-data用户,所属组也设为www-data组。设置合理的目录权限:我们不需要给所有人(others)写权限,通常给所有者(www-data)读写执行,给同组用户读执行,给其他用户读执行即可。对于需要上传文件的目录,权限要特殊设置。
sudo chmod -R 755 /var/www/html/DVWAchmod 755是常见的目录权限,表示:所有者可读、写、执行(7),同组用户可读、执行(5),其他用户可读、执行(5)。特别处理文件上传目录:DVWA有一个
hackable/uploads/目录用于文件上传漏洞练习,它需要Web服务器有写入权限。sudo chmod 777 /var/www/html/DVWA/hackable/uploads/chmod 777意味着所有者、组用户、其他用户都有读、写、执行权限。这是一个非常宽松的权限,仅在本地学习环境可以这样设置,在生产环境中是绝对禁止的。之所以在这里使用777,是为了避免在练习文件上传漏洞时,因权限问题导致利用失败,干扰学习重点。
实操心得:权限问题(Permission Denied)是Linux环境下Web开发最常见的错误之一。如果后续访问DVWA页面时出现“无法创建配置文件”或“无法写入日志”等错误,十有八九是权限没设对。回头检查相关目录的所有者是否为
www-data,以及是否有相应的读写权限。
3.3 配置数据库连接
DVWA需要连接我们刚才安装的MariaDB数据库。其配置文件位于/var/www/html/DVWA/config/config.inc.php.dist。我们需要复制一份并修改它。
复制配置文件模板:
sudo cp /var/www/html/DVWA/config/config.inc.php.dist /var/www/html/DVWA/config/config.inc.php编辑配置文件:使用你喜欢的文本编辑器,例如
nano:sudo nano /var/www/html/DVWA/config/config.inc.php找到以下关键配置项并进行修改:
$_DVWA[ 'db_server' ] = '127.0.0.1'; // 数据库服务器地址,本地就用127.0.0.1 $_DVWA[ 'db_database' ] = 'dvwa'; // 数据库名,可以保持默认 $_DVWA[ 'db_user' ] = 'dvwa'; // 连接数据库的用户名,我们稍后会创建 $_DVWA[ 'db_password' ] = 'p@ssw0rd'; // 对应用户的密码为了安全,强烈建议不要使用默认的
p@ssw0rd作为密码。你可以把它改成另一个强密码,比如DvwaUserPass123!,并记住它。同时,将db_user也从默认的root改为一个专用用户(如dvwa),这是遵循数据库安全的最小权限原则。创建DVWA专用数据库和用户:现在,我们需要登录MariaDB,按照配置文件里的设定,创建数据库和用户。
sudo mysql -u root -p输入你之前为root用户设置的密码(例如
Dvwa123!@#)。成功进入MariaDB命令行后(提示符变为
MariaDB [(none)]>),依次执行以下SQL语句:-- 创建一个名为dvwa的数据库 CREATE DATABASE dvwa; -- 创建一个名为dvwa的用户,并设置密码(请替换为你在config.inc.php里设置的密码) CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'DvwaUserPass123!'; -- 授予dvwa用户对dvwa数据库的所有权限 GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost'; -- 刷新权限,使更改生效 FLUSH PRIVILEGES; -- 退出MariaDB命令行 EXIT;这样,我们就创建了一个名为
dvwa的数据库,以及一个只能从本地登录、且只对dvwa数据库有完整权限的dvwa用户。这比直接使用root用户安全得多。
4. 初始化与访问:完成DVWA安装并解决常见问题
所有组件都已就位,现在是时候启动靶场,并处理首次运行时可能遇到的“拦路虎”了。
4.1 重启服务与访问安装页面
在修改了配置和创建了数据库之后,最好重启一下Apache服务,确保所有更改生效。
sudo systemctl restart apache2现在,打开浏览器,访问http://127.0.0.1/DVWA/setup.php。你应该会看到DVWA的安装和设置页面。
这个页面会执行一系列检查,通常包括:
- PHP版本是否 >= 5.4.0
- 是否启用了必要的PHP扩展(如
mysql,gd) - 配置文件
config.inc.php是否可写 - 能否连接到指定的数据库(
127.0.0.1,用户dvwa,密码DvwaUserPass123!,数据库dvwa)
如果所有检查都是绿色的勾,那么页面最下方会出现一个“Create / Reset Database”按钮。
4.2 执行数据库初始化
点击“Create / Reset Database”按钮。这个操作会做两件重要的事:
- 在
dvwa数据库中创建所有必要的表结构(如users,guestbook等)。 - 向表中插入初始数据,包括默认的用户名和密码。
完成后,页面会自动跳转到DVWA的登录页面http://127.0.0.1/DVWA/login.php。
默认的登录凭证是:
- 用户名:
admin - 密码:
password
输入并登录,你就成功进入了DVWA的主界面!
4.3 排查与解决常见安装错误
很少有人能一次点亮所有绿灯。下面我列出几个最常见的错误及其解决方法,这几乎是每个新手都会踩的坑。
错误1:PHP函数allow_url_include被禁用 (红色叉叉)
- 现象:在
setup.php页面,allow_url_include检查项显示为红色。 - 原因:这是一个重要的安全设置,默认被关闭以防止远程文件包含漏洞。但DVWA的某些练习(如RFI)需要它开启。
- 解决:编辑PHP的配置文件。在Kali上,主要的PHP配置文件通常是
/etc/php/8.2/apache2/php.ini(版本号可能不同,如7.4、8.1等,可以用php -v查看版本,然后到/etc/php/下找对应目录)。
使用sudo nano /etc/php/8.2/apache2/php.iniCtrl+W搜索allow_url_include,找到这一行:
将其改为:allow_url_include = Off
保存文件后,必须重启Apache服务才能使更改生效:allow_url_include = On
刷新sudo systemctl restart apache2setup.php页面,该项应该变绿了。
错误2:无法连接到数据库 (红色叉叉)
- 现象:
ReCAPTCHA key或数据库连接检查失败。 - 排查步骤:
- 检查配置文件:再次确认
/var/www/html/DVWA/config/config.inc.php中的db_password是否与你创建dvwa用户时设置的密码完全一致(注意大小写和特殊字符)。 - 测试数据库连接:在终端尝试用配置文件中的信息手动连接数据库:
输入密码,看是否能成功登录MariaDB命令行。如果不能,说明用户创建或授权有问题。mysql -u dvwa -p -h 127.0.0.1 dvwa - 检查用户权限:以root用户登录MariaDB,检查
dvwa用户的权限:
确保用户存在且拥有对sudo mysql -u root -p SELECT Host, User FROM mysql.user WHERE User='dvwa'; SHOW GRANTS FOR 'dvwa'@'localhost';dvwa.*数据库的权限。 - 检查MariaDB服务状态:确保
mariadb服务正在运行。
如果没运行,用sudo systemctl status mariadbsudo systemctl start mariadb启动它。
- 检查配置文件:再次确认
错误3:setup.php页面显示空白或PHP代码
- 现象:访问
setup.php时,浏览器显示空白页,或者直接显示了PHP源代码。 - 原因:Apache没有正确解析PHP文件。通常是因为PHP模块未启用,或者文件后缀与处理模块的映射关系不对。
- 解决:
- 确保
libapache2-mod-php模块已安装并启用:sudo a2enmod php8.2 # 启用对应PHP版本的模块,版本号需匹配 sudo systemctl restart apache2 - 检查Apache的配置文件是否包含了对
.php文件的处理。通常默认是配置好的,但如果修改过,可以检查/etc/apache2/mods-enabled/php8.2.conf文件是否存在。
- 确保
错误4:点击“Create / Reset Database”按钮无反应或报错
- 现象:点击按钮后页面没有跳转,或者显示数据库错误。
- 原因:可能是之前数据库里已经存在同名的表,导致创建冲突;或者是用户权限不足。
- 解决:最彻底的方法是先清理旧数据。登录MariaDB的root用户,执行:
然后回到DROP DATABASE IF EXISTS dvwa; CREATE DATABASE dvwa; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost'; FLUSH PRIVILEGES; EXIT;setup.php页面,再次点击按钮。
5. 安全加固与进阶配置:让靶场更贴近真实环境
默认安装的DVWA为了方便练习,安全设置是最低的。为了让你的练习环境更贴近真实情况,或者增加一点挑战性,可以进行以下调整。
5.1 调整DVWA安全等级
登录DVWA后,在左侧菜单点击“DVWA Security”。这里你可以设置整个应用的安全级别:
- Low:毫无防护。所有漏洞利用起来最简单,适合完全新手理解漏洞原理。
- Medium:加入了一些基础的、但很容易绕过的防护(如简单的输入过滤)。适合练习绕过技巧。
- High:防护较强,需要更精巧的利用方式。适合进阶挑战。
- Impossible:理论上无法利用的防护级别。展示了从开发层面如何彻底修复该漏洞,具有极高的学习价值。
我的建议是:从Low级别开始,逐个漏洞学习原理和利用方法。掌握后,切换到Medium和High,研究防护机制并尝试绕过。最后,一定要看Impossible级别的代码,理解真正的安全解决方案是什么。
5.2 修改默认凭证并创建多用户
永远不要使用默认密码!这是安全第一课。登录DVWA后,点击“Brute Force”模块,然后点击“View Source”查看前端代码,你会发现默认的用户名/密码就硬编码在页面的HTML注释里。这太不真实了。
我们应该修改它:
- 使用默认凭证 (
admin/password) 登录。 - 点击左侧“Setup”,拉到底部,再次点击“Create / Reset Database”。这会重置数据库,但不会重置
config.inc.php中的数据库密码。 - 重置后,默认用户
admin的密码会变回password。但我们可以用SQL注入或暴力破解模块(在Low安全级别下)来练习修改密码,或者直接去数据库里改:sudo mysql -u root -p dvwa
这样就把UPDATE users SET password = MD5('MyNewStrongPassword123!') WHERE user = 'admin';admin用户的密码改为了MyNewStrongPassword123!(DVWA使用MD5存储密码)。
更进一步,你可以在数据库里创建多个用户,模拟一个真实的用户系统,用于练习垂直越权、水平越权等漏洞。
5.3 配置PHP错误报告与日志
为了更好的调试和学习,建议调整PHP的错误报告级别,并学会查看日志。 编辑/var/www/html/DVWA/config/config.inc.php,找到以下行:
# 默认可能是关闭的 $_DVWA[ 'display_errors' ] = 'false';可以暂时改为'true',这样PHP错误和警告会直接显示在页面上,方便你调试代码(仅限本地学习环境)。
同时,关注Apache的错误日志,它是发现问题的金矿:
sudo tail -f /var/log/apache2/error.logtail -f命令会实时显示日志文件的最后几行并持续输出新内容。当你访问DVWA遇到白屏或500错误时,另一个终端窗口开着这个命令,就能立刻看到具体的错误信息。
5.4 将DVWA与Kali工具链结合
这才是Kali上搭建DVWA的精髓。你不再需要单独启动各种工具,它们已经集成在系统中。
- 使用Burp Suite代理流量:启动Burp Suite,配置浏览器代理为
127.0.0.1:8080。然后所有访问DVWA的流量都会经过Burp,你可以拦截、查看、修改每一个HTTP请求和响应,这对于分析漏洞和构造攻击Payload至关重要。 - 使用sqlmap自动化SQL注入测试:在DVWA的SQL注入关卡,先手工尝试找出注入点。然后复制这个请求(可以从Burp中复制),使用sqlmap进行自动化测试和利用:
你需要将URL和Cookie替换成你自己的。sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=你的会话ID; security=low" --batch--batch参数会让sqlmap自动选择默认选项。 - 使用nmap扫描自身:虽然靶场在本地,但你依然可以用nmap扫描
127.0.0.1,了解端口开放和服务指纹信息,这是一种标准的侦查流程练习。
6. 日常维护与重置:保持靶场的整洁与可用
经过一段时间的“狂轰滥炸”,DVWA的数据库可能会变得混乱,或者你想从头开始练习。以下是维护技巧。
6.1 快速重置DVWA数据库
最干净利落的方法就是回到“Setup”页面,点击那个万能的“Create / Reset Database”按钮。这会将所有数据恢复到初始状态,包括用户、留言板内容等。
6.2 备份与恢复特定数据
如果你配置了复杂的用户权限或者修改了某些数据想保留,可以手动备份数据库。
# 备份 sudo mysqldump -u root -p dvwa > dvwa_backup_$(date +%Y%m%d).sql # 恢复 (在重置数据库后) sudo mysql -u root -p dvwa < dvwa_backup_20231027.sql6.3 彻底卸载与重新安装
如果环境被彻底玩坏,想推倒重来:
- 删除DVWA目录:
sudo rm -rf /var/www/html/DVWA - 登录MariaDB,删除数据库和用户:
DROP DATABASE dvwa; DROP USER 'dvwa'@'localhost'; FLUSH PRIVILEGES; - 然后从本文的第3章开始,重新执行一遍克隆、配置、初始化的步骤即可。
搭建DVWA靶场的过程,本身就是一次绝佳的学习体验。你不仅得到了一个练习漏洞的平台,更亲手实践了Linux系统管理、Web服务配置、数据库操作和安全加固等一系列技能。当你在Kali的命令行中敲下一个个指令,并最终在浏览器中看到DVWA的登录界面时,那种“从无到有”的掌控感,是任何现成工具都无法替代的。现在,靶场已就绪,武器已在手,是时候开始你的网络安全探索之旅了。记住,在“攻击”你的DVWA之前,先确保你已经完全理解并完成了上述所有配置步骤,一个稳固的环境是高效学习的前提。
