2026/7/27 22:24:05

Kali 2024.2 本地靶场搭建:DVWA 环境配置与漏洞测试指南

Kali 2024.2 本地靶场搭建:DVWA 环境配置与漏洞测试指南 1. 项目概述为什么要在Kali 2024.2上搭建DVWA如果你刚接触网络安全或者渗透测试手头有一台安装了Kali Linux 2024.2的机器那么搭建一个本地靶场几乎是你的第一课。DVWADamn Vulnerable Web Application这个“该死的脆弱Web应用”就是为你量身定做的。它不是一个需要你去攻击的真实网站而是一个故意设计得漏洞百出的Web应用专门用来安全、合法地练习各种攻击技术比如SQL注入、XSS跨站脚本、文件上传漏洞等等。在Kali 2024.2上做这件事优势非常明显。Kali本身集成了海量的安全工具从信息搜集、漏洞扫描到漏洞利用一应俱全。在本地环境搭建DVWA意味着你所有的攻击流量都在自己的虚拟机或物理机内部循环完全不用担心法律风险可以放开手脚去尝试各种“骚操作”。更重要的是你能清晰地看到攻击的每一步对服务器端Apache、MySQL、PHP产生了什么影响这对于理解漏洞原理至关重要。网上很多教程要么年代久远适配旧版Kali和PHP要么步骤零散容易在配置环节卡壳。今天我们就从最干净的Kali 2024.2系统开始手把手带你走通从克隆代码到成功登录的每一个环节把可能遇到的坑都提前填平。2. 环境准备与核心依赖解析在开始克隆代码之前我们必须确保Kali Linux 2024.2的基础环境是健全的。DVWA本质上是一个由PHP编写、依赖MySQL数据库、并通过Apache提供Web服务的应用。因此我们的准备工作需要围绕LAMPLinux, Apache, MySQL, PHP堆栈展开。2.1 系统更新与必备服务安装首先打开你的终端。一个好的习惯是在安装任何新软件前先更新系统的软件包列表。这能确保我们获取到最新的软件版本和补丁。sudo apt update sudo apt upgrade -y这条命令中sudo apt update是刷新本地软件包索引让它与远程仓库同步sudo apt upgrade -y则是实际升级所有可升级的软件包-y参数表示自动确认避免安装过程中需要手动输入“Y”来确认。接下来安装DVWA运行所必需的“三件套”Apache、MySQL和PHP。在Kali中我们可以使用tasksel工具组安装LAMP但更推荐手动指定安装这样对组件的版本控制更清晰。sudo apt install -y apache2 mariadb-server php php-mysql php-gd libapache2-mod-php这里有几个关键点mariadb-server 我们安装的是MariaDB它是MySQL的一个流行分支完全兼容MySQL在Kali和许多Linux发行版中已作为默认的数据库选项。DVWA的配置文件默认连接MySQL但连接MariaDB完全没问题。php 安装PHP语言本身。php-mysql 这是PHP连接MySQL/MariaDB数据库的扩展模块没有它PHP代码无法与数据库交互DVWA将无法工作。php-gd GD库是PHP处理图像的扩展DVWA的某些功能如验证码可能会用到它一并安装避免后续问题。libapache2-mod-php 这个模块至关重要它让Apache能够解析和执行PHP代码。没有它访问.php文件时浏览器只会下载文件源码而不会显示网页。安装完成后我们需要启动Apache和MariaDB服务并设置它们开机自启。sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start mariadb sudo systemctl enable mariadb使用systemctl status apache2和systemctl status mariadb可以检查服务是否正在活跃active (running)运行。2.2 MySQL/MariaDB安全初始化与数据库配置刚安装的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然后为root用户设置一个强密码。请务必记住这个密码后续配置DVWA时会用到。后续的问题关于移除匿名用户、禁止root远程登录、删除测试数据库等全部输入Y即可。这是标准的安全加固步骤。安全初始化完成后我们需要为DVWA创建一个专用的数据库和用户。这样做的好处是权限隔离即使DVWA应用存在漏洞攻击者获取的也只是这个专用用户的权限不会直接威胁到数据库的root用户。使用root用户登录MariaDBsudo mysql -u root -p输入你刚才设置的root密码。在MariaDB命令行中依次执行以下SQL语句CREATE DATABASE dvwa; CREATE USER dvwa_userlocalhost IDENTIFIED BY pssw0rd; GRANT ALL PRIVILEGES ON dvwa.* TO dvwa_userlocalhost; FLUSH PRIVILEGES; EXIT;这里解释一下CREATE DATABASE dvwa;创建了一个名为dvwa的数据库。CREATE USER dvwa_userlocalhost IDENTIFIED BY pssw0rd;创建了一个用户名为dvwa_user且只能从本机localhost连接的用户密码设置为pssw0rd。在实际环境中你应该使用更复杂、更独特的密码。GRANT ALL PRIVILEGES ON dvwa.* TO dvwa_userlocalhost;将dvwa数据库的所有权限授予dvwa_user用户。FLUSH PRILEGES;让权限更改立即生效。EXIT;退出MariaDB命令行。注意很多教程会直接让DVWA使用root用户连接数据库这是极不安全的做法。一旦DVWA存在SQL注入漏洞攻击者可能直接获取数据库最高权限。创建专用用户是生产环境中的基本准则即使在靶场练习中也应养成这个好习惯。3. 获取DVWA源码与目录部署环境就绪后我们就可以获取DVWA的源代码了。官方代码托管在GitHub上我们使用git命令来克隆。3.1 使用Git克隆项目到本地首先确保安装了gitsudo apt install -y git然后我们将项目克隆到Apache的默认网站根目录/var/www/html/下。通常我们会为每个网站创建一个子目录。cd /var/www/html/ sudo git clone https://github.com/digininja/DVWA.git这条命令会在/var/www/html/目录下创建一个名为DVWA的文件夹里面包含了所有的源代码。git clone的优势在于未来如果需要更新DVWA版本只需进入这个目录执行git pull即可。3.2 权限配置与关键文件准备克隆下来的文件其所有者和权限可能不符合Apache运行的要求。我们需要进行适当的调整。首先将DVWA目录的所有权更改为Apache运行时所使用的用户和组。在Kali上Apache默认的用户和组通常是www-data。sudo chown -R www-data:www-data /var/www/html/DVWA/-R参数表示递归操作将该目录下所有文件和子目录的所有权都进行更改。接下来我们需要复制DVWA的配置文件模板并为其设置正确的权限。cd /var/www/html/DVWA/config/ sudo cp config.inc.php.dist config.inc.php sudo chmod 755 config.inc.phpconfig.inc.php.dist是一个分布式配置文件模板我们不能直接修改它。cp config.inc.php.dist config.inc.php复制一份副本命名为config.inc.php这才是我们实际要编辑的配置文件。chmod 755 config.inc.php设置文件权限允许Apache进程读取它。实操心得权限问题是Linux Web应用部署中最常见的“坑”之一。如果权限过松如777存在安全风险如果过紧Apache无法读取或写入例如DVWA需要写日志或上传文件会导致功能异常。遵循“最小权限原则”给www-data用户所有权并设置适当的读/写/执行权限是平衡安全与功能的关键。4. 核心配置详解与漏洞环境初始化现在来到了最关键的配置环节。DVWA能否正常运行以及漏洞能否被成功利用都取决于config.inc.php文件的配置。4.1 数据库连接配置使用文本编辑器如nano或vim打开配置文件sudo nano /var/www/html/DVWA/config/config.inc.php找到以下关键配置段并进行修改$_DVWA[ db_server ] 127.0.0.1; $_DVWA[ db_database ] dvwa; $_DVWA[ db_user ] dvwa_user; $_DVWA[ db_password ] pssw0rd;确保这里的值与你之前创建数据库和用户时设置的一致db_server: 数据库服务器地址因为是本地所以用127.0.0.1或localhost。db_database: 数据库名我们创建的是dvwa。db_user: 数据库用户名我们创建的是dvwa_user。db_password: 对应用户的密码即pssw0rd请替换为你自己设置的强密码。4.2 安全等级与递归目录配置继续在同一个配置文件中找到以下两行$_DVWA[ default_security_level ] impossible; $_DVWA[ recaptcha_public_key ] ; $_DVWA[ recaptcha_private_key ] ;default_security_level 这是DVWA的默认安全等级有low,medium,high,impossible四个级别。low级别漏洞最容易利用impossible级别则意味着应用已修复该漏洞。强烈建议初学者先设置为low否则你可能会发现所有攻击练习都无法成功从而怀疑人生。将其修改为$_DVWA[ default_security_level ] low;。recaptcha_public_key和recaptcha_private_key 这是用于reCAPTCHA验证码的密钥如果你需要测试包含验证码的模块如Brute Force暴力破解需要去Google reCAPTCHA官网申请并填写。对于本地学习和基本功能测试可以暂时留空。还有一个非常重要的配置它决定了PHP函数allow_url_include的状态该函数允许PHP包含远程文件是“文件包含”漏洞利用的关键。在Kali 2024.2的默认PHP配置中这个函数通常是关闭的。我们需要在DVWA的配置中显式开启它仅用于测试环境。在配置文件中找到或添加这一行$_DVWA[ allow_url_include ] true;4.3 PHP配置调整以适配漏洞环境为了让一些特定的漏洞如文件上传能够被演示我们可能需要调整PHP的全局配置。配置文件位于/etc/php/8.2/apache2/php.ini请注意PHP版本号可能不同Kali 2024.2可能使用8.2或8.3你可以用php -v查看或用ls /etc/php/查看目录。使用sudo权限编辑该文件sudo nano /etc/php/8.2/apache2/php.ini找到以下行并进行修改file_uploads On allow_url_fopen On allow_url_include Off ; 这个由DVWA自身的配置控制此处保持Off即可 display_errors On ; 开发环境建议开启方便排错修改完成后必须重启Apache服务才能使PHP配置生效sudo systemctl restart apache25. 完成安装与首次登录所有配置完成后我们就可以通过浏览器访问DVWA了。5.1 访问安装页面与数据库初始化打开你的浏览器在Kali桌面或宿主机上均可。在地址栏输入http://127.0.0.1/DVWA/或http://localhost/DVWA/。页面会自动跳转到http://127.0.0.1/DVWA/setup.php。在setup.php页面你会看到一个绿色的“Create / Reset Database”按钮。点击这个按钮。这个操作会执行以下任务连接到你在config.inc.php中配置的数据库。在dvwa数据库中创建所有必要的表如users,guestbook等。向users表中插入默认的用户数据包括我们等下要登录的账号。如果一切顺利页面下方会显示绿色的“Setup Successful”信息并列出已创建的表。5.2 使用默认凭证登录数据库初始化成功后页面会提示你进行登录。DVWA的默认登录凭证是用户名admin密码password在登录框输入这些信息点击登录。重要警告admin/password是公开的默认凭证绝对禁止在互联网上任何可公开访问的服务器中使用此配置。仅在本地测试环境使用。登录成功后你会进入DVWA的主界面。左侧是导航菜单包含了各种漏洞练习模块如Brute Force暴力破解、Command Injection命令注入、CSRF跨站请求伪造、File Inclusion文件包含、File Upload文件上传、SQL InjectionSQL注入、XSS跨站脚本等。5.3 安全等级设置与功能验证登录后第一件事就是确认并设置安全等级。在左侧菜单点击“DVWA Security”。在安全等级设置页面你可以看到一个下拉菜单当前应该显示为“Low”如果你按之前的建议修改了配置。你可以在这里随时切换安全等级以测试同一漏洞在不同防护级别下的利用难度。例如在“Low”级别下SQL注入可能非常简单切换到“High”级别可能需要更复杂的绕过技巧。为了验证环境是否完全正常建议进行一个快速测试将安全等级设置为“Low”。点击左侧“SQL Injection”。在输入框中随意输入一个数字如1点击“Submit”。如果页面返回了数据库中的用户信息而没有报错那么恭喜你你的SQL注入漏洞环境已经就绪可以开始你的渗透测试练习了。6. 常见问题排查与深度优化指南即使按照步骤操作你也可能会遇到一些问题。下面是一些常见问题的排查思路和解决方法。6.1 连接数据库失败问题描述 点击“Create / Reset Database”按钮后页面提示数据库连接错误如“Could not connect to the database.”排查步骤检查配置文件 再次确认/var/www/html/DVWA/config/config.inc.php中的数据库IP、端口默认3306、数据库名、用户名和密码完全正确。特别注意密码中是否有特殊字符在PHP配置中可能需要转义。检查MariaDB服务状态 运行sudo systemctl status mariadb确保服务是active (running)。测试命令行连接 在终端尝试用配置中的用户密码连接mysql -u dvwa_user -p然后输入密码。如果连不上说明数据库用户创建或权限授予有问题。可以重新用root登录检查用户是否存在 (SELECT User FROM mysql.user;) 和权限 (SHOW GRANTS FOR dvwa_userlocalhost;)。检查防火墙 Kali默认的防火墙如ufw可能阻止了连接。可以暂时关闭防火墙测试sudo ufw disable测试后记得重新开启sudo ufw enable。6.2 页面显示源码或出现下载问题描述 访问.php文件时浏览器没有解析PHP代码而是直接显示了源代码或提示下载。原因与解决 这几乎肯定是Apache的PHP模块没有正确加载或启用。检查模块是否已启用sudo a2enmod php8.2请替换为你的PHP版本号然后重启Apachesudo systemctl restart apache2。检查libapache2-mod-php包是否确实已安装dpkg -l | grep libapache2-mod-php。确保Apache的目录配置正确允许解析.php文件。默认配置通常是正确的。6.3 文件上传漏洞无法利用问题描述 在“File Upload”模块上传了包含恶意代码的图片或文件但访问时没有执行。排查与解决检查文件权限 上传目录/var/www/html/DVWA/hackable/uploads/必须对Apache用户www-data可写。运行sudo chown -R www-data:www-data /var/www/html/DVWA/hackable/uploads/。检查PHP配置 确认php.ini中file_uploads On。检查文件内容 如果你上传的是一个图片马将PHP代码嵌入图片需要确认服务器是否配置了错误的MIME类型解析或者你是否通过文件包含漏洞来执行它。单纯的图片上传后直接访问通常不会作为PHP执行。6.4 递归目录reCAPTCHA相关错误问题描述 在“Brute Force”等模块页面提示reCAPTCHA密钥错误。解决 如果你不需要测试验证码绕过可以忽略此错误它不影响其他漏洞练习。若需要需前往Google reCAPTCHA官网https://www.google.com/recaptcha/admin注册一个站点选择“reCAPTCHA v2”的“I‘m not a robot”复选框类型然后将获得的“Site key”和“Secret key”分别填入config.inc.php的$_DVWA[ recaptcha_public_key ]和$_DVWA[ recaptcha_private_key ]。6.5 性能优化与安全加固建议针对靶场环境虽然DVWA是靶场但良好的习惯值得培养。修改默认凭证 登录DVWA后第一时间去“Brute Force”模块修改admin用户的密码。这本身也是一个安全练习。限制访问范围 如果你的Kali是虚拟机且使用桥接网络同一局域网内的其他机器可能也能访问http://[你的KaliIP]/DVWA。如果不想这样可以配置Apache只监听本地回环地址。编辑/etc/apache2/ports.conf将Listen 80改为Listen 127.0.0.1:80然后重启Apache。定期更新 进入/var/www/html/DVWA/目录定期执行sudo git pull可以获取DVWA的最新版本和漏洞修复尽管我们练习时需要漏洞存在。快照备份 在使用虚拟机如VMware或VirtualBox时在完成DVWA的纯净搭建后创建一个系统快照。这样无论你在练习中把系统“玩”成什么样子都可以一键恢复到干净的靶场状态。搭建过程本身就是对Web应用运行环境的一次深刻理解。从服务安装、权限配置、数据库操作到应用部署每一步都对应着真实运维中的关键技能。现在你的专属漏洞实验室已经准备就绪接下来就是深入每一个模块从“Low”级别开始逐步提升难度去理解、利用并最终思考如何防御这些安全漏洞。记住靶场的目的不是炫技而是通过合法的破坏去学习如何更好地构建。