news 2026/10/19 11:09:40

DVWA与Pikachu靶场完整搭建指南:从零开始打造Web安全练习环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DVWA与Pikachu靶场完整搭建指南:从零开始打造Web安全练习环境

1. 为什么学渗透测试,先得从靶场开始

很多刚接触网络安全的朋友,最容易踩的一个坑就是:学完一堆漏洞原理,觉得自己什么都懂了,一上手却发现连工具怎么配都不知道。原因很简单,安全测试不是看出来的,是练出来的。但问题是,练习不能拿真实业务系统来练,否则轻则违反合规要求,重则直接把自己送进去。这时候,靶场就是最稳妥的练习场所。

DVWA和Pikachu是目前入门阶段最流行的两个Web安全靶场。DVWA全称是Damn Vulnerable Web Application,翻译过来就是“该死的脆弱Web应用”,它把SQL注入、XSS、文件上传、命令执行等常见漏洞做成一个个关卡,还分了低、中、高、不可能四个安全等级,非常适合循序渐进地理解漏洞背后的原理。Pikachu则是用漫画皮卡丘形象包装的一个中文靶场,基于PHP搭建,覆盖了RCE、SSRF、XXE、越权、目录遍历等二十多个漏洞场景,界面友好,中文提示清晰,对英文不太熟练的朋友尤其友好。

这篇文章我会把两个靶场的搭建过程完整拆开讲,从环境准备、下载部署、数据库初始化,到常见的排错方法,一步步带你把靶场跑起来。整个过程不需要你有很强的编程基础,只要会基本的文件操作、能打开浏览器,就能跟着搭完。搭好之后,你就有了一套可以反复练习的Web安全实验环境,后面学什么漏洞都能直接上手验证。

顺便提醒一句:靶场搭建本身是安全意识训练的一部分,搭建和使用都只能在你自己控制的、用于学习的本地环境中进行。不要在未授权的情况下对任何第三方系统做测试,这是底线。

2. 搭建前先把运行环境理清楚

2.1 两个靶场到底依赖什么

DVWA和Pikachu都是PHP写的Web应用,所以它们需要的运行环境本质上是同一套东西:Web服务器(Apache或Nginx)、PHP解释器、MySQL数据库。浏览器访问靶场页面时,Web服务器把PHP代码交给PHP解释器执行,PHP再去数据库里读写数据,最终把结果返回给浏览器。

这套流程看起来简单,但版本问题很关键。DVWA和Pikachu都是老项目,很多代码是用PHP 5.x时代的写法写的。如果你装了PHP 8.2以上的版本,很可能出现页面报错、函数不兼容甚至直接白屏的情况。这里我建议的版本组合是:PHP 5.6到7.4之间,MySQL 5.5到5.7之间,Apache 2.4。如果你用的是一体化集成环境,选带有PHP 5.6或PHP 7.x选项的版本就可以。

为什么推荐一体化环境而不是自己手动装?因为亲自编译安装Apache、PHP、MySQL确实能学到更多底层知识,但对零基础入门来说,成本太高,光是配置路径、加载扩展、处理权限就能卡住你好几天。一体化环境把所有组件打包好了,点点鼠标就能切换PHP版本,能让你把精力集中在靶场本身。等以后你有需要再回头研究底层也不迟。

2.2 Windows和Linux下的环境选择

在Windows上,比较常见的方案是使用带PHP版本切换功能的一体化面板环境。这类工具会预装Apache、Nginx、MySQL、PHP等组件,有的还能一键启动、一键切换PHP版本,对初学者非常友好。需要注意,下载这类工具时要去官方网站下载,不要用搜索引擎结果里的第三方打包版本,否则很可能捆绑了奇怪的东西。

在Linux上,建议直接用发行版自带的应用仓库安装LAMP组件,以Debian系列为例:

sudo apt update sudo apt install apache2 mysql-server php php-mysql php-gd php-mbstring libapache2-mod-php

装完后启动服务:

sudo systemctl enable --now apache2 mysql

然后确认MySQL和PHP之间能正常通信,最简单的验证方式是在Web根目录放一个探针文件,内容写:

<?php phpinfo(); ?>

浏览器访问这个文件,如果能显示出PHP版本、扩展列表、MySQL支持信息,说明环境就绪了。这个探针文件用完记得删除,别留着当成靶场的正常页面,容易混淆。

