Pikachu靶场越权漏洞实战:从原理到利用的完整权限提升指南

📅 2026/7/4 17:20:55
Pikachu靶场越权漏洞实战:从原理到利用的完整权限提升指南
1. 项目概述为什么越权漏洞是渗透测试的“黄金门票”在网络安全领域渗透测试人员或安全研究员常常需要一个安全、可控的环境来磨练自己的技能这就是“靶场”存在的意义。Pikachu靶场作为一个集成了多种Web漏洞的综合性学习平台因其漏洞类型全面、环境搭建简单而广受欢迎。在众多漏洞类型中越权漏洞Broken Access Control因其危害性大、隐蔽性高常被列为高危漏洞。它不像SQL注入或XSS那样需要复杂的Payload构造有时仅仅是一个请求参数的修改就能让一个普通用户瞬间获得管理员的至高权限。因此掌握越权漏洞的挖掘与利用是每一位安全从业者从“脚本小子”迈向“实战高手”的必经之路。本次实战我们将聚焦于Pikachu靶场中的越权漏洞模块目标非常明确从一个名为“pikachu”的普通用户身份出发通过技术手段突破系统设计的权限边界最终获取到“admin”管理员账户的权限。这个过程不仅仅是点击几个按钮更重要的是理解漏洞背后的逻辑缺陷、掌握Burp Suite等工具在实战中的灵活运用并形成一套可复用的漏洞挖掘思路。无论你是刚入门的安全爱好者还是希望巩固基础的安全工程师这篇从普通用户到管理员的完整权限提升实录都将为你提供清晰的路径和宝贵的实操经验。2. 环境准备与漏洞原理深度解析2.1 Pikachu靶场搭建与核心模块定位工欲善其事必先利其器。首先我们需要一个可操作的Pikachu靶场环境。Pikachu通常以PHPMySQL的Web应用形式提供你可以从其官方GitHub仓库下载源码。搭建过程对于有基础的开发者而言并不复杂将源码放置于Web服务器根目录如Apache的htdocs或Nginx的html目录导入附带的SQL文件以初始化数据库最后修改数据库连接配置文件即可。对于新手使用Docker或集成环境如PHPStudy、XAMPP是更快捷的选择它们能一键解决环境依赖问题。注意在本地搭建靶场是学习的最佳实践切勿在未授权的真实网站上进行测试这不仅是职业道德更是法律红线。启动靶场后访问本地地址如http://localhost/pikachu你会看到一个充满卡通风格的界面。我们的目标是“越权漏洞”模块。在Pikachu中它通常被清晰地分类在漏洞列表中。点击进入你会发现它可能细分为“垂直越权”和“水平越权”两个子模块。垂直越权Vertical Privilege Escalation是我们的主战场它指的是低权限用户如普通用户pikachu获取了高权限用户如管理员admin才能执行的功能。而水平越权Horizontal Privilege Escalation则是同一权限等级的用户之间非法访问了他人的数据例如用户A看到了用户B的订单信息。2.2 越权漏洞的本质信任与验证的失衡要利用漏洞必须先理解漏洞。越权漏洞产生的根源在于服务端对客户端请求的处理逻辑存在缺陷。一个健康的权限检查流程应该是接收请求 → 验证会话/令牌权限 → 检查请求资源是否属于当前用户或在其权限范围内 → 执行操作。而存在越权漏洞的流程往往缺失或错误地实施了中间的关键步骤。具体到Pikachu靶场的案例其漏洞原理可以这样拆解前端伪装Web页面上的按钮、链接可能根据登录角色动态显示或隐藏。例如“添加用户”按钮只对管理员显示。但这仅仅是前端控制。后端失守当用户发起请求如点击“添加用户”按钮触发HTTP请求时服务端代码没有二次严格校验发起该请求的用户身份是否真的有权限执行此操作。它可能只检查了用户是否登录即是否有有效的会话但没有检查这个登录的用户角色是否是“admin”。参数可控请求中的关键参数如执行操作的类型、操作的目标对象ID可能由用户控制并且服务端过度信任这些参数未将其与当前用户身份进行绑定校验。这种“前端限制后端放任”或“校验不严”的设计就是越权漏洞滋生的温床。攻击者只需要利用工具截获一个高权限的请求然后用自己的低权限会话去“重放”这个请求就可能直接绕过所有前端限制完成越权操作。3. 实战演练步步为营实现垂直越权3.1 信息收集与正常业务流程观察任何一次成功的渗透都始于细致的信息收集。首先我们分别使用两个已知账户登录系统管理员账户用户名admin密码在Pikachu靶场中通常是admin或123456。普通用户账户用户名pikachu密码同样可能是pikachu或123456。登录后仔细观察两者界面的差异。以管理员身份登录你很可能在用户管理、系统设置等模块看到“添加用户”、“删除用户”、“修改权限”等高级功能菜单。而以pikachu身份登录这些菜单应该消失或不可点击。我们的任务就是在pikachu的会话下找到并执行这些本不该出现的功能。接下来开启你的侦查工具——Burp Suite。确保浏览器代理已正确配置到Burp如127.0.0.1:8080并开启Burp的代理拦截Intercept is on和流量记录Proxy - HTTP history。然后切换回管理员账号执行一个典型的特权操作例如“添加一个新用户”。在点击“添加”或“提交”按钮时Burp会截获这个HTTP请求。3.2 请求截获与关键参数分析假设我们截获到的管理员添加用户的POST请求如下POST /pikachu/vul/overpermission/op2/op2_admin_edit.php HTTP/1.1 Host: localhost Cookie: PHPSESSIDadmin_session_id_here; usernameadmin Content-Type: application/x-www-form-urlencoded usernametestuserpasswordTest123sex1phonenum13800138000emailtesttest.comadd%E6%B7%BB%E5%8A%A0现在我们需要像侦探一样分析这个请求身份标识Cookie头中的PHPSESSID和usernameadmin是服务端识别当前会话和用户的关键。漏洞利用的关键就在于我们能否在替换了这些身份标识后依然使请求成功。操作参数请求体Body中的username,password,add等参数定义了要执行的操作添加和操作的内容新用户信息。服务端是否只依赖这些参数执行操作而忽略了验证操作者身份URL路径/op2_admin_edit.php这个文件路径名本身就暗示了它是管理员编辑功能但服务端是否真的在文件入口处校验了调用者角色分析完毕后在Burp Suite的拦截窗口中右键将这个请求发送到“Repeater”模块。Repeater允许我们手动修改并重复发送请求是测试漏洞的利器。3.3 漏洞利用会话替换与请求重放现在我们退出管理员账号用普通用户pikachu重新登录。登录后查看Burp的HTTP history找到pikachu登录成功后的请求记下其新的PHPSESSID和Cookie中可能存在的usernamepikachu字段。回到Burp的Repeater标签页里面保存着我们刚才截获的管理员添加用户请求。现在我们要进行“偷梁换柱”将请求头中的Cookie值替换为刚刚记录的pikachu用户的Cookie值例如PHPSESSIDpikachu_session_id_here; usernamepikachu。为了确保请求完全来自pikachu的视角你还可以将请求体中的内容稍作修改比如把要添加的用户名从testuser改为hacked_by_pikachu以区分测试结果。点击“Send”按钮发送这个修改后的请求。激动人心的时刻到了观察右侧的响应Response面板。如果漏洞存在你可能会看到诸如“添加成功”、“用户创建成功”之类的字样并且HTTP状态码很可能是200 OK。这意味着服务器接受了来自pikachu会话的“添加用户”请求并成功执行了为了验证你可以回到Pikachu靶场的用户管理页面如果pikachu账号有查看用户列表的权限或者直接尝试用新添加的账号hacked_by_pikachu登录。如果登录成功那么恭喜你一次经典的垂直越权攻击就完成了。pikachu这个普通用户已经拥有了创建新用户的系统管理员权限。3.4 漏洞利用的另一种形式参数篡改除了上述的“请求重放”越权漏洞还可能表现为“参数篡改”。例如在一个“查看个人信息”的功能中URL可能形如/userinfo.php?id1001。普通用户pikachu的ID是1001他访问这个链接看到自己的信息。服务端可能只检查了用户是否登录但没有检查id1001这个参数是否与当前登录用户的ID匹配。如果pikachu将URL中的id参数改为1002假设是另一个用户或管理员的ID服务器可能就直接返回了用户1002的敏感信息这就构成了水平越权。在垂直越权场景中可能会存在诸如roleadmin、actiondeleteUser这样的参数直接修改它们也可能触发权限提升。在Pikachu靶场中你可以尝试寻找这类带参数的GET或POST请求在Repeater中修改参数值观察响应变化。这种测试方法通常与重放测试结合使用。4. 工具进阶利用Burp Suite提高测试效率4.1 Intruder模块在越权测试中的妙用当面对大量需要测试的接口或参数时手动在Repeater中修改发送效率太低。Burp Suite的Intruder模块正是为这种自动化、批量化测试而生的。例如我们怀疑一个用户详情接口/api/user/profile?userId存在水平越权。我们可以这样操作定位请求在Proxy history中找到访问自己个人资料的请求发送到Intruder。设置攻击点在Intruder的Positions标签页清除默认攻击点然后选中URL中的userId参数值点击“Add §”将其标记为攻击点Payload Position。例如请求会变成/api/user/profile?userId§1001§。配置Payload切换到Payloads标签页。假设我们想测试用户ID从1000到1010的情况。在Payload type中选择“Numbers”然后设置From 1000 To 1010 Step为1。这样会生成11个数字作为Payload。开始攻击点击“Start attack”。Intruder会自动用这11个不同的userId值替换攻击点并发起请求。分析结果攻击完成后表格会显示每个请求的响应状态码、长度、内容。我们需要重点关注那些状态码为200但响应长度与我们自己请求userId1001不同的条目。如果发现某个其他userId的请求也返回了完整的用户信息且非错误信息那么水平越权漏洞就存在了。实操心得在分析Intruder结果时响应长度Length是一个非常重要的快速筛选指标。通常越权成功和失败的页面内容大小会有明显差异。结合状态码和响应内容预览能快速定位可疑请求。4.2 Scanner的辅助探测与漏洞确认Burp Suite的主动扫描器Scanner也能辅助发现越权漏洞尤其是对于常见的、模式化的漏洞点。你可以将某个经过身份验证后的功能页面如用户管理列表页的URL发送给Scanner进行主动扫描。Scanner会尝试自动探测诸如“不安全的直接对象引用”IDOR即参数篡改类越权等问题。它可能会报告“Possible Insecure Direct Object Reference”之类的漏洞。但是必须注意自动扫描器的结果误报率较高尤其是对于业务逻辑复杂的越权漏洞。Scanner的提示只能作为一个线索最终的漏洞确认必须依靠手动测试即我们前面在Repeater或Intruder中进行的请求修改与重放验证。绝不能仅凭扫描报告就断定漏洞存在。5. 漏洞挖掘思路拓展与防御之道5.1 超越靶场真实场景中的越权漏洞挖掘Pikachu靶场为我们提供了一个完美的实验环境但真实世界的应用要复杂得多。以下是一些拓展性的挖掘思路关注API接口现代Web应用前后端分离业务逻辑通过API如/api/v1/user/delete实现。使用浏览器开发者工具的“网络”Network面板捕获所有AJAX/XHR请求。这些API端点往往是越权漏洞的高发区。测试所有HTTP方法不要只盯着GET和POST。尝试将POST请求改为PUT、DELETE、PATCH等方法或者反之。有时权限校验只针对某种方法配置。寻找隐藏参数与接口通过爬虫工具如Burp的Spider或分析前端JS代码寻找未在页面上直接暴露的功能接口。这些“影子API”由于不被前端使用后端校验可能更松懈。组合漏洞利用越权漏洞常与其他漏洞结合产生更大危害。例如先通过一个反射型XSS获取管理员的Cookie需配合其他漏洞再利用该Cookie发起越权请求。或者在一个可越权上传文件的功能点上传Webshell从而获得服务器控制权。5.2 开发者视角如何从根本上防御越权漏洞作为渗透测试者理解防御方案不仅能帮助你更全面地评估风险也能在提交漏洞报告时给出有价值的修复建议。防御越权漏洞的核心原则是“服务端强制校验”实施最小权限原则每个功能、每个API接口在代码层面明确定义其所需的角色或权限等级。进行访问控制检查在每一个处理用户请求的服务器端入口函数Controller/Action的最开始加入统一的权限校验逻辑。不是简单地检查“是否登录”而是检查“当前登录的用户是否有权执行此操作”。绑定用户上下文对于涉及用户自身数据的操作如修改个人信息、查看订单必须在服务端将请求参数如用户ID与当前登录会话中的用户ID进行强制比对确保一致。使用安全的间接引用映射避免直接使用数据库主键等可预测值作为资源标识符如/order/123。可以使用随机生成的UUID或通过一个服务端维护的、与用户会话绑定的映射表来转换。定期进行代码审计与渗透测试在开发流程中引入安全代码审查和定期的渗透测试主动发现并修复逻辑漏洞。6. 常见问题排查与实战避坑指南在实战测试中你可能会遇到各种“意外”导致看似应该成功的攻击失败了。下面是一些常见问题及排查思路问题现象可能原因排查与解决思路替换Cookie后请求返回登录页面或403错误1. 会话失效或无效。2. 服务端除了Cookie还可能校验了其他Token如CSRF Token。3. 请求头需要其他认证信息。1. 确认使用的Cookie是目标用户pikachu最新、有效的会话ID。重新登录获取。2. 检查原始管理员请求的HTML表单或请求体中是否包含名为csrf_token、authenticity_token等字段重放时需一并携带。3. 检查是否有X-Requested-With、Authorization等特殊请求头需要保留。请求成功返回200但操作未实际生效如用户未添加1. 服务端进行了二次验证如验证操作人角色但错误提示不明确。2. 操作触发了业务逻辑错误如用户名已存在但被通用成功页面掩盖。3. 数据库操作失败。1. 仔细阅读响应体寻找隐藏的错误信息或不同的成功提示。2. 尝试不同的测试数据如全新的用户名、邮箱。3. 查看服务器端日志如果可能这是定位问题最直接的方式。只能越权查看不能越权修改/删除权限校验粒度不同。服务端可能对“读”操作校验宽松对“写”操作校验严格。这是常见的防御不彻底现象。确认漏洞影响范围读越权信息泄露和写越权数据篡改通常属于不同危险等级在报告中需明确区分。在Intruder测试中所有请求返回相同结果1. Payload位置设置错误。2. 服务器对频繁请求进行了限制或封禁。3. 会话在测试过程中过期。1. 检查Intruder的Positions确保攻击点§ §标记在了正确的参数值上。2. 在Intruder的Options标签页增加请求间隔Throttle或更换代理IP。3. 使用Burp的“Session Handling Rules”功能在攻击中自动维持会话。独家避坑技巧在测试越权漏洞时养成“对比分析”的习惯。分别用低权限和高权限账户执行同一操作用Burp的“Compare”功能对比两个请求的原始报文和响应报文。差异点如不同的Header、参数、响应结构往往就是权限校验的关键所在。此外对于修改操作务必进行“回滚”测试即验证操作是否真的在系统层面生效而不是仅仅返回了一个成功的假象。最后我想分享一点个人体会越权漏洞的挖掘三分靠工具七分靠思维。它考验的是你对业务逻辑的理解深度和对“信任边界”的敏感度。Pikachu靶场是一个绝佳的起点但它模拟的是理想化的漏洞场景。真正的实战环境更加复杂和隐蔽需要你不断将这里学到的原理和方法举一反三在每一次测试中都多问一句“服务器真的相信这个请求来自一个有权这样做的人吗” 带着这个疑问去审视每一个交互点你会发现更多意想不到的安全隐患。