我的 DVWA 靶场搭建与第一次实战记录
2026/7/18 3:45:16 网站建设 项目流程

我的 DVWA 靶场搭建与第一次实战记录

作为一名刚入门的网安学习者,我决定搭建一个自己的练习靶场来学习 Web 漏洞。经过一番摸索,我成功搭建了 DVWA(Damn Vulnerable Web Application)靶场,并完成了第一次漏洞实战。这篇文章记录了我的完整过程,包括遇到的问题和解决方法。

⚠️ 重要提醒:DVWA 是一个故意设计存在漏洞的 Web 应用,仅供学习和测试使用。所有操作只能在本地环境进行,严禁用于攻击他人系统。


一、准备工作

我的环境

  • 操作系统:Windows 10
  • 集成环境:PhpStudy Pro
  • 浏览器:Microsoft Edge
  • 访问地址:http://dvwa:8898/

二、搭建过程

第一步:安装 PhpStudy

PhpStudy 是一个集成了 Apache、MySQL、PHP 的软件,不用单独配置这些组件,特别适合新手。

  1. 从官网下载:https://www.xp.cn/
  2. 双击安装包,选择安装路径 (尽量选择全英文)
  3. 安装完成后打开软件
  4. 点击主界面的「 启动」按钮
  5. 确认 Apache 和 MySQL 都显示绿色(表示运行中)

第二步:下载 DVWA 并放到指定位置

  1. 从百度网盘下载 DVWA 压缩包

    • 链接:https://pan.baidu.com/s/19o7MKIY45znqCstHl-RUNg
    • 提取码:6666
  2. 解压后,把文件夹重命名为dvwa(去掉-master后缀)

  3. dvwa文件夹复制到 PhpStudy 的WWW目录

    • 我的路径是:D:\phpStudy\WWW\dvwa

第三步:配置 DVWA 的数据库信息

这一步容易出错,要仔细操作。

  1. 进入dvwa/config文件夹
  2. 找到config.inc.php.dist文件,复制一份
  3. 用记事本打开复制的文件
  4. 找到数据库配置部分,修改密码:
$_DVWA['db_user']='dvwa';$_DVWA['db_password']='dvwa123';// 至少6位!$_DVWA['db_database']='dvwa';
  1. 保存后,把文件名改为config.inc.php(删掉.dist

为什么密码要至少 6 位?因为 PhpStudy 有安全检查,少于 6 位会报错。


第四步:在 PhpStudy 中创建数据库

  1. 打开 PhpStudy,点左侧的「数据库」

  2. 「创建数据库」

  3. 填写信息(要和配置文件一致):

    • 数据库名:dvwa
    • 用户名:dvwa
    • 密码:dvwa123
  4. 点确认

    密码长度不能少于6位


第五步:创建网站(关键步骤)

  1. 在 PhpStudy 点左侧的「网站」

  2. 「创建网站」

  3. 填写:

    • 域名:dvwa
    • 端口:8898
    • 根目录:D:/phpstudy_pro/WWW
  4. 点确认

注意:根目录填WWW,不是WWW/dvwa。这样配置后,通过http://dvwa:8898/就能访问了。


第六步:修改 PHP 配置

DVWA 的某些功能需要开启特定的 PHP 设置。

  1. 在 PhpStudy 中找到php.ini文件(可以通过软件界面直接打开)
  2. Ctrl+F搜索allow_url_include
  3. 把这两项改为On
allow_url_include = On allow_url_fopen = On
  1. 保存后,重启 Apache 服务

第七步:访问 DVWA(我遇到了 403 错误)

第一次尝试失败

我按照网上教程,输入http://localhost:8898/dvwa/dvwa/,结果显示403 Forbidden

解决方法

后来发现,要用在 PhpStudy 中设置的域名访问:

http://dvwa:8898/

这样就成功了!页面显示出 DVWA 的设置界面。

原因分析:PhpStudy 创建网站时配置了虚拟主机,使用域名dvwa才能正确匹配。


第八步:配置验证码密钥

  1. 打开dvwa/config/config.inc.php
  2. 找到recaptcha相关的两行
  3. 替换为:
$_DVWA['recaptcha_public_key']='6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';$_DVWA['recaptcha_private_key']='6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ';
  1. 保存并刷新浏览器

第九步:初始化数据库

  1. 访问http://dvwa:8898/
  2. 滚动到页面底部
  3. 检查所有配置项是否都是绿色的 ✓
  4. 点击**「Create / Reset Database」**按钮
  5. 等待创建完成,会自动跳转到登录页

如果按钮是灰色:说明 PHP 配置没生效,回到第六步重新检查。


第十步:登录并设置安全等级

  1. 使用默认账号登录:

    • 用户名:admin
    • 密码:password
  2. 登录后点击左侧菜单的「DVWA Security」

  3. 选择「Low」(最低安全级别,适合新手练习)

  4. 点击「Submit」

到这里,DVWA 靶场就搭建好了!


三、我遇到的问题总结

问题 1:403 错误

  • 原因:用localhost访问无法匹配虚拟主机配置
  • 解决:改用http://dvwa:8898/访问

问题 2:数据库密码报错

  • 原因:PhpStudy 要求密码至少 6 位
  • 解决:把密码改成dvwa123,配置文件和数据库都要改

问题 3:初始化按钮是灰色

  • 原因:PHP 的allow_url_include没开启
  • 解决:修改php.ini,重启 Apache

四、第一次实战:命令注入漏洞

搭建好靶场后,我迫不及待地想试试。我选择了命令注入(Command Injection)作为第一个漏洞,因为它最直观、最容易理解。

准备工作

确认以下几点:

  • ✅ 已登录 DVWA(admin / password)
  • ✅ 安全等级设为 Low
  • ✅ 浏览器打开 DVWA 主页

实战步骤

步骤1:进入命令注入模块

点击左侧菜单的「Command Injection」,看到一个输入框,提示输入 IP 地址。

这是一个 ping 工具,用来测试 IP 地址能否 ping 通。


步骤2:测试正常功能

先看看正常情况是什么样的。

操作:输入127.0.0.1,点击提交

结果:显示了 ping 的结果,类似这样:

正在 Ping 127.0.0.1... 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128 ... 数据包: 已发送 = 5,已接收 = 5,丢失 = 0

思考:后台应该执行了ping 127.0.0.1这个命令。


步骤3:尝试注入命令

现在来试试能不能执行其他命令。

关键知识:在 Windows 中,&符号可以连接两个命令:

命令1 & 命令2

系统会先执行命令1,然后执行命令2。

操作:输入127.0.0.1 & whoami,点击提交

结果

  • 第一部分:ping 的结果
  • 第二部分:显示了当前用户名,比如desktop-a8qj354\31161

成功了!我成功让系统执行了whoami命令。


步骤4:尝试更多命令

既然可以注入命令,我试了几个常用的:

查看系统信息127.0.0.1 & systeminfo

  • 显示了操作系统版本、内存、补丁等信息
  • 有些中文显示乱码,但关键信息能看清

查看网络配置127.0.0.1 & ipconfig

  • 显示了 IP 地址、网关、DNS 等

列出当前目录文件127.0.0.1 & dir

  • 显示了当前目录的所有文件

这些都是 Windows 系统命令,通过命令注入漏洞,我可以执行任意系统命令!

Ps:有乱码的原因是:
编码不匹配
Windows cmd 默认编码:GBK(cp936),中文系统输出中文是 GBK 编码
DVWA 网页默认编码:UTF-8
服务器命令执行返回 GBK 字节流,浏览器直接以 UTF-8 解析中文汉字 → 全部变成问号 / 方块乱码,英文参数不受影响可正常显示
不是 Payload 写错、不是漏洞本身问题,只是字符编码解析冲突


步骤5:查看源代码,理解原理

为了理解为什么会有这个漏洞,我点击了页面右下角的「View Source」按钮,看到了后台代码:

<?php// 获取用户输入$target=$_REQUEST['ip'];// 直接拼接到 ping 命令中$cmd=shell_exec('ping '.$target);// 输出结果echo"<pre>{$cmd}</pre>";?>

问题在哪?

  1. 没有验证输入:程序没有检查用户输入是否是合法的 IP 地址
  2. 直接拼接字符串:用户输入被直接拼到命令里
  3. 使用危险函数shell_exec()会执行任何命令

当我输入127.0.0.1 & whoami

$target="127.0.0.1 & whoami";$cmd=shell_exec('ping 127.0.0.1 & whoami');

系统把这当成一个完整命令执行:

  • 先执行ping 127.0.0.1
  • &分隔符让系统接着执行whoami

步骤6:对比不同安全级别

我还查看了其他安全级别的代码,学习如何防护这个漏洞。

High 级别(黑名单过滤)

// 定义危险字符黑名单$substitutions=array('&'=>'',';'=>'','|'=>'',...);// 把危险字符替换成空$target=str_replace(array_keys($substitutions),$substitutions,$target);

问题:黑名单可能不全,容易被绕过。

Impossible 级别(白名单验证)

// 把输入按 . 分割$octet=explode(".",$target);// 检查是否是 4 个数字if(is_numeric($octet[0])&&is_numeric($octet[1])&&is_numeric($octet[2])&&is_numeric($octet[3])&&sizeof($octet)==4){// 只有合法 IP 才执行$cmd=shell_exec('ping '.$target);}else{echo'错误:无效的 IP 地址';}

优点:只允许合法的 IP 格式,任何包含特殊字符的输入都会被拒绝。这才是安全的做法!


我学到了什么

通过这次实战,我明白了:

命令注入的本质

用户输入被直接拼接到系统命令中,没有验证和过滤。

如何利用

  1. 找到执行系统命令的输入点
  2. &&&|等分隔符注入额外命令
  3. 执行任意系统命令

如何防护

  • ❌ 不防护 → 完全不安全
  • ⚠️ 黑名单过滤 → 容易被绕过
  • ✅ 白名单验证 → 只允许合法格式(最安全)

核心原则

永远不要信任用户输入!


常用 Windows 命令表

命令功能示例
whoami查看当前用户127.0.0.1 & whoami
hostname查看主机名127.0.0.1 & hostname
ipconfig查看网络配置127.0.0.1 & ipconfig
systeminfo查看系统信息127.0.0.1 & systeminfo
dir列出文件127.0.0.1 & dir
type 文件名查看文件内容127.0.0.1 & type config.php
net user查看用户列表127.0.0.1 & net user

补充:其他搭建方式

除了 PhpStudy,还有两种方式可以搭建 DVWA:

方式二:XAMPP

  • 跨平台(Windows/Mac/Linux)
  • 下载地址:https://www.apachefriends.org/
  • 与 PhpStudy 类似,但是英文界面
  • MySQL 默认密码为空

方式三:Docker(最简单)

如果你会用命令行,一条命令就能启动:

dockerrun--rm-it-p80:80 vulnerables/web-dvwa

访问http://localhost即可,无需配置。


结语

这次从搭建到实战的完整经历,让我对 Web 安全有了更具体的认识。以前只是看书看视频,总觉得抽象,现在亲手操作了一遍,感觉踏实多了。

虽然过程中遇到了一些问题,但每次解决问题都是一次学习。特别是看源码理解漏洞原理的环节,让我明白了"为什么会有漏洞"比"怎么利用漏洞"更重要。

最后再次强调:所有学到的技术只能用于合法的学习和测试环境,绝不能用于攻击他人系统。网络安全学习的目的是保护,而不是破坏。


我的配置信息

系统:Windows 10

工具:PhpStudy Pro

访问地址:http://dvwa:8898/

数据库:dvwa / dvwa / dvwa123

默认账号:admin / password

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询