☰
Windows下Pikachu漏洞靶场搭建全攻略
2026/10/2 9:16:05 网站建设 项目流程

做Web安全入门,Pikachu基本是绕不开的一个名字。它是一个基于PHP+MySQL的Web漏洞靶场,把暴力破解、XSS、SQL注入、CSRF、SSRF、文件上传、反序列化这些常见漏洞做成了可交互的练习模块,点开就能直接上手测,不需要自己从零搭漏洞环境。这篇就专门讲Windows下怎么把它跑起来,从下载、部署、初始化到排查启动失败的问题,全程按我自己装过好几遍的流程写,照着做就行。

在Windows上搭Pikachu最核心的一件事,就是先给它准备好PHP+MySQL运行环境。靶场本身不挑机器,普通办公电脑、老笔记本都能跑,难点基本只出现在环境版本、端口冲突、数据库连接这三块。下面我按实际操作的顺序来拆,每一步都写清楚为什么这么做,遇到报错也知道去哪里改。

1. 环境准备:选对工具,后面少踩坑

1.1 为什么用phpstudy而不是手动装PHP+MySQL

Pikachu依赖PHP、MySQL、Apache(或Nginx),新手最容易翻车的地方就是分别装这三个组件,装完发现版本对不上、服务起不来、路径找不到,折腾一晚上还没看到靶场首页。

所以我建议直接用phpstudy这类集成环境。它相当于把PHP、MySQL、Apache/Nginx、phpMyAdmin打包成一个带图形界面的软件,点一下启动按钮,相关服务就一起起来了。Windows下用phpstudy尤其省事,因为不用手动配环境变量、不用手工改配置文件,绝大部分操作都是图形界面点击式完成。

我这边实测下来,phpstudy V8.1(也叫“小皮面板”)和我们熟悉的phpstudy 2018经典版都行。区别在于V8界面更现代、自带软件商店方便切换PHP版本,2018版则更轻量、UI简单直接,带PHP5.4等老版本内置组件。Pikachu兼容性最好的PHP版本是5.x,所以无论用哪个版本,最后都要确保跑靶场时用的是PHP 5.4或5.5,这个点后面会细说。

1.2 phpstudy下载与组件选择

下载phpstudy直接去官网,找到对应Windows版本下载安装包。安装路径建议保持默认,也就是装在某个盘的根目录下,比如D:\phpstudy_pro,不要装在带中文或空格的路径里,不然后面PHP解析、数据库连接都可能出现奇怪问题。

安装完成后打开面板,首页会看到“Apache”和“MySQL”两个服务按钮,旁边还有“启动”“停止”“重启”等操作。第一次安装时,需要到“软件管理”或“环境”页面确认Apache、MySQL、PHP组件是否已经安装好。如果没有,就直接点安装,版本按下面的组合选:

  • Apache:2.4.x
  • MySQL:5.5.x 或 5.7.x
  • PHP:5.4.x 或 5.5.x(如果面板默认给了更高版本,先装上,后面可以切换)

这里强调一下PHP版本为什么必须用5.x。Pikachu一类的老靶场在开发时主要基于PHP 5.x,虽然高版本PHP也能跑大部分页面,但一些模块在PHP 7+下会出现函数兼容问题,比如老的mysql_*系列函数在PHP 7里被移除了,导致页面直接报错。与其后面到处改代码,不如一开始就把PHP版本选对。

1.3 端口与基础设置检查

phpstudy装好后,先不要急着下载靶场,花十分钟把基础环境检查一遍,能省掉后面80%的麻烦。

打开phpstudy面板,确认Apache和MySQL的启动状态。如果点击启动后立刻变成红色“停止”状态,说明端口被占用或者服务配置有问题。常见的是80端口被占用,因为很多软件都会默认占用80,比如IIS、Skype、某些下载工具和远程控制软件。

检查端口占用的方法很简单:按Win+R,输入cmd打开命令行窗口,执行:

netstat -ano | findstr :80

如果能看到LISTENING状态的记录,记下最后一列的PID,然后在任务管理器里找到对应进程,确认是什么软件占用后,可以关掉它,也可以直接把phpstudy的Apache端口改成8080或8088。改端口的位置在phpstudy面板的“网站”或者Apache配置里,改完记得重启Apache。

MySQL的3306端口同理,如果本机装了其他MySQL服务,很容易冲突,解决方式也是改端口或者停掉旧服务。检查无误后,在浏览器输入http://127.0.0.1,能看到phpstudy默认站点页面,就说明环境基础已经OK了。

2. 下载Pikachu源码并部署到站点目录

2.1 源码获取的几种方式

Pikachu是开源项目,源码在GitHub上有托管。获取方式有两种:

第一种:直接在GitHub页面下载ZIP压缩包。这种方式不需要安装Git,下载好后解压就行,适合新手。

