虚拟机DVWA搭建步骤详解的核心答案是:选对虚拟机软件、下载现成镜像包、照着LAMP启动步骤操作,新手半小时内就能跑起DVWA靶场。
DVWA(Damn Vulnerable Web Application)是渗透测试新手最常接触的漏洞靶场,它内置SQL注入、XSS、文件上传等常见Web漏洞,相比手动搭建Web环境,用虚拟机跑DVWA能省去大量配置时间,还不会搞乱主机的系统环境,下面这套流程我反复实际操作过,跟着走基本不会卡壳。
搭建前准备:选择虚拟机与镜像
虚拟机软件哪家强:VirtualBox与VMware对比
新手想快速上手,第一步是选定虚拟机软件,目前主流选择是Oracle VM VirtualBox和VMware Workstation Pro,两者都支持Windows、Linux和macOS,但有几个关键差异:
- VirtualBox:完全免费,开源,对内存占用控制更好,老电脑也能跑,安装包约100MB,创建虚拟机过程简单,适合第一次接触虚拟化的新手。
- VMware Workstation Pro:功能更强,支持GPU直通、快照管理更顺手,但个人使用需要付费许可(虽然网上有试用版),如果你以后打算搞复杂的红队环境,VMware更合适。
行业共识认为,纯粹为了跑DVWA靶场,VirtualBox完全够用,而且零成本,我个人推荐新人用VirtualBox,不是因为它最好,而是因为它最容易上手且没有授权困扰。
下载DVWA靶场镜像的两种路子
有了虚拟机软件,接下来要准备DVWA的运行环境,这里有两种方案:
- 下载官方ISO手动安装:从DVWA官网或GitHub仓库获取源代码,配合Ubuntu Server或Debian系统手动搭建LAMP环境,优点是你能看清每个依赖组件的安装过程,缺点是耗时且容易踩坑。
- 下载打包好的虚拟机镜像:社区爱好者制作了各种集成好的DVWA镜像文件(通常为OVA或VDI格式),导入虚拟机就能用,我推荐新手走这条路,尤其是官网的VirtualBox镜像包,解压后直接导入,省去装系统和配环境的全部烦恼。
另外提醒一点:很多老教程让新手下载“PHP Study”或“XAMPP”在Windows本机跑DVWA,但那样会占用80/3306端口,还容易和现有环境冲突,用虚拟机隔离是更干净的方案。
虚拟机DVWA搭建步骤详解
第一步:新建虚拟机并分配资源
如果你拿到的是OVA镜像包,启动VirtualBox,点击“控制-导入虚拟电脑”,选择下载好的

.ova文件,导入界面里记得调整以下参数:
- 内存:至少分配2GB(2048MB),低于这个值DVWA页面可能卡死。
- CPU核心:给2核心,跑PHP和MySQL时不会太慢。
- 硬盘空间:保持镜像默认的8-10GB即可,如果后续要装工具,可以增加到20GB。
导入完成后,不要急着启动,先在“设置-网络”里确认网卡模式是“NAT”还是“桥接”,如果只在本地访问,NAT模式最安全;如果你想用宿主机的外部工具直接扫靶机,需要切换为“桥接模式”,让靶机获得一个局域网独立IP。
第二步:导入镜像或安装系统
这是很多新手卡住的第一步,常见问题有两个:
- OVA导入报错“UUID冲突”:因为你之前导过同一个镜像,解决办法是打开VirtualBox的全局设定,在“网络-仅主机网络”里删除重复的虚拟网卡,或者给新虚拟机换个名字。
- 安装系统时分区失败:如果自己用ISO装Ubuntu,分区表务必选“LVM”或“整个磁盘”,不要手动改分区挂载点。
导入完成后启动虚拟机,看到登录界面输入默认账号密码(通常是root和password或镜像说明文档里写的组合),登录成功后,第一件事就是执行ip addr命令确认当前IP地址,这个地址就是后续浏览器访问DVWA的入口。
第三步:启动LAMP环境
多数打包镜像会预装Apache、MySQL和PHP,但默认不会自动启动,这步很关键,打开终端,依次执行:
service apache2 start service mysql start
如果提示“未找到命令”,说明镜像里用的是systemd,改用:
systemctl start apache2 systemctl start mysql
启动后验证服务状态,访问http://你的虚拟机IP,页面显示Apache默认首页,说明Web服务已经正常,此时可以顺手把MySQL的root密码设置一下,方便后续修改DVWA配置,执行:
mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('你的密码') WHERE User='root';
FLUSH PRIVILEGES;
第四步:访问DVWA并初始化数据库
DVWA的默认站点路径是