另外提醒一个容易被忽略的点:无论是Windows还是Linux,靶场目录都要放在Web服务器能读到的位置。Windows下通常是Web根目录下的某个子目录,Linux下通常是/var/www/html/,否则浏览器访问不到。

2.3 目录结构与权限准备

把环境装好后,我建议先规划一下目录结构。例如在Web根目录下建一个labs文件夹,里面再分别放dvwa和pikachu两个子目录。这样后续访问路径就很清晰:

  • 靶场地址:http://127.0.0.1/labs/dvwa
  • Pikachu地址:http://127.0.0.1/labs/pikachu

目录权限方面,Linux下需要确保Web运行账户能读取靶场文件,并且能写入某些需要动态生成的目录。跑以下命令把属主调整好:

sudo chown -R www-data:www-data /var/www/html/labs

Windows下一般不存在这个权限问题,但要注意文件夹属性不要设置成只读。

3. DVWA靶场搭建完整过程

3.1 下载与目录摆放

DVWA的源码托管在一个代码托管平台上,项目会有release版本的打包下载入口。下载下来的压缩包解压后,把里面的文件全部放到刚才规划的labs/dvwa目录下。

解压完成后,进入config目录,你会发现有一个config.inc.php.dist文件。这是数据库配置的模板文件。按DVWA的官方流程,需要把它重命名成config.inc.php,然后在里面填上你的数据库信息。这一步是整个搭建过程最容易出错的地方,后面我会详细说每一项该怎么填。

在Windows上重命名文件时,如果资源管理器不显示扩展名,很容易把文件弄成config.inc.php.dist.php这种状态。建议先在文件夹选项里打开“显示文件扩展名”,再操作。Linux上直接用mv config.inc.php.dist config.inc.php就行。

3.2 数据库配置与初始化

用文本编辑器打开config/config.inc.php,你会看到类似下面的关键配置段:

$_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'root'; $_DVWA[ 'db_password' ] = 'p@ssw0rd';

这里有几项要根据你的实际数据库环境修改:

  • db_server:数据库地址。本地环境填127.0.0.1,如果MySQL端口不是默认的3306,可以写成127.0.0.1:3307这样的格式。
  • db_database:DVWA要使用的数据库名,默认是dvwa,保持默认即可,后面初始化时会自动创建。
  • db_user:数据库账号。如果用一体化环境的默认配置,通常是root。
  • db_password:数据库密码。这个要填你实际设置的MySQL密码。很多一体化环境默认密码是root,也有的在面板设置里能看到。

改完保存文件后,打开浏览器访问http://127.0.0.1/labs/dvwa。第一次访问时会自动跳到setup.php页面,页面上会显示一些PHP扩展状态检查。如果所有检查项都是绿色,直接点页面下方的“Create / Reset Database”按钮,DVWA会创建数据库并写入默认数据。创建成功后,再访问首页就能看到登录界面。

默认登录账号是admin,密码是password,这个密码本身就是个弱口令,正好对应了靶场想让你体会的安全问题。登录成功后会看到修改密码的提示,你可以在学习过程中改成自己的密码,也可以保持默认方便反复重置。

3.3 安全级别设置与验证

登录成功后的页面上方,有一个“DVWA Security”菜单,里面可以选择安全级别。这个设置直接决定了每个漏洞关卡的难度:

  • Low:没有任何防护,漏洞直接裸奔,适合理解漏洞原理。
  • Medium:对输入做了简单过滤,适合练习绕过思路。
  • High:防护明显增强,需要组合技巧才能绕过。
  • Impossible:代码层面做了参数化查询和强校验,基本无法利用,它存在的意义是告诉你安全代码应该怎么写。

我建议初学阶段先切到Low级别,逐个漏洞模块练习,理解漏洞怎么产生、怎么利用之后,再调到Medium和High去感受防御与绕过的博弈过程。不要一上来就挑战Impossible,那会打击自信。

验证环境是否正常,可以进入SQL Injection模块,在Low级别下输入1' or '1'='1,如果页面返回了用户表的数据,说明靶场的数据库和PHP执行链路都正常。这一步能确认靶场不是只有界面能打开,而是真的可以执行漏洞练习。

4. Pikachu靶场搭建完整过程