第二种:如果本机装了Git,用命令行克隆更干净:

git clone https://github.com/zhuifengshaonianhanlu/pikachu.git

注意下载或克隆下来的目录名可能是pikachu-master或pikachu,这都不影响使用,但为了后面访问路径简洁,建议统一重命名成pikachu。

下载时顺便说一句,源码包很小,几MB左右,不需要担心网络问题。真正耗时间的反而是环境配置。

2.2 解压、重命名与放置路径

把下载好的压缩包解压,得到一个pikachu-master文件夹,建议重命名为pikachu,然后整个文件夹放到phpstudy的站点根目录下。

站点根目录在哪里,取决于你用的phpstudy版本。V8一般是安装目录下的WWW文件夹,比如D:\phpstudy_pro\WWW;2018版一般是D:\phpstudy2018\WWW。如果找不到,可以在phpstudy面板的“网站”或“默认站点”设置里看到站点根目录路径。

放好之后,目录结构应该是这样的:

D:\phpstudy_pro\WWW\pikachu\inc D:\phpstudy_pro\WWW\pikachu\pkxss ...(其他项目文件)

我不建议把pikachu直接解压到根目录然后让文件散落在WWW下,也不建议放在多层子目录里。目录层级越深,后面URL写起来越容易出错,一个规范的路径能省很多事。

另外,整个路径中不要出现中文。Windows下中文路径容易导致PHP包含文件时路径解析失败,特别是在文件包含、文件上传这类模块里,明明代码没问题,页面却一直报错,查半天发现是路径里有中文。

2.3 修改数据库连接配置

Pikachu的数据库连接配置文件在inc目录下,文件名是config.inc.php。用记事本或Notepad++打开,核心内容大概是这样:

define('DB_HOST', '127.0.0.1'); define('DB_USER', 'root'); define('DB_PWD', 'root'); define('DB_NAME', 'pikachu');

这一项非常关键。Pikachu默认用账号root、密码root连接本机MySQL,数据库名是pikachu。如果你的phpstudy里MySQL的root密码不是root,那必须把这行改成你实际的密码,否则后面初始化时一定报“数据库连接失败”。

那phpstudy里的MySQL默认密码是多少呢?V8在首次启动MySQL时,默认用户名root,密码root。如果你之前改动过MySQL密码,要么改回root,要么同步修改config.inc.php。我的习惯是尽量不动数据库密码,保持root/root,这样Pikachu的默认配置直接就能跑。

还有个细节:config.inc.php保存时,编码最好保持UTF-8无BOM格式。如果用记事本另存为带BOM的UTF-8,PHP解析时可能输出不可见字符,导致页面头部出现空白或乱码。操作不复杂:用Notepad++打开,编码菜单里选“转为UTF-8编码(无BOM)”,再保存即可。

提示:这一步其实多数情况下改都不用改,默认配置就是root/root。但你必须知道这个文件在哪、怎么改,因为一旦MySQL密码和你环境不一致,这里就是唯一需要动的地方。

3. 一次性完成初始化与登录验证

3.1 启动Apache和MySQL

部署完成配置文件也核对无误后,回到phpstudy面板,把Apache和MySQL都启动起来。两个服务都变成绿色“运行中”状态后,就可以进行下一步了。

这里我建议养成一个习惯:启动服务后,先看一眼面板里的“端口”或“服务”状态,确认80端口和3306端口都是正常监听状态。有些时候Apache显示启动成功,但实际端口没起来,访问靶场一样打不开。

3.2 初始化install.php怎么跑

Pikachu自带初始化脚本,不需要手动去创建数据库和导入数据,脚本会自动完成。这也算Pikachu比某些靶场更省心的地方。

浏览器输入:

http://127.0.0.1/pikachu/install.php

页面上会出现初始化提示,通常是一个按钮或者一个带参数的链接,点击“初始化”或直接访问http://127.0.0.1/pikachu/install.php?flag=1,系统会自动创建pikachu数据库,并写入默认数据。如果一切顺利,页面会提示初始化成功。

这里有个判断标准:初始化之后,数据库里会出现pikachu库,里面有一些表,比如users、member等。你可以在phpstudy自带的phpMyAdmin里查看。如果看到这些表,说明数据库导入成功。

有个实操经验:不要提前手动创建pikachu数据库,让install.php自己来。因为Pikachu的初始化逻辑会检测数据库是否存在,提前创建反而可能在重复安装时出现“已存在”的报错。

3.3 登录靶场后台并确认功能

初始化完成后,访问靶场首页:

http://127.0.0.1/pikachu/

能看到Pikachu漏洞平台首页,左侧是漏洞模块列表,右侧是各个模块的入口,说明靶场已经跑起来了。

