当前位置: 首页 > news >正文

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

1. 项目概述:为什么要在Kali 2024.2上搭建DVWA?

如果你刚接触网络安全或者渗透测试,手头有一台安装了Kali Linux 2024.2的机器,那么搭建一个本地靶场几乎是你的第一课。DVWA(Damn 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服务的应用。因此,我们的准备工作需要围绕LAMP(Linux, 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 apache2systemctl status mariadb可以检查服务是否正在活跃(active (running))运行。

2.2 MySQL/MariaDB安全初始化与数据库配置

刚安装的MariaDB root用户密码是空的,这存在安全风险。我们需要运行一个安全脚本来设置密码,并移除一些不安全的默认设置。

sudo mysql_secure_installation

运行后,你会被问到一系列问题:

  1. Enter current password for root (enter for none):直接按回车,因为初始密码为空。
  2. Switch to unix_socket authentication [Y/n]:输入n。这是关于使用系统凭证登录的选项,为了简单起见我们先不用。
  3. Change the root password? [Y/n]:输入Y,然后为root用户设置一个强密码。请务必记住这个密码,后续配置DVWA时会用到。
  4. 后续的问题关于移除匿名用户、禁止root远程登录、删除测试数据库等,全部输入Y即可。这是标准的安全加固步骤。

安全初始化完成后,我们需要为DVWA创建一个专用的数据库和用户。这样做的好处是权限隔离,即使DVWA应用存在漏洞,攻击者获取的也只是这个专用用户的权限,不会直接威胁到数据库的root用户。

使用root用户登录MariaDB:

sudo mysql -u root -p

输入你刚才设置的root密码。

在MariaDB命令行中,依次执行以下SQL语句:

CREATE DATABASE dvwa; CREATE USER 'dvwa_user'@'localhost' IDENTIFIED BY 'p@ssw0rd'; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa_user'@'localhost'; FLUSH PRIVILEGES; EXIT;

这里解释一下:

  • CREATE DATABASE dvwa;创建了一个名为dvwa的数据库。
  • CREATE USER 'dvwa_user'@'localhost' IDENTIFIED BY 'p@ssw0rd';创建了一个用户名为dvwa_user,且只能从本机(localhost)连接的用户,密码设置为p@ssw0rd在实际环境中,你应该使用更复杂、更独特的密码
  • GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa_user'@'localhost';dvwa数据库的所有权限授予dvwa_user用户。
  • FLUSH PRILEGES;让权限更改立即生效。
  • EXIT;退出MariaDB命令行。

注意:很多教程会直接让DVWA使用root用户连接数据库,这是极不安全的做法。一旦DVWA存在SQL注入漏洞,攻击者可能直接获取数据库最高权限。创建专用用户是生产环境中的基本准则,即使在靶场练习中也应养成这个好习惯。

3. 获取DVWA源码与目录部署

环境就绪后,我们就可以获取DVWA的源代码了。官方代码托管在GitHub上,我们使用git命令来克隆。

3.1 使用Git克隆项目到本地

首先,确保安装了git:

sudo 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.php
  • config.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' ] = 'p@ssw0rd';

确保这里的值与你之前创建数据库和用户时设置的一致:

  • db_server: 数据库服务器地址,因为是本地,所以用127.0.0.1localhost
  • db_database: 数据库名,我们创建的是dvwa
  • db_user: 数据库用户名,我们创建的是dvwa_user
  • db_password: 对应用户的密码,即p@ssw0rd(请替换为你自己设置的强密码)。

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_keyrecaptcha_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 apache2

5. 完成安装与首次登录

所有配置完成后,我们就可以通过浏览器访问DVWA了。

5.1 访问安装页面与数据库初始化

  1. 打开你的浏览器(在Kali桌面或宿主机上均可)。
  2. 在地址栏输入:http://127.0.0.1/DVWA/http://localhost/DVWA/
  3. 页面会自动跳转到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 Injection(SQL注入)、XSS(跨站脚本)等。

5.3 安全等级设置与功能验证

登录后第一件事,就是确认并设置安全等级。在左侧菜单点击“DVWA Security”。

在安全等级设置页面,你可以看到一个下拉菜单,当前应该显示为“Low”(如果你按之前的建议修改了配置)。你可以在这里随时切换安全等级,以测试同一漏洞在不同防护级别下的利用难度。例如,在“Low”级别下,SQL注入可能非常简单;切换到“High”级别,可能需要更复杂的绕过技巧。

为了验证环境是否完全正常,建议进行一个快速测试:

  1. 将安全等级设置为“Low”。
  2. 点击左侧“SQL Injection”。
  3. 在输入框中随意输入一个数字(如1),点击“Submit”。
  4. 如果页面返回了数据库中的用户信息,而没有报错,那么恭喜你,你的SQL注入漏洞环境已经就绪,可以开始你的渗透测试练习了。

6. 常见问题排查与深度优化指南

即使按照步骤操作,你也可能会遇到一些问题。下面是一些常见问题的排查思路和解决方法。

6.1 连接数据库失败

问题描述: 点击“Create / Reset Database”按钮后,页面提示数据库连接错误,如“Could not connect to the database.”

排查步骤

  1. 检查配置文件: 再次确认/var/www/html/DVWA/config/config.inc.php中的数据库IP、端口(默认3306)、数据库名、用户名和密码完全正确。特别注意密码中是否有特殊字符,在PHP配置中可能需要转义。
  2. 检查MariaDB服务状态: 运行sudo systemctl status mariadb,确保服务是active (running)
  3. 测试命令行连接: 在终端尝试用配置中的用户密码连接:mysql -u dvwa_user -p,然后输入密码。如果连不上,说明数据库用户创建或权限授予有问题。可以重新用root登录检查用户是否存在 (SELECT User FROM mysql.user;) 和权限 (SHOW GRANTS FOR 'dvwa_user'@'localhost';)。
  4. 检查防火墙: Kali默认的防火墙(如ufw)可能阻止了连接。可以暂时关闭防火墙测试:sudo ufw disable(测试后记得重新开启:sudo ufw enable)。

6.2 页面显示源码或出现下载

问题描述: 访问.php文件时,浏览器没有解析PHP代码,而是直接显示了源代码或提示下载。

原因与解决: 这几乎肯定是Apache的PHP模块没有正确加载或启用。

  1. 检查模块是否已启用:sudo a2enmod php8.2(请替换为你的PHP版本号),然后重启Apache:sudo systemctl restart apache2
  2. 检查libapache2-mod-php包是否确实已安装:dpkg -l | grep libapache2-mod-php
  3. 确保Apache的目录配置正确,允许解析.php文件。默认配置通常是正确的。

6.3 文件上传漏洞无法利用

问题描述: 在“File Upload”模块,上传了包含恶意代码的图片或文件,但访问时没有执行。

排查与解决

  1. 检查文件权限: 上传目录/var/www/html/DVWA/hackable/uploads/必须对Apache用户(www-data)可写。运行sudo chown -R www-data:www-data /var/www/html/DVWA/hackable/uploads/
  2. 检查PHP配置: 确认php.inifile_uploads = On
  3. 检查文件内容: 如果你上传的是一个图片马(将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是靶场,但良好的习惯值得培养。

  1. 修改默认凭证: 登录DVWA后,第一时间去“Brute Force”模块修改admin用户的密码。这本身也是一个安全练习。
  2. 限制访问范围: 如果你的Kali是虚拟机且使用桥接网络,同一局域网内的其他机器可能也能访问http://[你的KaliIP]/DVWA。如果不想这样,可以配置Apache只监听本地回环地址。编辑/etc/apache2/ports.conf,将Listen 80改为Listen 127.0.0.1:80,然后重启Apache。
  3. 定期更新: 进入/var/www/html/DVWA/目录,定期执行sudo git pull可以获取DVWA的最新版本和漏洞修复(尽管我们练习时需要漏洞存在)。
  4. 快照备份: 在使用虚拟机(如VMware或VirtualBox)时,在完成DVWA的纯净搭建后,创建一个系统快照。这样无论你在练习中把系统“玩”成什么样子,都可以一键恢复到干净的靶场状态。

搭建过程本身,就是对Web应用运行环境的一次深刻理解。从服务安装、权限配置、数据库操作到应用部署,每一步都对应着真实运维中的关键技能。现在,你的专属漏洞实验室已经准备就绪,接下来就是深入每一个模块,从“Low”级别开始,逐步提升难度,去理解、利用并最终思考如何防御这些安全漏洞。记住,靶场的目的不是炫技,而是通过合法的破坏,去学习如何更好地构建。

http://www.jsqmd.com/news/1276826/

相关文章:

  • SecHex-Spoofy 1.5.8:新手也能上手的硬件伪装工具完全指南
  • Unity 2D游戏开发实战:从事件驱动架构到完整游戏逻辑实现
  • Prompt设计实战:提升AI交互效果的4种核心方法
  • 终极ESP8266红外遥控库:打造专业级智能家居控制方案
  • AI智能体架构核心组件与实战解析
  • AI在电商内容生成与评价分析中的实践应用
  • 2026高温工业吸尘器品牌推荐榜:谁才是第一? - 工业清洁测评社
  • 飞书AI多维表格权限失控危机预警:1个误操作导致数据泄露的4步溯源法
  • 基于PCA的人脸识别系统开发与实践
  • Audio Slicer智能音频分割工具:基于静音检测的自动化音频处理解决方案
  • 2026 年新发布:回民诚信的静电地板哪家好定制厂家哪个好,机房选地面别瞎踩坑,这玩意儿竟能帮你省半年运维费?-亚豪防静电地板 - 企业官方推荐【认证】
  • 2026实力之选:深圳纸罐厂家-广东多普包装技术有限公司,专业的天地盖纸罐、平口纸罐、牛皮纸罐与食品复合罐源头企业 - 卓企推荐
  • 2026年7月GEO优化公司效果横评:哪家交付结果更值得关注 - 纬度视角家
  • 多智能体协同AI图像翻译系统:跨境电商图片本地化解决方案
  • CNN卷积层步幅与填充参数详解及实践
  • Java开发者转型大模型开发的工程化实践与优势
  • Agent 的“大脑-手“解耦架构:当推理层和工具执行层各自独立演进
  • TM4C129 I2C中断寄存器深度解析与实战避坑指南
  • Docker快速部署TDengine时序数据库实践指南
  • 2026六枝特区黄金变现避坑指南:实测8大骗局,优选30年老牌连锁全境免费上门 - 华金汇黄金回收
  • 2026年GEO服务商选型全攻略:五家优质机构梳理 + 合规避坑指南
  • 数据说话|昆明罗丹艺术九大美院生源基地,联考均分 260+,全员艺考通关 - 云南美术头条
  • 数字断舍离与卢德主义新解:技术简化实践指南
  • 神经符号框架:金融风控中的可解释AI实践
  • 全网爆火的Graph Engineering到底是什么?
  • 为什么你的Mac需要Xbox手柄驱动?360Controller项目深度解析
  • WSL Ubuntu下配置ANTLR4 C++环境:从语法定义到可执行解析器
  • C++新增属性[[no_unique_address]]详解
  • chat_templates在生产环境的应用:提升LLM服务稳定性的关键技巧
  • MCP 2.0协议栈安全配置黄金模板:从TLS到HTTP头的分层防御实践