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