
直接实操过Pikachu靶场的人应该都有这种体会它不像DVWA那么“温和”也不像DVWS那种纯漏洞环境那么单调而是把常见Web漏洞按场景拆开每个模块都带交互和数据流非常适合拿来练Burp Suite的抓包、改包、重放、爆破这一套基本功。这篇文章不打算讲泛泛的“什么是Burp”而是用通关Pikachu的真实路径把从暴力破解到文件上传这一路会踩的坑、容易被忽略的细节、以及排查思路完整捋一遍给正准备上手的新手一个可以直接照着走的实操路线。这篇内容适合三类人刚装好Burp Suite但不知道从哪个靶场下手的初学者已经刷过一部分靶场但总在拦截、编码、绕WAF这些环节卡住的人以及想带新人入门需要一份带避坑点的实战参考的带队者。整个通关过程全部在本地靶场环境完成不涉及任何真实目标所有操作只围绕漏洞原理、请求/响应分析、绕过技巧和修复建议展开。1. 内容整体设计与思路拆解1.1 为什么要选Pikachu作为Burp Suite的练习靶场很多新手一上来就对着DVWA的“Command Injection”或者“SQL Injection”猛练结果发现要么是环境太老、PHP报错一堆要么是关卡难度跳跃太大Burp的Proxy还没来得及熟悉就陷入了“不知道哪里出错”的僵局。Pikachu的设计思路不太一样它把漏洞场景拆成了“暴力破解”“XSS”“CSRF”“SQL注入”“越权”“文件上传”等独立模块每个模块内部又有清晰的关卡递进比如“基于表单的暴力破解”和“带验证码的暴力破解”拆开练。这种颗粒度非常适合配合Burp Suite的各个功能去逐个击破。另外一点Pikachu的环境依赖非常简单。它就是一个PHP项目只需要Apache/Nginx加MySQL就能跑起来。比起那些要Docker Compose拉好几个容器的靶场Pikachu本地部署的故障点少很多对新手来说很不友好——我这里说的“不友好”是褒义因为在一个足够简单、可控的环境里你才能把注意力全部放在Burp的请求流程和漏洞原理上而不是浪费在折腾环境本身。注意Pikachu自带的部分漏洞场景在真实环境中已经很难直接利用但作为理解原理和练习Burp操作方式的载体它的价值依然很高。尤其适合练习“如何分析一个请求”“如何判断漏洞触发点”“如何构造有效载荷”。1.2 用Burp Suite通关的整体思路先抓包、再分析、后构造Burp Suite在Pikachu靶场上的核心作用可以归纳成一句话把浏览器和服务器之间的HTTP交互透明化然后让你能在中间做任何修改。整个通关路径如果画成一条线大概是这样的启动Burp配置浏览器代理确认能抓到Pikachu的HTTP请求。针对每个漏洞模块先正常操作一遍抓取基线流量搞清楚请求里哪些参数是可变的、哪些是关键字段。用Repeater对关键请求做手动修改测试不同参数值、不同编码方式、不同请求方法。使用Intruder做自动化测试比如暴力破解的用户名字典、密码字典或者文件上传时对文件名/Content-Type做fuzz。综合分析响应状态码、响应体长度、报错信息判断漏洞是否真的能触发。最后回到漏洞成因和修复建议上理解这个漏洞是怎么被引入的。这套思路看起来简单但实操中有一个关键细节经常被新手忽略不是所有需要改的请求都能在Proxy里直接看到有些场景需要你先在Burp里手动转发或者修改Host头、Content-Length、Cookie等信息才能真正到达漏洞触发点。比如Pikachu的越权模块普通操作只能看到自己的数据但你在Burp里改一下参数值就能看到其他人的数据这就是“越权”的本质。1.3 为什么推荐用社区版Burp Suite就够了不少新手第一反应是去找Pro版觉得功能多才安心。实际上通关Pikachu社区版完全够用核心功能一个不缺Proxy、Repeater、Decoder、Comparer以及Intruder的基础模式。Pro版多的主动扫描、Burp Scanner这些功能在这个阶段反而容易让你形成“扫描器依赖”弱化手动分析请求的能力。Pikachu这种靶场最大的价值就是让你理解“为什么会漏洞”“漏洞长什么样”而不是让你学会“按一下扫描按钮然后看报告”。我用社区版把Pikachu的暴力破解、XSS、SQL注入、越权、文件上传全部通关过没有一次因为功能缺失而卡住。需要用的“字典”完全可以从本地生成或从开源项目获取没必要一开始就依赖商业功能。2. 环境准备与开局配置2.1 Pikachu靶场的本地部署Pikachu的部署方式根据你的系统环境略有差异。最简单的方案是直接装一个集成的PHP环境比如Windows下的小皮面板、macOS下的MAMP或者Linux下直接用apt装Apache、MySQL、PHP。项目本身不需要networking配置也不需要额外的域名绑定放在网站根目录下访问http://localhost/pikachu即可。数据库初始化是新手最容易卡住的一步。Pikachu需要在MySQL里创建一个数据库然后导入项目根目录下提供的SQL文件。这里有一个非常容易踩的坑PHP版本太新会导致MySQL连接失败。我遇到过最典型的情况是PHP 8.x下面老版本mysqli函数行为变化导致初始化页面白屏解决办法是换用PHP 7.4版本或者修改数据库连接配置里不支持的方法。启动页面会显示“初始化”入口点了之后它会自动建表、插入初始数据。初始化完成后页面会显示所有漏洞模块的入口这时候就可以开始配置Burp了。如果你看到数据库连接报错优先检查MySQL服务是否启动、数据库账号密码是否和配置项一致这两点占90%的故障原因。2.2 Burp Suite与浏览器的代理配置Burp Suite默认监听127.0.0.1:8080。浏览器侧我建议直接用Firefox单独配一个带代理的Profile不要动全局系统代理这样日常上网和靶场操作互不干扰。Firefox设置里找到“网络设置”手动配置代理HTTP代理填127.0.0.1端口填8080勾选“同时代理HTTPS”然后访问http://burp下载CA证书安装到“证书机构”里这样HTTPS流量才能被正常解密。这里有个细节容易被忽略安装CA证书时一定要确认它被授予了“信任此证书以标识网站”的用途。如果安装之后Burp的Proxy面板里还是只能看到CONNECT请求看不到真正的GET/POST内容基本就是证书信任没生效。还有一个常见问题是浏览器插件冲突比如某些广告拦截插件会直接阻断对burp域名的访问导致证书根本下载不下来。2.3 验证代理链路是否正常配置完成后先不要急着去点靶场功能先在Burp的Proxy-HTTP history里确认目标流量。具体操作是浏览器里访问Pikachu首页然后回到Burp看到一条GET /pikachu/index.php的请求记录展开看Raw标签里的请求头、响应头确认Host、User-Agent、Cookie这些字段都在就说明代理链路已经完全打通。如果你在这里发现请求只有TCP连接记录没有HTTP应用层数据通常就是证书问题或代理端口被占用。检查方法很简单换一个端口比如8081重新配代理再访问一次八成能解决如果还不行看看是不是系统里装了别的代理工具占用了8080端口。在Linux/macOS下可以用lsof -i:8080查端口占用Windows下用netstat -ano | findstr 8080。3. 暴力破解模块通关全记录3.1 基于表单的暴力破解Burp抓包与Repeater分析Pikachu的暴力破解模块第一关是“基于表单的暴力破解”提交方式是POST表单字段通常是username和password点击登录后Burp会抓到一条POST请求。把这个请求发送到Repeater点发送响应里会直接显示“登录失败”或者“用户名或密码错误”之类的提示。这个关卡的目的不是让你真的爆破而是让你理解“功能本身没有做任何防爆破机制”。你可以先手动改一下密码观察响应是否出现差异然后把它发送到Intruder把username和password两个参数设为payload位置。这里要说明一点不需要两个变量都爆破Pikachu内置的用户名列表是有限的而且极大概率就是admin、test这种你可以固定usernameadmin只对password做字典爆破效率更高。实操心得真正动手时建议先把响应码和响应长度加到Intruder的Settings选项里勾选“Grep-Match”并把“登录成功”这个关键词放进去这样每次爆破的结果都会直接标注是否有匹配项不需要肉眼看几千条响应。3.2 带验证码的暴力破解有没有绕过思路第二关是“带验证码的暴力破解”很多新手在这一关会把验证码当作不可逾越的障碍其实Pikachu的这个关卡有一个典型的逻辑漏洞验证码的校验和登录表单的校验是分开的而且验证码不强制刷新。什么意思就是你可以先正常获取一次验证码然后在抓包里把这个验证码的参数固定住反复提交登录请求只要服务器在同一个会话里没有强制更新验证码你就可以带着同一个验证码做无限次爆破。用Burp实现这个操作非常直接。先正常登录一次把一个带验证码的POST请求抓到发送到Intruderpayload位置设置在密码字段验证码字段的值保留你刚才看到的那四个字符不要设为变量也不需要重新获取。这样爆破过程中服务器校验验证码是通过了爆破点只集中在密码上。这里要特别提醒一下这个绕过技巧只适用于这个关卡设计的“验证码不刷新”漏洞真实系统中大部分验证码都会随会话或提交次数刷新千万别把这个经验直接搬到真实系统上去。学习这个关卡的重点是理解一个安全机制验证码如果设计得不完整会如何被攻击者绕过以及该怎么设计才有效验证码应随会话绑定、一次性使用、失败后强制刷新。3.3 token防爆破Base64解码的隐藏细节Pikachu的第三个暴力破解关卡引入了token机制。每次请求都会带一个token参数正常逻辑下这个token是一次性的每次刷新页面或请求都会生成新token攻击者如果每次爆破都要重新获取token爆破效率会大幅下降。但这个关卡有一个典型设计缺陷token是放在表单里一起提交的而且生成方式没有与会话状态强绑定。在实际操作时我建议用Burp的“Extract from response”正则提取功能来处理这种场景。具体做法是先用Burp访问一次登录页面响应里能找到一个token字段的值在Intruder的Payload设置里选择“Recursive Grep”类型从每次登录请求的响应中自动提取新的token作为下一次请求的参数值。这个操作是学习Burp高级用法的好机会。它涉及到一个关键点Intruder的Payload Processing里可以设置“提取正则”而请求参数中token的位置必须和提取出的值一一对应。如果提取的token总是差几位需要看一下HTML源码里token字段是不是有HTML实体转义比如amp;之类需要先解码再使用。3.4 暴力破解的字典准备与命中率优化爆破能不能成功字典质量占了很大比重。Pikachu作为靶场它的账号密码都藏在初始数据里不是纯随机字符串所以字典里包含常见弱口令比如admin、123456、password、qwerty、admin888这类的命中率极高。不建议拿那种几十GB的全量字典去跑一是慢二是没有必要。小字典跑完只需要几分钟足够让你明白Intruder的工作方式。还有一个优化点如果你知道目标站点用的PHP那么在爆破时可以把候选密码同时做一次MD5加密变形再提交。因为部分站点的登录逻辑是先对密码做MD5再比对数据库。Pikachu的关卡里未必用得上但如果你后面转到其他靶场这个思路会非常常见。Burp的Payload Processing里有一个“Hash”选项可以直接选MD5一步到位。4. 越权漏洞模块从水平越权到垂直越权4.1 水平越权的Burp操作路径越权模块在Pikachu里的设计非常经典。水平越权的场景通常是“查看个人信息”正常登录一个普通账号点击“查看订单”或“我的信息”请求URL里会带一个参数比如id1。把这个请求抓到Repeater里直接把id1改成id2或id3再发送如果响应返回了另一个账号的数据水平越权就实锤了。这个操作在Burp里没有任何难度难点在于你能不能意识到这个点值得测。很多新手刷靶场时只顾着找SQL注入、XSS看到id参数第一反应是加单引号看报错而不是先试一个“越权”的值。这是思维习惯问题安全测试不只是找“参数能注入什么”更要问“这个参数代表什么资源我能不能访问别人的资源”。水平越权的修复方案其实也很明确服务端必须校验当前登录用户的身份与资源属主是否匹配单纯依赖前端传参或隐藏字段等于把关卡大门钥匙交给了攻击者。4.2 垂直越权的高危场景与请求分析垂直越权在Pikachu里的表现是“普通用户访问管理员功能”。靶场会把管理员操作入口隐藏起来正常界面上看不到但通过查看页面源码、JS文件或者直接观察HTTP历史就能发现管理功能对应的URL路径。在Burp里找到这个路径用普通用户的Cookie去访问如果服务器没有做权限校验直接返回管理页面那就意味着任意普通用户都能做管理员操作。实际测试中有一个容易被忽略的小问题管理操作可能是POST请求而不只是GET请求。如果你只改URL而没有复制POST的数据包服务器可能返回405或拒绝访问。正确做法是把普通用户能访问的某个POST请求抓到在Repeater里把路径改成管理员路径同时保留原来的Content-Type、Cookie、请求体格式再根据响应做调整。垂直越权的修复要义是“服务端两层校验”先校验会话是否有效再校验角色是否有权限不能只在前端隐藏按钮。Pikachu的这个模块非常适合练习“从响应差异推断权限”的判断力。4.3 越权测试中的请求对比技巧Burp的Comparer功能在越权测试中非常有用。把正常请求的响应和修改参数后的响应分别发送到Comparer选择对比它能标出两个文本之间的差异行。很多新手判断越权时会不知道“响应到底有没有变”因为页面里有大量静态内容只有用户名字段变了。而Comparer能直接高亮哪个位置变了一眼就能判断越权是否成功。我在实际操作里还会配合一个技巧在Burp的Logger或者History里把同一步操作的两个不同响应截图保存下来方便回头复盘。特别是当你同时测水平越权和垂直越权时很容易搞混哪个账号访问了哪个资源记录好请求序号和对应Cookie能少走很多弯路。5. 文件上传模块前端校验与Content-Type绕过5.1 上传场景中的“前端限制”识别方法文件上传关卡的第一种限制是前端校验比如页面里写了acceptimage/jpeg或者JS里检查了文件扩展名。这种限制只存在于浏览器端直接绕过方式很简单用Burp拦截上传请求把原本的filenamea.jpg改成filenamea.php同时把Content-Type从image/jpeg改成application/octet-stream或其他后端可能接受的值。实操时要注意一个细节不要漏掉请求里的Content-Disposition字段。有些靶场的校验逻辑会把文件名和Content-Type一起校验你改了filename却没改Content-Disposition里的文件名格式可能不会触发漏洞因为后端读取文件名的方式和你想象的不一样。典型案例如下Content-Disposition: form-data; namefile; filenameshell.php Content-Type: application/x-php如果这个请求被后端接受了并且上传路径直接拼接了shell.php那就意味着扩展名校验被完全绕过。如果响应返回了上传后的路径你在浏览器里访问这个路径就能看到PHP文件被解析出来的效果。Pikachu的文件上传模块还经常结合“二次渲染”问题也就是上传成功后服务器会重新生成一张图片把原来的内容替换掉这时候直接上传一句话木马就会被清空。要绕过二次渲染得先上传一张正常图片下载被渲染后的版本再把PHP代码注入到渲染后图片的未被修改的区块里然后再上传。这个操作对新手来说比较进阶可以先放着等理解了基础上传绕过再回头试。5.2 Content-Type校验绕过的典型场景第二种限制是Content-Type校验服务端只允许image/jpeg类型的文件上传。这种关卡的操作核心是上传一个文本文件拦截请求把Content-Type改成image/png同时把文件名改成.php。如果服务器只检查Content-Type不检查扩展名那么上传的PHP文件就能直接执行。这里有一个新手特别容易犯的错在Burp里改完Content-Type但忘记在文件内容前面加一个合法的图片文件头。部分靶场和真实应用会读取文件头来校验魔数比如必须包含FF D8 FF E0或GIF89a。如果只改Content-Type而文件内容全是?php ... ?某些严格校验的关卡会直接报“不是图片文件”于是你以为绕不过去。解决办法就是构造一个“图片马”文件头是合法图片的字节后面拼上PHP代码再配合修改Content-Type和扩展名。Pikachu里还有一个场景是“黑白名单校验”。白名单只允许jpg/png/gif后缀黑名单屏蔽了php、asp、jsp等后缀。如果只对上一种可以用:、.phtml、.php3、.php5或者大小写变形来绕过。如果两种都做那就需要找一个同时不在黑名单、又在白名单内的后缀或者用上传.htaccess覆盖配置的方法让服务器把某个扩展名当作PHP解析。5.3 上传路径探测与WebShell验证上传成功后必须找到文件的实际路径才算通关。Pikachu上传接口的响应里通常会直接返回存储路径。如果响应里没有可以通过目录遍历猜测比如http://localhost/pikachu/upload/下直接访问shell.php。拿到路径之后用浏览器访问看是否返回了PHP代码执行结果。如果返回的是空白页可能代码本身没输出如果返回的是源码说明服务器没有解析PHP而是把文件当纯文本给了浏览器这种情况就是“上传成功但不可执行”需要换个扩展名或换一种绕过方式。注意本地靶场测试WebShell没问题但在任何真实环境里未经授权上传可执行文件都是违法行为。本文所有示例都限定在Pikachu本地靶场请勿挪作他用。5.4 文件上传漏洞的修复思路从修复角度看一个安全的文件上传功能至少要做这几件事扩展名白名单校验并且不能只比较后缀要同时校验MIME类型和文件内容头。存储路径不可预测最好带随机文件名文件扩展名不能跟随原始文件名。上传目录禁止执行脚本权限比如Nginx里去掉location的fastcgi处理Apache里禁止php处理器。这些修复思路Pikachu里当然不会给你自动修好但你在每个关卡通关后如果能自己思考“如果是开发者我怎么堵上这个洞”那刷靶场的价值才真正体现出来了。Burp Suite在这个过程中只是工具真正练的是你的“请求分析-漏洞判断-绕过分层-修复思考”这条链路。6. 其他高频关卡补充RCE与SQL注入的Burp辅助思路6.1 RCE模块命令拼接与Burp的编码转换Pikachu的RCE远程命令执行关卡会让你在输入框里提交一个IP地址后端用它执行ping命令。测试思路很简单如果输入127.0.0.1正常回显是ping的结果如果输入127.0.0.1 whoami并且回显里出现了当前用户信息说明命令拼接漏洞存在。Burp在这个关卡里作用不大因为它就是一个手动提交的过程直接用浏览器也行。但有一点值得用Burp当命令里包含空格、管道符、分号时某些后端或WAF会做简单过滤。如果直接被拦截可以尝试用URL编码、双重URL编码或Tab替代空格。Burp的Decoder可以快速做URL编码不用手动转换。比如whoami的URL编码版本是who%61mi如果后端只是简单匹配关键字这种编码就能绕过尽管PHP底层接收到的值仍然是原始的字符。6.2 SQL注入用Burp观察报错信息与请求变化Pikachu的SQL注入关卡分数字型和字符型。用Burp辅助的意义在于你可以清楚看到输入内容是如何拼接进SQL语句的。比如数字型注入的URL是/?id1把id1改成id1 and 12如果响应内容和id1不一样说明参数参与了SQL查询改成id1 union select 1,2,3看回显的位次再逐步替换为字段查询。新手在这个模块里最普遍的问题是页面返回空白不知道是不是自己输入姿势不对。我的建议是先在Burp里发送一遍原始请求作为基线再发送注入请求对比响应体的长度和内容。如果响应长度变化很大说明语法方向可能是对的如果完全一致那可能是闭合符号不对需要试、、)等不同闭合方式。Burp的Comparer在这里又派上用场了把两个响应拖进去对比差异比自己一行行看HTML源码高效得多。6.3 用Burp保存并复盘每个模块的请求记录打靶场最容易出现的问题就是“打完了就忘”。我自己养成的一个习惯是每通关一个模块就把关键请求从Burp里导出存成JSON或txt文件标注漏洞类型、绕过方法、响应特征。后期复习的时候不需要重新搭建靶场直接翻这些请求就能回忆整个攻击链。尤其像Pikachu这种多模块靶场模块间思路互相独立不整理很快就会乱。如果你还想更进一步可以用Burp的Project文件保存整个会话。这样以后打开Project能直接看到历史请求、Intruder攻击结果、Repeater里的所有修改记录。唯一的建议是把Project文件放在专门目录里不要混合多个靶场的流量否则项目文件会越滚越大检索效率反而下降。7. 常见问题与排查技巧实录7.1 问题速查表问题现象可能原因解决步骤Burp抓不到Pikachu请求代理没生效 / 证书问题先确认浏览器代理再装Burp证书最后看PROXY history里有无CONNECT之外请求靶场初始化白屏PHP版本太高 / MySQL连接异常换PHP7.4检查数据库账号密码确认MySQL服务已启动Intruder爆破时响应全一样Payload位置选错检查请求里username/password是否真的设成了变量可能在重复提交固定值上传PHP文件不解析存储目录不可执行 / 响应头类型错误换扩展名确认上传目录是否允许脚本执行访问路径是否带了解析逻辑带token的爆破永远失败token提取正则错误先手动请求一次确认token在响应中出现的格式再在Intruder里设置正确的正则提取越权测试全返回200鉴权逻辑在接口层已处理换一个资源ID检查Cookie是否被重置或改成不同方法再试7.2 新手最常踩的三个坑第一个坑是过度依赖扫描器。Burp的社区版没有主动扫描很多新手就想着去装插件或买Pro实际上Pikachu的每个漏洞模块用手动分析半小时就能搞定。扫描器会告诉你“这里有SQL注入”但不会告诉你“为什么是这里、这个注入怎么利用、后端查询逻辑长什么样”。这些只能靠手动分析请求来理解。第二个坑是遇到拦截就放弃。Pikachu的RCE和文件上传模块里很多新手一看到“上传失败”或“命令被过滤”就卡住不知道该怎么继续。其实办法很简单回到Burp看请求看看拦截的是哪个参数、哪个层级。如果服务端用的是正则匹配你换一种大小写或编码方式通常就能过去。卡住不可怕卡住之后没有尝试路径才可怕。第三个坑是忽略响应状态码的细节。200不代表成功302更不代表失败。比如文件上传成功之后服务器可能返回302重定向到列表页但真正的文件已经存到服务器上了如果你是看着浏览器页面判断的就会漏掉这个成功信号。把Burp里状态码和响应体结合着分析比只看浏览器显示可靠得多。7.3 独家避坑技巧善用Burp的Logger和Project对比功能最后分享一个我用得最多的组合拳Burp的Logger Project保存。Logger可以记录所有经过Burp的请求包括那些你没有在Proxy里仔细看的请求比如CSS、JS、图片资源里的Cookie信息。在刷Pikachu时偶尔会出现“某个隐藏接口被某个JS调用但页面上看不到”的情况从Logger里就能快速翻出来。Project保存则让我能在换机器、换环境后继续之前的进度不会因为重新配置而丢数据。我个人的习惯是把同一个靶场的所有测试放在一个Project文件里每个模块起一个标签页RCE的尝试、上传的尝试都保留着复盘时一目了然。8. 写在最后的几句大实话刷完Pikachu之后我对Burp Suite的掌握程度比之前刷十篇教程都扎实。原因很简单靶场逼着你去分析每个请求、构造每个payload、调试每个失败的尝试这种“问题导向”的学习效率远高于“功能导向”的教程浏览。要我说Burp Suite真正难的不是学功能按钮而是培养一种“请求敏感度”看到一个参数能立刻想到它可以怎么改看到一个响应能判断出漏洞是否触发。Pikachu的价值就是帮你把这个敏感度练出来。等你能不看教程独立通关暴力破解和文件上传模块的时候再看真实环境的Web应用思路就会完全不一样。