Pikachu 靶场:权限绕过漏洞(水平越权与垂直越权)

Pikachu 靶场:权限绕过漏洞(水平越权与垂直越权)

一、前言

权限绕过漏洞是 Web 应用中常见的安全问题,分为水平越权垂直越权两种类型。这类漏洞源于后端未对用户权限进行严格校验,允许攻击者访问未授权的数据或执行受限操作。本文基于 Pikachu 靶场Over Permission 模块,详细讲解水平越权和垂直越权的成因、危害、利用方式及修复方法,旨在帮助安全从业者和开发者深入理解并防范此类漏洞。


二、权限绕过漏洞概述

1. 什么是权限绕过漏洞?

权限绕过漏洞是指 Web 应用未正确验证用户权限,导致攻击者能够访问或操作超出其权限范围的资源或功能。按权限方向分为两种类型:

类型 定义
水平越权 普通用户 A 能访问普通用户 B 的资源或数据(如查看其他用户的隐私信息)
垂直越权 普通用户通过伪造参数,执行只有管理员才能完成的操作(如用户管理)

2. 危害

  • 水平越权
    • 泄露其他用户的敏感信息(如个人信息、订单记录)
    • 篡改其他用户的数据
  • 垂直越权
    • 执行管理功能(如创建/删除用户、修改系统配置)
    • 完全控制 Web 应用
  • 潜在后果
    • 数据泄露
    • 系统功能滥用
    • 服务器被接管

三、靶场环境

1. 靶场信息

  • 地址http://192.168.147.137/pikachu/
  • 监听端口:81
  • 漏洞模块
    • 水平越权/vul/overpermission/op1/
    • 垂直越权/vul/overpermission/op2/
  • 测试工具
    • Burp Suite(抓包与请求重放)
    • 浏览器(推荐 Firefox)

2. 用户信息

用户名 密码 角色
kobe (任意) 普通用户
lucy (任意) 普通用户
admin 123456 管理员
pikachu 000000 普通用户

四、水平越权漏洞实战 🎯

1. 场景说明

Pikachu 靶场的水平越权模块模拟了一个用户信息查询接口:

1
2
3

GET /vul/overpermission/op1/op1_mem.php?username=xxx

普通用户(如 kobe)登录后,可通过该接口查看自己的信息。但由于后端未验证请求参数 username 是否与当前用户匹配,攻击者可通过修改 username 参数,访问其他用户(如 lucy)的私有信息。

2. 攻击步骤

  1. 登录 kobe 账户
    • 访问 http://192.168.147.137:81/pikachu/,使用 kobe 登录。
  2. 抓取请求
    • 打开 Burp Suite,配置代理(默认:127.0.0.1:8080)。
    • 使用 Firefox 访问:
1
http://192.168.147.137:81/vul/overpermission/op1/op1_mem.php?username=kobe
  • Burp 拦截到类似以下请求:
    1
    2
    3
    4
    5
    6
    GET /vul/overpermission/op1/op1_mem.php?username=kobe HTTP/1.1
    Host: 192.168.147.137:81
    Cookie: PHPSESSID=<kobe的session>
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    Accept: text/html
    Connection: close
  1. 修改参数
    • 在 Burp 的 Repeater 模块中,将 username=kobe 改为 username=lucy
      1
      2
      3
      4
      GET /vul/overpermission/op1/op1_mem.php?username=lucy HTTP/1.1
      Host: 192.168.147.137:81
      Cookie: PHPSESSID=<kobe的session>
      ...
  2. 发送请求
    • 点击发送,页面返回 lucy 的隐私数据(如邮箱、电话等)。

3. 安全问题

  • 后端直接信任 GET 参数 username,未验证是否与当前会话用户($_SESSION['user'])匹配。
  • 缺乏用户身份校验,导致普通用户可访问任意用户的数据。

4. 修复建议

在后端添加用户身份校验逻辑,确保请求的用户与会话用户一致:

1
2
3
if ($_SESSION['user'] != $_GET['username']) {
die("非法访问!");
}

五、垂直越权漏洞实战

1. 场景说明

Pikachu 靶场的垂直越权模块模拟了一个管理员管理接口:

1
POST /vul/overpermission/op2/op2_admin_edit.php
  • 管理员admin / 123456)可通过该接口创建或修改用户信息。
  • 普通用户pikachu / 000000)本应无权访问该接口。
  • 由于后端未验证用户角色,普通用户可伪造请求执行管理操作。

