越权漏洞¶
越权漏洞原理¶
**越权漏洞**是指应用程序未对当前用户操作的身份权限进行严格校验,导致用户可以操作超出自己管理权限范围的功能,从而执行一些非该用户可以操作的行为。简单来说,攻击者可以做一些本来不该他们做的事情(增删改查)。
常见的场景及测试方法¶
参数可FUZZ¶
最常见的越权出现在参数为简单数字的地方
GET /keyuanhui/alumnus/8979 HTTP/1.1
GET /keyuanhui/alumnus/8979/career HTTP/1.1
GET /keyuanhui/user/campus?userId=8979×tamp=1700983242380 HTTP/1.1
类似这种简单数字,我们可以直接FUZZ看是否存在越权

除了简单数字可遍历之外,所有能找到规律的参数值都可以尝试FUZZ,测试越权
参数不可FUZZ¶
遇见参数不可遍历的地方一般是注册2个账号然后替换参数尝试越权,但是这样在一些src中会以危害不足被打回。

这种时候,我们需要扩大危害,看看在那些地方有泄露arr的值:
1.js全局搜索arr
2.可以去bp使用hae之类的插件正则匹配arr
3.bp搜索arr
4.在其他接口查看是否有arr
/jeecg-boot/manage/interestedCandidates/myRegistration?tenantId=70&userId=oSF-j4tZoARUQn4NmbgFO_w-JIo0
该接口存在越权,可通过userId获取用户的敏感信息(name,idcard,手机号等)。通过两个账号替换userId发现可越权。但是userId不可遍历。需要去寻找,那些地方会泄露userId。最后在一个查询接口找到。
该查询接口可遍历id获取用户部分信息,其中有个openid对应上面接口的userId。阔以遍历id去获取所有用户的openid。在到上面接口去获取用户的敏感信息。


参数置空越权¶
在很多情况下,如果用户传入的值为空(例如,查询条件为空),数据库查询可能会返回所有记录。这通常是因为 SQL 查询没有正确处理空值。
默认查询所有: 开发人员可能在代码中写入了这样的逻辑:如果传入的 id 参数为空(null、""、undefined 等),则程序默认执行一个“查询所有记录”的操作(例如执行 SELECT * FROM table_name),而不是返回一个错误。
错误处理不当: 当后端尝试解析或处理一个空的 id 值时,可能会触发一个异常。如果开发人员在异常处理代码中没有正确地返回错误信息,而是选择返回所有数据(可能作为“兜底”或“默认”行为),就会导致这个问题。
类似的我们也可以传入,%,*。让查询语句,返回所有数据。当传入%时如果返回所有数据,此处大多数情况还存在sql注入。在使用like语句的时候可能没有使用预编译处理。因为like、order by直接使用#{}预编译会进行sql报错,所以开发人员在使用${}不当后会造成like注入和oder by注入。
参数类型不匹配越权¶
类似上面的置空越权,本来的查询逻辑你传入字符串admin,然后它查询。
可能的处理逻辑:
1.当你传入数字类型参数时它内部没有正确的处理逻辑,默认就全表查询(可能的处理逻辑)。
2.当你传入数字类型参数时,类型转化出现问题
此处studentid一开始是字符串类型,如响应里的studentid,尝试制空和%,*后无果。尝试传入1,2,3.等数字发现只要是数字类型的。都会返回所有数据

修改接口越权¶
- 在接口查询自己信息时,开发者经常会用current和me,my这种关键字,可以尝试利用用户id(数字)来替代current他们
正常请求:
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为其他用户的值越权)
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"
}
- 老接口越权
功能界面只有一个addeval接口,添加评论。该接口无越权,猜测删除接口后成功越权。

类似的,还可以尝试geteval,showeval等接口
漏洞分类¶
越权漏洞主要分为**水平越权**和**垂直越权**两大类12。
水平越权¶
水平越权发生在具有相同权限级别的用户之间。攻击者通过利用这些漏洞,访问其他用户拥有的资源或执行与其权限级别不符的操作12。例如,在一个在线论坛应用程序中,用户可以通过修改URL参数来访问其他用户的帖子1。
垂直越权¶
垂直越权发生在具有多个权限级别的系统中。攻击者通过利用这些漏洞,从一个低权限级别跳转到一个更高的权限级别12。例如,普通用户可能通过修改URL参数,将自己的用户角色从普通用户更改为管理员,从而执行管理员才能执行的操作1。
漏洞危害¶
越权漏洞的危害主要包括数据泄露和权限提升1。攻击者可以通过越权访问敏感数据,如个人信息、财务数据等,导致隐私泄露或身份盗用1。此外,攻击者还可能利用越权漏洞提升其权限级别,获得系统管理员或其他高权限用户的特权,从而对整个系统进行控制1。
修复建议¶
- 实施严格的访问控制:确保在应用程序的各个层面上实施适当的访问控制机制,包括身份验证、会话管理和授权策略1。
- 验证用户输入:对所有用户输入进行严格的验证和过滤,以防止攻击者通过构造恶意输入来利用越权漏洞1。
- 最小权限原则:在分配用户权限时,采用最小权限原则,即给予用户所需的最低权限级别1。
- 安全审计和监控:建立安全审计和监控机制,对系统中的访问活动进行监视和记录1。
通过以上措施,可以有效减少越权漏洞的风险,保护系统的安全性和完整性。