1. 项目概述与核心价值
最近在带新人做Web安全入门,发现很多朋友在搭建本地靶场环境这一步就卡住了。Pikachu作为一个经典的漏洞练习平台,涵盖了SQL注入、XSS、文件上传等主流Web漏洞,是新手进阶的绝佳跳板。但它的部署过程,尤其是在Windows环境下,常常会遇到各种“坑”,比如端口冲突、服务启动失败、数据库连接不上,最让人头疼的就是XSS后台功能因为配置问题无法正常使用。很多人会选择单一的宝塔面板或者PHPStudy,但前者在Windows上资源占用高,后者有时又不够灵活。我折腾了几天,摸索出了一套“宝塔面板+PHPStudy”双环境协同部署的方案,既能利用宝塔的便捷管理,又能发挥PHPStudy的轻量灵活,完美避开了那些常见的坑。这篇文章,我就把这套从零开始的部署流程、每一步的避坑要点,以及最关键的那个“XSS后台配置”的详细步骤,毫无保留地分享给你。无论你是刚接触安全的新手,还是想快速搭建一个稳定测试环境的老手,跟着这篇指南走,半小时内就能让你的Pikachu靶场跑起来,并且所有功能,尤其是存储型XSS的后台管理功能,都能正常使用。
2. 环境整体设计与思路拆解
2.1 为什么选择“双环境”部署?
单纯使用宝塔面板或PHPStudy都能部署Pikachu,但各有优劣。PHPStudy在Windows上以轻量、一键切换PHP/MySQL版本著称,非常适合本地快速测试。但对于需要长期维护、或者想模拟更接近生产环境(如使用Nginx)的练习者来说,功能略显单一。宝塔面板则提供了Web化的服务器管理、站点配置、防火墙等强大功能,但它在Windows上的实现是基于Python环境,有时会与系统已有服务(尤其是MySQL)产生冲突,资源占用也更高。
我的思路是“扬长避短”: 用PHPStudy提供核心的Apache/Nginx和MySQL服务 ,因为它更纯净、冲突更少; 用宝塔面板作为Web管理界面和辅助工具 ,用于文件管理、伪静态规则配置、反向代理设置等。这样,我们既享受了PHPStudy的稳定和轻量,又拥有了宝塔的便捷管理能力。这种组合尤其适合Windows 10/11用户,能最大程度避免“端口占用”、“服务无法启动”这类经典问题。
2.2 工具选型与版本确认
工欲善其事,必先利其器。版本兼容性是成功的第一步,版本不对,努力白费。
- PHPStudy :推荐使用 PHPStudy V8.1 或更新版本。这个版本集成了更现代的软件包,对Windows 10/11的兼容性更好。务必从官网下载,避免第三方修改版带来的安全隐患。
- 宝塔面板 :选择 宝塔Windows面板 7.6.0 版本。这个版本相对成熟稳定。注意,我们只安装其面板管理功能,不安装它自带的Apache/Nginx和MySQL,以避免与PHPStudy冲突。
- Pikachu靶场 :从GitHub官方仓库或可信源下载最新版本。下载后是一个包含所有源码的压缩包。
- 浏览器 :Chrome或Firefox的最新版,并准备好开发者工具(F12),后续调试会用到。
注意 :在开始安装前,请务必 彻底关闭 你电脑上可能正在运行的任何其他Web服务器(如XAMPP、WAMP)、MySQL服务以及任何占用80、443、3306端口的应用程序(如Skype、某些云盘)。可以使用命令
netstat -ano | findstr :80和netstat -ano | findstr :3306来检查端口占用情况。
3. 核心细节解析与实操要点
3.1 PHPStudy的安装与纯净环境搭建
安装PHPStudy本身很简单,但“纯净安装”是关键。许多安装失败案例,根源在于旧有环境没有清理干净。
步骤一:卸载与清理
如果你之前安装过任何PHP环境(包括旧版PHPStudy),请先通过控制面板完全卸载。然后,手动删除其残留的安装目录(通常位于
C:\phpStudy
或
D:\phpStudy
)以及MySQL数据目录(如
C:\phpStudy\MySQL\data
)。最后,检查系统环境变量,删除任何与PHP、MySQL相关的路径。
步骤二:安装与启动
- 以管理员身份运行PHPStudy安装程序。
-
选择安装路径,建议放在非系统盘(如
D:\phpStudy),路径中不要有中文和空格。 -
安装完成后,运行PHPStudy。在主界面,你会看到“Apache”和“MySQL”的开关。首次启动,点击“启动”按钮。这里第一个坑可能就会出现:
启动失败
。
-
Apache启动失败
:大概率是80端口被占用。点击Apache右侧的“配置”->“端口常规设置”,将“端口”改为8080(或其他未被占用的端口,如81)。同时,在“域名设置”里,将“网站目录”暂时设为一个简单路径,如
D:\www。 - MySQL启动失败 :最常见的是3306端口被占用,或旧数据文件冲突。同样,通过“配置”->“端口常规设置”修改MySQL端口为3307。如果还不行,尝试点击“MySQL管理器”->“服务管理器”->“重装MySQL服务”。如果之前有数据,请先备份。
-
Apache启动失败
:大概率是80端口被占用。点击Apache右侧的“配置”->“端口常规设置”,将“端口”改为8080(或其他未被占用的端口,如81)。同时,在“域名设置”里,将“网站目录”暂时设为一个简单路径,如
步骤三:环境验证
启动成功后,在浏览器访问
http://localhost:8080
(如果你改了端口,请对应修改)。应该能看到PHPStudy的默认首页。再点击PHPStudy面板上的“MySQL管理器”->“打开MySQL命令行”,输入初始密码(默认root/root),能成功登录即表示MySQL服务正常。
实操心得 :我习惯在PHPStudy中创建一个专用的“测试环境”配置。在“软件管理”中,将PHP版本固定为7.3.x(Pikachu完美兼容),Apache版本用最新的即可。这样与系统其他项目隔离,避免互相影响。
3.2 宝塔面板的定制化安装与降权运行
我们的目标是只使用宝塔的面板功能,因此安装时需要格外小心,避免它自动安装运行环境。
-
下载与安装
:从宝塔官网下载Windows面板安装包。安装时,安装路径也建议选择非系统盘,如
D:\btpanel。 - 关键配置 :安装过程中或安装完成后首次运行,宝塔会尝试安装套件(如Nginx、Apache、MySQL、PHP)。 这里必须手动取消勾选所有运行环境组件! 我们只需要一个纯净的管理面板。如果安装程序强制安装,可以在安装完成后,进入宝塔的安装目录,找到并停止/卸载这些自动安装的服务。
-
面板访问
:安装完成后,会显示内网面板地址(如
http://192.168.1.100:8888/xxxxx)和初始账号密码。在浏览器中访问该地址,登录宝塔面板。 - 安全设置 :登录后第一件事,在面板设置中修改默认的8888端口为一个不常用的高端口号(如23567),并修改用户名和密码。因为我们的PHPStudy已经提供了Web服务,宝塔面板仅作为后台管理,不应占用常用端口。
3.3 Pikachu源码部署与数据库初始化
这是将靶场“安家”的核心步骤,数据库初始化出错会导致整个靶场无法使用。
-
放置源码
:将下载的Pikachu压缩包解压,得到名为
pikachu的文件夹。将这个文件夹复制到PHPStudy的网站根目录下。根据你之前的设置,通常是D:\phpStudy\WWW\或D:\www\。最终路径应该是D:\www\pikachu。 -
创建数据库
:
- 打开PHPStudy的MySQL命令行或使用Navicat等工具连接MySQL(主机:127.0.0.1,端口:3307,用户:root,密码:root)。
-
执行命令:
CREATE DATABASE pikachu CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;这里使用utf8mb4字符集是为了更好地支持中文和特殊字符,避免乱码。
-
导入数据
:在Pikachu源码文件夹中,找到
pikachu.sql文件(通常在/inc或根目录下)。在MySQL命令行中,切换到pikachu数据库:USE pikachu;,然后使用SOURCE命令导入:SOURCE D:/www/pikachu/pikachu.sql;(注意路径中的斜杠方向)。或者用图形化工具直接导入该SQL文件。 -
配置数据库连接
:找到Pikachu的配置文件。通常位于
/inc/config.inc.php。用记事本或代码编辑器打开它。
务必确认端口与PHPStudy中MySQL的端口一致! 这是连接失败的最高发原因。// 找到以下配置项,根据你的PHPStudy设置进行修改 define('DB_HOST', '127.0.0.1'); // 数据库地址,本地就是127.0.0.1 define('DB_PORT', '3307'); // 端口!这里是关键,改成你PHPStudy中MySQL的实际端口(3307) define('DB_USER', 'root'); // 数据库用户名 define('DB_PWD', 'root'); // 数据库密码 define('DB_NAME', 'pikachu'); // 数据库名
4. 双环境协同配置与XSS后台功能激活
4.1 在宝塔面板中添加PHPStudy站点
现在,我们要让宝塔面板来管理我们放在PHPStudy目录下的Pikachu站点,这样就能用宝塔的功能了。
- 登录宝塔面板,进入“网站”菜单。
- 点击“添加站点”。
-
域名
:填写
pikachu.test或localhost.pikachu(你喜欢的本地域名)。为了方便,我们后面会配置本地Hosts。 -
根目录
:这里指向PHPStudy下的Pikachu路径,即
D:\www\pikachu。 - FTP和数据库 :都不创建,因为我们用PHPStudy的MySQL。
- PHP版本 :选择“纯静态”即可。因为网站实际运行是由PHPStudy的Apache处理的,宝塔这里不负责PHP解析。 这是一个重要技巧 ,这样配置后,宝塔只负责文件管理和部分配置,不会干扰PHPStudy的运行环境。
- 点击提交。
4.2 配置本地Hosts与虚拟主机(关键)
为了让浏览器通过自定义域名(如
pikachu.test
)访问我们的靶场,需要修改系统Hosts文件。
- 以管理员身份打开记事本。
-
通过记事本打开文件
C:\Windows\System32\drivers\etc\hosts。 -
在文件末尾添加一行:
127.0.0.1 pikachu.test - 保存文件(可能需要管理员权限)。
接下来,配置PHPStudy的Apache,让它识别这个域名。
- 打开PHPStudy,进入“网站”->“管理”->“修改”。
-
在“域名”一栏,添加我们刚设置的域名
pikachu.test。 -
“网站目录”指向
D:\www\pikachu。 - 保存并重启Apache。
现在,在浏览器中访问
http://pikachu.test:8080
(端口号是你为Apache设置的,如8080),你应该能看到Pikachu的首页。
4.3 XSS后台管理功能配置详解(核心避坑点)
Pikachu的存储型XSS漏洞练习模块,包含一个“后台管理”页面(通常路径是
/pkxss/backend
),用于模拟管理员查看用户留言,从而触发存储的XSS脚本。很多人在部署后发现这个后台页面打不开、空白或者报错,问题通常出在会话(Session)和路径配置上。
问题根源 :Pikachu的后台通常通过检查Session来判断用户是否登录。在本地多站点或特殊端口环境下,Session的保存和读取可能因为路径或域名问题而出错。
解决方案与步骤 :
-
检查后台入口 :首先确认后台的准确访问地址。查看Pikachu前端页面中“存储型XSS”相关链接,或直接查看源码目录结构,找到后台入口文件,常见的是
backend.php或index.php在pkxss/backend/目录下。完整访问URL可能是http://pikachu.test:8080/pkxss/backend/index.php。 -
配置PHPStudy的Session路径(关键步骤) :
- 打开PHPStudy,进入“其他选项菜单”->“PHP扩展及设置”->“PHP会话设置”。
-
确保“session.save_path”指向一个
存在且有读写权限
的目录。默认路径可能不存在。我建议在PHPStudy目录下新建一个文件夹,如
D:\phpStudy\session_temp。 -
将
session.save_path修改为D:/phpStudy/session_temp(注意斜杠)。并确保IIS或Apache的运行用户(通常是SYSTEM或你的用户名)对这个文件夹有完全控制权。 -
同时,检查
session.cookie_domain设置。可以尝试将其值改为.pikachu.test(注意前面的点),这允许子域名共享Session。或者,对于本地测试,可以直接将其注释掉或留空。
-
修改Pikachu后台的Session验证逻辑(终极方案) : 如果以上步骤无效,可能是Pikachu后台代码中的Session验证逻辑对本地环境不友好。这是一个需要小心修改源码的步骤。
-
找到后台的入口文件,例如
D:\www\pikachu\pkxss\backend\index.php。 -
在文件开头部分,找到Session启动代码
session_start();及其之后的权限检查代码。 -
为了快速让后台可访问以进行测试,你可以
临时注释掉或修改严格的登录验证
。例如,找到类似
if(!isset($_SESSION['admin'])){ header("Location: ../login.php"); die(); }的代码。 -
临时解决方案(仅用于本地学习环境)
:你可以在这段检查代码前,手动设置一个Session变量,模拟已登录状态。例如,在
session_start();后添加$_SESSION['admin'] = 'test_admin';。 请务必记住,这只是为了本地搭建测试,在实际有网络访问的环境中绝对不要这样做! - 修改后保存文件,清除浏览器缓存和Cookie,再次访问后台地址。
-
找到后台的入口文件,例如
-
验证后台功能 :成功进入后台后,你应该能看到一个简单的管理界面,可以查看“留言”或“消息”。此时,你可以在前台的存储型XSS漏洞页面提交一段测试脚本(如
<script>alert('XSS')</script>),然后刷新后台页面,如果脚本弹窗执行,说明整个XSS漏洞链条(前端输入->数据库存储->后台查看触发)完全打通,配置成功。
重要注意事项 :修改源码模拟登录是 极其不安全 的行为,仅适用于完全离线的本地学习环境。一旦你的靶场有被外部访问的风险(如虚拟机桥接网络、误开端口映射),必须恢复严格的权限检查,或使用强密码保护后台。我们的目的是搭建一个用于漏洞原理学习的 安全沙箱 ,而不是制造一个新的安全漏洞。
5. 常见问题与排查技巧实录
即使按照步骤操作,也可能会遇到一些“玄学”问题。这里我整理了实战中最高频的几个坑及其解决方案。
5.1 服务启动类问题
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
| PHPStudy Apache/MySQL 红灯,启动失败 |
1. 端口占用 (80, 443, 3306)
2. 服务残留冲突 3. 安装路径含中文/空格 |
1.
端口占用
:使用
netstat -ano
查找占用端口的PID,在任务管理器中结束对应进程。或直接修改PHPStudy服务端口。
2. 服务冲突 :以管理员运行CMD,执行
sc delete mysql
和
sc delete apache
(服务名可能是
Apache
或
wampapache
)删除旧服务,重启PHPStudy重装服务。
3. 路径问题 :重装到纯英文无空格路径。 |
| 宝塔面板无法安装或启动 |
1. Python环境冲突
2. 面板端口被占 3. 系统权限不足 |
1. 确保已安装的Python与宝塔兼容(宝塔Windows面板自带Python)。
2. 修改宝塔默认端口8888。 3. 始终以管理员身份 运行宝塔的安装程序和主程序。 |
访问
pikachu.test
显示403 Forbidden
| Apache/Nginx无目录访问权限 |
1.
PHPStudy
:检查网站目录的权限,确保
Everyone
或
IIS_IUSRS
有读取权限。
2. 检查Apache配置文件
httpd.conf
中
<Directory>
指令的
Require all granted
是否设置。
|
| 访问站点显示“Index of /”目录列表,而不是Pikachu首页 | 未设置默认首页文件 (index.php) |
在PHPStudy的该站点配置中,或在Apache的
httpd.conf
/
.htaccess
中,添加
DirectoryIndex index.php index.html
。
|
5.2 数据库连接类问题
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
| Pikachu首页打开提示“数据库连接错误” |
1. 配置文件
config.inc.php
参数错误
2. MySQL服务未启动 3. 防火墙阻止 |
1.
逐项核对
:DB_HOST(127.0.0.1), DB_PORT(3307), DB_USER(root), DB_PWD(root), DB_NAME(pikachu)。
端口是重中之重!
2. 确认PHPStudy的MySQL绿灯亮起。 3. 临时关闭Windows防火墙测试,或添加入站规则允许3307端口。 |
使用
mysql
命令连接失败
|
1. 未将MySQL添加到系统PATH
2. 密码错误 |
1. 使用PHPStudy自带的MySQL命令行工具。
2. 如果忘记密码,在PHPStudy中尝试“重置MySQL密码”功能。 |
导入
pikachu.sql
时报错或乱码
|
1. 文件编码问题
2. 数据库字符集不匹配 |
1. 用记事本另存SQL文件为UTF-8编码。
2. 创建数据库时显式指定字符集:
CREATE DATABASE pikachu DEFAULT CHARSET utf8mb4;
导入前也执行
SET NAMES utf8mb4;
。
|
5.3 XSS后台及其他功能类问题
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
| XSS后台页面空白、报错或无限重定向 |
1. Session配置错误(最常见)
2. PHP版本兼容性问题 3. 代码错误/文件缺失 |
1. 按本文4.3章节,
重点检查并配置PHPStudy的session.save_path
,确保目录存在且可写。
2. 尝试在PHPStudy中切换PHP版本(如7.2, 7.3),Pikachu对PHP7.0-7.4兼容较好。 3. 打开浏览器开发者工具(F12)的“网络(Network)”和“控制台(Console)”标签,查看具体错误信息。可能是PHP语法错误(显示在页面或Network响应中)或JavaScript错误(显示在Console)。 4. 检查后台目录文件是否完整。 |
| 存储型XSS提交后,后台不显示或显示异常 |
1. 数据库写入失败
2. 前后端编码不一致 |
1. 直接查看数据库
pikachu
表中对应的数据表(如
message
),看数据是否成功插入。
2. 确保数据库、PHP文件、HTML页面全部使用UTF-8编码。 |
| 其他漏洞模块(如文件上传)无法正常工作 | 目录权限不足 |
检查Pikachu下用于上传的目录(如
uploads/
)是否有写入权限。在Windows上,给该文件夹添加
IIS_IUSRS
或
Everyone
(仅限本地测试环境)的“修改”权限。
|
5.4 高阶调试技巧
当遇到非典型错误时,可以启用更详细的错误日志来定位问题。
-
开启PHP错误显示 :
-
在PHPStudy中,找到当前PHP版本的配置文件
php.ini。 -
修改以下配置:
display_errors = On error_reporting = E_ALL - 重启Apache。这样PHP错误会直接显示在页面上,方便调试。
-
在PHPStudy中,找到当前PHP版本的配置文件
-
查看Apache错误日志 :
-
日志文件通常位于
D:\phpStudy\Apache\logs\error.log。 - 当页面出现500内部服务器错误时,查看这个日志文件能获得最准确的错误信息。
-
日志文件通常位于
-
使用“一切从简”法隔离问题 :
-
如果问题复杂,创建一个全新的
test.php文件放在网站根目录,内容仅为<?php phpinfo(); ?>。 - 访问这个文件。如果能正常显示PHP信息,说明Web服务和PHP解析基本正常,问题可能出在Pikachu程序本身或数据库连接。如果不能,则问题出在环境配置上。
-
如果问题复杂,创建一个全新的
这套“宝塔面板+PHPStudy”的双环境部署方案,经过我多次在不同Windows机器上的验证,稳定性很高。它成功的关键在于清晰的职责分离:PHPStudy负责提供稳定、干净的服务运行环境,而宝塔则扮演了一个强大的“运维管理助手”角色。对于XSS后台那个老大难问题,核心思路就是确保Session能够被正确写入和读取,无论是通过配置正确的保存路径,还是在本地学习环境下进行适当的代码适配。记住,搭建靶场本身就是一个很好的学习过程,遇到问题并解决它,你对Web运行环境的理解就会更深一层。现在,你的Pikachu靶场应该已经运行起来了,接下来就可以安心地沉浸在各种漏洞的练习和探索中了。如果在搭建过程中还遇到了上面没覆盖到的问题,不妨回头检查一下端口、权限和路径这三个最基础的要素,大多数问题都源于此。


被折叠的 条评论
为什么被折叠?