2. 攻击流程

  1. 登录普通用户 pikachu
    • 访问 http://192.168.147.137:81/pikachu/,使用 pikachu / 000000 登录。
  2. 抓取管理员请求
    • 使用 admin 账户登录,访问管理接口,抓取 POST 请求:

      1
      2
      3
      4
      5
      6
      7
      POST /vul/overpermission/op2/op2_admin_edit.php HTTP/1.1
      Host: 192.168.147.137:81
      Cookie: PHPSESSID=<admin的session>
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 133

      username=t3&password=123456&sex=女&phonenum=12345678908&email=t3@qq.com&address=北京&submit=创建
  3. 替换 Cookie
    • 在 Burp Repeater 中,将请求的 Cookie 替换为 pikachu 的会话:

      1
      Cookie: PHPSESSID=<pikachu的session>
  4. 重放请求
    • 发送修改后的 POST 请求,观察响应。
    • 如果成功,系统创建新用户 t3

3. 安全问题

  • 管理员功能接口仅由前端隐藏(如菜单不可见),后端未验证用户角色。
  • 普通用户通过伪造请求即可执行敏感操作(如创建用户)。

4. 修复建议

在后端添加角色校验逻辑,确保只有管理员可访问管理接口:

1
2
3
if ($_SESSION['role'] != 'admin') {
die("无权访问该接口!");
}

六、漏洞原理总结

项目 水平越权 垂直越权
漏洞位置 用户间数据接口 后台管理功能接口
攻击方式 修改 username 参数 重放管理员请求,伪造普通用户身份
问题本质 未验证请求是否属于当前用户 未验证用户是否具有管理员权限
危害 数据泄露 非授权操作、管理功能滥用
修复重点 接口绑定用户身份校验 严格校验接口访问者的角色

1. 成因

  • 水平越权:后端信任用户输入(如 username),未校验与会话用户的一致性。
  • 垂直越权:管理接口未验证用户角色,允许任意用户通过伪造请求访问。

2. 利用方式

  • 水平越权:通过修改 URL 参数(如 username),访问其他用户数据。
  • 垂直越权:使用 Burp Suite 重放管理员请求,替换为普通用户的会话。

3. 危害

  • 水平越权:导致用户隐私泄露,可能引发后续社会工程学攻击。
  • 垂直越权:可能导致系统完全失控,如创建恶意管理员账户。

七、防护建议

  1. 严格权限校验

    • 水平越权:确保请求参数与当前会话用户一致(如 $_SESSION['user'] == $_GET['username'])。
    • 垂直越权:验证用户角色,确保管理接口仅管理员可访问(如 $_SESSION['role'] == 'admin')。
  2. 最小权限原则

    • 配置 Web 应用以最低权限运行,限制普通用户的功能访问。
    • 确保敏感接口(如用户管理)仅对特定角色开放。
  3. 安全编码

    • 对所有用户输入进行严格校验,防止参数篡改。
    • 使用安全的会话管理机制(如 CSRF 令牌)。
  4. 部署 WAF

    • 配置 Web 应用防火墙,拦截异常请求(如非法的 username 参数或未授权的管理请求)。
    • 使用正则规则检测可疑参数。
  5. 日志监控

    • 记录所有接口访问日志,监控异常的权限请求。
    • 定期审计日志,及时发现潜在越权行为。
  6. 前端与后端协同

    • 前端隐藏敏感功能(如管理员菜单),但不能仅依赖前端控制。
    • 后端必须独立验证所有请求的权限。

八、总结

项目 信息
漏洞类型 权限绕过(水平越权、垂直越权)
靶场 Pikachu(http://192.168.147.137:81/pikachu/
漏洞模块 /vul/overpermission/op1/(水平越权)
/vul/overpermission/op2/(垂直越权)
危害 数据泄露、未经授权的操作、系统失控
修复核心 用户身份校验、角色权限验证

Pikachu 靶场的 Over Permission 模块 通过模拟水平越权和垂直越权场景,展示了权限校验缺失的严重后果。水平越权允许普通用户访问其他用户数据,垂直越权则让普通用户执行管理员操作。通过本文的复现,读者可以深入理解越权漏洞的成因、利用方式及修复方法。开发者应在开发中始终遵循“后端校验优先”原则,结合 WAF 和日志监控,构建安全的 Web 应用。

免责声明:本文内容仅供安全研究和防护参考,请勿用于非法攻击活动。


Pikachu 靶场:权限绕过漏洞(水平越权与垂直越权)
https://bae-ace.github.io/2025/08/02/Pikachu-靶场:权限绕过漏洞(水平越权与垂直越权)/
作者
bae
发布于
2025年8月2日
许可协议