Pikachu自带一个简单的后台,默认账号admin,密码admin。在首页右上角或菜单里能找到登录入口。不过我要说明一下,Pikachu的大部分漏洞练习模块是不需要登录就能直接访问的,登录后台主要是看一些后台管理功能,或者配合越权类漏洞练习使用。

到这一步,一个能用的Pikachu靶场就算搭建完成了。但我通常还会做最后一道验证:随便点开一个模块,比如“暴力破解-基于表单的暴力破解”,看看页面是否能正常显示登录框。如果页面能正常渲染、没有PHP报错,说明PHP解析、数据库连接、路由跳转都是正常的,接下来就能安心刷题了。

4. 启动失败与页面报错排查指南

这个部分才是整篇文章的精华。说实话,Pikachu搭建本身不复杂,绝大多数人卡住的不是搭建步骤,而是各种环境报错。我把这几年帮人排查时遇到的高频问题整理出来,按现象、原因、解决办法三个维度写清楚。

4.1 Apache或MySQL启动不了

现象:在phpstudy面板点“启动”,按钮闪一下又变回红色,或者提示启动失败。

大概率是端口被占用。Apache默认80端口,MySQL默认3306端口,这两个端口都是“兵家必争之地”。

80端口被占用,按前面的方法用netstat命令找到占用进程。如果是系统自带的IIS或World Wide Web Publishing Service,可以在“服务”里停掉;如果是别的软件,退出或卸载都行。不想动这些软件的话,直接改Apache端口更省事,改成8088后,访问地址变成http://127.0.0.1:8088/pikachu/。

3306端口被占用,通常是本机装了其他MySQL或者有虚拟机软件占用。确认占用情况后,停掉旧服务,或者在phpstudy的MySQL配置里换一个端口。

还有一种情况:Windows防火墙拦了Apache。第一次启动时系统会弹出防火墙授权窗口,记得勾选“允许访问”。如果没弹出来,就到“控制面板-Windows Defender防火墙-允许应用通过防火墙”里手动添加Apache。

4.2 页面报“数据库连接失败”或一直跳转初始化页

现象:访问首页或install.php时报数据库连接失败,或者反复提示需要初始化。

这种问题90%出在config.inc.php里的账号密码和MySQL实际密码不一致。先到phpstudy的MySQL命令行或phpMyAdmin里确认root密码,然后对比config.inc.php里的DB_PWD是否一致。两边改到一致后重启Apache。

另外,少数情况是MySQL没启动成功。看起来面板里MySQL是绿色,但实际连接不上,这种情况直接重启MySQL服务,然后在phpMyAdmin里测试连接。

还有一点容易忽略:如果你改了MySQL端口,比如改成3307,那还必须同步修改config.inc.php里的DB_HOST,写成类似127.0.0.1:3307的格式。否则程序用默认3306去连,还是连不上。

4.3 模块页面出现PHP报错或白屏

现象:首页正常,但点开某些漏洞模块后,页面出现PHP报错、白屏,或者功能不完整。

先看报错内容。如果能看到“Call to undefined function mysql_connect()”这类字样,说明当前PHP版本太高,Pikachu的老代码不兼容,处理方法就是在phpstudy里把PHP版本切回5.4或5.5,然后重启Apache。

如果报错信息里提到某个文件找不到,比如“require xxx.php failed”,多半是路径问题。检查一下Pikachu目录是不是放在WWW根目录下、路径里有没有中文、目录名是否和你访问的URL一致。

还有一种情况:页面能打开但执行功能时没反应,比如RCE模块输入命令后没有回显。这通常是PHP的disable_functions里禁用了exec、system等函数。找到phpstudy里当前PHP版本的php.ini,搜索disable_functions,把exec、system、passthru、shell_exec这些函数从禁用列表里去掉,然后重启Apache。这个问题不大,但会卡住很多人。

4.4 常见问题速查表

现象可能原因解决办法
Apache启动失败80端口被占用用netstat查占用进程并处理,或改Apache端口
MySQL启动失败3306端口被占用 / 已安装其他MySQL停旧服务,或修改MySQL端口并同步配置
首页提示数据库连接失败config.inc.php密码与MySQL不一致修改DB_PWD为实际密码,重启Apache
初始化成功后重新访问仍是未初始化install.php重复执行导致数据冲突在phpMyAdmin里删除pikachu库,再访问install.php重新初始化
模块页面报mysql_connect未定义PHP版本为7+在phpstudy切换PHP为5.4/5.5
RCE模块执行命令无回显disable_functions禁用了exec/system修改php.ini解除禁用,重启Apache
访问URL出现403站点根目录或目录权限问题确认Pikachu放在WWW目录下,并检查Apache目录权限
文件上传、文件包含模块异常路径包含中文或空格将Pikachu移动至纯英文路径
页面出现乱码配置文件编码为带BOM的UTF-8用Notepad++转成UTF-8无BOM格式

