ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Pikachu靶场实战指南:从环境搭建到漏洞挖掘全流程解析

2026/9/9 2:23:12 拓冰建站 浏览量
Pikachu靶场实战指南:从环境搭建到漏洞挖掘全流程解析 简介Pikachu靶场资源包是一份面向网络安全学习者与渗透测试初学者的实践型漏洞演练环境压缩包共284个文件、总大小3.52MB。包内以111个PHP脚本为主干配合66个JavaScript文件、40张PNG图片、28个CSS样式表以及字体、文档等辅助资源搭建起完整可运行的Web安全实验平台。资源精心设计了SQL注入、XSS跨站脚本、CSRF跨站请求伪造、文件包含、命令注入、权限提升等高频漏洞模块每个模块包含独立的实验页面与挑战目标让使用者能够在本地环境反复进行攻击复现、流量观察与防御配置。通过亲手触发漏洞并分析成因读者可以深入理解漏洞原理、利用手法和修复策略构建体系化的安全思维。压缩包另含Dockerfile、说明文档及备份文件便于一键部署和查阅。目前已有1548人学习下载适用于高校信息安全实训、企业安全培训以及CTF竞赛前的针对性练习是提升Web攻防实战能力的可靠素材。1. 为什么我从DVWA转向Pikachu靶场做日常训练做Web安全这一行手里没几个顺手的靶场心里总是不踏实。早期我主要用DVWA练手但用了一段时间后慢慢发现一个问题DVWA的漏洞类型虽然覆盖面广但题目和实际业务场景的贴合度不够很多漏洞的触发方式太过“理想化”练完之后面对真实站点还是有种无从下手的感觉。后来在同行交流群里有人提到Pikachu靶场当时我还愣了一下——这不是宝可梦的名字吗下载下来跑通之后才明白这个靶场跟宝可梦还真有那么点神似一个关卡一个关卡地通关每一关都像抓一只不同属性的小精灵属性不同、打法不同、弱点也不同。更关键的是Pikachu在漏洞设计上明显更贴近国内Web应用的实际开发场景尤其是SQL注入、XSS、越权这几类漏洞的payload思路拿到真实渗透测试中去参考价值非常高。这套靶场本身是基于PHP开发的部署方式很灵活既能跑在PHPStudy这种集成环境里也能手动配置Apache或Nginx环境运行。它的目录结构也很清晰每个漏洞模块都有独立的页面和配套的源码说明甚至还在页面上标注了漏洞成因和利用思路对新手友好对老手来说也是个很好的知识梳理工具。我在本地环境里完整跑通了这套靶场从环境搭建到逐个漏洞模块的挖掘利用再到最后的源码审计大概花了一周左右的业余时间。这篇文章就把我实际搭建和通关过程中的心得体会完整记录下来包括在哪里踩过坑、哪些模块值得细挖、哪些漏洞类型表面上简单但真正深入之后会发现不少门道希望能给正在刷靶场的你提供一条少走弯路的参考路径。2. 本地搭建Pikachu容易被卡住的几个环节2.1 环境选择PHPStudy确实是最省事的方案Pikachu靶场的运行依赖Apache、PHP和MySQL三件套。如果你之前装过DVWA环境基本都是现成的直接复用就行。如果是从零开始我个人建议直接装PHPStudy这也是网上大部分教程推荐的方式不是因为跟风而是PHPStudy把Apache、PHP、MySQL的版本管理和启动开关集成到了一个面板里对新手来说容错率极高。关于PHP版本这里有一个非常关键的细节Pikachu的代码里用到了不少老式PHP写法在高版本PHP环境下会出现报错甚至直接白屏。网上的教程众说纷纭有的说用PHP 5.4有的说用PHP 7.x也行我自己实测下来的结果是这样的PHP 5.4到5.6运行最稳定几乎没有兼容性问题推荐首选。PHP 7.0到7.3能跑但部分页面会抛出一堆弃用警告比如反序列化那一关会出现create_function()相关报错虽然不影响漏洞利用但很影响阅读。PHP 7.4以上不建议部分模块直接白屏排查起来很费劲。有同行用PHP 7.4硬跑最后是在php.ini里关闭了报错显示才勉强能用但那属于绕路走没必要。直接切到PHP 5.6省心一整晚。2.2 数据库初始化最容易翻车的地方Pikachu靶场自带了一个init.php脚本用来初始化数据库理论上你访问http://localhost/pikachu-master之后页面会自动跳转到初始化流程。但这里有个极其常见的坑如果数据库的账号密码不是默认的root和root初始化就会卡在连接数据库这一步页面白屏或者报错什么都不提示。我一开始用的是自己本地已经装好的MySQL密码早就改过结果卡了半天才反应过来是数据库连接配置的问题。解决方式有两种把MySQL账号密码临时改成root/root初始化完成后再改回去。简单粗暴适合懒人。修改Pikachu的配置文件在inc目录下的config.inc.php里把数据库账号、密码、端口改成你自己的实际配置。这种方式更适合长期使用自定义环境的场景。另外提醒一句如果之前已经装过其他靶场MySQL的3306端口可能已经被占用Pikachu的初始化脚本默认连接3306端口改端口的话同样需要同步修改配置文件。数据库连接这块弄明白之后后面基本就畅通了。2.3 目录部署位置和URL访问路径我见过不少人在部署Pikachu时把压缩包解压后直接丢到Apache的htdocs目录下然后访问http://localhost/pikachu-master/index.php这本身没问题。但我建议解压后把pikachu-master改名为pikachu原因有两个目录名越短URL越干净后面的通关过程中反复输入路径时能省不少事。有些版本的Pikachu页面里写死的跳转路径是基于pikachu这个目录名的如果你保留pikachu-master部分链接点击后会404。部署完成后访问http://localhost/pikachu/看到Pikachu的首页就说明环境起来了。页面顶部会有各个漏洞模块的导航链接从暴力破解到RCE全覆盖整体交互界面很简单没什么花哨的东西但这恰恰是它贴近真实业务的地方——真实后台就是长这样的。3. SQL注入与XSS训练先从看得见的漏洞摸清套路3.1 数字型注入和字符型注入的差异在Pikachu里体现得很清楚Pikachu的SQL注入模块分了数字型、字符型、搜索型、报错注入、宽字节注入等多个子关卡。我第一次通关的时候就意识到这个靶场的设计逻辑跟DVWA有很大区别——DVWA直接给了你一个输入框和明确的提示而Pikachu尽量模拟真实表单的样子你需要自己判断漏洞类型自己构造payload。数字型注入那关提交的是一个ID直接在输入框里填1页面显示对应信息填1 and 11仍然正常填1 and 12页面内容消失。这就是数字型注入的经典特征参数直接拼进SQL语句的数值位置不需要引号闭合。手工判断的方法就是逐层递进从and 11到order by查字段数再到union select回显数据一气呵成。字符型注入那关逻辑上稍微绕一点因为参数被单引号包裹你提交的值需要先闭合引号。比如输入1 order by 3--注意最后的--在URL编码后会被解析为注释符这样就能把后面的SQL语句注释掉。不少人第一次在字符型注入这里栽跟头其实是没理解“闭合”这个概念引号闭合就是让后台拼接出来的SQL语句符合你的预期而--注释符就是把原本SQL语句中多余的尾部代码废掉。通完这两关后可以顺手做一个小练习在报错注入那一关尝试使用updatexml函数比如1 and updatexml(1,concat(0x7e,database()),1)--页面会把数据库名直接报错回显出来。虽然updatexml这种报错注入方式在实战中需要满足MySQL的报错回显条件但通过这个练习能很好地理解“函数参与拼接并被触发报错”的底层原理。3.2 XSS三连反射型、存储型、DOM型各练什么XSS模块被Pikachu分成了反射型、存储型、DOM型和盲打四个子练习这个拆分对学习XSS非常有帮助因为在真实渗透中不同XSS类型的检测思路和利用路径差别很大。反射型XSS那关输入什么内容页面就在当前位置原样显示什么内容但响应里能看到你输入的payload被拼接到HTML中。标准的验证方式就是输入scriptalert(document.cookie)/script看弹窗是否出现。这里我想强调一个容易被忽略的操作细节反射型XSS在浏览器里验证弹窗成功之后不要只截个图就完事了要拔掉Burp Suite或浏览器开发者工具看一下请求中payload的编码形态。如果参数里有%3Cscript%3E这类编码后的内容说明服务端代码本身没有做输出过滤你看到的是浏览器解析后的效果——这个判断对于后续向甲方报告漏洞严重程度非常重要。存储型XSS那关是一个留言板输入的内容会被保存到数据库里其他用户访问留言板时也会触发。这里要注意的是存储型XSS的危害核心在于“持久化”payload会被多次触发所以实际操作中需要反复测试payload的变形比如尝试不同标签属性、事件处理器、大小写混淆等手段测试服务端到底过滤了什么、没过滤什么。Pikachu这关给了很好的练习空间你可以把img srcx onerroralert(1)、svg/onloadalert(1)这类常见payload一个接一个地试看看有哪些能被正常执行。DOM型XSS那关考察的是前端JavaScript代码中的DOM操作payload实际上在服务端传输过程没有变化漏洞发生在浏览器端的document.write或innerHTML操作中。这种XSS类型在自动化扫描工具中经常漏报必须结合浏览器开发者工具手工分析代码逻辑。通Pikachu的DOM XSS关你能养成一个很好的习惯看到页面上有“URL参数直接写入DOM”这种模式时本能地警觉起来。3.3 盲打关的意义别只盯回显XSS盲打那个子关卡设计得很有意思前台看起来就是一个平平无奇的留言表单你提交payload之后页面上没有任何反应。但如果后台管理员查看了这条留言触发XSS并能把数据回传到某个接收端。这一关建议配合一个临时的远程接收脚本来做如果没有公网服务器最简单的方式是本地起一个监听端口比如用nc -lvnp 8080然后在payload里把数据往http://127.0.0.1:8080打。提交payload后再去后台地址触发管理员的查看动作就能看到数据回传成功。这个练习对实战的意义在于很多时候你向目标站点插入的XSS脚本不会在你眼前的页面上被执行而是等后台某位管理员操作时才会触发。如果只盯着当前页面的回显去判断漏洞是否存在八成会漏报。4. 暴力破解与越权最贴近实战业务的漏洞逻辑4.1 暴力破解关了但不妨用Pikachu把思路理清楚Pikachu的暴力破解模块包含基于表单的暴力破解和带验证码的暴力破解两关。严格来说现代Web应用中纯靠密码暴力破解成功的概率已经很低了但这关的设计思路仍然值得走一遍因为它考察的是“你有没有能力判断目标系统的认证机制是否可被自动化攻击”。第一关很简单Burp Suite抓包后把请求发送到Intruder模块在密码参数上设置payload位置加载一个弱口令字典开始跑就行。但我建议不要只是跑完看结果要做两个额外动作观察响应长度的差异。Burp Intruder跑完后正常密码和错误密码的响应长度一定不同。这个思路放到真实场景中同样适用——登录成功和失败的响应体差异是否足够明显决定了自动化爆破的效率和准确性。分析请求中是否带有token或CSRF令牌。如果在抓包时发现登录请求里带了随机的hidden参数那么单纯的密码字典爆破直接失效需要先提取token再更新到请求中。第二关的验证码机制在Pikachu里其实是存在逻辑缺陷的验证码只校验一次而且校验之后没有销毁也就是说同一个验证码可以反复使用。我通关时是用Python脚本先请求一次页面解析出验证码值然后带着固定的验证码去循环提交密码。这个思路对应到实战里就是常见的“验证码不失效”漏洞。虽然现在很多系统已经修复了这种低级问题但偶尔还是能在一些老系统或者内部系统里碰到。4.2 越权漏洞Pikachu里最值回票价的一个模块越权漏洞在Pikachu里被拆成了水平越权和垂直越权两个子练习通过这两个关卡你对“权限”这个概念的理解会上升一个层级。水平越权的场景是一个用户信息查询页面。你在登录用户A之后系统返回了A的个人信息但如果把URL里的用户ID直接改成B的ID就能看到B的信息这就是典型的水平越权。这关的核心教训是服务端在查询数据时只用了ID作为条件而没有校验当前登录用户是否对这个ID拥有访问权限。在真实渗透测试中这种漏洞一旦确认影响面通常是整个用户库危害等级一般在高危以上。垂直越权的练习场景是一个后台管理功能普通用户直接访问管理员的URL就能执行管理操作。这关建议同时开启Burp Suite记录请求因为关键在于观察不同角色在访问同一个功能点时请求方式有什么差异是否存在前端隐藏、后端不校验的情况。我在实际刷这一关时最大的感触是越权漏洞的挖掘不像SQL注入那样依赖payload和语法它更依赖测试者对业务逻辑的细心程度。整个测试过程要不停地问自己如果我把这里的ID换掉会发生什么如果我用另一个账号的Cookie访问这个URL会怎样这种思维方式的训练对之后做实际渗透测试项目的价值远比多跑几个工具要大。4.3 目录遍历与文件包含别忽略配套的“小关卡”Pikachu的目录遍历和文件包含模块虽然不像SQL注入和XSS那样经常被点名但我觉得这两个模块同样值得花时间过一遍因为它们和真实服务器的文件系统交互紧密。目录遍历那关通过修改URL中的路径参数可以直接读取服务器上的敏感文件。通常是在参数里尝试../../../../etc/passwd这类路径穿越串不断调整层级深度直到文件内容回显出来。这一关的关键在于理解路径拼接的底层逻辑如果参数直接被拼接到文件路径中且没有过滤那么../就能逐级跳出限制目录。我自己练习时会同时用Burp的Repeater手工调整路径深度练习完对“路径规范化”这个概念有了很直观的理解。文件包含漏洞在Pikachu里是有源码可看的。本地文件包含很容易判断——参数可控且直接带入include()之类的函数就能读源码。我在搞明白本地文件包含后也顺手试了远程文件包含但PHP配置里allow_url_include默认是关闭的这个点需要注意别花了半天配置远程包含环境结果发现是php.ini的开关没开——这种情况十有八九都是新手踩过但不会说的坑。5. 反序列化与RCE入门最难啃的两块硬骨头5.1 反序列化漏洞从读懂那行payload开始反序列化应该是Pikachu靶场里劝退率最高的模块很多人卡在这里问题不在于概念难懂而在于PHP的反序列化payload长得太像乱码看着就没有读下去的欲望。Pikachu这关的逻辑模拟了一个真实场景用户提交的序列化数据被反序列化后直接传给了一个危险函数。刚开始刷的时候不要急着构造自己的payload先按下面的顺序走一遍查看页面上提供的源码片段找到反序列化入口和可能被利用的危险函数比如call_user_func()。理解序列化字符串的结构O:4:Test:1:{...}中O代表对象4是类名长度Test是类名后面的数组里存的是属性名和值。把这段结构搞清楚后面所有的构造都顺理成章。修改序列化字符串中的属性值提交后观察页面行为变化。Pikachu这个模块更侧重“理解反序列化后如何触发代码执行”这个过程。建议多花点时间跟代码里的__construct、__destruct、__toString这些魔术方法熟悉一下因为真实的PHP反序列化漏洞利用几乎都是靠魔术方法串联起来的。我在本地环境中把Pikachu的反序列化payload做了两遍手工构造一遍是改属性值触发一遍是调整对象层级做完之后再回去看一些公开的PHP框架反序列化漏洞分析文章理解成本直线下降。5.2 RCE漏洞命令执行与代码执行要分开看RCE模块在Pikachu里被分成了“ping”和“eval”两类分别对应系统命令执行和PHP代码执行这个区分非常重要因为很多新手会把两者混为一谈。ping那关是一个在线ping工具的模拟输入IP地址后后台执行ping命令。如果输入的内容没有被过滤直接用分号、管道符或换行符拼接新的命令就能实现命令注入比如127.0.0.1; whoami或127.0.0.1 | dir。在Windows环境下用|拼接在Linux环境下用;或这个差异在刷靶场时就要形成记忆。eval那关是后台直接把输入的内容作为PHP代码执行输入phpinfo();就能看到PHP的配置信息。代码执行漏洞的危害通常大于命令执行因为你可以直接调用系统函数、读写文件、连接数据库相当于获得了服务器的部分控制权。刷这两个模块时我建议打开源码对比查看——Pikachu的RCE模块代码非常简单一眼就能看出漏洞成因。看过源码之后再去构造payload你就会牢牢记住这类漏洞的本质不是“输入了什么”而是“输入的内容被当成了什么执行”。这个认知比会打一个靶场重要得多。5.3 不安全的文件下载与上传边界类的漏洞更考细心文件上传这块很容易被初学者踩坑因为靶场里上传一个webshell拿到返回值就觉得自己已经“搞定上传漏洞”了。但Pikachu的文件上传模块分了客户端校验和服务端校验两关前者的校验逻辑就在前端JavaScript里绕过方式很简单——直接禁用JS或者用Burp改包就能绕过后者则要在服务端过滤逻辑上做文章比客户端校验复杂不少。Pikachu这部分其实没有把内容校验、解析漏洞这些高级玩法全部放进来但它把“前端校验和后端校验的区别”展示得很充分。我建议刷完这个模块后自己做一个小总结以后遇到文件上传功能时第一件事是判断校验发生在客户端还是服务端第二件事是观察服务端过滤了哪些内容——只拦扩展名的、只拦MIME类型的、还是对文件内容做了二次校验不同过滤强度的绕过思路完全不同。6. Pikachu通关后的下一步规划建议Pikachu这套靶场如果你能完整走一遍相当于把Web安全的基础漏洞类型系统性地梳理了一遍。但我要泼一盆冷水通关Pikachu只是入门离实战还有很长一段路。通关之后下一步怎么走我的建议是按照“渗透测试全流程”的思路来串联已有知识。Pikachu的每个模块是独立的但在真实渗透中SQL注入、XSS、文件上传、越权这些漏洞往往会在一个站点里交替出现而且还要考虑漏洞组合利用——先通过SQL注入拿到管理员密码再通过后台文件上传拿webshell最后通过命令执行漏洞做权限维持这才能构成一条完整的攻击链。如果你想在此基础上继续深入我强烈推荐做这样几件事把Pikachu的源码完整读一遍尤其是SQL注入和反序列化模块的PHP代码理解每一处漏洞背后的代码逻辑。用Burp Suite的新手训练靶场或者本地搭建DVWA做对比练习重点观察同一个漏洞在不同代码实现下的触发差异。搭建一台Linux虚拟机把Pikachu部署到Linux环境中再刷一遍因为命令执行和文件包含这类漏洞在Windows和Linux环境下的表现差异非常明显。我在刷完Pikachu之后最大的收获不是掌握了多少个payload而是慢慢养成了一种思维习惯拿到一个Web页面时会下意识地分析它的每一个交互点背后对应的代码逻辑思考如果我是开发者会怎么实现这个功能哪些环节可能留下隐患。这种思维方式一旦形成刷任何靶场都会越来越快看真实站点的代码审计也不会再觉得无处下手。Pikachu是一个很好的起点但它只是起点。希望这篇通关记录能帮你跳过我在环境配置和概念理解上踩过的坑把更多精力放到真正值得深入研究的漏洞原理和利用链构造上。本文还有配套的精品资源点击获取