ARTICLE · 1024323
DVWA 靶场 Linux 安装保姆教程
⚠️ 免责声明:本文仅供网络安全技术学习与研究使用,所涉技术、工具与思路均须在获得合法授权的环境中进行。严禁将本文内容用于任何未授权的渗透测试、攻击或违法犯罪活动。因滥用本文内容所产生的一切后果,由使用者自行承担,与本文作者及发布平台无关。
DVWA(Damn Vulnerable Web Application)跟 pikachu 并列 Web 漏洞入门两大靶场。SQL 注入、XSS、文件包含、CSRF、命令执行……OWASP Top 10 里那些经典漏洞,它的每个练习都配了源码和安全等级切换——你可以在 Low 级先打进去,再切到 High 级看同样的漏洞加了什么防护,然后对着源码想怎么绕。
跟 pikachu 不一样的是,DVWA 一直在更新——PHP 8 支持、Guzzle 替代老 HTTP 库、官方还出了 Docker Compose 配置。从这个角度说,它更适合现在刚上手的人:装好就是最新版,不用折腾 PHP 版本兼容问题。麻烦的是它得自己配数据库,官方文档里有些步骤写得比较简略,小白照着走容易卡在半路。
这篇两条路线都走通,每条命令都可以复制粘贴,搭好了你也知道它在做什么。
1
两条路线,看你选哪条
Docker Compose 路线最省事,一条命令跑起全套环境(DVWA + 数据库),PHP 版本、扩展全配好,不用关心底层配置。只想赶紧进靶场打漏洞的走这条。
LAMP 手搭路线自己装 Apache、MySQL、PHP,慢一些但对整个 Web 服务栈的认识会深很多。以后搭别的环境(DVWA 更新、换其他靶场)都心里有数。
不管走哪条,记住一句话:这是靶场,本地或内网自己练手用的,别往公网暴露。后面还会说这个。
2
路线一:Docker Compose,两分钟搞定
前提是机器能联网,还没装 Docker 的话先装:
curl -fsSL https://get.docker.com | shsudo systemctl enable --now docker
装完拉到 DVWA 官方仓库,里面有现成的 docker-compose.yml:
git clone https://github.com/digininja/DVWA.gitcd DVWAsudo docker compose up -d
浏览器打开 http://127.0.0.1:4280 ,看到 DVWA 的登录页就说明跑起来了。
默认用户名密码是 admin / password。进去之后页面下方有个"Create/Reset Database"的按钮,点一下,数据库自动建好、演示数据灌进去,就可以开始练了。
默认端口是 4280,如果被占用了就改 docker-compose.yml 里的端口映射,把 4280:80 改成别的,比如 8080:80,然后重新 up 一遍。
sudo docker compose down# 改 docker-compose.yml 里的 ports: "8080:80"sudo docker compose up -d
GitHub 拉不动的话也可以用官方镜像直接跑——效果一样,只是少了个仓库目录在本地:
sudo docker run --name dvwa -d -p 4280:80 vulnerables/web-dvwa
启动失败先看日志:
sudo docker logs dvwa
3
路线二:LAMP 手搭,每个步骤自己来
第一步,装 Apache、MariaDB、PHP。
Ubuntu / Debian 用这套,PHP 装 8.x 版本,DVWA 官方已经支持:
sudo apt updatesudo apt install -y apache2 mariadb-server php php-mysql php-gd php-mbstring php-curl php-xml php-zip gitsudo systemctl enable --now apache2 mariadb
CentOS / Rocky 用这套,Apache 在它上面叫 httpd:
sudo yum install -y httpd mariadb-server php php-mysql php-gd php-mbstring php-curl php-xml php-zip gitsudo systemctl enable --now httpd mariadb
装完访问 http://你服务器的IP ,看到 Apache 默认页就说明 Web 服务活了。
第二步,让 PHP 能连数据库、能发 HTTP 请求。
DVWA 的「文件包含」模块需要远程包含功能,PHP 解析 YAML 依赖 XML 扩展,后面重设密码要用 cURL。这些在安装命令里已经装好了。但有个地方默认关着,你得到 php.ini 里打开。
先找到 php.ini 的位置:
php --ini
Ubuntu 在 /etc/php/8.x/apache2/php.ini,CentOS 在 /etc/php.ini。用 vim 打开,把这个选项改成 On:
allow_url_include = On
改完后重启 Web 服务让配置生效:
sudo systemctl restart apache2 # Debian/Ubuntusudo systemctl restart httpd # CentOS/Rocky
第三步,把 DVWA 源码放进网站根目录。
Linux 默认的网站根目录是 /var/www/html:
cd /var/www/htmlsudo git clone https://github.com/digininja/DVWA.git
下好之后你应该能访问 http://服务器IP/DVWA/ ——会跳到一个配置页面,告诉你还需要做哪些事。先别急,后面的步骤做完再刷新就好了。
如果 GitHub 拉不下来,去 https://github.com/digininja/DVWA 下载 zip 包,传到服务器上解压到 /var/www/html/DVWA/ 也行。
第四步,把配置文件复制出来。
DVWA 源码里带了配置模板,需要手动复制一份并改名,这是最容易漏的步骤——忘了这步,后面访问页面会一直提示"配置文件不存在":
cd /var/www/html/DVWA/configsudo cp config.inc.php.dist config.inc.php
然后 vim 打开 config.inc.php,看一下里面的数据库配置。默认值就是连接本地数据库,用户名 root、密码空。如果你的数据库设了密码,改一下这几行:
$_DVWA[ 'db_user' ] = 'dvwa';$_DVWA[ 'db_password' ] = 'p@ssw0rd';
第五步,建库还需要一个专用账号。
上一句说的就是这个。Ubuntu 上 MariaDB 的 root 默认走 unix_socket 认证,直接 sudo 进:
sudo mysql
CentOS 上 MariaDB 初始 root 密码是空的,直接回车:
mysql -u root -p
进去以后执行这几句(密码自己换一个):
CREATE DATABASE dvwa DEFAULT CHARACTER SET utf8mb4;CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd';GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost';FLUSH PRIVILEGES;
然后记得改 config.inc.php 里的数据库密码,跟上面设的一致。
第六步,改目录权限。这个最容易被忽略。
DVWA 需要可写的目录来存放一些运行时文件。Ubuntu 的 Web 用户叫 www-data,CentOS 叫 apache,别搞错:
sudo chown -R www-data:www-data /var/www/html/DVWA/hackable/uploadssudo chown -R www-data:www-data /var/www/html/DVWA/config
如果不做这步,创建数据库那一步会报 "config 目录不可写" 或者上传文件功能失效。Ubuntu 用户注意,如果你当前用户不是 www-data,个别目录还得加写权限:
sudo chmod 755 /var/www/html/DVWA/configsudo chmod 755 /var/www/html/DVWA/hackable/uploads
第七步,初始化数据库。
浏览器访问:
http://服务器IP/DVWA/setup.php
拉到页面底部,点 "Create/Reset Database" 按钮。如果一切正常,页面会显示 "Setup successful" 一长串提示。然后点页面底部的 "Log in" 链接,用 admin / password 登录。
登录进去以后,左侧菜单的漏洞模块全亮着,说明靶场已经跑通了。
4
打不开?先查这三样
服务有没有在跑。
systemctl status apache2 mariadb# 或者 CentOS 用:systemctl status httpd mariadb
本机能开、别的机器打不开。大概率是防火墙:
sudo ufw allow 80/tcpsudo firewall-cmd --add-service=http --permanent && sudo firewall-cmd --reload
云服务器还要去控制台安全组放行 80 端口,这个在系统里改一万遍也没用。
CentOS 上 SELinux 有没有拦。临时关掉试一下就知道了:
getenforcesudo setenforce 0
5
setup 页面报红字?对着看
DVWA 的 setup.php 页面上方有个表格,绿色的打勾表示通过,红色的叉表示有问题。下面列最常遇到的几条。
"config file not found"——忘了 config 目录里的步骤。回到第四步,把 config.inc.php.dist 复制成 config.inc.php。
"config file is not writable"——目录权限没给够。回到第六步,chown + chmod 检查一遍。
"Could not connect to MySQL"——MariaDB/MySQL 服务没启动,或配置里的用户名密码跟数据库不一致。先确认服务在跑,再确认 config.inc.php 里的 db_user/db_password 跟你在数据库里建的一致。
"PHP module gd" 或者 "MySQL module" 红色叉——安装 PHP 扩展那一步有遗漏。回第一步,把 apt install / yum install 的命令重跑一遍,注意确认所有扩展都装上了。
"reCAPTCHA key" 红色叉——这个不用管。DVWA 的 reCAPTCHA 模块需要自己申请 Google reCAPTCHA 密钥才能用,对练漏洞没有影响,红叉忽略即可。
6
登录进去之后干什么
默认账户 admin / password,登录后左边那排菜单挨个点一遍。每个练习都分 Low / Medium / High / Impossible 四个等级——先在 Low 级试试手,看提示猜怎么打进去;切到 Medium 同样的漏洞多了什么限制;再到 High 看看还有没有绕过方式。
点每个模块右下角的 "View Source" 可以看到 PHP 源码,对照着理解自己刚才的操作为什么生效、为什么没生效,是效果最好的学法。
DVWA 的安全等级在页面底部 "DVWA Security" 那里切。改了之后记得重新进对应的练习页面。
另外别忘了把默认密码改掉——登录后点左侧 "Logout" 上方的 "admin" 链接,跳转到密码修改页。DVWA 的低安全等级做的 SQL 注入练习可以拿 update 语句改别人密码,同理别人也可以改你的。靶场里的 admin 账号改个自己能记住的就行。
7
最后几句正经话
DVWA 里每个模块都是一个真正的、能利用的安全漏洞。它被设计出来供人学习,但也意味着一旦暴露在公网上——不管是你的 VPS 忘了关防火墙,还是把端口映射到了公网——这台机器就会变成扫描器的活靶子。用完关掉服务,或者只绑在 127.0.0.1 上。
虚拟机里装的话,装好后打个快照。后面你把某个练习玩崩了、配置改乱了、数据库删了,一条命令就能滚回去,比重新再来一遍省事太多。
DVWA 官方文档在 https://github.com/digininja/DVWA ——英文的,读着吃力的话对着翻译工具也能看。文档里有每个练习的解题思路,实在是卡住了再翻。先自己试,卡十分钟再说,效果比直接看答案好得多。
注:本文仅为个人观点。关注我,了解更多。