很多人第一次接触安全靶场,要么直接上DVWA,要么被推荐各种综合环境,但我个人练下来,真正适合系统过一遍的,其实是Pikachu。这个靶场表面看是个皮卡丘主题的练习平台,内里却把Web安全里最常见的几类问题都做成了独立关卡,每个题目都附带安全编码建议,通关等于同时把攻击思路和修复方案学了一遍,这是很多靶场没做到的。文章会按照我实际通关的顺序,把每个模块的破题思路、关键原理和踩坑点完整过一遍,适合刚开始练靶场的新人、准备安全岗位面试的求职者,以及需要带新人做实训的团队参考。
1. 为什么是Pikachu:靶场选型、部署与运行环境准备
1.1 Pikachu和DVWA、SQLi-Labs等靶场的定位差异
先说结论:DVWA侧重漏洞环境的整体体验,SQLi-Labs是SQL注入专项练习,Upload-Labs是文件上传专项,而Pikachu更像一本Web安全目录。它把暴力破解、SQL注入、XSS、CSRF、RCE、文件包含、文件上传、反序列化、SSRF、越权、目录遍历、敏感信息泄露这些常见问题全部做成了独立页面,且每个页面都明确标注了问题成因和修复建议。
这一点对新手极其重要。我在带人的时候发现,很多人在DVWA里能打通SQL注入,但换个参数名、换个查询位置就懵了,原因是只记住了步骤,没理解原理。Pikachu的设计天然强迫你先看“安全编码”部分,再回到页面去验证,攻击和防御是一起学的。另外Pikachu的题目难度梯度比DVWA更平滑,从最基础的表单暴力破解开始,一直到PHP反序列化、SSRF这种偏进阶的内容,中间没有断崖。
如果你已经玩过DVWA,可以直接把Pikachu当作查漏补缺的清单;如果你是纯新人,建议按Pikachu默认的菜单顺序走,不要跳关。
1.2 Docker部署与手动部署的取舍
Pikachu官方提供了两种常见部署方式:一种是基于PHP集成环境手动搭建,一种是用Docker镜像。我个人更推荐Docker方式,倒不是手动不行,而是手动搭建的坑基本都集中在PHP版本和扩展上,Pikachu的老代码在PHP 7.x和PHP 8.x下表现不一致,有些函数在新版本里被移除或行为变化,会导致页面白屏、功能异常。
Docker部署只需要一条核心命令:
bash复制docker run -d -p 8080:80 area39/pikachu
这里的8080是你本机访问端口,可以按需修改。启动之后,浏览器访问http://127.0.0.1:8080,看到皮卡丘的首页就说明环境起来了。首次使用需要初始化数据库,进入首页后点击“初始化”按钮,Pikachu会自动创建数据库和表结构。
提示:如果你的Docker镜像拉取速度慢,可以先配置国内的镜像加速器,再执行上面的命令。不用纠结镜像名称,Docker Hub上area39/pikachu是维护比较活跃的一个。
手动部署的流程也不复杂,但要注意以下三点:
- PHP版本建议选择7.x,不建议直接上8.x正式环境。
- 需要开启
php_curl、php_mysqli等扩展,缺少curl扩展会导致后面的SSRF模块无法正常发起请求。 - 站点根目录要指向Pikachu的根目录,并且保证
inc目录里的数据库配置文件里的账号密码和你本地MySQL一致。
手动部署时最常见的错误是数据库连接失败,表现为页面能打开但所有题目点进去都报错。这时候优先检查inc/config.inc.php里的数据库配置,确认主机、账号、密码、库名都正确,并保证MySQL已经启动。
1.3 启动失败排查:从端口占用到PHP扩展缺失
启动失败是高频问题。Docker方式下,先执行docker ps -a看容器状态。如果容器一直处于退出状态,用docker logs <容器名>查看日志,多数原因是端口被占用或者镜像内启动脚本执行失败。换个宿主端口通常能解决端口占用问题。
手动方式下,启动失败的表现更丰富:
- 首页能开,但页面显示乱码或空白:大概率是PHP版本兼容问题,换PHP 7.2-7.4试试。
- 打开页面时提示
Call to undefined function ...:说明缺少对应扩展,看函数名去php.ini里开启对应扩展。 - 点“初始化”没反应或报SQL错误:数据库连接或SQL导入权限问题,检查MySQL账号是否有建库建表权限。
我自己曾经遇到过一个问题:Docker里容器正常启动了,页面前端正常,但点击“SQL注入”相关题目时报404。排查了半天,发现是镜像里的路径大小写问题和宿主机挂载目录冲突。如果遇到类似情况,最省事的方式是关掉容器,重新起一个不带额外挂载的干净实例,先确认默认环境没问题,再考虑自定义配置。
1.4 前端页面与数据初始化:先别急着做题
Pikachu首页有两个容易忽略的入口:一个是“初始化”,一个是“安全编码”提示。建议进入环境后,先点一次“初始化”,再开始做题。如果不初始化,部分模块会出现页面能打开但提交后无响应的情况。
另外,Pikachu的每个题目页面下方都会有“提示”,这个不是摆设,而是破题的关键线索。比如暴力破解页面会提示“基于表单的暴力破解”,SQL注入页面会提示“请尝试注入点”。我的习惯是每道题至少先看两遍提示,如果提示看不懂,再看安全编码部分,因为安全代码里会暴露后端是用了拼接还是预编译,拼接必然有注入点,预编译则基本安全。
建议:做题时准备一个表格,记录每道题的类型、注入点、利用方式、修复方案。通关一遍后,这张表就是最好的复习资料。别高估自己的记忆力,靶场题目太多,隔两周就会忘。
2. 从暴力破解到验证码绕过:认证类题目的通关逻辑
2.1 基于表单的暴力破解:Burp Suite抓包与字典构造
Pikachu的第一个实战模
