简介:本文详细介绍DVWA(Damn Vulnerable Web Application)的安装流程与通关攻略,涵盖环境配置、漏洞利用及防御策略,助力开发者掌握Web安全测试核心技能。
DVWA(Damn Vulnerable Web Application)是一款专为安全研究人员设计的漏洞演示平台,通过模拟SQL注入、XSS跨站脚本、文件上传漏洞等经典Web漏洞,帮助开发者理解攻击原理并学习防御技术。其开源特性与轻量级架构(基于PHP+MySQL)使其成为安全培训的首选工具。
gd、mysqli扩展)git、php-curl、php-xml环境配置
sudo apt updatesudo apt install apache2 mysql-server php libapache2-mod-php php-mysqli php-gd gitsudo systemctl start apache2 mysql
数据库初始化
登录MySQL创建DVWA专用数据库:
CREATE DATABASE dvwa;CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd';GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost';FLUSH PRIVILEGES;
DVWA部署
git clone https://github.com/digininja/DVWA.git /var/www/html/dvwacd /var/www/html/dvwa
config/config.inc.php:
$_DVWA['db_user'] = 'dvwa';$_DVWA['db_password'] = 'p@ssw0rd';$_DVWA['db_database'] = 'dvwa';
权限与安全设置
www-data)对DVWA目录有读写权限:
sudo chown -R www-data:www-data /var/www/html/dvwasudo chmod -R 755 /var/www/html/dvwa
http://localhost/dvwa/setup.php,点击”Create/Reset Database”完成初始化。DVWA包含10个核心模块,按安全等级分为Low、Medium、High三级。以下以关键模块为例解析攻击与防御技术。
1' OR '1'='1可绕过登录验证,原理是未对用户输入进行过滤,导致SQL语句逻辑被篡改。
-- 原始查询SELECT * FROM users WHERE user = '$user' AND password = '$pass';-- 注入后SELECT * FROM users WHERE user = '1' OR '1'='1' AND password = '...';
$stmt = $pdo->prepare("SELECT * FROM users WHERE user = ? AND password = ?");$stmt->execute([$user, $pass]);
<script>alert('XSS')</script>,攻击代码会被永久存储在数据库中,所有访问该页面的用户均会触发。
echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
shell.php)可直接执行系统命令,导致服务器沦陷。
$allowed = ['image/jpeg', 'image/png'];if (!in_array($_FILES['file']['type'], $allowed)) {die('Invalid file type');}
127.0.0.1; cat /etc/passwd,通过分号拼接系统命令。escapeshellarg()函数过滤输入:
$ip = escapeshellarg($_GET['ip']);system("ping -c 4 " . $ip);
自动化扫描工具集成
使用Burp Suite或OWASP ZAP对DVWA进行主动扫描,识别未公开漏洞点。例如通过Intruder模块对登录接口进行暴力破解测试。
自定义漏洞模块开发
DVWA支持扩展新模块,需在/vulnerabilities目录创建PHP文件,并遵循以下结构:
<?php$page['title'] = 'Custom Vuln';$page['body'] = 'This is a custom module.';require_once '../../header.php';// 漏洞逻辑代码require_once '../../footer.php';?>
安全配置优化
php.ini禁用危险函数:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
mod_security模块拦截恶意请求。数据库连接失败
sudo systemctl status mysqlPHP错误提示
php.ini中设置display_errors = On和log_errors = Onmysqli_real_connect(): (HY000/1045): Access denied表示数据库权限不足。模块加载404错误
mod_rewrite已启用:
sudo a2enmod rewritesudo systemctl restart apache2
DVWA不仅是漏洞利用的练习场,更是理解Web安全防御体系的实践平台。完成基础模块后,建议:
通过系统化的练习,开发者可显著提升对Web安全威胁的识别与处置能力,为构建更安全的Web应用奠定基础。