资讯动态

DVWA安装教程:PHP/MySQL/LAMP环境搭建与靶场配置

发布时间:2026/10/2 3:56:17 来源:尧图企业网站定制
DVWA安装教程这四个字我前前后后给身边不下二十个刚入门的朋友讲过每次讲完都发现一个共同现象教程本身不难难的是每个人卡住的地方完全不一样。有人卡在PHP版本有人卡在数据库密码有人卡在权限还有人源码都跑起来了结果登录页一直提示数据库连不上。所以这篇我打算从零开始把DVWA是什么、为什么要自己动手搭一个、几种主流搭建路径怎么选、每一步背后的原理是什么、卡住了怎么排查全部掰开揉碎讲一遍。不管你是刚接触Web安全、手里只有一台普通笔记本的新手还是已经用过集成环境但一直没搞明白配置项含义的半熟手看完应该都能独立跑起来。1. 先把DVWA这个靶场搞明白再谈怎么装1.1 DVWA到底是什么装它图什么DVWA全称是Damn Vulnerable Web Application直译过来就是一个满是漏洞的Web应用。它不是给你生产环境用的工具而是一个故意写得很破的PHP网站里面预先埋好了各类常见的Web安全问题点SQL注入、命令执行、文件包含、跨站请求伪造、暴力破解、跨站脚本等。每个问题点还分了低、中、高、不可能四个难度等级方便你循序渐进地理解同一类问题的不同防护层次。那为什么非要自己装一个而不能在网上找现成的在线靶场用原因有三层。第一层是可控性本地环境里你可以随便折腾改配置、看日志、断点调试不用担心影响别人第二层是完整性在线环境往往阉割了部分模块源码你也看不到而本地跑起来整个项目文件夹就在你眼前哪个文件处理哪个请求一目了然第三层是熟悉度搭一次环境的过程本身就是一次Web服务、数据库、PHP运行机制的综合练习这些东西在你后面真正做开发或者做安全测试时都会反复用到。我自己的建议是DVWA适合作为你的第一个本地靶场因为它足够小、足够经典、文档足够多搭建过程中踩的坑基本都是通用坑解决了这些坑你后面搭别的靶场会轻松很多。1.2 安装之前你需要先建立的基础认知很多人上来就找一键安装包装完能打开就以为完事了结果别人问一句你的Web服务器是什么、数据库跑在哪个端口、PHP用哪个版本就懵了。所以在动手前先花几分钟建立几个概念后面会省掉大量排查时间。DVWA本质是一个PHP项目它对运行环境的要求是标准的三件套Web服务器Apache或Nginx、PHP解释器、MySQL或MariaDB数据库。你访问DVWA的过程中浏览器发出的请求先到Web服务器服务器发现是.php结尾的请求就交给PHP去执行PHP执行过程中需要读写数据就通过扩展连到数据库最后把结果拼成HTML返回给浏览器。这四个角色——浏览器、Web服务器、PHP、数据库——构成了整条链路任何一环配置错了表现都是网页打不开或者页面报错。还有一个概念要提前说清楚DVWA的配置文件里有一个数据库连接信息的设置你要告诉它数据库的地址、库名、用户名和密码。这个文件默认叫config.inc.php.dist是个模板需要你复制一份改名成config.inc.php再去改。我第一次装的时候直接改了模板文件结果后面更新源码时又被覆盖回去了白折腾一遍这个细节后面会详细讲。提示DVWA只能在你自己拥有或明确获得授权的机器上搭建和练习。它的漏洞是故意留的放到公网或者公司内网共享环境里都是危险的务必跑在本机或者隔离的实验虚拟机里。2. 三种主流搭建路径到底该选哪一个2.1 路径一Windows加集成环境适合纯新手如果你用的是Windows电脑而且对命令行比较陌生最省事的做法是用集成环境。所谓集成环境就是把Apache、PHP、MySQL打包成一个软件装完就有图形界面可以点按钮启动停止。常见的几款都能用安装套路大同小异下载安装包选一个安装目录启动面板点一下Apache和MySQL的启动按钮然后在浏览器输入127.0.0.1看是否出现默认页面。选这条路径的理由很直接不用自己编译、不用配环境变量、不用处理服务注册出错了还能一键重装。代价是你对底层发生了什么会比较模糊比如PHP的配置文件php.ini在哪里、扩展怎么开、端口冲突了怎么改这些都得后面补课。用集成环境时有两个要点必须记住。一是PHP版本别太低DVWA现在的版本要求PHP 7.0以上太老的PHP会直接报语法错误二是数据库的root密码集成环境安装时通常会让你设一个这个密码要记牢等下要填进DVWA的配置里。我见过太多人装完环境转头就忘了密码最后只能重置数据库白白多花半小时。2.2 路径二Linux加手工搭建LAMP适合想打基础的如果你手上有一台Ubuntu或者其他Linux发行版的机器或者愿意用虚拟机装一个我强烈推荐走这条路。原因很简单DVWA的官方文档和社区讨论基本都基于Linux环境你遇到的报错在网上更容易搜到对应答案而且手工装一遍Apache、PHP、MySQL你会真正理解Web服务的目录结构、服务管理命令、文件权限这些东西。手工搭建的流程大致是更新软件源依次安装Web服务器、数据库、PHP以及PHP连接数据库的扩展然后启动服务、设置开机自启、把源码放到Web服务器的站点根目录、调整目录权限、修改配置文件、浏览器访问初始化。整个过程全是命令行看起来吓人但每条命令都有明确目的我会在下一章逐条拆开讲。这条路径唯一要注意的是PHP扩展别漏装。DVWA需要连数据库的扩展mysqli如果要用验证码相关的功能还可能需要curl处理图片可能有gd。少装一个扩展,页面就会在某个环节报错而报错信息往往只告诉你call to undefined function不会直接说你少装扩展了需要你有点经验才能定位。2.3 路径三Docker一键部署适合想快速复现的如果你机器上已经装了Docker那这可能是最快的路径。社区里有人把DVWA打包成了镜像一行命令拉取一行命令运行浏览器直接就能访问。它的最大优势是环境隔离干净不污染你本机已有的Apache和MySQL用完删掉容器什么痕迹都不留特别适合需要反复重置实验环境的场景。当然代价也有容器里的数据默认不会持久化你重启容器后之前重置过的数据库状态就没了而且如果本机80端口已经被别的服务占用你得改端口映射。另外Docker方案对理解底层环境帮助最小属于能用但不长知识的类型。我的建议是如果你只是想临时看一眼DVWA长什么样用Docker如果想长期作为学习环境还是老老实实走前两条路。2.4 三条路径横向对比按需选择对比维度Windows集成环境Linux手工LAMPDocker容器上手难度低图形化操作中需要命令行低两条命令环境理解深度浅深较浅环境隔离性一般共用本机端口好独立机器最好容器隔离数据持久化默认持久默认持久默认不持久需挂载卷重置成本手动重装数据库重新初始化即可删容器重跑最快适合人群纯新手、Windows用户想打基础的学习者需反复实验的进阶者看完这张表选择逻辑其实很清楚想省事选集成环境想学东西选Linux想快速反复实验选Docker。三条路最终跑起来的DVWA是完全一样的区别只在于你在这个过程中收获了什么。3. 手把手实操用Linux完成一次完整部署3.1 环境准备与依赖安装我以最常见的Ubuntu环境为例走一遍完整流程其他发行版把包管理命令换掉即可。第一步永远是更新软件源列表原因不是形式主义而是老系统的源索引可能已经过期直接装会报找不到包或者装到很旧的版本。命令很简单先更新再升级sudo apt update sudo apt upgrade -y更新完成后开始装三件套。Web服务器用Apache数据库用MariaDB和MySQL兼容开源而且更轻量PHP连同它需要的几个扩展一起装。这一条命令就能把大部分依赖搞定sudo apt install -y apache2 mariadb-server php php-mysqli php-gd php-curl libapache2-mod-php这里每一项都有存在的理由。apache2是Web服务器mariadb-server是数据库php是解释器核心php-mysqli负责让PHP连上数据库php-gd用于图像处理部分模块会用到php-curl用于发起HTTP请求验证码等模块需要libapache2-mod-php是把PHP挂到Apache上的桥接模块缺了它Apache根本不会执行PHP文件只会把源码原样吐给浏览器——这是一个非常典型的新手坑表现为你访问页面结果看到一堆PHP代码文本。装完之后启动服务并设置开机自启两个命令Apache和数据库各来一遍sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start mariadb sudo systemctl enable mariadb启动后建议顺手做一次数据库的安全初始化运行自带的配置向导按提示设置root密码、删除匿名用户等。这不是DVWA的功能要求但属于良好的数据库使用习惯sudo mysql_secure_installation向导里会问你几个问题第一次做的话root密码设一个你记得住的其余关于匿名用户、远程root登录、测试库的选项一路选是即可。做完这一步环境底座就算搭好了。注意如果你的系统里之前装过Nginx或者其他占用80端口的服务Apache会启动失败。用sudo ss -tlnp | grep :80看一下端口占用先把冲突的服务停掉或者把Apache的监听端口改掉。3.2 源码获取与站点部署环境好了接下来把DVWA的源码放到Web服务器的站点根目录。源码可以从它的官方代码仓库获取用git直接拉取是最干净的方式前提是你装了git没装的话也可以用sudo apt install -y git补上。cd /tmp git clone https://github.com/digininja/DVWA.git拉下来之后不要直接跑先看一眼目录里有哪些东西。你会看到一堆PHP文件、一个config目录、一个hackable目录、几个说明文档。关键的就是config目录里面放着配置文件模板。现在把整个文件夹挪到站点根目录Apache在Ubuntu下的默认站点根目录是/var/www/htmlsudo cp -r /tmp/DVWA /var/www/html/复制而不是移动是为了保留一份原始源码在/tmp里万一配置改乱了可以直接重新复制一份覆盖回去比重装快得多。这算是我踩过坑之后养成的小习惯。接下来处理权限。Apache以www-data这个用户身份运行如果站点目录的属主和权限不对PHP在写日志或者做某些操作时会失败。稳妥的做法是把目录属主改成www-datasudo chown -R www-data:www-data /var/www/html/DVWA sudo chmod -R 755 /var/www/html/DVWA755的含义是属主可读写执行其他用户可读可执行对于Web目录来说够用不要图省事给777那等于把家门大敞四开。改完权限这一步源码部署就算完成了接下来是配置。3.3 数据库配置与配置文件修改现在进入最容易出错的环节。首先要在数据库里为DVWA准备一个库和一套账号。登录数据库命令行sudo mysql -u root -p输密码进去之后创建数据库和用户。DVWA需要一张存放数据的库我这里就叫dvwa用户也用dvwa密码自己定一个复杂点的CREATE DATABASE dvwa; CREATE USER dvwalocalhost IDENTIFIED BY 你自己设的密码; GRANT ALL PRIVILEGES ON dvwa.* TO dvwalocalhost; FLUSH PRIVILEGES; EXIT;这里为什么不用root账号直接连因为DVWA的配置文件里是明文存密码的一旦这个文件泄露用root账号等于把整个数据库交出去了用一个权限仅限于dvwa库的专用账号要安全得多。这是一个很多人图方便会忽略的点。当然你在本地纯实验环境用root也不是不行但养成最小权限的习惯没坏处。接着改DVWA自己的配置文件。进入它的config目录你会看到一个config.inc.php.dist它是模板需要复制成config.inc.php再改cd /var/www/html/DVWA/config sudo cp config.inc.php.dist config.inc.php sudo nano config.inc.php打开后找到数据库相关的几行改成刚才设的信息。关键字段大致是这样$_DVWA[ db_server ] 127.0.0.1; $_DVWA[ db_database ] dvwa; $_DVWA[ db_user ] dvwa; $_DVWA[ db_password ] 你自己设的密码; $_DVWA[ db_port ] 3306;用127.0.0.1而不是localhost是有讲究的。在某些配置下localhost会让PHP走Unix socket连接而数据库账号权限是按主机名区分的如果你创建用户时写的是localhost那没问题但如果写的是127.0.0.1用localhost连就会报访问被拒绝。为了避免这种模糊性统一用127.0.0.1最省心前提是你创建账号时对应的主机也写成127.0.0.1或者干脆用%仅限本地实验。这是我排查过好几次才发现的一个隐蔽坑。改完保存退出如果编辑器用的是nano就是CtrlO保存、CtrlX退出。这一步做完记得把配置文件的权限收一下因为它含有密码别让随便什么人都能读sudo chmod 640 /var/www/html/DVWA/config/config.inc.php3.4 初始化安装与登录验证配置改完在浏览器里访问http://你的服务器IP或127.0.0.1/DVWA/setup.php。这个setup.php就是初始化入口它会检查运行环境、对配置文件做校验然后把数据库表结构建起来。页面打开后通常会看到一列检查项绿色表示通过红色表示有问题比如allow_url_include is disabled这种提示。如果一切正常点上页面底部的Create/Reset Database按钮DVWA会往你刚建好的库里写入所有需要的表。成功后页面一般会跳转到登录页。这里有个很多人会困惑的地方如果我改动过配置想重新来再点一次这个按钮就是重置数据库它会清空所有数据重新建表所以正式用起来之后别乱点。初始化过程中最常遇到的红色提示我列几个典型的处理方式。PHP版本过低的话需要升级PHPGD库没装的回到第3.1节补装php-gdallow_url_include这一项需要在php.ini里开启具体位置在Apache的PHP配置文件里找到这一行去掉前面的分号或者改成On然后重启Apache。注意这个选项本身是为了让你练习文件包含类模块学习环境里开一下没问题自己写正式项目时千万别开。初始化成功后访问登录页默认的用户名是admin密码是password。这两个是DVWA内置的初始账号。进去之后我强烈建议第一件事就是修改默认密码路径在左侧菜单的设置或者用户管理里。理由不用多说默认口令这种东西就是拿来给你练手的别一直留着一模一样的。进来之后还有一个必做的设置就是安全等级。DVWA左上角或者设置页里有Security Level下拉框可选low、medium、high、impossible四个档位。刚开始练习建议从low开始每个模块都用low跑一遍理解基础问题熟悉后再逐级往上切观察防护增强后同一类问题的表现如何变化。这个从低到高的切换正是DVWA设计上最有价值的地方。界面语言如果觉得英文吃力设置里也有语言选项把它切成中文即可所谓dvwa汉化其实内置就有不用去外面找什么汉化包。4. 常见报错速查与踩坑实录4.1 启动阶段的典型问题搭建过程中我遇到和帮别人解决的报错数量最多集中在下面这几类整理成表格方便你对照排查。报错现象常见原因处理办法页面直接显示PHP源码文本Apache没挂PHP模块安装并启用libapache2-mod-php重启Apache连接数据库失败配置里的账号密码或主机名不对核对config.inc.php统一用127.0.0.1Access denied for user数据库账号权限没授好重新GRANT权限并FLUSH PRIVILEGES页面一片空白PHP报错被关闭了显示打开display_errors查看真实错误403 Forbidden目录权限或属主不对重设www-data属主权限给755端口80被占用存在其他Web服务停掉冲突服务或改Apache监听端口这张表里我觉得最值得单独拎出来讲的是页面一片空白。新手看到白屏往往一头雾水其实这是PHP把错误信息隐藏了。临时打开错误显示就能看到真正的报错堆栈定位效率会快非常多。方法是到PHP配置文件里把display_errors设为On重启服务后刷新页面具体哪一行出问题会清清楚楚地打出来。排查完记得再关回去正式环境不该把错误细节暴露给访问者。4.2 配置阶段容易忽略的细节除了报错还有些不报错但会让你困扰半天的情况。一个是数据库连上了但初始化按钮点了没反应检查一下是不是页面缓存或者你改完配置没有重启服务另一个是登录后页面元素错乱、样式丢了多半是源码复制不完整重新复制一份覆盖回去就好。再一个是重置数据库之后登录不进去因为重置会清掉你改过的密码恢复成默认的admin/password。这时候别慌用默认账号登录就行。这个坑我踩过当时以为自己把环境搞坏了折腾了半天才发现是自己点了重置。还有权限相关的坑表现是页面能打开但某些功能报写入失败。DVWA的部分模块会往文件或数据库写东西如果目录属主不对就会失败。回顾一下第3.2节的命令属主和权限设对了基本不会出现这个问题。顺便提醒改权限时别用递归777那不是解决问题是把问题放大了。4.3 搭建与使用阶段的心得第一条心得是把每次成功环境的配置信息单独记一份笔记PHP版本号、数据库端口、库名、用户名、配置文件路径。看着琐碎但当你换了台机器要重装或者环境出问题要排查时这张清单能省下一大半时间。我现在的习惯是装完就写进一个文本文件跟源码放一起。第二条心得是源码目录里保留原始副本。前面提到的/tmp里那份就是干这个用的。配置改崩了、文件误删了直接从副本复制回来覆盖比从头git clone再配一遍快得多。第三条心得关乎思维习惯别把DVWA当成一个打开就能玩的游戏。每进一个模块先看它的源码理解这个功能本来想干什么、它在哪里处理输入、为什么这么处理会出问题。DVWA的源码是公开可读的这是它比很多在线靶场强的地方光点按钮不读源码收获会少一大半。安全等级切到high或者impossible时对比着看代码防护是怎么一层层加上的一目了然——这才是这个靶场真正的价值所在。5. 训练环境的安全边界与后续练习路线5.1 独立隔离与授权原则DVWA这类靶场有一个必须反复强调的前提它只能在你有完全控制权、且与外界隔离的环境里运行。前面几条路径里Linux方案和Docker方案天然适合放在虚拟机或者独立容器里就算用集成环境装在本机也建议先确认这台机器不在敏感网络中共享。原因很直白靶场里故意留的问题点一旦被真实网络里的其他设备访问到性质就变了。我个人的做法是维护一台专用的实验虚拟机DVWA、数据库、Web服务器都装在里面用完就挂起或者回滚快照。快照的功能特别实用环境跑乱了、想回到初始状态回滚一下几十秒搞定比重新装一遍高效太多。虚拟机软件的选择看个人习惯能拍快照、能独立组网就行这些是标配功能。授权这一点也得说清楚。所谓授权指的是你对自己搭建、自己拥有的环境做任何操作都没问题但同样的操作拿到不属于你的系统上去做无论技术难不难性质完全不同。用好DVWA的意义在于让你在完全合法的沙盒里把原理吃透建立起对输入、输出、权限、会话这些概念的正确直觉而不是拿它去当攻击工具。5.2 从环境运行到原理吃透的练习路线环境跑起来只是起点。我的建议练习顺序是这样的先从暴力破解和命令执行这类逻辑相对直观的模块入手理解服务端信任了客户端送来的数据这件事会带来什么然后进入SQL注入和文件包含这两类最考验你对请求与数据处理链路的理解接着看跨站脚本和跨站请求伪造重点体会浏览器与服务端之间的信任边界最后每个模块都去对比low到impossible四个等级的源码差异把防护是怎么加上去的这件事串成一条线。每学完一个模块我建议你合上页面用自己的话把它的问题成因、触发条件和修复思路写下来。这个动作看着笨效果却出奇地好因为它逼着你从我点了个按钮升级到我理解了这条数据是怎么从浏览器走到数据库又被拼进响应的。写不出来的地方就是你还没真正搞懂的地方回去再读源码。回到安装本身其实搭DVWA这件事的门槛从来不在于某条命令有多复杂而在于环节多、每个环节都可能出错而你第一次面对报错时不知道往哪看。把这篇里的每一条命令、每一个配置项、每一处注意事项都对照着走一遍遇到问题回第4章的表格里找线索基本没有过不去的坎。等你亲手把环境跑通、切到low等级、第一次看到自己构造的输入在页面上产生预期反应的那一刻前面所有折腾都值了。我到现在还留着当年第一次搭成功时截的那张登录页算是给自己入门安全学习留的一个纪念。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