/var/www/html/dvwa,也可能是/var/www/html根目录,先用浏览器打开http://你的虚拟机IP/dvwa,会跳到安装页面。
这时候重点来了,页面会提示你修改配置文件,通常需要执行:
cd /var/www/html/dvwa/config cp config.inc.php.dist config.inc.php nano config.inc.php
把文件里的$_DVWA['db_user']改成root,$_DVWA['db_password']填成你刚才设置的密码,保存后回到浏览器,点击“Create / Reset Database”按钮,看到数据库创建成功的绿色提示,再点击底部“Login”按钮,用默认账号admin和密码password登录,DVWA就算正式跑起来了。
新手常见坑:端口冲突和权限报错
端口占用了怎么办
虚拟机里的Apache默认监听80端口,但很多镜像为了同时跑其他服务会把端口改成8080,如果你访问80端口一直超时,先检查一下:
netstat -tlnp | grep 80
如果80端口没有进程监听,修改Apache的监听端口:
nano /etc/apache2/ports.conf # 把 Listen 80 改成 Listen 8080
然后访问http://虚拟机IP:8080/dvwa,也有一些镜像会内置多个靶场导致端口重叠,这会直接影响DVWA的登录状态。
页面白屏或404排查
白屏通常不是PHP代码问题,而是权限没给够,DVWA目录需要可写权限,执行:
chmod -R 755 /var/www/html/dvwa chown -R www-data:www-data /var/www/html/dvwa
如果出现404,先看URL路径是否带dvwa前缀,有些镜像把DVWA直接解压到了Web根目录,访问http://IP/就行,再不行就查看Apache错误日志:
tail -f /var/log/apache2/error.log
日志里的关键字通常能直接告诉你是缺PHP模块还是文件路径错误。
安装后配置:安全等级与数据库
设置DVWA安全等级
登录DVWA后,左侧菜单的“DVWA Security”选项可以调整靶场难度,新手建议从Low等级开始,适合熟悉漏洞触发过程;理解原理后切到Medium和High,体验过滤规则绕过,有个小细节:每切换完等级,都要回到“Setup/Reset Database”重新初始化一下数据库,否则某些注入题目会失效

。
修改默认密码和创建数据库
DVWA默认管理员账号是admin/admin,属于公开信息,只要靶机暴露在局域网里,别人就能登进来,建议登录后到“Change Password”菜单改成自己的密码,如果你需要多用户练习,可以在MySQL里手动插入用户:
INSERT INTO dvwa.users (user, password, avatar, last_login) VALUES ('test', MD5('123456'), 'default.jpg', now());
这句话里的MD5加密方式是DVWA源码默认的,改完可以用test/123456登录,注意别在生产环境用这种弱口令逻辑,但靶场里无所谓。
虚拟机DVWA常见问题解答
DVWA和SQLi-Labs哪个更适合新手入门?
DVWA内置的SQL注入模块只有三种等级,适合了解漏洞形态;SQLi-Labs包含几十个关卡,从字符型注入到堆叠注入层层递进,我的建议是先跑通DVWA的SQL Injection模块,建立基础认知,再转SQLi-Labs做专项练习,前者帮你建立全局视角,后者帮你打磨具体技巧。
虚拟机DVWA搭建完成后如何做本机快照?
拍快照前先停止Apache和MySQL服务,执行service apache2 stop && service mysql stop,然后在VirtualBox菜单“控制-生成备份”里命名并保存,以后一旦把靶场配置搞崩了,直接恢复快照,比重新搭建快得多,恢复快照时注意选择“恢复当前状态”还是“从头恢复干净状态”,后者会丢掉你所有的实验数据。
DVWA页面提示“Could not connect to MySQL”怎么解决?
这类报错绝大多数是因为配置文件里的数据库密码没对齐,先确认MySQL服务在运行,然后检查config.inc.php里的db_password是否等于MySQL里的root密码,如果都正确还是连不上,执行mysql -u root -p手动试一下,能进则说明PHP和MySQL之间的通信协议有问题,重装一下php-mysql扩展包即可,系统会自行清理旧链接,重启服务后错误自然消失。
用虚拟机跑DVWA的整个过程,核心就三件事:导入镜像、启动服务、配置数据库,只要做对这三点,半小时内你就能打开属于自己的一套漏洞练习环境,之后哪怕把靶场折腾坏了,恢复快照就能重新开始,这也是虚拟化带来的最大便利,把这套环境跑通,你就迈进了Web渗透测试实战的大门。