4.1 下载与目录放置

Pikachu的获取方式同样是从托管平台下载源码包,解压后放到labs/pikachu目录。它的目录结构里有一个inc文件夹,里面放着全局配置文件config.inc.php。打开这个文件,你会看到数据库连接相关的配置:

$conf['dbhost'] = '127.0.0.1'; $conf['dbuser'] = 'root'; $conf['dbpw'] = 'root'; $conf['dbname'] = 'pikachu'; $conf['port'] = 3306;

和DVWA的配置字段大同小异,dbname保持pikachu不变,dbuser和dbpw改成你自己的数据库账号密码。有一点需要特别注意:Pikachu在安装过程中会自动创建名为pikachu的数据库,所以你不需要提前建库,但数据库账号需要有创建数据库的权限。用root账号是最省事的,但既然是学习环境,也可以顺手创建一个专门账号练练MySQL授权操作。

另外,Pikachu里有些功能依赖PHP的allow_url_fopen配置,如果后面用到远程加载功能时报错,需要检查PHP的allow_url_fopen是否开启。大多数集成环境的默认配置里这个开关是打开的,暂时不需要着急改。

4.2 初始化与登录验证

配置好数据库后,浏览器访问http://127.0.0.1/labs/pikachu。首次打开会自动跳转到安装页面,通常是一个提示“初始化数据库”的按钮。点击后,Pikachu会创建数据表并写入初始数据,然后跳转到主页面。

Pikachu的大部分漏洞模块是不需要登录的,直接就能点进去练习。但“暴力破解”模块需要用到测试账号,官方默认提供了几个账号密码组合,其中就有弱口令样本,形式类似admin/123456之类的组合。实际使用时你可以在安装页面或者帮助文档里找到测试账号列表,也可以用Burp Suite抓包观察登录请求的参数结构,自己猜测和验证。

这里补充一个很多人会忽略的操作:靶场初始化完成后,建议手动打开浏览器开发者工具,看一下网络请求是否有404、500之类的异常。因为Pikachu依赖的一些静态资源如果路径写死,你把它放在子目录而不是Web根目录时,资源可能加载不出来,页面看着就会“破相”。真遇到这种情况,常见的解决方法是把Pikachu直接放在Web根目录下访问,或者修改配置里的URL前缀,具体要看源码里的路径写法。

4.3 功能模块一览与练习顺序建议

Pikachu的练习菜单是按漏洞类型组织的,其中包括但不限于:

  • 暴力破解:通过Burp Suite抓包和Intruder模块进行密码枚举。
  • XSS系列:反射型、存储型、DOM型,以及XSS钓鱼。
  • CSRF:跨站请求伪造的GET型和POST型演示。
  • SQL注入:数字型、字符型、搜索型、宽字节注入等。
  • RCE:命令执行与代码执行。
  • 文件包含:本地文件包含、远程文件包含。
  • 文件上传:各种后缀绕过场景。
  • 越权:水平越权与垂直越权。
  • SSRF:服务端请求伪造。
  • XXE:XML外部实体注入。

如果你是零基础,我的建议是先按“SQL注入 → XSS → CSRF → 文件上传 → RCE”这个顺序来练。这个顺序基本遵循了Web漏洞由简单到复杂的进阶路径,而且这几个漏洞类型在实际工作中出现频率也最高。Pikachu的菜单里每一项点进去都有一个“提示”区域,里面写了这个漏洞的核心原理和利用思路,卡住的时候先看提示,再自己动手。

有些模块设计了“重置”按钮,比如SQL注入模块的数据库内容可以一键重置。练习时如果数据被你改乱了,点重置就能恢复初始状态,不用重新做整个初始化流程。

5. 常见问题与排查技巧

5.1 页面白屏或直接打不开

这种情况十有八九是PHP报错但错误信息被隐藏了。你看到的白屏背后可能是一条致命错误,解决办法是临时打开PHP的错误显示开关。在靶场入口文件里临时加上:

ini_set('display_errors', 1); error_reporting(E_ALL);

把这段加在PHP文件开头的<?php后面,刷新页面就能看到具体的错误信息。报错一般分两类,一类是“class not found”这种提示,说明PHP版本太高,老函数被移除了;另一类是数据库连接相关的报错,这时要去检查配置文件里的数据库账号密码有没有填对。

