摘要:本系列文章专为零基础小白打造,从环境搭建到漏洞利用,带你全面吃透 Pikachu 靶场。作为开篇,本文先讲述 Pikachu 的“前世今生”及 Web 安全基础,随后手把手教你在 Windows 上搭建 PHPStudy + Pikachu 集成环境。核心部分聚焦第一个模块——暴力破解,从表单爆破、验证码绕过、Token 防爆破三个关卡,讲解攻击原理、Burp Suite 操作以及防御思路。
一、从一只“电老鼠”说起:Pikachu的前世今生
如果你刚接触网络安全,可能会被各种“靶场”名字搞晕——DVWA、Sqli-labs、Upload-labs、WebGoat……而Pikachu绝对是其中画风最萌、但对新手最友好的一个。它的名字来自《精灵宝可梦》里的皮卡丘,logo是一只黄色电气鼠,看起来人畜无害,实则藏着满满的漏洞等你来“电”。
Pikachu 靶场由中国安全研究员aflz(博客园ID)开发,最早于2018年左右在 GitHub 开源。作者初衷很简单:市面上的渗透测试靶场要么环境难配,要么漏洞类型单一,要么需要一定基础才能玩转,而他想做一个真正适合零基础小白的综合性漏洞练习平台。于是,Pikachu 诞生了——全部采用 PHP + MySQL 编写,单文件部署,一个文件夹丢进 Web 目录就能跑,不用 Docker、不用虚拟机,甚至不用命令行,对 Windows 用户极其友好。
截至2026年,Pikachu 在 GitHub 上已获得超过 4k Star,被无数安全培训课程、高校实验室和个人博客引用。它包含了超过20种常见 Web 漏洞类型,比如暴力破解、XSS、SQL注入、文件上传、CSRF、SSRF、命令注入等,每个漏洞又按难度分成多个子关卡,而且配套了详细的源码注释和防御建议。可以说,Pikachu 就是 Web 安全入门的“教材级”靶场。
接下来,我们就从最基础的环境搭建开始,一步步走进 Pikachu 的世界。第一篇,先搞定暴力破解模块——别小看它,很多生产环境的账号体系就是被这种“笨办法”打穿的。
二、Web安全速成班:你需要先懂的几个概念
在动手之前,我们先花几分钟补一下最基础的 Web 知识。如果你已经了解 HTTP 协议、请求/响应和 Cookie,可以直接跳到环境搭建部分。
2.1 当你打开一个网页,发生了什么?
你在浏览器输入http://example.com/login.php,按下回车:
浏览器将域名解析成 IP 地址(DNS 查询)。
浏览器向服务器 IP 的 80 端口发起TCP 连接。
连接建立后,浏览器发送一个HTTP 请求,内容大致像这样:
GET /login.php HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 ... Accept: text/html服务器收到请求,找到login.php,执行 PHP 代码,生成 HTML 页面,然后返回一个HTTP 响应:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234 <html> <body>登录页面...</body> </html>浏览器解析 HTML,渲染页面,如果有图片、CSS、JS 还会发起额外请求。
浏览器与服务器断开或保持连接(HTTP/1.1 默认持久连接)。
整个过程中,数据在网络上“明文”传输,除非启用 HTTPS。攻击者如果能够截获这些数据包,就能看到你输入的用户名和密码——这就是著名的“中间人攻击”思路之一。
2.2 核心三要素:请求、响应、Cookie
请求由四部分构成:
请求行:
POST /login.php HTTP/1.1请求头(Headers):Host、User-Agent、Cookie 等
空行(分隔符)
请求体(Body):GET 方法通常没有 Body,POST 方法会把表单数据放在这里,例如
username=admin&password=123456
响应也分四部分:
状态行:
HTTP/1.1 200 OK或302 Found等响应头:
Set-Cookie: PHPSESSID=abc123;、Location: http://...等空行
响应体:HTML 代码
Cookie是服务器让浏览器保存的小段数据,用来维持会话状态。比如登录成功后,服务器生成一个 Session ID,通过Set-Cookie返回给浏览器,浏览器下次请求会自动带上这个 Cookie,服务器就能认出你。暴力破解中,很多防御手段就是围绕 Cookie 和 Session 做文章。
2.3 漏洞分类万花筒
Web 漏洞可以按攻击发生的位置分为客户端漏洞和服务端漏洞:
服务端漏洞:SQL注入、命令注入、文件上传、文件包含、反序列化等,危害直接涉及服务器甚至内网。
客户端漏洞:XSS(跨站脚本)、CSRF(跨站请求伪造)、点击劫持等,主要危害用户浏览器。
按利用方式又可分成:
逻辑漏洞:暴力破解、越权、支付篡改、验证码缺陷等,不靠代码注入,而是利用业务逻辑缺陷。
Pikachu 把这些经典漏洞几乎一网打尽。今天我们聊的暴力破解,就属于逻辑漏洞。
三、手摸手搭建Pikachu靶场
3.1 准备工具
PHPStudy(小皮面板):集成了 Apache/Nginx + MySQL + PHP 的一键环境,对 Windows 极其友好。下载地址:小皮面板(phpstudy) - 让天下没有难配的服务器环境!
Pikachu 源码:GitHub 仓库 GitHub - zhuifengshaonianhanlu/pikachu: 一个好玩的Web安全-漏洞测试平台 · GitHub ,可以直接
Code -> Download ZIP。Burp Suite(社区版即可):用于抓包和暴力破解,官网 Download Burp Suite Community Edition - PortSwigger
3.2 安装 PHPStudy
下载 PHPStudy V8.1(或其他新版),双击安装,选一个空间充足的目录(如E:\phpstudy_pro)。安装完成后打开,启动Apache和MySQL。如果端口被占用,可以修改 Apache 端口为 8080 等,这里我们假设用默认 80 端口。
3.3 部署 Pikachu
将下载的pikachu-master.zip解压,得到文件夹pikachu-master,把它重命名为pikachu。
打开 PHPStudy,点击“网站” -> “管理” -> “打开根目录”,会打开类似 E:\phpstudy_pro\WWW的文件夹。把整个pikachu文件夹复制进去。
找到 Pikachu 的数据库配置文件,E:\phpstudy_pro\WWW\pikachu\inc\config.inc.php,修改数据库密码配置
现在访问http://localhost/pikachu/install.php,看到 Pikachu 的初始化界面,点击安装/初始化,脚本会自动创建数据库并导入数据。看到“安装成功”提示,就可以开始闯关了。
四、初探Pikachu:目录结构和使用方法
进入http://localhost/pikachu/首页,左侧是漏洞分类菜单,包括:
暴力破解
Cross-Site Scripting (XSS)
SQL Inject (SQL注入)
文件上传
文件包含
不安全的文件下载
越权
CSRF
SSRF
命令注入
反序列化
XXE
敏感信息泄露
等等
每类下又有小关卡,比如暴力破解下面有“基于表单的暴力破解”、“验证码绕过(on server)”、“验证码绕过(on client)”、“token 防爆破”等。点击即可进入练习。
推荐使用Chrome 浏览器 + Burp Suite组合。Burp 社区版虽然功能有限,但 Intruder(爆破器)足够我们使用。配置代理:
Burp 默认代理
127.0.0.1:8080Chrome 安装 Oasis Proxy 插件,或直接 Win 系统代理设置。
在 Burp 中把 Intercept 置为
Intercept is on即可抓包。
五、暴力破解:只会试密码吗?没那么简单
5.1 什么是暴力破解?
暴力破解(Brute Force),简单说就是不断尝试所有可能的用户名/密码组合,直到试出正确的。如果没有任何防御,攻击者写个脚本自动跑,几分钟就能破掉弱密码。现实中,很多系统加了图形验证码、登录频率限制、Token 等机制,但实现不当仍会被绕过。
Pikachu 的暴力破解模块设计了四个关卡:
基于表单的暴力破解(无防御)
验证码绕过(服务端问题)
验证码绕过(客户端问题)
Token 防爆破?
下面我们逐一拆解。
5.2 关卡一:基于表单的暴力破解
功能描述:一个简陋的登录框,输入用户名密码,成功显示“欢迎”,失败提示“用户名或密码错误”。
【攻击思路】没有任何验证码或频率限制,只需准备一份用户名字典和密码字典,用工具不断 POST 请求即可。Burp Suite 的 Intruder 模块天生就是干这个的。
实战步骤:
打开 Burp,确认拦截开启(Intercept is on)。
在 Pikachu 暴力破解页面输入任意用户名(例如admin)和密码(123456),点击登录。
Burp 捕获到 POST 请求,类似:
在 Burp 中,右键请求 ->Send to Intruder。
切换到 Intruder 模块,Positions 标签。首先点击Clear §,然后选中admin(用户名值),点击Add §;再选中123456(密码值),点击Add §。最后攻击类型选择Cluster bomb(集束炸弹),意思是用户名和密码各自遍历字典,所有组合都试。
切换到 Payloads 标签:
Payload set 1 (用户名):加载用户名字典,可用提供的,但是有九千条左右的数据,可简单输入admin, root, test, user,pikachu,每行一个。
Payload set 2 (密码):加载常用密码字典,比如123456, password, admin, 888888, pikachu,000000,aaabbb,abcabc,123123,abc123,123abc等。可自己创建 txt。
点击右上角Start attack,会弹出新窗口,显示所有请求。观察每个请求的响应长度(Length)或状态码。如果某个响应的长度明显不同(比如说其他的都显示用户或者密码不存在,而登录成功是我们想要的,那它的响应长度就明显比较短),那可能就是登录成功的组合。找到正确密码后,在响应中查看返回内容,确认登录成功。
防御方案:
增加图形验证码,且后端必须校验。
限制单 IP 单位时间内的登录尝试次数,如 5 次错误锁定 15 分钟。
密码复杂度强制要求,增加爆破时间成本。
使用双因素认证(2FA)。
记录日志,触发告警。
5.3 关卡二:验证码绕过(on server)
这一关,登录框多了一个验证码输入框,旁边显示一张图片验证码。标题是“验证码绕过(on server)”,暗示服务端有验证码校验,但可能存在缺陷。
【为什么叫“绕过”?】常见绕过场景:
验证码不刷新:每次登录请求都使用同一个验证码,直到成功或手动刷新。攻击者可以手工输入一次验证码,抓包后多次重放。
验证码验证后未销毁:验证通过一次后,Session 中的验证码没清空,导致同一个验证码可以反复用。
验证码以文本形式返回在页面中。
我们来试试。
攻击演示:
打开页面,看到验证码为abcd(举例),输入任意用户名密码和该验证码,登录一次。
Burp 拦截这个请求,Send to Intruder。在 Positions 中,只标记用户名和密码为变量(§),验证码值保持刚才输入的正确值不变。攻击类型选 Cluster bomb。配置 Payloads,用户名和密码字典如前。
发起攻击。观察结果,如果很多请求返回的长度与登录失败一致,但有几个长度不同,说明同一个验证码被多次复用,造成了绕过。
进阶一点:有些系统验证码靠 Session 校验,但 Session 与验证码绑定,如果你每次请求都带相同的 Cookie 和验证码,后端可能因为验证码正确就放行,而不检查使用次数。Pikachu 这一关就是模拟这种情况。
防御方案:
每次验证码验证后,无论成功与否,立即销毁该验证码的 Session 值。
设置验证码有效期(如60秒),超时失效。
验证码复杂度要防止 OCR 识别(扭曲、干扰线、粘合等)。
结合频率限制,单 IP 连续失败时强制验证码且加大难度。
5.4 关卡三:验证码绕过(on client)
这一关标题说明问题在客户端。打开页面,你会发现输入框下方并没有验证码图片,但是查看网页源代码,可能会看到一段 JavaScript 生成验证码或者干脆把验证码写在隐藏域里。更常见的情况是:前端生成验证码,但后端没做校验。
【攻击思路】直接发送不带验证码或任意验证码的请求,完全绕过。或者分析前端 JS,提取生成规律。
演示:
随意填写用户名密码,验证码框要敲正确,区分大小写。
抓包,Send to Intruder,直接去掉验证码参数,或者保持固定值,只爆破用户名和密码。因为后端根本没有检查验证码,所以暴力破解畅通无阻。
如果是 JS 生成验证码但需要匹配,可以分析 JS 代码找到生成算法,用 Python 模拟生成正确验证码,实现自动化爆破。不过 Pikachu 这里简化了,后端并不校验 captcha 字段,所以随意即可。
防御方案:
必须在服务端生成和校验验证码,客户端仅展示。
不要在客户端以明文、隐藏域、可预测算法传递验证码答案。
验证码图片的生成逻辑放在后端,不暴露算法。
5.5 关卡四:Token防爆破?
这一关名称带个问号,意思就是“加了 Token 就一定防得住吗?” 这是个经典案例:系统为每个登录表单生成一个一次性 Token,随页面一起下发,提交时 Token 必须匹配。如果 Token 机制实现有误,依然可被爆破。
Pikachu 的做法:登录页面生成一个隐藏的token值,提交时带上。后端校验 token 的有效性,一旦使用过一次即失效。但是!这个 token 是写在页面中的,攻击者只需要在每次爆破请求前,先获取一个页面,提取新的 token,然后带着它去登录。这样就能绕过后端的一次性限制。
攻击演示:
抓取一次登录请求,Send to Intruder,Positions 标记密码为变量,用户名设置为固定admin(或者先设置用户名为变量,密码为固定值,先探测出用户名,然后再破解密码),token 值标记为变量。攻击类型选择 Pitchfork(叉子)
payload区域设置
设置token集之前需要做些准备
接下来配置token集
Pikachu 这一关特意告诉我们:仅仅加 Token 是不够的,必须保证攻击者无法轻易拿到有效的 Token。例如,可以绑定 IP 频率、结合验证码、或使用难以预测的 CSRF Token 并确保同源检查。
防御方案:
Token 必须随机、不可预测、绑定 Session。
配合验证码使用,打断自动化获取 Token 的流程。
限制每个 Token 的请求次数。
加入浏览器指纹、行为分析等高级手段。
六、暴力破解模块总结与防御清单
通过以上四个关卡,我们总结出以下攻击与防御对照表:
| 漏洞场景 | 攻击方法 | 防御措施 |
|---|---|---|
| 无任何防护的表单 | Burp Intruder 直接爆破 | 增加验证码、登录限制、账户锁定 |
| 服务端验证码不销毁 | 固定验证码多次爆破 | 验证后立即销毁、设置有效期 |
| 客户端验证(无后端校验) | 删除验证码参数或任意值 | 关键校验必须放在服务端 |
| Token 防爆破但可重复获取 | 每轮请求前获取新 Token | Token 绑定用户/IP、频率限制、验证码 |
暴力破解作为最“笨”的攻击方式,恰恰也是最容易被忽视的威胁。统计显示,弱密码、默认密码依然是数据泄露的头号原因之一。理解它的利用方式和防御思路,是安全从业者的基本功。
七、总结
我们从 Pikachu 的起源讲起,回顾了 Web 基本通信原理,详细演示了 PHPStudy 集成环境的搭建过程。重点剖析了暴力破解模块的四个经典场景:无防护表单爆破、服务端验证码复用绕过、客户端验证绕过以及 Token 机制下的自动化破解。
每道关卡都是真实世界漏洞的缩影。请务必亲手操作,打开 Burp,抓包分析,用字典跑一遍。只有亲手爆出密码的那一刻,你才会真正理解“攻击者视角”。
重要声明:本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。
如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。