
我的 DVWA 靶场搭建与第一次实战记录作为一名刚入门的网安学习者我决定搭建一个自己的练习靶场来学习 Web 漏洞。经过一番摸索我成功搭建了 DVWADamn Vulnerable Web Application靶场并完成了第一次漏洞实战。这篇文章记录了我的完整过程包括遇到的问题和解决方法。⚠️ 重要提醒DVWA 是一个故意设计存在漏洞的 Web 应用仅供学习和测试使用。所有操作只能在本地环境进行严禁用于攻击他人系统。一、准备工作我的环境操作系统Windows 10集成环境PhpStudy Pro浏览器Microsoft Edge访问地址http://dvwa:8898/二、搭建过程第一步安装 PhpStudyPhpStudy 是一个集成了 Apache、MySQL、PHP 的软件不用单独配置这些组件特别适合新手。从官网下载https://www.xp.cn/双击安装包选择安装路径 (尽量选择全英文)安装完成后打开软件点击主界面的「 启动」按钮确认 Apache 和 MySQL 都显示绿色表示运行中第二步下载 DVWA 并放到指定位置从百度网盘下载 DVWA 压缩包链接https://pan.baidu.com/s/19o7MKIY45znqCstHl-RUNg提取码6666解压后把文件夹重命名为dvwa去掉-master后缀把dvwa文件夹复制到 PhpStudy 的WWW目录我的路径是D:\phpStudy\WWW\dvwa第三步配置 DVWA 的数据库信息这一步容易出错要仔细操作。进入dvwa/config文件夹找到config.inc.php.dist文件复制一份用记事本打开复制的文件找到数据库配置部分修改密码$_DVWA[db_user]dvwa;$_DVWA[db_password]dvwa123;// 至少6位$_DVWA[db_database]dvwa;保存后把文件名改为config.inc.php删掉.dist为什么密码要至少 6 位因为 PhpStudy 有安全检查少于 6 位会报错。第四步在 PhpStudy 中创建数据库打开 PhpStudy点左侧的「数据库」点「创建数据库」填写信息要和配置文件一致数据库名dvwa用户名dvwa密码dvwa123点确认密码长度不能少于6位第五步创建网站关键步骤在 PhpStudy 点左侧的「网站」点「创建网站」填写域名dvwa端口8898根目录D:/phpstudy_pro/WWW点确认注意根目录填WWW不是WWW/dvwa。这样配置后通过http://dvwa:8898/就能访问了。第六步修改 PHP 配置DVWA 的某些功能需要开启特定的 PHP 设置。在 PhpStudy 中找到php.ini文件可以通过软件界面直接打开按CtrlF搜索allow_url_include把这两项改为Onallow_url_include On allow_url_fopen On保存后重启 Apache 服务第七步访问 DVWA我遇到了 403 错误第一次尝试失败我按照网上教程输入http://localhost:8898/dvwa/dvwa/结果显示403 Forbidden。解决方法后来发现要用在 PhpStudy 中设置的域名访问http://dvwa:8898/这样就成功了页面显示出 DVWA 的设置界面。原因分析PhpStudy 创建网站时配置了虚拟主机使用域名dvwa才能正确匹配。第八步配置验证码密钥打开dvwa/config/config.inc.php找到recaptcha相关的两行替换为$_DVWA[recaptcha_public_key]6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg;$_DVWA[recaptcha_private_key]6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ;保存并刷新浏览器第九步初始化数据库访问http://dvwa:8898/滚动到页面底部检查所有配置项是否都是绿色的 ✓点击**「Create / Reset Database」**按钮等待创建完成会自动跳转到登录页如果按钮是灰色说明 PHP 配置没生效回到第六步重新检查。第十步登录并设置安全等级使用默认账号登录用户名admin密码password登录后点击左侧菜单的「DVWA Security」选择「Low」最低安全级别适合新手练习点击「Submit」到这里DVWA 靶场就搭建好了三、我遇到的问题总结问题 1403 错误原因用localhost访问无法匹配虚拟主机配置解决改用http://dvwa:8898/访问问题 2数据库密码报错原因PhpStudy 要求密码至少 6 位解决把密码改成dvwa123配置文件和数据库都要改问题 3初始化按钮是灰色原因PHP 的allow_url_include没开启解决修改php.ini重启 Apache四、第一次实战命令注入漏洞搭建好靶场后我迫不及待地想试试。我选择了命令注入Command Injection作为第一个漏洞因为它最直观、最容易理解。准备工作确认以下几点✅ 已登录 DVWAadmin / 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 TTL128 ... 数据包: 已发送 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 默认编码GBKcp936中文系统输出中文是 GBK 编码DVWA 网页默认编码UTF-8服务器命令执行返回 GBK 字节流浏览器直接以 UTF-8 解析中文汉字 → 全部变成问号 / 方块乱码英文参数不受影响可正常显示不是 Payload 写错、不是漏洞本身问题只是字符编码解析冲突步骤5查看源代码理解原理为了理解为什么会有这个漏洞我点击了页面右下角的「View Source」按钮看到了后台代码?php// 获取用户输入$target$_REQUEST[ip];// 直接拼接到 ping 命令中$cmdshell_exec(ping .$target);// 输出结果echopre{$cmd}/pre;?问题在哪没有验证输入程序没有检查用户输入是否是合法的 IP 地址直接拼接字符串用户输入被直接拼到命令里使用危险函数shell_exec()会执行任何命令当我输入127.0.0.1 whoami时$target127.0.0.1 whoami;$cmdshell_exec(ping 127.0.0.1 whoami);系统把这当成一个完整命令执行先执行ping 127.0.0.1分隔符让系统接着执行whoami步骤6对比不同安全级别我还查看了其他安全级别的代码学习如何防护这个漏洞。High 级别黑名单过滤// 定义危险字符黑名单$substitutionsarray(,;,|,...);// 把危险字符替换成空$targetstr_replace(array_keys($substitutions),$substitutions,$target);问题黑名单可能不全容易被绕过。Impossible 级别白名单验证// 把输入按 . 分割$octetexplode(.,$target);// 检查是否是 4 个数字if(is_numeric($octet[0])is_numeric($octet[1])is_numeric($octet[2])is_numeric($octet[3])sizeof($octet)4){// 只有合法 IP 才执行$cmdshell_exec(ping .$target);}else{echo错误无效的 IP 地址;}优点只允许合法的 IP 格式任何包含特殊字符的输入都会被拒绝。这才是安全的做法我学到了什么通过这次实战我明白了命令注入的本质用户输入被直接拼接到系统命令中没有验证和过滤。如何利用找到执行系统命令的输入点用、、|等分隔符注入额外命令执行任意系统命令如何防护❌ 不防护 → 完全不安全⚠️ 黑名单过滤 → 容易被绕过✅ 白名单验证 → 只允许合法格式最安全核心原则永远不要信任用户输入常用 Windows 命令表命令功能示例whoami查看当前用户127.0.0.1 whoamihostname查看主机名127.0.0.1 hostnameipconfig查看网络配置127.0.0.1 ipconfigsysteminfo查看系统信息127.0.0.1 systeminfodir列出文件127.0.0.1 dirtype 文件名查看文件内容127.0.0.1 type config.phpnet 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