排查完毕记得删掉临时加的调试代码,毕竟靶场本身也是训练你排查问题能力的对象。

5.2 数据库连接失败与初始化失败

访问DVWA或Pikachu提示数据库连接错误时,优先检查配置文件里的db_user和db_password是否和MySQL实际账号匹配。有一个很隐蔽的坑是:一体化环境里MySQL服务没有启动。MySQL没有运行,你在配置里写什么都没用。先确认面板里的MySQL状态是“运行中”,再检查配置文件。

如果DVWA的setup页面点击创建数据库后报错,可能是之前已经建过dvwa库,库结构不完整导致重建失败。这时候可以手动进数据库删掉旧的库:

DROP DATABASE IF EXISTS dvwa; DROP DATABASE IF EXISTS pikachu;

然后回到setup页面重新点击创建。这种方式比手动去数据库里一张一张删表要干净得多。

5.3 PHP版本太新导致的兼容性问题

如果你用的PHP版本是8.2或更高,打开靶场时大概率会遇到各种报错。最稳妥的解决方案是切换到低版本PHP。一体化环境里一般都有PHP版本切换的选项,找到运行的网站配置,把PHP版本切成7.4或5.6即可。

切完版本后,务必重启Web服务和PHP服务,否则旧的进程可能还在跑。这一点很关键,我有一次切换了PHP版本但页面还是报错,最后发现是没重启,Web服务仍然在用旧的PHP进程处理请求。

如果实在不想用老版本PHP,也可以在靶场代码里尝试修复那些过时的函数调用。但对于初学者,我强烈不建议这么做——这等于往一条陌生的路上开辟新的岔路,很容易越修越乱。直接切版本是最快到达终点的方式。

5.4 DVWA登录后显示“CSRF token mismatch”

这个问题通常出现在你对config/config.inc.php做了修改之后,或者浏览器缓存了旧的Cookie。DVWA的登录需要验证CSRF token,Cookie异常或者PHP会话数据过期都会导致校验失败。解决办法很简单:清掉浏览器里这个站点的Cookie,刷新页面重新访问。如果你改过config.inc.php里的配置,记得确认文件保存的编码是UTF-8,不要带BOM头。带BOM的文件会在输出HTML前产生不可见字符,导致页面结构和Cookie设置异常。

5.5 端口冲突导致靶场无法访问

如果你是先装了别的Web服务,再启动靶场环境,很容易出现80端口被占用的情况。Windows下可以用命令查看端口占用:

netstat -ano | findstr :80

看到占用进程后,要么关掉占用程序,要么把靶场环境的Web端口改成8080或自定义端口。改端口之后,访问地址也要相应变化,例如http://127.0.0.1:8080/labs/dvwa。

5.6 Linux环境下缺少PHP扩展

Linux手动装环境时,经常出现靶场页面正常但某些功能不可用的情况,这时候排查PHP扩展是最优先的。常见需要开启的扩展包括mysqli、curl、gd、mbstring、simplexml等。安装方法:

sudo apt install php-mysql php-curl php-gd php-mbstring php-xml

装完重启Apache:

sudo systemctl restart apache2

然后用探针文件确认扩展状态。如果你之前看不到扩展信息,也可以在命令行里直接查看:

php -m

这个命令会列出当前所有加载的PHP模块,检查起来很方便。

6. 靶场的日常使用与进阶练习建议

靶场搭好不是终点,怎么用好才是关键。我个人的习惯是给每个靶场都配一套专业的安全测试工具组合。最基础的是浏览器端抓包工具,比如Burp Suite的社区版。它的代理功能可以截获浏览器和靶场之间的HTTP请求,方便你修改参数、观察响应、做重放测试。尤其是Pikachu的暴力破解和SQL注入模块,用Burp Suite会顺畅很多。

另一个常用工具是SQLMap,它专门用来检测和利用SQL注入漏洞。但这里有个前提:SQLMap是自动化工具,它可以帮你快速验证漏洞是否存在,但如果你只会“一键扫描”而不理解背后发生了什么,那对自己的提升非常有限。我建议先手工把SQL注入的几种类型都练熟了,再让SQLMap辅助你做大规模验证,这样你才能看懂SQLMap输出里的每一段Payload在做什么。