注意:改任何配置文件之前,先备份原文件。改完php.ini或config.inc.php之后,一定要重启Apache,不然改动不会生效。

5. 靶场功能模块速览与推荐练习顺序

Pikachu搭建好以后,接下来就是怎么刷的问题。这个靶场模块很全,十几个大类、几十个小关卡,如果按菜单从上往下硬刷,容易在某个环节卡住然后失去耐心。我按自己的使用经验,把模块盘点和练习顺序整理一下。

5.1 核心模块盘点

暴力破解模块分三种:基于表单的暴力破解、基于验证码的暴力破解、基于Token的暴力破解。第一个是纯用户名密码爆破,适合入门;后两个分别考察验证码复用和Token校验逻辑,需要配合Burp Suite这类工具。

XSS模块覆盖了反射型、存储型、DOM型,还加了一个XSS盲打和过滤绕过。练习的时候不光要看弹窗,还要理解输出点上下文,知道什么地方能注入、什么情况下会被过滤。

SQL注入模块很全,从数字型、字符型、搜索型开始,到报错注入、时间盲注、宽字节注入,还有insert/update/delete注入。这一块是Pikachu的硬核部分,值得花时间逐个过关。

RCE模块分exec(命令执行)和eval(代码执行)两个方向。命令执行里可以试ipconfig、whoami这类命令,代码执行里可以试phpinfo()、system()等。做这个模块之前先确认disable_functions没有禁用相关函数。

文件上传模块覆盖了前端JS校验、后端Content-Type校验、文件扩展名黑名单校验、图片马绕过等场景。结合中国菜刀、蚁剑这类工具做完整利用链路。

反序列化模块是PHP对象注入的入门题,需要看懂PHP反序列化标记和POP链的基本思路。CSRF和SSRF模块也是必刷项,逻辑漏洞模块里有越权、支付逻辑、短信轰炸等贴近实战的场景。XXE模块考察XML外部实体注入,需要了解XML格式和外部实体加载的危险点。

5.2 新手通关建议

如果完全没有漏洞基础,我建议按这个顺序刷:暴力破解 → XSS → CSRF → SQL注入 → SSRF → RCE → 文件上传 → 反序列化 → XXE → 逻辑漏洞。

原因很简单:暴力破解和XSS对前置知识要求低,能快速建立“漏洞是什么”的感知;CSRF和SSRF理解起来也不难;SQL注入需要会一点SQL语法和Burp抓包改包;RCE和文件上传涉及命令执行和WebShell;反序列化和XXE则要求对PHP内部机制、XML解析原理有初步理解。按这个顺序,知识的坡度是平滑的。

每个模块页面右下角一般都有“提示”按钮,卡住的时候先看提示,再去看源码,最后才搜通关教程。靶场的价值在于自己动手测,如果只看答案不操作,很快会忘。

我特别提一句:刷Pikachu的时候,一定要配合Burp Suite或Fiddler这类抓包工具。很多漏洞的利用过程其实就是修改HTTP请求参数,光在浏览器里点来点去是看不出原理的。把每一个请求放到抓包工具里看一遍,理解前端传了什么、后端校验了什么,比单纯刷完关卡有用得多。

6. 环境搭建之外的几点体会

Pikachu这个靶场,我一直认为是“对新手最友好、对老手也不无聊”的存在。它不像DVWA那样只有屈指可数的几个大模块,也不像SQLi-Labs那样只聚焦SQL注入一个方向,而是把Web安全里最常见的漏洞类型都浓缩在一个项目里,每个类型下面还有多个细分场景。这一点对建立完整的漏洞知识框架特别有帮助。

我再分享一个经常被忽略的小经验:搭好靶场之后,不要急着删掉数据库重新初始化。刷到某个模块后发现数据库被自己改乱了,比如SQL注入练习把表结构改了,需要恢复到初始状态,直接访问install.php?flag=1重新初始化就行。这个参数等于“一键恢复出厂设置”,比手动删库导数据方便得多。

另外,Windows下如果打算长期使用这个靶场,建议把phpstudy和Pikachu的启动方式固定下来。比如把Apache和MySQL设置成开机自动启动,或者写一个简单的批处理脚本,双击就启动两个服务。我自己的做法是,把phpstudy快捷方式放到桌面,启动后点两下服务按钮,十秒钟内环境就绪。

最后提醒一句安全底线:Pikachu是用来在本地练习漏洞利用的,千万不要把这个方法论直接套到公网或未经授权的系统上。本地靶场练得再熟,真正的工作和项目里还是要守规矩,在授权范围内做测试。环境搭建只是第一步,后面把每个漏洞的原理和修复方案都弄明白,才是这个靶场给到你的最大价值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询