1、权限突破概述:什么是API权限突破、OWASP API Top 10中的权限漏洞、测试前的法律与道德边界
1.1 到底什么是API权限突破?
先问大家一个问题:你见过那种明明只能看自己订单的用户,结果一改参数就能看到别人的收货地址吗?
嗯,这就是典型的API权限突破。
说白了,API权限突破就是攻击者通过某种手段,绕过了系统对用户权限的检查,拿到了本不该属于他的数据或功能。我个人的理解是——权限就是一把锁,突破就是找到了开锁的另一种方式。
我在项目中遇到过不少类似案例。有一次,一个电商平台的用户详情接口,后端只校验了用户是否登录,却没校验这个用户是否有权访问该订单。结果呢?一个普通用户遍历订单ID,把全站订单数据扒了个遍。这就是典型的水平权限突破。
权限突破通常分两种:
- 水平权限突破:同级用户之间越权。比如A用户访问B用户的数据。
- 垂直权限突破:低权限用户访问高权限功能。比如普通用户执行管理员操作。
核心要点:权限突破的本质是「信任关系的滥用」。系统信任了用户传入的参数,却没有二次验证这个参数是否属于当前用户。
1.2 OWASP API Top 10中的权限漏洞
说到API安全,绕不开OWASP API Top 10。这个榜单里,权限相关的漏洞占了半壁江山。我挑几个重点说说。
| 排名 | 漏洞名称 | 我的评价 |
|---|---|---|
| API1 | 对象级别授权失效 | 最常见,没有之一 |
| API2 | 用户身份认证失效 | 登录都搞不定,后面全白搭 |
| API3 | 过度数据暴露 | 接口返回了不该返回的字段 |
| API5 | 功能级别授权失效 | 管理员接口没锁好 |
API1:对象级别授权失效
这个漏洞我几乎每次渗透测试都能碰到。举个例子:
// 存在漏洞的代码
GET /api/user/orders/12345
// 后端只检查了:用户是否登录?
// 没检查:这个订单12345是不是当前用户的?
修复方式其实很简单:
// 修复后的代码
GET /api/user/orders/12345
// 后端检查:
// 1. 用户是否登录?
// 2. 当前用户ID是否等于订单12345的owner_id?
API5:功能级别授权失效
这个更离谱。我曾经遇到一个后台管理系统,管理员接口的URL是/admin/deleteUser,普通用户直接访问也能用。为什么?因为前端隐藏了按钮,但后端根本没做权限校验。
我的建议:永远不要相信前端传来的任何东西。权限校验必须在后端做,而且每个接口都要做,不能偷懒。
1.3 测试前的法律与道德边界
好了,技术聊完了,咱们聊聊更重要的东西——法律和道德。
我见过太多年轻人,学了点技术就想去「练练手」。结果呢?把自己练进了局子。
警告:未经授权的渗透测试是违法的。根据《刑法》第285条,非法侵入计算机信息系统,最高可判七年有期徒刑。
那怎么合法地做测试?我给大家三条铁律:
- 必须有书面授权:口头答应不算数,白纸黑字写清楚测试范围、时间、方法。
- 只在测试环境搞:别碰生产环境,除非合同里明确写了。
- 发现漏洞及时报:别炫耀,别公开,第一时间通知甲方。
我曾经接过一个项目,客户说「随便测,没问题」。结果我测到一半,对方法务找上门了。为什么?因为负责人口头授权了,但公司流程没走完。从那以后,我养成了一个习惯——不见授权书,不动一根手指。
道德层面呢?我个人的原则很简单:
- 不碰个人隐私数据:看到了也当没看到,不下载、不传播。
- 不破坏业务连续性:测试前先评估影响,别把人家数据库搞崩了。
- 不利用漏洞牟利:发现漏洞就是发现漏洞,别想着拿它做交易。
记住一句话:技术是中性的,但使用技术的人有善恶。我们做渗透测试,是为了让系统更安全,而不是证明自己有多牛。
好了,这一章就聊到这儿。下一章我会带大家搭建测试环境,手把手教你们怎么配置Burp Suite和靶场。到时候咱们真刀真枪地干一场。