Kali Linux 实战:手把手部署DVWA渗透测试靶场
1. 为什么选择DVWA靶场?
DVWA(Damn Vulnerable Web Application)是我最推荐给初学者的渗透测试练习靶场。这个用PHP写的开源项目,专门设计了SQL注入、XSS、文件上传等15种常见漏洞,而且可以自由调整安全等级。第一次接触它是在2016年,当时为了准备CISP-PTE考试,我在自己的Kali笔记本上反复折腾这个靶场,把每个漏洞模块都玩了个遍。
相比其他靶场,DVWA有三个不可替代的优势:首先是环境友好,它只需要Apache+MySQL+PHP的基础环境,在Kali上5分钟就能跑起来;其次是教学属性强,每个漏洞页面都附带详细说明和攻击原理;最重要的是可控性强,你可以通过滑块自由调节漏洞难度,从完全无防护到带基础防御的多个阶段循序渐进练习。
2. 环境准备与依赖安装
2.1 更新Kali系统
在开始之前,建议先更新你的Kali系统。我遇到过不少案例是因为系统组件版本不兼容导致部署失败。打开终端执行:
sudo apt update && sudo apt upgrade -y这个步骤会更新所有已安装的软件包。曾经有学员反馈执行时报错,通常是源配置问题。可以检查/etc/apt/sources.list文件,确保包含官方源:
deb http://http.kali.org/kali kali-rolling main non-free contrib2.2 安装LAMP组件
DVWA需要完整的LAMP环境(Linux+Apache+MySQL+PHP)。虽然Kali预装了Apache,但还需要补充一些组件:
sudo apt install -y apache2 mariadb-server php php-mysqli php-gd libapache2-mod-php这里特别说明下包的选择:
mariadb-server:MySQL的替代品,更适合Kali环境php-mysqli:MySQL数据库连接驱动php-gd:图形处理库,DVWA的验证码功能需要
安装完成后,建议用php -v确认PHP版本。我在2023年测试时,Kali默认安装的是PHP 8.2,与DVWA可能存在兼容性问题。如果遇到页面报错,可以降级到PHP 7.4:
sudo apt install -y php7.4 php7.4-mysqli php7.4-gd sudo a2dismod php8.2 sudo a2enmod php7.4 sudo systemctl restart apache23. 部署DVWA靶场
3.1 获取项目代码
不建议直接克隆GitHub仓库,因为主分支可能包含实验性代码。我习惯使用稳定版本:
cd /var/www/html sudo wget https://github.com/digininja/DVWA/archive/refs/tags/v1.10.zip sudo unzip v1.10.zip sudo mv DVWA-1.10 DVWA给目录设置正确权限很重要,这是很多新手会忽略的:
sudo chown -R www-data:www-data /var/www/html/DVWA sudo chmod -R 755 /var/www/html/DVWA3.2 数据库配置
启动MariaDB服务后,安全初始化很重要。执行以下交互式命令:
sudo mysql_secure_installation按照提示设置root密码、移除匿名用户、禁止远程root登录等。然后创建DVWA专用数据库:
CREATE DATABASE dvwa; CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd'; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost'; FLUSH PRIVILEGES;3.3 配置文件调整
复制配置文件模板并编辑:
cd /var/www/html/DVWA/config sudo cp config.inc.php.dist config.inc.php sudo nano config.inc.php需要修改的关键参数:
$_DVWA['db_user'] = 'dvwa'; $_DVWA['db_password'] = 'p@ssw0rd'; $_DVWA['db_database'] = 'dvwa';如果遇到"ReCAPTCHA key missing"警告,可以到Google reCAPTCHA官网申请免费密钥,或者直接关闭这个功能:
$_DVWA['recaptcha_public_key'] = ''; $_DVWA['recaptcha_private_key'] = '';4. 服务启动与验证
4.1 启动基础服务
建议配置服务开机自启:
sudo systemctl enable apache2 mariadb sudo systemctl start apache2 mariadb检查服务状态时,除了看active状态,还要注意日志:
sudo tail -f /var/log/apache2/error.log4.2 初始化靶场
访问http://localhost/DVWA/setup.php点击"Create/Reset Database"按钮。如果遇到以下问题:
- 空白页面:检查PHP错误日志
/var/log/apache2/error.log - 数据库连接失败:确认
config.inc.php中的密码与MySQL设置的匹配 - 权限拒绝:执行
sudo chown -R www-data:www-data /var/www/html/DVWA
4.3 登录测试
使用默认凭证登录:
- 用户名:admin
- 密码:password
首次登录后建议立即修改密码。在DVWA安全面板中,可以调整安全级别:
- Low:完全无防护
- Medium:基础防护
- High:较强防护
- Impossible:理论上不可攻破
5. 常见问题排查
5.1 PHP函数禁用问题
DVWA需要允许以下危险函数,编辑/etc/php/7.4/apache2/php.ini:
allow_url_include = On allow_url_fopen = On disable_functions =修改后重启Apache生效:
sudo systemctl restart apache25.2 数据库连接异常
如果遇到"Access denied for user 'dvwa'@'localhost'",可以这样排查:
- 确认用户存在:
SELECT User FROM mysql.user; - 检查权限:
SHOW GRANTS FOR 'dvwa'@'localhost'; - 重新授权:
GRANT ALL ON dvwa.* TO 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd';
5.3 跨设备访问配置
如果想从局域网其他设备访问,需要修改Apache配置:
sudo nano /etc/apache2/sites-available/000-default.conf将<VirtualHost *:80>中的*改为Kali的局域网IP。同时关闭防火墙:
sudo ufw disable6. 靶场使用建议
DVWA的每个漏洞模块都值得深入研究。以SQL注入为例:
- 在Low安全级别下尝试基础注入
- 查看源码理解过滤逻辑
- 在Medium级别尝试绕过基础过滤
- 最后挑战High级别的防护机制
我习惯在每次练习时同时打开三个窗口:
- 浏览器操作界面
- Burp Suite抓包分析
- 终端查看服务端日志
这种多角度观察的方式能快速理解攻击原理和防御机制。记住每次修改安全级别后,最好重置一次数据库以确保环境干净。