做漏洞练习时,建议开一个Markdown笔记文件,每做完一个模块就记下:漏洞原理、利用条件、Payload、修复方案、绕过方式。这样三个月后你再回来看,整个知识体系会非常清晰。这也是我向很多来问我的朋友反复强调的方法——做靶场和刷题的本质区别就在于,靶场练习需要你提炼和沉淀,而刷题只是过一遍。

还有一点,两个靶场是可以互补使用的。同一个漏洞类型,在DVWA里过一遍低中高三个等级的理解闭环,再到Pikachu里做对应的中文提示复现,往往会有“原来如此”的感觉。比如SQL注入,DVWA的Low级别让你看到经典的单引号报错和联合查询,到了Pikachu的宽字节注入环节,你会开始理解编码转换和SQL语句解析之间的微妙关系。这种跨靶场的对照练习,比单刷一个靶场更容易建立完整的知识框架。

最后做一点收尾提醒:靶场是安全练习的起点,不是终点。真正走向实战还需要学网络协议、操作系统、数据库原理、开发语言等大量基础知识。靶场能帮你快速获得“手感”,但这些底层知识决定你在这条路上能走多远。我的建议是,每次在靶场里遇到一个报错或者一个绕过思路,都去追溯一下背后的原理,这样日积月累,你会发现自己不再只是会“打靶”,而是开始真正理解Web安全了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 11:08:58

双目视觉三维重建:摄像头标定到点云体积计算全流程解析

简介&#xff1a;一项聚焦三维重建完整流程的优质项目工程&#xff0c;面向计算机视觉、机器人导航及工业测量方向的开发者和学习者&#xff0c;覆盖摄像头标定、双目立体校正、视差计算、点云生成与体积计算等关键环节&#xff0c;帮助从零掌握双目视觉的技术链路。压缩包体积…

作者头像 李华
网站建设 2026/10/19 11:08:56

荧光定量PCR仪全解析:原理、硬件选型与实验设计

实验室角落里&#xff0c;那台老款荧光定量PCR仪还在稳定跑板&#xff0c;隔壁新装机的小伙子凑过来问&#xff1a;老师&#xff0c;为什么同样一份样本&#xff0c;这台机器跑出来的Ct值总比新机器晚了零点几个循环&#xff1f;我盯着屏幕上的扩增曲线想了想&#xff0c;这个问…

作者头像 李华
网站建设 2026/10/19 11:08:11

JDBC Sink实战:解决自动建表、主键映射与Schema演进三大痛点

1. 这不是“又一个Kafka教程”&#xff0c;而是一份能让你在真实数据管道中少踩三天坑的JDBC Sink实操手记你点开这个标题&#xff0c;大概率正被三件事困扰&#xff1a;第一&#xff0c;Kafka Connect跑起来了&#xff0c;但JDBC Sink连表都建不出来&#xff0c;日志里全是Fai…

作者头像 李华
网站建设 2026/10/19 11:06:06

UWB室内定位测试全攻略:从超宽带原理到厘米级精度落地

做了几年室内定位的项目&#xff0c;被问得最多的问题就是“UWB测试是什么&#xff0c;UWB技术到底是什么&#xff0c;凭什么它能做到厘米级定位”。最开始接触UWB超宽带技术&#xff0c;是因为一个仓库资产追踪项目——当时蓝牙和WiFi的RSSI方案都试过&#xff0c;定位误差在2…

作者头像 李华
网站建设 2026/10/19 11:06:00

图表设计方法论:从关系可视化到工程实践

1. 从"diagram-design"这个标题能读出什么第一次看到"diagram-design"这个标题&#xff0c;我的直觉是&#xff1a;这不是一个单纯的画图工具介绍&#xff0c;而是一个关于"如何设计图表"的方法论命题。很多人会把"diagram"和"de…

作者头像 李华
网站建设 2026/10/19 11:04:42

artcraft:从创意到实物的手工创作方法论与实操指南

1. 从“artcraft”这个名字说起&#xff1a;它到底想解决什么问题 第一次看到“artcraft”这个标题&#xff0c;我脑子里蹦出来的第一反应是&#xff1a;这大概率是一个把“艺术创作”和“手工实现”揉在一起的项目。art 是艺术&#xff0c;craft 是手艺、工艺&#xff0c;合在…

作者头像 李华