跳转至

越权漏洞

越权漏洞原理

**越权漏洞**是指应用程序未对当前用户操作的身份权限进行严格校验,导致用户可以操作超出自己管理权限范围的功能,从而执行一些非该用户可以操作的行为。简单来说,攻击者可以做一些本来不该他们做的事情(增删改查)。

常见的场景及测试方法

参数可FUZZ

最常见的越权出现在参数为简单数字的地方

Text Only
GET /keyuanhui/alumnus/8979 HTTP/1.1
GET /keyuanhui/alumnus/8979/career HTTP/1.1
GET /keyuanhui/user/campus?userId=8979&timestamp=1700983242380 HTTP/1.1

类似这种简单数字,我们可以直接FUZZ看是否存在越权

image-20250729223643792

除了简单数字可遍历之外,所有能找到规律的参数值都可以尝试FUZZ,测试越权

参数不可FUZZ

遇见参数不可遍历的地方一般是注册2个账号然后替换参数尝试越权,但是这样在一些src中会以危害不足被打回。

image-20250729223830300

这种时候,我们需要扩大危害,看看在那些地方有泄露arr的值:

1.js全局搜索arr

2.可以去bp使用hae之类的插件正则匹配arr

3.bp搜索arr

4.在其他接口查看是否有arr

Text Only
/jeecg-boot/manage/interestedCandidates/myRegistration?tenantId=70&userId=oSF-j4tZoARUQn4NmbgFO_w-JIo0

该接口存在越权,可通过userId获取用户的敏感信息(name,idcard,手机号等)。通过两个账号替换userId发现可越权。但是userId不可遍历。需要去寻找,那些地方会泄露userId。最后在一个查询接口找到。

Text Only
/jeecg-boot/manage/recruitStudent/queryById?id=174311

该查询接口可遍历id获取用户部分信息,其中有个openid对应上面接口的userId。阔以遍历id去获取所有用户的openid。在到上面接口去获取用户的敏感信息。

image-20250729224309934

image-20250729224324572

参数置空越权

在很多情况下,如果用户传入的值为空(例如,查询条件为空),数据库查询可能会返回所有记录。这通常是因为 SQL 查询没有正确处理空值。

默认查询所有: 开发人员可能在代码中写入了这样的逻辑:如果传入的 id 参数为空(null、""、undefined 等),则程序默认执行一个“查询所有记录”的操作(例如执行 SELECT * FROM table_name),而不是返回一个错误。

错误处理不当: 当后端尝试解析或处理一个空的 id 值时,可能会触发一个异常。如果开发人员在异常处理代码中没有正确地返回错误信息,而是选择返回所有数据(可能作为“兜底”或“默认”行为),就会导致这个问题。

类似的我们也可以传入,%,*。让查询语句,返回所有数据。当传入%时如果返回所有数据,此处大多数情况还存在sql注入。在使用like语句的时候可能没有使用预编译处理。因为like、order by直接使用#{}预编译会进行sql报错,所以开发人员在使用${}不当后会造成like注入和oder by注入。

参数类型不匹配越权

类似上面的置空越权,本来的查询逻辑你传入字符串admin,然后它查询。

可能的处理逻辑:

1.当你传入数字类型参数时它内部没有正确的处理逻辑,默认就全表查询(可能的处理逻辑)。

2.当你传入数字类型参数时,类型转化出现问题

SQL
SELECT * FROM users WHERE name = 'admin'

此处studentid一开始是字符串类型,如响应里的studentid,尝试制空和%,*后无果。尝试传入1,2,3.等数字发现只要是数字类型的。都会返回所有数据

image-20250729224704846

修改接口越权

  1. 在接口查询自己信息时,开发者经常会用current和me,my这种关键字,可以尝试利用用户id(数字)来替代current他们

正常请求:

Text Only
POST /api/users/current/profile/email HTTP/2

Host: api.example.com
Authorization: Bearer eyJ... 
Content-Type: application/json


{
  "email": "user@example.com"
}

#响应:
HTTP/2 200 OK
Server: nginx/1.19.0
Date: Fri, 16 Feb 2024 13:37:00 GMT
Content-Type: application/json

{
  "Id": 1234,
  "email": "user@example.com"
}

修改current为1234后的请求:(如果修改后请求成功,说明可以将current替换为id,这时候就可以修改id为其他用户的值越权)

Text Only
PUT /api/users/1235/profile/email HTTP/2

Host: api.example.com
Authorization: Bearer eyJ... 
Content-Type: application/json


{
  "email": "changed@example.com"
}


#响应:
HTTP/2 200 OK
Server: nginx/1.19.0
Date: Fri, 16 Feb 2024 13:37:00 GMT
Content-Type: application/json

{
  "Id": 1235,
  "email": "changed@example.com"
}
  1. 老接口越权

Text Only
/v3/user/123
/v2/user/123
3. 如果发现查询功能,添加功能不能越权(增删改查不全的情况)可以猜测接口名称去访问增删改查的其他接口看是否越权。

功能界面只有一个addeval接口,添加评论。该接口无越权,猜测删除接口后成功越权。

image-20250729225608334

类似的,还可以尝试geteval,showeval等接口

漏洞分类

越权漏洞主要分为**水平越权**和**垂直越权**两大类12。

水平越权

水平越权发生在具有相同权限级别的用户之间。攻击者通过利用这些漏洞,访问其他用户拥有的资源或执行与其权限级别不符的操作12。例如,在一个在线论坛应用程序中,用户可以通过修改URL参数来访问其他用户的帖子1。

垂直越权

垂直越权发生在具有多个权限级别的系统中。攻击者通过利用这些漏洞,从一个低权限级别跳转到一个更高的权限级别12。例如,普通用户可能通过修改URL参数,将自己的用户角色从普通用户更改为管理员,从而执行管理员才能执行的操作1。

漏洞危害

越权漏洞的危害主要包括数据泄露和权限提升1。攻击者可以通过越权访问敏感数据,如个人信息、财务数据等,导致隐私泄露或身份盗用1。此外,攻击者还可能利用越权漏洞提升其权限级别,获得系统管理员或其他高权限用户的特权,从而对整个系统进行控制1。

修复建议

为了防止越权漏洞,建议采取以下措施12:

  1. 实施严格的访问控制:确保在应用程序的各个层面上实施适当的访问控制机制,包括身份验证、会话管理和授权策略1。
  2. 验证用户输入:对所有用户输入进行严格的验证和过滤,以防止攻击者通过构造恶意输入来利用越权漏洞1。
  3. 最小权限原则:在分配用户权限时,采用最小权限原则,即给予用户所需的最低权限级别1。
  4. 安全审计和监控:建立安全审计和监控机制,对系统中的访问活动进行监视和记录1。

通过以上措施,可以有效减少越权漏洞的风险,保护系统的安全性和完整性。